From 9a18ef26919a37385baf911e2fb80b350c6b965e Mon Sep 17 00:00:00 2001 From: isnail Date: Fri, 10 May 2024 10:03:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=B5=8B=E8=AF=95=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ruoyi/api/EncryptDemo.java | 6 +- .../api/controller/APITestController.java | 2 +- .../api/controller/APITestControllerV2.java | 332 ++++++++++++++++++ 3 files changed, 336 insertions(+), 4 deletions(-) create mode 100644 api/src/main/java/com/ruoyi/api/controller/APITestControllerV2.java diff --git a/api/src/main/java/com/ruoyi/api/EncryptDemo.java b/api/src/main/java/com/ruoyi/api/EncryptDemo.java index ac98eab..c838531 100644 --- a/api/src/main/java/com/ruoyi/api/EncryptDemo.java +++ b/api/src/main/java/com/ruoyi/api/EncryptDemo.java @@ -10,9 +10,9 @@ public class EncryptDemo { public static void main(String[] args) { // SM2的公钥 // String publicKey = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEZRdaHuSCG8U87+Cmh9LKbgC+DRBEwWpAyN31aCzoE1flWonnZezX2GqbvDdz7a0AxE6+FGEH1lxPYW39XhYupw=="; - String publicKey = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEjMraf2DTr2W9DfIZDVyplPtPQw8ty1MbWnJ0emDbkXRUq/ynJSgB6NUi1D7UJnxMlo5Z+WiHSvCKBN65RN5BWQ=="; + String publicKey = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEZRdaHuSCG8U87+Cmh9LKbgC+DRBEwWpAyN31aCzoE1flWonnZezX2GqbvDdz7a0AxE6+FGEH1lxPYW39XhYupw=="; // SM2的私钥 - String privateKey = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgenZMgK4OLvsGmSiYKQSavKg1DbsZyUSFVP4Eg1+gZo2gCgYIKoEcz1UBgi2hRANCAAQGwB5pjmjqOFpvoDoEt9OqimkptKrz92qzkd67tPAtNMb2dBgo/Yf8vnn4EaJ0SNIeK4Opv8Tdvd1uF0M4qdOz"; + String privateKey = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQg006Jj+5NK9HrtnyXNpnb131jV/8CHeo5t2T74WliktCgCgYIKoEcz1UBgi2hRANCAARPJZBDpVhCRt5bkQuYUWv9T8MAkahw0R3eG6cWbgShEdkPUxlzKqUJH+n/ogKbBlZhMArd3P3o1pvGLrIY5KQJ"; // String privateKey = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQghUZb+m/+ficnlbtoVJhkbUsw9FKQ5yF1wYcOP+tRQK+gCgYIKoEcz1UBgi2hRANCAASsJ3XVa/Udszyl0/tudSM7tUJsK190+2UQmEEZ6qLbRguzN+vaI3dsc04KllUojTRgXvE3vfaNAHOwQ6H5cjH+"; // 初始化SM2 SM2 sm2 = SmUtil.sm2(privateKey, publicKey); @@ -23,7 +23,7 @@ public class EncryptDemo { // System.out.println(encryptStr); String a = "69bd19ff-8fff-400e-9aba-25e36f1f5438"; String b = "{\n" + - " \"saleId\": \"108783\",\n" + + " \"saleId\": \"108002\",\n" + " \"name\": \"毕彦兵\",\n" + " \"idCard\": \"230104198809293718\",\n" + " \"contactMobile\": \"18980692055\",\n" + diff --git a/api/src/main/java/com/ruoyi/api/controller/APITestController.java b/api/src/main/java/com/ruoyi/api/controller/APITestController.java index af50f00..b132a48 100644 --- a/api/src/main/java/com/ruoyi/api/controller/APITestController.java +++ b/api/src/main/java/com/ruoyi/api/controller/APITestController.java @@ -171,7 +171,7 @@ public class APITestController extends BaseTestController { } // todo 根据代理商提供的验证url验证用户 String url = requestBody.getStr("url"); - if (ObjectUtils.isNotNull("url")) { + if (ObjectUtils.isNotNull(url)) { JSONObject paramMap = new JSONObject(); paramMap.set("name", agentOrderBo.getName()); paramMap.set("idCard", agentOrderBo.getIdCard()); diff --git a/api/src/main/java/com/ruoyi/api/controller/APITestControllerV2.java b/api/src/main/java/com/ruoyi/api/controller/APITestControllerV2.java new file mode 100644 index 0000000..8d7364e --- /dev/null +++ b/api/src/main/java/com/ruoyi/api/controller/APITestControllerV2.java @@ -0,0 +1,332 @@ +package com.ruoyi.api.controller; + +import cn.hutool.crypto.asymmetric.KeyType; +import cn.hutool.crypto.asymmetric.SM2; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.ruoyi.common.core.domain.CTResponse; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.ct.domain.AgentOrder; +import com.ruoyi.ct.domain.bo.AgentOrderBo; +import com.ruoyi.ct.domain.vo.AgentAccountGoodVo; +import com.ruoyi.ct.domain.vo.AgentAccountVo; +import com.ruoyi.ct.domain.vo.AgentOrderVo; +import com.ruoyi.ct.service.CTService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.UUID; + +@RestController +@RequestMapping("api/test/v2.0.0") +@Slf4j +public class APITestControllerV2 extends BaseTestController { + @Resource + private CTService ctService; + + @GetMapping("getGoodsList") + public R getGoodsList(HttpServletRequest request, Integer page, Integer pageSize) { + if (!checkAccount(request)) { + return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString()); + } + if (page == null || page < 1) { + page = 1; + } + if (pageSize == null || pageSize < 1 || pageSize > 50) { + pageSize = 20; + } + JSONObject resultData = new JSONObject(); + JSONObject meta = new JSONObject(); + meta.set("total", 2); + meta.set("page", page); + meta.set("pageSize", pageSize); + resultData.set("meta", meta); + resultData.set("objects", JSONUtil.parseArray("[{\"saleId\":\"108002\",\"title\":\"49套餐\",\"content\":\"大概的介绍\"},{\"saleId\":\"107657\",\"title\":\"59套餐\"}]")); + return R.ok(resultData); + } + + @GetMapping("getNumberList") + public R> getNumberList(HttpServletRequest request, Integer page, Integer pageSize, String saleId) { + if (!checkAccount(request)) { + return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString()); + } + if (page == null || page < 1) { + page = 1; + } + if (pageSize == null || pageSize < 1 || pageSize > 50) { + pageSize = 20; + } + AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount"); + if (ObjectUtils.isNull(saleId) || !SALE_ID.equals(saleId)) { + log.error("参数错误"); + return R.fail(ERROR_CODE_PARAMS, "参数错误"); + } + try { + List data = ctService.selectNumber(agentAccountVo.getPersonnelId(), SALE_ID, + String.valueOf(page), String.valueOf(pageSize)); + return R.ok(data); + } catch (Exception e) { + e.printStackTrace(); + log.error(e.getMessage()); + return R.ok(new ArrayList<>()); + } + } + + @PostMapping("confirmOrderBaseInfoOffline") + public R confirmOrderBaseInfoOffline(HttpServletRequest request, @RequestBody String body) { + if (!checkAccount(request)) { + return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString()); + } + AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount"); + try { + SM2 sm2 = (SM2) request.getAttribute("sm2"); + body = sm2.decryptStr(body, KeyType.PrivateKey); + } catch (Exception e) { + log.error("数据解密错误"); + return R.fail(ERROR_CODE_ENCRYPT, "数据解密错误"); + } + + JSONObject requestBody = JSONUtil.parseObj(body); + System.out.println("requestBody = " + requestBody); + AgentOrderBo agentOrderBo = requestBody.toBean(AgentOrderBo.class); + // 填充固定数据 + agentOrderBo.setAgentName(agentAccountVo.getAgentName()); + agentOrderBo.setAgentId(agentAccountVo.getAgentId()); + agentOrderBo.setStoreId("13"); + agentOrderBo.setSerialNumber(UUID.randomUUID().toString().replace("-", "")); + agentOrderBo.setStatus("0"); + agentOrderBo.setPersonnelId(agentAccountVo.getPersonnelId()); + agentOrderBo.setCreateTime(new Date()); + AgentAccountGoodVo agentAccountGoodVo; + { + // 校验数据 + // 校验gid + String saleId = requestBody.getStr("saleId"); + if (ObjectUtils.isNull(saleId)) { + log.error("saleId为空"); + System.out.println("saleId为空"); + return R.fail(ERROR_CODE_PARAMS, "参数错误"); + } + try { + + if (ObjectUtils.isNull(saleId) || !SALE_ID.equals(saleId)) { + log.error("saleId无效"); + System.out.println("saleId无效"); + return R.fail(ERROR_CODE_PARAMS, "参数错误"); + } + } catch (Exception e) { + log.error("saleId格式错误"); + System.out.println("saleId格式错误"); + return R.fail(ERROR_CODE_PARAMS, "参数错误"); + } + + // 校验用户信息,姓名、身份证、手机号 + if (ObjectUtils.isNull(agentOrderBo.getName())) { + log.error("姓名为空"); + System.out.println("姓名为空"); + return R.fail(ERROR_CODE_PARAMS, "参数错误"); + } + if (ObjectUtils.isNull(agentOrderBo.getIdCard())) { + log.error("身份证号为空"); + System.out.println("身份证号为空"); + return R.fail(ERROR_CODE_PARAMS, "参数错误"); + } + if (ObjectUtils.isNull(agentOrderBo.getContactMobile())) { + log.error("手机号为空"); + System.out.println("手机号为空"); + return R.fail(ERROR_CODE_PARAMS, "参数错误"); + } + + // todo 根据代理商提供的验证url验证用户 + String url = requestBody.getStr("url"); + if (ObjectUtils.isNotNull(url)) { + JSONObject paramMap = new JSONObject(); + paramMap.set("name", agentOrderBo.getName()); + paramMap.set("idCard", agentOrderBo.getIdCard()); + paramMap.set("contactMobile", agentOrderBo.getContactMobile()); + try { + SM2 sm2 = (SM2) request.getAttribute("sm2"); + String verifyResult = HttpUtil.post(url, sm2.encryptBase64(paramMap.toString(), KeyType.PublicKey)); + JSONObject verifyData = JSONUtil.parseObj(verifyResult); + if (verifyData.getInt("code") != 200) { + log.error("验证不通过"); + System.out.println("验证不通过"); + return R.fail(ERROR_CODE_VERIFY, "验证错误"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("验证请求错误"); + System.out.println("验证请求错误"); + return R.fail(ERROR_CODE_VERIFY, "验证错误"); + } + } + } + return R.ok("操作成功", UUID.randomUUID().toString().replace("-", "")); + } + + @PostMapping("uploadImg") + public R uploadImg(HttpServletRequest request, @RequestBody String body) { + if (!checkAccount(request)) { + return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString()); + } + AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount"); + + JSONObject requestBody = JSONUtil.parseObj(body); + System.out.println("requestBody = " + requestBody); + + return R.ok(requestBody.getStr("serialNumber")); + + + } + + @PostMapping("confirmOrder") + public R confirmOrder(HttpServletRequest request, @RequestBody String body) { + if (!checkAccount(request)) { + return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString()); + } + AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount"); + try { + SM2 sm2 = (SM2) request.getAttribute("sm2"); + body = sm2.decryptStr(body, KeyType.PrivateKey); + } catch (Exception e) { + log.error("数据解密错误"); + return R.fail(ERROR_CODE_ENCRYPT, "数据解密错误"); + } + + JSONObject requestBody = JSONUtil.parseObj(body); + System.out.println("requestBody = " + requestBody); + + return R.ok(requestBody.getStr("serialNumber")); + } + + @GetMapping("getOrderList") + public R getOrderList(HttpServletRequest request, + Integer page, Integer pageSize, + String saleId, + String name, String contactMobile, String number) { + if (!checkAccount(request)) { + return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString()); + } + System.out.println("saleId = " + saleId); + System.out.println("name = " + name); + System.out.println("contactMobile = " + contactMobile); + System.out.println("number = " + number); + AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount"); + if (page == null || page < 1) { + page = 1; + } + if (pageSize == null || pageSize < 1 || pageSize > 50) { + pageSize = 20; + } + SM2 sm2 = (SM2) request.getAttribute("sm2"); + +// if (ObjectUtils.isNull(saleId) && ObjectUtils.isNull(name) && ObjectUtils.isNull(contactMobile) && ObjectUtils.isNull(number)) { + if (ObjectUtils.isNull(saleId)) { + log.error("参数错误"); + return R.fail(ERROR_CODE_PARAMS, "参数错误"); + } + + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(AgentOrder::getPersonnelId, agentAccountVo.getPersonnelId()); + lqw.eq(ObjectUtils.isNotNull(saleId), AgentOrder::getSaleId, saleId); + if (ObjectUtils.isNotNull(name)) { + try { + System.out.println("name = " + sm2.decryptStr(name, KeyType.PrivateKey)); + lqw.eq(ObjectUtils.isNotNull(name), AgentOrder::getName, sm2.decryptStr(name, KeyType.PrivateKey)); + } catch (Exception e) { + log.error("参数错误"); + System.out.println("name = " + name); + return R.fail(ERROR_CODE_PARAMS, "参数错误"); + } + } + if (ObjectUtils.isNotNull(contactMobile)) { + try { + System.out.println("contactMobile = " + sm2.decryptStr(contactMobile, KeyType.PrivateKey)); + lqw.eq(ObjectUtils.isNotNull(contactMobile), AgentOrder::getContactMobile, sm2.decryptStr(contactMobile, KeyType.PrivateKey)); + } catch (Exception e) { + log.error("参数错误"); + System.out.println("contactMobile = " + contactMobile); + return R.fail(ERROR_CODE_PARAMS, "参数错误"); + } + } + if (ObjectUtils.isNotNull(number)) { + try { + System.out.println("number = " + sm2.decryptStr(number, KeyType.PrivateKey)); + lqw.eq(ObjectUtils.isNotNull(number), AgentOrder::getNumber, sm2.decryptStr(number, KeyType.PrivateKey)); + } catch (Exception e) { + System.out.println("number = " + number); + log.error("参数错误"); + return R.fail(ERROR_CODE_PARAMS, "参数错误"); + } + } + + + JSONObject resultData = new JSONObject(); + JSONObject meta = new JSONObject(); + meta.set("total", 1); + meta.set("page", page); + meta.set("pageSize", pageSize); + resultData.set("meta", meta); + List objects = new ArrayList<>(); + JSONObject data = new JSONObject(); + data.set("serialNumber", UUID.randomUUID().toString().replace("-", "")); + data.set("name", "李白"); + data.set("contactMobile", "18900001234"); + data.set("idCard", "310101200001011234"); + data.set("number", "19112341234"); + data.set("status", 0); + data.set("orderStatus", "S1005"); + data.set("createTime", "2023-12-31 00:00:00"); + data.set("updateTime", "2023-12-31 00:00:00"); + JSONObject goods = new JSONObject(); + goods.set("saleId", SALE_ID); + goods.set("title", "49套餐"); + goods.set("content", "49套餐"); + data.set("bookingGoods", goods); + + objects.add(data); + + resultData.set("objects", sm2.encryptBase64(objects.toString(), KeyType.PublicKey)); + return R.ok(resultData); + } + + @GetMapping("getOrderDetail") + public R getOrderList(HttpServletRequest request, String serialNumber) { + if (!checkAccount(request)) { + return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString()); + } + AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount"); + if (ObjectUtils.isNull(serialNumber)) { + log.error("参数错误:serialNumber为空"); + return R.fail(ERROR_CODE_PARAMS, "参数错误"); + } + JSONObject data = new JSONObject(); + data.set("serialNumber", UUID.randomUUID().toString().replace("-", "")); + data.set("name", "李白"); + data.set("contactMobile", "18900001234"); + data.set("idCard", "310101200001011234"); + data.set("number", "19112341234"); + data.set("status", 1); + data.set("orderStatus", "S1013"); + data.set("createTime", "2023-12-31 00:00:00"); + data.set("updateTime", "2023-12-31 00:00:00"); + JSONObject goods = new JSONObject(); + goods.set("saleId", SALE_ID); + goods.set("title", "49套餐"); + goods.set("content", "49套餐"); + data.set("bookingGoods", goods); + data.set("expressNum", "SF001"); + data.set("routeArr", JSONUtil.parseArray("[{\"fRouteTime\":\"2019-11-23 16:11:45\",\"fStatusName\":\"已提交\",\"fStatusId\":\"S1000\"},{\"fRouteTime\":\"2019-11-23 16:11:50\",\"fStatusName\":\"S1050\",\"fStatusId\":\"S1050\"},{\"fRouteTime\":\"2019-11-23 16:11:56\",\"fStatusName\":\"S105001\",\"fStatusId\":\"S105001\"},{\"fRouteTime\":\"2019-11-23 16:11:57\",\"fStatusName\":\"S100501\",\"fStatusId\":\"S100501\"},{\"fRouteTime\":\"2019-11-23 16:12:19\",\"fStatusName\":\"S100531\",\"fStatusId\":\"S100531\"},{\"fRouteTime\":\"2019-11-23 16:12:21\",\"fStatusName\":\"S100506\",\"fStatusId\":\"S100506\"},{\"fRouteTime\":\"2019-11-24 17:05:01\",\"fStatusName\":\"S100532\",\"fStatusId\":\"S100532\"},{\"fRouteTime\":\"2019-11-25 16:08:12\",\"fStatusName\":\"S1006\",\"fStatusId\":\"S1006\"},{\"fRouteTime\":\"2019-11-25 16:08:12\",\"fStatusName\":\"S101301\",\"fStatusId\":\"S101301\"}]")); + data.set("expressRoutes", JSONUtil.parseArray("[{\"updateDate\":\"2019-11-25 16:06:49\",\"sourceLogiOrderId\":12444255,\"statusCd\":\"100030\",\"remark\":\"订单提交补录 ICCID/串码:89811111111111;成功;\",\"createStaff\":165124796390,\"logiOrderId\":12444255,\"logiOrderFlowId\":13119474,\"dversion\":0,\"createDate\":\"2019-11-25 16:06:41\"},{\"updateDate\":\"2019-11-25 08:30:17\",\"sourceLogiOrderId\":12444255,\"statusCd\":\"100030\",\"remark\":\"预约再送-快递员:张三,电话:13333333333,预约您 2019-11-25 09 时, 再次为您配送快件! \",\"logiOrderId\":12444255,\"logiOrderFlowId\":12973108,\"createDate\":\"2019-11-25 08:29:34\"},{\"updateDate\":\"2019-11-25 08:30:17\",\"sourceLogiOrderId\":12444255,\"statusCd\":\"100030\",\"remark\":\"已派送-正在派送途中,将由快递员:张三,电话:13333333333送达, 请您准备签收。 \",\"logiOrderId\":12444255,\"logiOrderFlowId\":12973111,\"createDate\":\"2019-11-25 08:27:24\"},{\"updateDate\":\"2019-11-24 17:04:59\",\"sourceLogiOrderId\":12444255,\"statusCd\":\"100029\",\"remark\":\"快件已入库-您的快件正在运送中,已转至商海德中心仓库。\",\"logiOrderId\":12444255,\"logiOrderFlowId\":12796420,\"createDate\":\"2019-11-24 16:49:39\"},{\"updateDate\":\"2019-11-24 17:04:59\",\"sourceLogiOrderId\":12444255,\"statusCd\":\"100002\",\"remark\":\"已收件-您的快件已收取成功,我们将尽快为你派送!\",\"logiOrderId\":12444255,\"logiOrderFlowId\":12796421,\"createDate\":\"2019-11-24 16:46:22\"},{\"updateDate\":\"2019-11-24 16:34:17\",\"sourceLogiOrderId\":12444255,\"statusCd\":\"100004\",\"remark\":\"打包录入 ICCID/串码:89811111111111;成功;\",\"createStaff\":164294780591,\"logiOrderId\":12444255,\"logiOrderFlowId\":12802391,\"dversion\":0,\"createDate\":\"2019-11-24 16:34:16\"},{\"updateDate\":\"2019-11-24 17:04:59\",\"sourceLogiOrderId\":12444255,\"statusCd\":\"100010\",\"remark\":\"待取件\",\"logiOrderId\":12444255,\"logiOrderFlowId\":12796422,\"createDate\":\"2019-11-24 16:10:12\"},{\"updateDate\":\"2019-11-24 16:10:11\",\"sourceLogiOrderId\":12444255,\"statusCd\":\"100014\",\"remark\":\"物流单分发成功\",\"logiOrderId\":12444255,\"logiOrderFlowId\":12767190,\"dversion\":0,\"createDate\":\"2019-11-24 16:10:11\"},{\"updateDate\":\"2019-11-24 16:05:54\",\"sourceLogiOrderId\":12444255,\"statusCd\":\"100021\",\"createStaff\":115060634224,\"logiOrderId\":12444255,\"logiOrderFlowId\":12793430,\"dversion\":0,\"createDate\":\"2019-11-24 16:05:54\"},{\"updateDate\":\"2019-11-24 13:46:54\",\"sourceLogiOrderId\":12444255,\"statusCd\":\"100015\",\"remark\":\"派送通知\",\"logiOrderId\":12444255,\"logiOrderFlowId\":12749286,\"dversion\":0,\"createDate\":\"2019-11-24 13:46:54\"},{\"updateDate\":\"2019-11-23 16:12:02\",\"sourceLogiOrderId\":12444255,\"statusCd\":\"100005\",\"createStaff\":236240021834,\"logiOrderId\":12444255,\"logiOrderFlowId\":12444272,\"dversion\":0,\"createDate\":\"2019-11-23 16:12:02\"}]")); + SM2 sm2 = (SM2) request.getAttribute("sm2"); + return R.ok(null, sm2.encryptBase64(data.toString(), KeyType.PublicKey)); + } +}