From ccd9988589b905169192058c67e3cb9decf12675 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E4=BA=AC=E9=80=9A?= <2405957150@qq.com> Date: Tue, 20 Jan 2026 14:15:48 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=AF=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ParkingScoreController.java | 44 ++++++ .../service/ParkingPointsService.java | 125 ++++++++++++++++++ 2 files changed, 169 insertions(+) create mode 100644 gather-app/src/main/java/com/ruoyi/database/controller/ParkingScoreController.java create mode 100644 gather-app/src/main/java/com/ruoyi/database/service/ParkingPointsService.java diff --git a/gather-app/src/main/java/com/ruoyi/database/controller/ParkingScoreController.java b/gather-app/src/main/java/com/ruoyi/database/controller/ParkingScoreController.java new file mode 100644 index 0000000..7df43da --- /dev/null +++ b/gather-app/src/main/java/com/ruoyi/database/controller/ParkingScoreController.java @@ -0,0 +1,44 @@ +package com.ruoyi.database.controller; + +import com.ruoyi.database.service.ParkingPointsService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description ParkingScoreController + * @Author lijingtong + * @Date 2026-01-19 + */ +@RestController +@RequestMapping("/ParkingScore") +@Api(tags = "积分") +@RequiredArgsConstructor +public class ParkingScoreController { + private final ParkingPointsService service; + + @RequestMapping("/queryScore") + @ApiOperation("查询积分") + public String queryScore(String phone) throws Exception { + return service.queryScore(phone); + } + + + @RequestMapping("/payScore") + @ApiOperation("积分支付") + public String payScore(String phone, int money) throws Exception { + return service.payScore(phone, money); + } + + + + /* private final ParkingScoreService parkingScoreService; + + @RequestMapping("/queryScore") + @ApiOperation("查询积分") + public QueryScoreResponse queryScore(String phone) { + return parkingScoreService.queryScore(phone); + }*/ +} diff --git a/gather-app/src/main/java/com/ruoyi/database/service/ParkingPointsService.java b/gather-app/src/main/java/com/ruoyi/database/service/ParkingPointsService.java new file mode 100644 index 0000000..95937f2 --- /dev/null +++ b/gather-app/src/main/java/com/ruoyi/database/service/ParkingPointsService.java @@ -0,0 +1,125 @@ +package com.ruoyi.database.service; + +import org.springframework.stereotype.Service; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +@Service +public class ParkingPointsService { + + // 常量定义 + private static final String TOKEN = "VAR21UEUjhHmeMqiAvA7VYvQLPn5rO2z"; + private static final String QUERY_SCORE_URL = "https://yxphp.ckldzsw.com/index/score/search"; + private static final String PAY_SCORE_URL = "https://yxphp.ckldzsw.com/index/score/reduce"; + + /** + * 生成签名 + * 签名规则:md5(phone + timestamp + TOKEN) + */ + public String generateSign(String phone, String timestamp) throws NoSuchAlgorithmException { + String data = phone + timestamp + TOKEN; + MessageDigest md = MessageDigest.getInstance("MD5"); + md.update(data.getBytes()); + byte[] digest = md.digest(); + StringBuilder hexString = new StringBuilder(); + for (byte b : digest) { + hexString.append(String.format("%02x", b)); + } + return hexString.toString(); + } + + /** + * 查询积分 + */ + public String queryScore(String phone) throws Exception { + // 生成时间戳(Unix时间戳,秒级) + String timestamp = String.valueOf(System.currentTimeMillis() / 1000); + // 生成签名 + String sign = generateSign(phone, timestamp); + + // 构建请求参数 + String params = "phone=" + phone + "×tamp=" + timestamp + "&sign=" + sign; + + // 发送POST请求 + HttpURLConnection conn = (HttpURLConnection) new URL(QUERY_SCORE_URL).openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + + try (OutputStream os = conn.getOutputStream()) { + os.write(params.getBytes()); + os.flush(); + } + + // 读取响应 + StringBuilder response = new StringBuilder(); + try (BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()))) { + String line; + while ((line = br.readLine()) != null) { + response.append(line); + } + } + + return response.toString(); + } + + /** + * 停车积分支付 + */ + public String payScore(String phone, int money) throws Exception { + // 生成时间戳(Unix时间戳,秒级) + String timestamp = String.valueOf(System.currentTimeMillis() / 1000); + // 生成签名 + String sign = generateSign(phone, timestamp); + + // 构建请求参数 + String params = "phone=" + phone + "×tamp=" + timestamp + "&sign=" + sign + "&money=" + money; + + // 发送POST请求 + HttpURLConnection conn = (HttpURLConnection) new URL(PAY_SCORE_URL).openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + + try (OutputStream os = conn.getOutputStream()) { + os.write(params.getBytes()); + os.flush(); + } + + // 读取响应 + StringBuilder response = new StringBuilder(); + try (BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()))) { + String line; + while ((line = br.readLine()) != null) { + response.append(line); + } + } + + return response.toString(); + } + + /*public static void main(String[] args) { + try { + // 示例:查询积分 + String phone = "15599026928"; + String queryResult = queryScore(phone); + System.out.println("查询积分结果:" + queryResult); + + // 示例:停车积分支付(支付1积分) + String payResult = payScore(phone, 1); + System.out.println("停车积分支付结果:" + payResult); + + + String queryResult1 = queryScore(phone); + System.out.println("查询积分结果1:" + queryResult1); + } catch (Exception e) { + e.printStackTrace(); + } + }*/ +} \ No newline at end of file