From 6cd3268908a06ad583bad6ac4e896595f9123783 Mon Sep 17 00:00:00 2001 From: isnail Date: Wed, 28 May 2025 23:25:48 +0800 Subject: [PATCH] v2 --- .DS_Store | Bin 6148 -> 10244 bytes api/pom.xml | 4 + .../main/java/com/ruoyi/api/EncryptDemo.java | 14 +- .../ruoyi/api/controller/APIController.java | 57 ++- .../ruoyi/api/controller/APIControllerV2.java | 68 +++- .../api/controller/APIFreeController.java | 53 ++- .../api/controller/APITestController.java | 37 +- .../api/controller/APITestControllerV2.java | 47 ++- api/src/main/resources/application-dev.yml | 2 +- ct/pom.xml | 5 + ct/src/main/.DS_Store | Bin 0 -> 6148 bytes .../java/com/ruoyi/ct/CTNetException.java | 9 + .../ct/controller/AgentOrderController.java | 180 ++++++++- .../java/com/ruoyi/ct/domain/AgentOrder.java | 5 + .../main/java/com/ruoyi/ct/domain/Bill.java | 194 +++++++++ .../main/java/com/ruoyi/ct/domain/Good.java | 12 +- .../com/ruoyi/ct/domain/bo/AgentOrderBo.java | 37 +- .../java/com/ruoyi/ct/domain/bo/GoodBo.java | 6 + .../ct/domain/vo/AgentAccountGoodVo.java | 2 + .../com/ruoyi/ct/domain/vo/AgentOrderVo.java | 9 + .../java/com/ruoyi/ct/domain/vo/GoodVo.java | 21 +- .../java/com/ruoyi/ct/service/CTService.java | 9 +- .../ruoyi/ct/service/IAgentOrderService.java | 2 + .../impl/AgentAccountGoodServiceImpl.java | 7 + .../service/impl/AgentOrderServiceImpl.java | 13 + .../ruoyi/ct/service/impl/CTServiceImpl.java | 159 ++++++-- .../ct/service/impl/GoodServiceImpl.java | 3 +- ct/src/main/resources/bill.xlsx | Bin 0 -> 11779 bytes .../web/controller/api/APIController.java | 49 ++- .../java/com/ruoyi/common/core/domain/R.java | 15 + .../com/ruoyi/job/service/SampleService.java | 45 +++ ruoyi-ui/src/api/ct/agentOrder.js | 21 + ruoyi-ui/src/utils/request.js | 2 +- ruoyi-ui/src/views/ct/agentAccount/index.vue | 14 +- .../src/views/ct/agentAccountGood/index.vue | 16 +- ruoyi-ui/src/views/ct/agentOrder/index.vue | 373 ++++++++++++------ ruoyi-ui/src/views/ct/good/index.vue | 16 + ruoyi-ui/vue.config.js | 2 +- 38 files changed, 1245 insertions(+), 263 deletions(-) create mode 100644 ct/src/main/.DS_Store create mode 100644 ct/src/main/java/com/ruoyi/ct/CTNetException.java create mode 100644 ct/src/main/java/com/ruoyi/ct/domain/Bill.java create mode 100644 ct/src/main/resources/bill.xlsx diff --git a/.DS_Store b/.DS_Store index 4a3def94cb2820fdda0482dd60b597e156b6c374..ee96254b9bf79dd720e0293b0b396aa5c6b617d5 100644 GIT binary patch literal 10244 zcmeHMO=ufO6n<;V(kfOOlR6<#LYFj!ggB{e$10^4RdstS1S_PaNw6hL$eT#JLO*eW zaiT+i(-wN^p|?T`J(S)GZEigzzNC#yLQJ5ALh&KQ=L8Z+$eSN)-)L8Bh0^@Mtk`+0 zdEcA)=G)n)oe=;SnPy=WzybghPiBV_SOgr*&raXbCu`DZ4UC6!X*4_QR;oUvuFwi- z1+)TM0j+>m;8{@sf3w+P4hpMFt$-_Jk%jQT3>TDI$rWOBvm>yHdXV`j`8G>>QJ-1%%H*J#!=x!O_o z?Xc^X^Xu2S{1Ll2KRq=3w(B%u?~)>78m2@wpU(zb87lzx#GCznJ}2nW!i_$;(NRN07=>*Sxp%LDwdW)dr zgI8zR_@ej(&f*wsd^=I!*#f2aHZ|Bu(GMr#GM z0?(BKMr1NOnL*0yn=GB|*1{d_&u_YFCyi2TH2Pd zJRIYAINB%lX8_yfAUg*1-L&_WJbi2KJxY0h)$9NLxZ8pI2~7Z)VuF-3x9F*^r`ATv+~2n4u+ge%D4 ejfvlxC-bW~f@}sE4YGlO31T%^Y;!!%9A*HTu^n3g diff --git a/api/pom.xml b/api/pom.xml index 9e47f27..95e01d9 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -23,6 +23,10 @@ p6spy p6spy + + com.ruoyi + ruoyi-system + com.ruoyi ct diff --git a/api/src/main/java/com/ruoyi/api/EncryptDemo.java b/api/src/main/java/com/ruoyi/api/EncryptDemo.java index c838531..3c599aa 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 = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEZRdaHuSCG8U87+Cmh9LKbgC+DRBEwWpAyN31aCzoE1flWonnZezX2GqbvDdz7a0AxE6+FGEH1lxPYW39XhYupw=="; + String publicKey = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEXGNABR3GP+JwMDuCoGkb2XlLAFaxW+BH/lsFwYd0MdycIgygZuQXW1bKoGIKDWRy0NfLl3LoHMdhgq3QC9lqPg=="; // SM2的私钥 - String privateKey = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQg006Jj+5NK9HrtnyXNpnb131jV/8CHeo5t2T74WliktCgCgYIKoEcz1UBgi2hRANCAARPJZBDpVhCRt5bkQuYUWv9T8MAkahw0R3eG6cWbgShEdkPUxlzKqUJH+n/ogKbBlZhMArd3P3o1pvGLrIY5KQJ"; + String privateKey = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgvH2W6ns3iHYntIwC8gj07yuMygk42R/dWvJrxSuSKqqgCgYIKoEcz1UBgi2hRANCAAQjIDLY5pi08KQxPpGtRML4+cuoRcKrUlhZEDnAI3j3PxwEwJdSIul3Vmtm2Tz0gVWsp1F39rqq6yxuhqV+upyN"; // String privateKey = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQghUZb+m/+ficnlbtoVJhkbUsw9FKQ5yF1wYcOP+tRQK+gCgYIKoEcz1UBgi2hRANCAASsJ3XVa/Udszyl0/tudSM7tUJsK190+2UQmEEZ6qLbRguzN+vaI3dsc04KllUojTRgXvE3vfaNAHOwQ6H5cjH+"; // 初始化SM2 SM2 sm2 = SmUtil.sm2(privateKey, publicKey); @@ -21,9 +21,9 @@ public class EncryptDemo { // String encryptStr3 = sm2.encryptBase64("13371893748", KeyType.PublicKey); // System.out.println(sm2.encryptBase64("e34c1951-c492-4ed5-8e02-1e44eee3df7b", KeyType.PublicKey)); // System.out.println(encryptStr); - String a = "69bd19ff-8fff-400e-9aba-25e36f1f5438"; + String a = "1ec03852-c1b1-447c-a266-0e6e94875f1d"; String b = "{\n" + - " \"saleId\": \"108002\",\n" + + " \"saleId\": \"107656\",\n" + " \"name\": \"毕彦兵\",\n" + " \"idCard\": \"230104198809293718\",\n" + " \"contactMobile\": \"18980692055\",\n" + @@ -31,13 +31,13 @@ public class EncryptDemo { // " \"city\": \"哈尔滨市\",\n" + // " \"county\": \"松北区\",\n" + // " \"installedAddress\": \"世茂大道\",\n" + - " \"number\": \"15317740623\"\n" + + " \"number\": \"19384158412\"\n" + "}"; String c = "{\"serialNumber\": \"437f78390b4c4a57b91cb804da0fe424\"}"; - System.out.println(sm2.encryptBase64(c, KeyType.PublicKey)); + System.out.println(sm2.encryptBase64(a, KeyType.PublicKey)); // System.out.println(encryptStr3); // 使用SM2解密字符串 -// String data = sm2.decryptStr("BI7jtmBaoB+O0E/5qbBZd35h5M/BGhLcCB0kOM5ONebPJNC7+mS404aeYpqQEmW5caqLYX9y6eV87tOKwWC3bs+ns83SHA8k1yMMTZrHKooPAH28ylgrgv/jZZbw7Xtsfxm3+XjWUQDmacHrYujwlhCiAHRxAEIot/3fvSkVB49gHjaDj7ER0NQCKUwVt5xLXgJlCHyYsWmY+ZWj6LmzBzIdND1IFQIEx3iKDuXAgZ05ojQb+y27YlI1TLKn36eTOlhifdnOG89UN1UWkMZuZ8m5qnaMyR7bT+7LazIyBvgAGMkgGpCNwVBXT4t5y+/nRvHwYkURGGO7DLgybL5/KtZ74yemZ52tqgU8pm4HWNWncdZ7veeu55gwUe8ttt3C8UtTwtSYlrRpfoWTSwE8rBtvl//MZWkNXqePCnO1QIQYhKiX5GopqjlxFLlr0CirW0/fhA==", KeyType.PrivateKey); +// String data = sm2.decryptStr("BJVOZMKm8hlussB8GeZHia6wF0AvzP4SdOEbdfrNgAa\\/LVAudJD+rGmS1Zn7kD1l6gbw4XsySGpi+uOl\\/+JNpgwIjL+t9IXK0ogTICPDIJIvgf\\/79YxKzXj01pMCeosGac0Jqi5r8J\\/r0pxUNLZvnx4iS+M73j3D08o8OkrTB3LTDxyZPA==\"},\"verify\":false,\"body\":\"BLvEwASr7\\/cuu9v+oNurtm5kHbnkhu1AzQtOfNhC49j49Ai\\/mHa+uKslUXWHFdiXQuaEs8ZVxSUscew6z5nBcujtZ8R5KkFK9UAxWEkqtmmKIyOxwPLFAuw\\/QdR7mzxMctdwt7yP5rma9zgVVXrL1nKn2+ACKjLqvxtj0tCKZrx2\\/zUcMd8JaUvIksNRIxbtMLr9NLXCDuiR+B\\/sCYFp1iOxrxS34ZfPQR4ayYj0kWQtx4FAgD87\\/2f5Crf6Dbrgmxcwjf2hWN+QXub16puR0OMHnqc8XKkEzER8255u3EGoIfFLZTQzUQv1HRJox\\/tIvXDh\\/uMgLQGjEEMrvBO8k\\/mu+De8ZNfX7FQp\\/x\\/Vck\\/mxOs=", KeyType.PrivateKey); // String data = sm2.decryptStr("BLmSzK7I1FAzi+bePR5HhCL0WruEYftUA4bw1cU0TBM0xfX4MX6ImLJzVBJP5jATbOsDC136xuDBf8uFZxmXf2gnIEOX+qBfZD7LcPgdcv06TpnCVtEQEcGULMe/iB3SEHj2xAx3R3bbkgXKGrJ2paj2D4S0uwbs0mLYpIQLFXsXogNupeUHEIq8aLNyUEDRH9HMFG+sJMJpGW80CaywaCCoevpwjc2pAdMdejT5+4/mQjXhKE5kBMyuRA0ugHR6ZfMd9P+pEk6UFDzlWw8kJ11xWgPZcNKWNA3JJBt035jdyMLNfIrPSeHjVXoQZR/l0CXcu+CsFuYvRH3zVaZBqFy+mmeB8omsdnGiuVYcJQfhAnrdU2p4bZEYAwN7KdaZCOPwE/xHoEyAsxKn/WExsYNfyaCs7wzrVaRJmOGBxL4AxzH9W4M6K6SILdPWeaz/DnPZG+pkSIck9jUwcYQnXR9y2EO95l1kwnbYrhFvL5EdLvHZgnrpWP2P7NCqixCKWYP/2rOoXpfhC0e+6w26lKAOUNbqlMWmvEcNBSUqLLzlmogmhB+Dk3SaJX6cwsFzJR9qW/4jE52V+E2pcD4ZIiqNu6UkFWZvMwQqxUvn/evyoKpPQZNr16HKTmyqG/BODPSDPOACmLDD/B8cLidb9MQaYbfS9eEXkTR7GMWji4YGBU8sMBP7WA==", KeyType.PrivateKey); // System.out.println(data); diff --git a/api/src/main/java/com/ruoyi/api/controller/APIController.java b/api/src/main/java/com/ruoyi/api/controller/APIController.java index 8cab07f..9056235 100644 --- a/api/src/main/java/com/ruoyi/api/controller/APIController.java +++ b/api/src/main/java/com/ruoyi/api/controller/APIController.java @@ -12,6 +12,7 @@ import com.ruoyi.common.core.domain.CTResponse; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.ct.CTNetException; import com.ruoyi.ct.domain.AgentOrder; import com.ruoyi.ct.domain.bo.AgentAccountGoodBo; import com.ruoyi.ct.domain.bo.AgentOrderBo; @@ -123,7 +124,7 @@ public class APIController extends BaseController { } try { - List data = ctService.selectNumber(agentAccountVo.getPersonnelId(), agentAccountGoodVo.getSaleId(), String.valueOf(page), String.valueOf(pageSize)); + List data = ctService.selectNumber(agentAccountGoodVo.getPersonnelId(), agentAccountGoodVo.getSaleId(), String.valueOf(page), String.valueOf(pageSize)); saveLog(request, agentAccountVo.getPersonnelId(), 1, "", data.toString()); return R.ok(data); } catch (Exception e) { @@ -157,8 +158,7 @@ public class APIController extends BaseController { 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; SM2 sm2 = (SM2) request.getAttribute("sm2"); @@ -189,6 +189,7 @@ public class APIController extends BaseController { saveLog(request, agentAccountVo.getPersonnelId(), 0, "saleId格式错误", null); return R.fail(ERROR_CODE_PARAMS, "参数错误"); } + agentOrderBo.setPersonnelId(agentAccountGoodVo.getPersonnelId()); // 校验用户信息,姓名、身份证、手机号 if (ObjectUtils.isNull(agentOrderBo.getName())) { @@ -273,31 +274,62 @@ public class APIController extends BaseController { } // 保存数据 -// agentOrderService.insertByBo(agentOrderBo); + agentOrderBo.setStatus("0"); + agentOrderService.insertByBo(agentOrderBo); + CTResponse response = null; + String sn = UUID.randomUUID().toString(); + log.error(sn+" ------------------下单开始-------------------"); try { - CTResponse response = ctService.saveOrder(agentOrderBo.getName(), agentOrderBo.getIdCard(), agentOrderBo.getContactMobile(), + response = ctService.saveOrder(agentOrderBo.getName(), agentOrderBo.getIdCard(), agentOrderBo.getContactMobile(), agentOrderBo.getInstalledAddress(), agentOrderBo.getSaleId(), agentOrderBo.getStoreId(), agentOrderBo.getPersonnelId(), agentOrderBo.getProvince(), agentOrderBo.getCity(), agentOrderBo.getCounty(), agentOrderBo.getSerialNumber(), agentOrderBo.getNumber(), agentOrderBo.getLogiRemark(), agentOrderBo.getPageUrl(), agentOrderBo.getRemark(), - agentOrderBo.getInstallAddress(), "", ""); + agentOrderBo.getInstallAddress(), "", "", sn); if (response.isSuccess()) { agentOrderBo.setOrderNum(response.getData()); agentOrderBo.setOrderStatus("S1000"); agentOrderBo.setStatus("0"); - agentOrderService.insertByBo(agentOrderBo); +// agentOrderService.insertByBo(agentOrderBo); + agentOrderService.updateByBo(agentOrderBo); + log.error(sn+" ------------------下单成功------------------- "); return R.ok("操作成功", agentOrderBo.getSerialNumber()); } else { // 订单验证失败 - log.error("电信订单验证失败"); + log.error(sn+" ------------------下单失败-------------------"); + log.error(sn+" 电信订单验证失败"); + log.error(sn+" 订单号:"+agentOrderBo.getSerialNumber()); + log.error(sn+response.getMessage()); + log.error(sn+" ------------------下单结束------------------- "); + agentOrderBo.setStatus("-1"); + agentOrderService.updateByBo(agentOrderBo); saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信订单验证失败", response.getMessage()); return R.fail(ERROR_CODE_PARAMS, response.getMessage()); } - } catch (Exception e) { + } catch (CTNetException e) { + // 504 saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信请求异常", ""); e.printStackTrace(); log.error(e.getMessage()); - return R.fail(ERROR_CODE_NETWORK, "电信网络异常"); + log.error(sn+" ------------------下单异常-------------------"); + log.error(sn+" 电信订单验网络异常"); + log.error(sn+" 订单号:"+agentOrderBo.getSerialNumber()); + log.error(sn+" ------------------下单结束------------------- "); + agentOrderBo.setStatus("-2"); + agentOrderBo.setHasError(1); + agentOrderService.updateByBo(agentOrderBo); + return R.fail(ERROR_CODE_NETWORK, "内部业务网络异常", agentOrderBo.getSerialNumber()); + } catch (Exception e) { + saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信请求异常", ""); + e.printStackTrace(); + log.error(sn+" ------------------下单异常-------------------"); + log.error(sn+" 电信订单验网络异常"); + log.error(sn+" 订单号:"+agentOrderBo.getSerialNumber()); + log.error(sn+" ------------------下单结束------------------- "); + agentOrderBo.setStatus("-2"); + agentOrderBo.setHasError(1); + agentOrderService.updateByBo(agentOrderBo); + return R.fail(ERROR_CODE_NETWORK, "内部业务网络异常", agentOrderBo.getSerialNumber()); } } @@ -329,7 +361,8 @@ public class APIController extends BaseController { } LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); - lqw.eq(AgentOrder::getPersonnelId, agentAccountVo.getPersonnelId()); +// lqw.eq(AgentOrder::getPersonnelId, agentAccountVo.getPersonnelId()); + lqw.eq(AgentOrder::getAgentAccountId, agentAccountVo.getId()); lqw.eq(ObjectUtils.isNotNull(saleId), AgentOrder::getSaleId, saleId); if (ObjectUtils.isNotNull(name)) { try { @@ -417,7 +450,7 @@ public class APIController extends BaseController { AgentOrderBo bo = new AgentOrderBo(); bo.setSerialNumber(serialNumber); bo.setAgentId(agentAccountVo.getAgentId()); - bo.setPersonnelId(agentAccountVo.getPersonnelId()); +// bo.setPersonnelId(agentAccountVo.getPersonnelId()); List voList = agentOrderService.queryList(bo); if (voList.size() > 0) { AgentOrderVo vo = voList.get(0); diff --git a/api/src/main/java/com/ruoyi/api/controller/APIControllerV2.java b/api/src/main/java/com/ruoyi/api/controller/APIControllerV2.java index 11e37e9..c2dda80 100644 --- a/api/src/main/java/com/ruoyi/api/controller/APIControllerV2.java +++ b/api/src/main/java/com/ruoyi/api/controller/APIControllerV2.java @@ -12,6 +12,7 @@ import com.ruoyi.common.core.domain.CTResponse; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.ct.CTNetException; import com.ruoyi.ct.domain.AgentOrder; import com.ruoyi.ct.domain.bo.AgentAccountGoodBo; import com.ruoyi.ct.domain.bo.AgentOrderBo; @@ -124,7 +125,7 @@ public class APIControllerV2 extends BaseController { } try { - List data = ctService.selectNumber(agentAccountVo.getPersonnelId(), agentAccountGoodVo.getSaleId(), String.valueOf(page), String.valueOf(pageSize)); + List data = ctService.selectNumber(agentAccountGoodVo.getPersonnelId(), agentAccountGoodVo.getSaleId(), String.valueOf(page), String.valueOf(pageSize)); saveLog(request, agentAccountVo.getPersonnelId(), 1, "", data.toString()); return R.ok(data); } catch (Exception e) { @@ -302,7 +303,7 @@ public class APIControllerV2 extends BaseController { agentOrderBo.setStoreId("13"); agentOrderBo.setSerialNumber(UUID.randomUUID().toString().replace("-", "")); agentOrderBo.setStatus("2"); - agentOrderBo.setPersonnelId(agentAccountVo.getPersonnelId()); + agentOrderBo.setCreateTime(new Date()); AgentAccountGoodVo agentAccountGoodVo; SM2 sm2 = (SM2) request.getAttribute("sm2"); @@ -334,6 +335,8 @@ public class APIControllerV2 extends BaseController { return R.fail(ERROR_CODE_PARAMS, "参数错误"); } + agentOrderBo.setPersonnelId(agentAccountGoodVo.getPersonnelId()); + // 校验用户信息,姓名、身份证、手机号 if (ObjectUtils.isNull(agentOrderBo.getName())) { log.error("姓名为空"); @@ -445,7 +448,13 @@ public class APIControllerV2 extends BaseController { JSONObject requestBody = JSONUtil.parseObj(body); System.out.println("requestBody = " + requestBody); + log.error("上传图片"); + log.error("上传图片类型:"+requestBody.getStr("type")); + log.error("上传图片订单号:"+requestBody.getStr("serialNumber")); + log.error("上传图片size:"+requestBody.getStr("img").length()); AgentOrderVo agentOrderVo = agentOrderService.queryBySerialNumber(requestBody.getStr("serialNumber")); + log.error("上传图片用户:"+agentOrderVo.getName()); + log.error("上传图片商品:"+agentOrderVo.getTitle()); if (ObjectUtils.isNull(agentOrderVo)) { log.error("订单不存在"); saveLog(request, agentAccountVo.getPersonnelId(), 0, "订单不存在", null); @@ -469,10 +478,10 @@ public class APIControllerV2 extends BaseController { agentOrderBo.setFrontFace(1); } agentOrderService.updateByBo(agentOrderBo); - return R.ok(agentOrderVo.getSerialNumber()); + return R.ok("操作成功", agentOrderVo.getSerialNumber()); } else { // 订单验证失败 - log.error("上传失败"); + log.error("上传成功,验证失败"); saveLog(request, agentAccountVo.getPersonnelId(), 0, "上传失败", response.getMessage()); return R.fail(ERROR_CODE_PARAMS, response.getMessage()); } @@ -481,14 +490,14 @@ public class APIControllerV2 extends BaseController { saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信请求异常", ""); e.printStackTrace(); log.error(e.getMessage()); - return R.fail(ERROR_CODE_NETWORK, "电信网络异常"); + return R.fail(ERROR_CODE_NETWORK, "内部业务网络异常"); } } @PostMapping("confirmOrder") - public R confirmOrder(HttpServletRequest request, @RequestBody String body) { + public R confirmOrder(HttpServletRequest request, @RequestBody String body) { if (!checkAccount(request)) { return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString()); } @@ -515,14 +524,17 @@ public class APIControllerV2 extends BaseController { saveLog(request, agentAccountVo.getPersonnelId(), 0, "照片上传不完整", null); return R.fail(ERROR_CODE_ENCRYPT, "照片上传不完整"); } + CTResponse response = null; + String sn = UUID.randomUUID().toString(); + log.error(sn+" ------------------下单开始-------------------"); try { - CTResponse response = ctService.saveOrder(agentOrderVo.getName(), agentOrderVo.getIdCard(), agentOrderVo.getContactMobile(), + response = ctService.saveOrder(agentOrderVo.getName(), agentOrderVo.getIdCard(), agentOrderVo.getContactMobile(), agentOrderVo.getInstalledAddress(), agentOrderVo.getSaleId(), agentOrderVo.getStoreId(), agentOrderVo.getPersonnelId(), agentOrderVo.getProvince(), agentOrderVo.getCity(), agentOrderVo.getCounty(), agentOrderVo.getSerialNumber(), agentOrderVo.getNumber(), agentOrderVo.getLogiRemark(), agentOrderVo.getPageUrl(), agentOrderVo.getRemark(), agentOrderVo.getInstallAddress(), "", "idCardFront,idCardBack,frontFace", - "2"); + "2", sn); if (response.isSuccess()) { AgentOrderBo agentOrderBo = new AgentOrderBo(); agentOrderBo.setId(agentOrderVo.getId()); @@ -530,18 +542,52 @@ public class APIControllerV2 extends BaseController { agentOrderBo.setOrderStatus("S1000"); agentOrderBo.setStatus("0"); agentOrderService.updateByBo(agentOrderBo); - return R.ok("操作成功", agentOrderBo.getSerialNumber()); + JSONObject result = new JSONObject(); + result.set("serialNumber", agentOrderBo.getSerialNumber()); + result.set("ctOrderNum", agentOrderBo.getOrderNum()); + log.error(sn+" ------------------下单成功------------------- "); + return R.ok("操作成功", result); } else { // 订单验证失败 - log.error("电信订单验证失败"); + log.error(sn+" ------------------下单失败-------------------"); + log.error(sn+" 电信订单验证失败"); + log.error(sn+" 订单号:"+agentOrderVo.getSerialNumber()); + log.error(sn+response.getMessage()); + log.error(sn+" ------------------下单结束------------------- "); saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信订单验证失败", response.getMessage()); return R.fail(ERROR_CODE_PARAMS, response.getMessage()); } + } catch (CTNetException e) { + // 504 + saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信请求异常", ""); + e.printStackTrace(); + log.error(e.getMessage()); + AgentOrderBo agentOrderBo = new AgentOrderBo(); + agentOrderBo.setId(agentOrderVo.getId()); + log.error(e.getMessage()); + log.error(sn+" ------------------下单异常-------------------"); + log.error(sn+" 电信订单验网络异常"); + log.error(sn+" 订单号:"+agentOrderVo.getSerialNumber()); + log.error(sn+" ------------------下单结束------------------- "); + agentOrderBo.setStatus("-2"); + agentOrderBo.setHasError(1); + agentOrderService.updateByBo(agentOrderBo); + return R.fail(ERROR_CODE_NETWORK, "内部业务网络异常", agentOrderVo.getSerialNumber()); } catch (Exception e) { saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信请求异常", ""); e.printStackTrace(); log.error(e.getMessage()); - return R.fail(ERROR_CODE_NETWORK, "电信网络异常"); + AgentOrderBo agentOrderBo = new AgentOrderBo(); + agentOrderBo.setId(agentOrderVo.getId()); + log.error(e.getMessage()); + log.error(sn+" ------------------下单异常-------------------"); + log.error(sn+" 电信订单验网络异常"); + log.error(sn+" 订单号:"+agentOrderVo.getSerialNumber()); + log.error(sn+" ------------------下单结束------------------- "); + agentOrderBo.setStatus("-2"); + agentOrderBo.setHasError(1); + agentOrderService.updateByBo(agentOrderBo); + return R.fail(ERROR_CODE_NETWORK, "内部业务网络异常"); } } diff --git a/api/src/main/java/com/ruoyi/api/controller/APIFreeController.java b/api/src/main/java/com/ruoyi/api/controller/APIFreeController.java index cc6d429..720410c 100644 --- a/api/src/main/java/com/ruoyi/api/controller/APIFreeController.java +++ b/api/src/main/java/com/ruoyi/api/controller/APIFreeController.java @@ -140,7 +140,7 @@ public class APIFreeController extends BaseController { AgentAccountVo agentAccountVo = agentAccountService.queryById(agentAccountGoodVo.getAgentAccountId()); try { - List data = ctService.selectNumber(agentAccountVo.getPersonnelId(), agentAccountGoodVo.getSaleId(), String.valueOf(page), String.valueOf(pageSize)); + List data = ctService.selectNumber(agentAccountGoodVo.getPersonnelId(), agentAccountGoodVo.getSaleId(), String.valueOf(page), String.valueOf(pageSize)); saveLog(request, agentAccountVo.getPersonnelId(), 1, "", data.toString()); return R.ok(data); } catch (Exception e) { @@ -174,7 +174,7 @@ public class APIFreeController extends BaseController { agentOrderBo.setStoreId("13"); agentOrderBo.setSerialNumber(UUID.randomUUID().toString().replace("-", "")); agentOrderBo.setStatus("0"); - agentOrderBo.setPersonnelId(agentAccountVo.getPersonnelId()); + agentOrderBo.setCreateTime(new Date()); agentOrderBo.setOrderType(1); { @@ -227,6 +227,8 @@ public class APIFreeController extends BaseController { agentOrderBo.setInstallAddress(agentOrderBo.getInstalledAddress()); } + agentOrderBo.setPersonnelId(agentAccountGoodVo.getPersonnelId()); + // 校验数量 if (agentAccountGoodVo.getIsNeedVerify() == 1) { Integer registerCount = agentAccountGoodVo.getRegisterCount(); @@ -261,23 +263,54 @@ public class APIFreeController extends BaseController { agentAccountGoodService.updateByBo(agentAccountGoodBo); } } + if (ObjectUtils.isNotNull(agentAccountVo.getVerifyUrl())) { + try { + JSONObject paramMap = new JSONObject(); + paramMap.set("name", agentOrderBo.getName()); + paramMap.set("idCard", agentOrderBo.getIdCard()); + paramMap.set("contactMobile", agentOrderBo.getContactMobile()); + String verifyResult = HttpUtil.post(agentAccountVo.getVerifyUrl(), paramMap.toString()); + JSONObject verifyData = JSONUtil.parseObj(verifyResult); + if (verifyData.getInt("code") != 200) { + log.error("验证不通过"); + saveLog(request, agentAccountVo.getPersonnelId(), 0, "验证不通过", null); + return R.fail(ERROR_CODE_VERIFY, "验证错误"); + } + } catch (Exception e) { + e.printStackTrace(); + log.error("验证请求错误"); + saveLog(request, agentAccountVo.getPersonnelId(), 0, "验证请求错误", null); + return R.fail(ERROR_CODE_VERIFY, "验证错误"); + } + } // 保存数据 + agentOrderService.insertByBo(agentOrderBo); + String sn = UUID.randomUUID().toString(); + log.error(sn+" ------------------下单开始-------------------"); try { CTResponse response = ctService.saveOrder(agentOrderBo.getName(), agentOrderBo.getIdCard(), agentOrderBo.getContactMobile(), agentOrderBo.getInstalledAddress(), agentOrderBo.getSaleId(), agentOrderBo.getStoreId(), agentOrderBo.getPersonnelId(), agentOrderBo.getProvince(), agentOrderBo.getCity(), agentOrderBo.getCounty(), agentOrderBo.getSerialNumber(), agentOrderBo.getNumber(), agentOrderBo.getLogiRemark(), agentOrderBo.getPageUrl(), agentOrderBo.getRemark(), - agentOrderBo.getInstallAddress(), "", ""); + agentOrderBo.getInstallAddress(), "", "", sn); if (response.isSuccess()) { agentOrderBo.setOrderNum(response.getData()); agentOrderBo.setOrderStatus("S1000"); agentOrderBo.setStatus("0"); - agentOrderService.insertByBo(agentOrderBo); + agentOrderService.updateByBo(agentOrderBo); + log.error(sn+" ------------------下单成功------------------- "); return R.ok("操作成功", agentOrderBo.getSerialNumber()); } else { // 订单验证失败 - log.error("电信订单验证失败"); + log.error(sn+" ------------------下单失败-------------------"); + log.error(sn+" 电信订单验证失败"); + log.error(sn+" 订单号:"+agentOrderBo.getSerialNumber()); + log.error(sn+response.getMessage()); + log.error(sn+" ------------------下单结束------------------- "); + agentOrderBo.setStatus("-1"); + agentOrderService.updateByBo(agentOrderBo); + saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信订单验证失败", response.getMessage()); saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信订单验证失败", response.getMessage()); return R.fail(ERROR_CODE_PARAMS, response.getMessage()); } @@ -285,11 +318,19 @@ public class APIFreeController extends BaseController { saveLog(request, agentAccountVo.getPersonnelId(), 0, "电信请求异常", ""); e.printStackTrace(); log.error(e.getMessage()); - return R.fail(ERROR_CODE_NETWORK, "电信网络异常"); + log.error(sn+" ------------------下单异常-------------------"); + log.error(sn+" 电信订单验网络异常"); + log.error(sn+" 订单号:"+agentOrderBo.getSerialNumber()); + log.error(sn+" ------------------下单结束------------------- "); + agentOrderBo.setStatus("-2"); + agentOrderBo.setHasError(1); + agentOrderService.updateByBo(agentOrderBo); + return R.fail(ERROR_CODE_NETWORK, "内部业务网络异常"); } } } + @GetMapping("/getUserList") public R> getUserList(HttpServletRequest request, @RequestParam String code, 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 b132a48..e7ef54d 100644 --- a/api/src/main/java/com/ruoyi/api/controller/APITestController.java +++ b/api/src/main/java/com/ruoyi/api/controller/APITestController.java @@ -7,12 +7,15 @@ 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.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.R; import com.ruoyi.ct.domain.AgentOrder; +import com.ruoyi.ct.domain.bo.AgentAccountGoodBo; 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.service.CTService; +import com.ruoyi.ct.service.IAgentAccountGoodService; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; @@ -32,6 +35,9 @@ public class APITestController extends BaseTestController { @Resource private CTService ctService; + @Resource + private IAgentAccountGoodService agentAccountGoodService; + @GetMapping("getGoodsList") public R getGoodsList(HttpServletRequest request, Integer page, Integer pageSize) { if (!checkAccount(request)) { @@ -43,13 +49,26 @@ public class APITestController extends BaseTestController { if (pageSize == null || pageSize < 1 || pageSize > 50) { pageSize = 20; } + AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount"); + AgentAccountGoodBo agentAccountGoodBo = new AgentAccountGoodBo(); + agentAccountGoodBo.setAgentAccountId(agentAccountVo.getId()); + Page result = agentAccountGoodService.queryPage(agentAccountGoodBo, page, pageSize); JSONObject resultData = new JSONObject(); JSONObject meta = new JSONObject(); - meta.set("total", 2); + meta.set("total", result.getTotal()); 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套餐\"}]")); + + List dataList = new ArrayList<>(); + for(AgentAccountGoodVo vo: result.getRecords()) { + JSONObject data = new JSONObject(); + data.set("saleId", vo.getSaleId()); + data.set("title", vo.getTitle()); + data.set("content", vo.getContent()); + dataList.add(data); + } + resultData.set("objects", dataList); return R.ok(resultData); } @@ -65,12 +84,20 @@ public class APITestController extends BaseTestController { pageSize = 20; } AgentAccountVo agentAccountVo = (AgentAccountVo) request.getAttribute("agentAccount"); - if (ObjectUtils.isNull(saleId) || !SALE_ID.equals(saleId)) { + if (ObjectUtils.isNull(saleId)) { log.error("参数错误"); return R.fail(ERROR_CODE_PARAMS, "参数错误"); } + AgentAccountGoodVo agentAccountGoodVo = agentAccountGoodService.getByGoodAndAccount(saleId, agentAccountVo.getId()); + if (ObjectUtils.isNull(agentAccountGoodVo)) { + log.error("参数错误"); + log.error("agentAccountVo: "+agentAccountVo); + log.error("saleId: "+saleId); + return R.fail(ERROR_CODE_PARAMS, "参数错误"); + } try { - List data = ctService.selectNumber(agentAccountVo.getPersonnelId(), SALE_ID, + + List data = ctService.selectNumber(agentAccountGoodVo.getPersonnelId(), SALE_ID, String.valueOf(page), String.valueOf(pageSize)); return R.ok(data); } catch (Exception e) { @@ -117,7 +144,7 @@ public class APITestController extends BaseTestController { } try { - if (ObjectUtils.isNull(saleId) || !SALE_ID.equals(saleId)) { + if (ObjectUtils.isNull(saleId)) { log.error("saleId无效"); System.out.println("saleId无效"); return R.fail(ERROR_CODE_PARAMS, "参数错误"); diff --git a/api/src/main/java/com/ruoyi/api/controller/APITestControllerV2.java b/api/src/main/java/com/ruoyi/api/controller/APITestControllerV2.java index 8d7364e..c120f64 100644 --- a/api/src/main/java/com/ruoyi/api/controller/APITestControllerV2.java +++ b/api/src/main/java/com/ruoyi/api/controller/APITestControllerV2.java @@ -14,7 +14,8 @@ 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 com.ruoyi.ct.domain.vo.GoodVo; +import com.ruoyi.ct.service.*; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; @@ -31,6 +32,17 @@ import java.util.UUID; public class APITestControllerV2 extends BaseTestController { @Resource private CTService ctService; + @Resource + private IAgentAccountGoodService agentAccountGoodService; + + @Resource + private IAgentService agentService; + + @Resource + private IAgentOrderService agentOrderService; + + @Resource + private IGoodService goodService; @GetMapping("getGoodsList") public R getGoodsList(HttpServletRequest request, Integer page, Integer pageSize) { @@ -103,7 +115,7 @@ public class APITestControllerV2 extends BaseTestController { agentOrderBo.setStoreId("13"); agentOrderBo.setSerialNumber(UUID.randomUUID().toString().replace("-", "")); agentOrderBo.setStatus("0"); - agentOrderBo.setPersonnelId(agentAccountVo.getPersonnelId()); + agentOrderBo.setCreateTime(new Date()); AgentAccountGoodVo agentAccountGoodVo; { @@ -113,21 +125,28 @@ public class APITestControllerV2 extends BaseTestController { if (ObjectUtils.isNull(saleId)) { log.error("saleId为空"); System.out.println("saleId为空"); - return R.fail(ERROR_CODE_PARAMS, "参数错误"); + return R.fail(ERROR_CODE_PARAMS, "saleId为空"); } - try { - if (ObjectUtils.isNull(saleId) || !SALE_ID.equals(saleId)) { + try { + agentAccountGoodVo = agentAccountGoodService.getByGoodAndAccount(saleId, agentAccountVo.getId()); + agentOrderBo.setAgentAccountId(agentAccountGoodVo.getId()); + agentOrderBo.setSaleId(agentAccountGoodVo.getSaleId()); + GoodVo goodVo = goodService.queryById(agentAccountGoodVo.getGoodId()); + agentOrderBo.setTitle(goodVo.getName()); + agentOrderBo.setContent(goodVo.getContent()); + + if (ObjectUtils.isNull(agentAccountGoodVo)) { log.error("saleId无效"); - System.out.println("saleId无效"); - return R.fail(ERROR_CODE_PARAMS, "参数错误"); + return R.fail(ERROR_CODE_PARAMS, "saleId无效2"); } } catch (Exception e) { log.error("saleId格式错误"); - System.out.println("saleId格式错误"); - return R.fail(ERROR_CODE_PARAMS, "参数错误"); + return R.fail(ERROR_CODE_PARAMS, "saleId格式错误2"); } + agentOrderBo.setPersonnelId(agentAccountGoodVo.getPersonnelId()); + // 校验用户信息,姓名、身份证、手机号 if (ObjectUtils.isNull(agentOrderBo.getName())) { log.error("姓名为空"); @@ -182,13 +201,13 @@ public class APITestControllerV2 extends BaseTestController { JSONObject requestBody = JSONUtil.parseObj(body); System.out.println("requestBody = " + requestBody); - return R.ok(requestBody.getStr("serialNumber")); + return R.ok("操作成功", requestBody.getStr("serialNumber")); } @PostMapping("confirmOrder") - public R confirmOrder(HttpServletRequest request, @RequestBody String body) { + public R confirmOrder(HttpServletRequest request, @RequestBody String body) { if (!checkAccount(request)) { return R.fail(ERROR_CODE_LOGIN, request.getAttribute("msg").toString()); } @@ -203,8 +222,10 @@ public class APITestControllerV2 extends BaseTestController { JSONObject requestBody = JSONUtil.parseObj(body); System.out.println("requestBody = " + requestBody); - - return R.ok(requestBody.getStr("serialNumber")); + JSONObject result = new JSONObject(); + result.set("serialNumber", requestBody.getStr("serialNumber")); + result.set("ctOrderNum", "HZ123456"); + return R.ok("操作成功", result); } @GetMapping("getOrderList") diff --git a/api/src/main/resources/application-dev.yml b/api/src/main/resources/application-dev.yml index 6ed6fcf..c11a58a 100644 --- a/api/src/main/resources/application-dev.yml +++ b/api/src/main/resources/application-dev.yml @@ -18,7 +18,7 @@ spring: driverClassName: com.mysql.cj.jdbc.Driver # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题) - url: jdbc:mysql://43.140.198.163:3380/ct?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true + url: jdbc:mysql://154.8.141.58:3380/ct?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true username: root password: qaHljgd123. # 从库数据源 diff --git a/ct/pom.xml b/ct/pom.xml index 2871585..5d7b2da 100644 --- a/ct/pom.xml +++ b/ct/pom.xml @@ -23,6 +23,11 @@ ruoyi-common + + com.ruoyi + ruoyi-system + + diff --git a/ct/src/main/.DS_Store b/ct/src/main/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..a2907e09b01fb55591fa5b630a373f87332a28d8 GIT binary patch literal 6148 zcmeHKL23gr43wH2w)B!?F9ClcKXAkL1^GZpwzP*V4h^{$zb+5RxtIK;BTEgt#D_wm zlp=vWvMtHlfwe6n;^m=R5Y33FK@((ADk9U>r5iJz0=dLE&>L;&nfBY4N}#_uCAr@s zYvfFc2Kg^mo7C?HDOare)VAwwTEnXOct4%H`SGD1uTR}KEqAY1I}eg@)fsRGoB?OR z8Tc^+xU)r?J4NrE0cXG&xG*5+LqHRZhFP&39q3940F-BR5$IA&h)*z#hFK9S5LQ>9 zy0VoRtnQc(W)}^!qPi1X@xiw9SMkDScf=3HoH#0a?+iEtV+JNVoXP$Fh+n2!ht8T4QNkjB4U?Cfj}QU0x*zsB@N literal 0 HcmV?d00001 diff --git a/ct/src/main/java/com/ruoyi/ct/CTNetException.java b/ct/src/main/java/com/ruoyi/ct/CTNetException.java new file mode 100644 index 0000000..34474f1 --- /dev/null +++ b/ct/src/main/java/com/ruoyi/ct/CTNetException.java @@ -0,0 +1,9 @@ +package com.ruoyi.ct; + +public class CTNetException extends Exception { + private static final long serialVersionUID = 1L; + + public CTNetException() { + + } +} diff --git a/ct/src/main/java/com/ruoyi/ct/controller/AgentOrderController.java b/ct/src/main/java/com/ruoyi/ct/controller/AgentOrderController.java index dcac9ab..d8c8441 100755 --- a/ct/src/main/java/com/ruoyi/ct/controller/AgentOrderController.java +++ b/ct/src/main/java/com/ruoyi/ct/controller/AgentOrderController.java @@ -1,13 +1,34 @@ package com.ruoyi.ct.controller; -import java.util.List; -import java.util.Arrays; +import java.io.InputStream; +import java.util.*; import java.util.concurrent.TimeUnit; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import com.alibaba.excel.ExcelReader; +import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; +import com.ruoyi.common.core.domain.CTResponse; +import com.ruoyi.common.excel.ExcelResult; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.ct.domain.Bill; +import com.ruoyi.ct.domain.bo.AgentAccountGoodBo; +import com.ruoyi.ct.domain.vo.AgentAccountGoodVo; +import com.ruoyi.ct.service.CTService; +import com.ruoyi.ct.service.IAgentAccountGoodService; +import com.ruoyi.system.domain.SysConfig; + +import com.ruoyi.system.service.ISysConfigService; import lombok.RequiredArgsConstructor; + +import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import com.ruoyi.common.annotation.RepeatSubmit; @@ -19,7 +40,6 @@ import com.ruoyi.common.core.validate.AddGroup; import com.ruoyi.common.core.validate.EditGroup; import com.ruoyi.common.core.validate.QueryGroup; import com.ruoyi.common.enums.BusinessType; -import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.ct.domain.vo.AgentOrderVo; import com.ruoyi.ct.domain.bo.AgentOrderBo; import com.ruoyi.ct.service.IAgentOrderService; @@ -37,8 +57,19 @@ import com.ruoyi.common.core.page.TableDataInfo; @RequestMapping("/ct/agentOrder") public class AgentOrderController extends BaseController { + @Resource private final IAgentOrderService iAgentOrderService; + @Resource + private IAgentAccountGoodService iAgentAccountGoodService; + + @Resource + private CTService ctService; + + @Lazy + @Resource + private ISysConfigService sysConfigService; + /** * 查询订单列表 */ @@ -71,6 +102,147 @@ public class AgentOrderController extends BaseController { return R.ok(iAgentOrderService.queryById(id)); } + @SaCheckPermission("ct:agentOrder:query") + @GetMapping("/syncOrder/{id}") + public R syncOrder(@PathVariable Long id) { + AgentOrderVo agentOrderVo = iAgentOrderService.queryById(id); + if (ObjectUtil.isNotNull(agentOrderVo)) { + try { + System.out.println("agentOrderVo = " + agentOrderVo); + CTResponse response = ctService.updateOrder(agentOrderVo.getName(), agentOrderVo.getOrderNum()); + if (ObjectUtils.isNotNull(response) && response.isSuccess()) { + AgentOrderBo agentOrderBo = new AgentOrderBo(); + agentOrderBo.setId(agentOrderVo.getId()); + JSONObject data = response.getDecryptData(); + agentOrderBo.setOrderStatus(data.getStr("status")); +// agentOrderBo.setExpressNum(data.getStr("expressNum")); + + if (ObjectUtils.isNotNull(data.getBeanList("expressRoutes", JSONObject.class))) { + agentOrderBo.setExpressRoutes(data.getBeanList("expressRoutes", JSONObject.class).toString()); + } + if (ObjectUtils.isNotNull(data.getBeanList("routeArr", JSONObject.class))) { + agentOrderBo.setRouteArr(data.getBeanList("routeArr", JSONObject.class).toString()); + } + + agentOrderBo.setUpdateTime(new Date()); + boolean needStatistic = false; + if (Objects.equals(agentOrderBo.getOrderStatus(), "S1013")) { + agentOrderBo.setStatus("1"); + agentOrderBo.setActiveTime(new Date()); + needStatistic = true; + } else if (Objects.equals(agentOrderBo.getOrderStatus(), "S1014")) { + agentOrderBo.setStatus("10"); + needStatistic = true; + } + iAgentOrderService.updateByBo(agentOrderBo); + if (needStatistic && agentOrderVo.getOrderType() == 1) { + // H5 下单需要更新统计 + AgentAccountGoodBo agentAccountGoodBo = new AgentAccountGoodBo(); + AgentAccountGoodVo agentAccountGoodVo = iAgentAccountGoodService.getByGoodAndAccount(agentAccountGoodBo.getSaleId(), agentOrderVo.getAgentAccountId()); + iAgentOrderService.updateCount(agentAccountGoodVo); + } + return R.ok(data); + } else { + System.out.println("同步订单异常:"+agentOrderVo.getSerialNumber()+","+response.getMessage()); + return R.fail("查询失败,电信返回异常"); + } + } catch (Exception e) { + System.out.println("同步订单异常:"+agentOrderVo.getSerialNumber()); + return R.fail("查询失败,返回数据处理异常"); + } + } + return R.fail("查询失败,ID错误"); + } + + @SaCheckPermission("ct:agentOrder:query") + @GetMapping("/syncErrorOrder/{id}") + public R syncErrorOrder(@PathVariable Long id) { + AgentOrderVo vo = iAgentOrderService.queryById(id); + if (ObjectUtil.isNotNull(vo)) { + try { + CTResponse response = ctService.updateOrderNum(vo.getSerialNumber()); + if (ObjectUtils.isNotNull(response) && response.isSuccess()) { + JSONObject data = response.getDecryptData(); + if (ObjectUtils.isNotNull(data) && ObjectUtils.isNotNull(data.getStr("freightVendor"))) { + AgentOrderBo agentOrderBo = new AgentOrderBo(); + agentOrderBo.setId(vo.getId()); + agentOrderBo.setExpressNum(data.getStr("freightCode")); + agentOrderBo.setExpressVendor(data.getStr("freightVendor")); + iAgentOrderService.updateByBo(agentOrderBo); + return R.ok(data); + } + return R.ok("查询失败,返回数据处理异常", data); + } + } catch (Exception e) { + return R.fail("查询失败,返回数据处理异常"); + } + } + return R.fail("查询失败,ID错误"); + } + + @SaCheckPermission("ct:agentOrder:query") + @GetMapping("/syncOffer/{id}") + public R syncOffer(@PathVariable Long id) { + AgentOrderVo vo = iAgentOrderService.queryById(id); + if (ObjectUtil.isNotNull(vo)) { + try { + String offerIds = ""; + SysConfig sysConfig50 = sysConfigService.selectConfig("offerId50"); + SysConfig sysConfig100 = sysConfigService.selectConfig("offerId100"); + String offerId50 = sysConfig50.getConfigValue(); + String offerId100 = sysConfig100.getConfigValue(); + offerIds = offerId50 + "," + offerId100; + CTResponse response = ctService.syncOffer(vo.getOrderNum(), offerIds, vo.getPersonnelId()); + JSONArray data = response.getData(); + if (ObjectUtils.isNotNull(data) && data.size() < 2) { + AgentOrderBo bo = new AgentOrderBo(); + bo.setId(vo.getId()); + bo.setIsRecharge(1); + bo.setRechargeTime(new Date()); + bo.setUpdateTime(new Date()); + if (!data.contains(offerId50)) { + bo.setChargeTitle(sysConfig50.getConfigName()); + } else if (!data.contains(offerId100)) { + bo.setChargeTitle(sysConfig100.getConfigName()); + } + iAgentOrderService.updateByBo(bo); + return R.ok(); + } else { + return R.ok("查询失败,返回数据处理异常", data); + } + } catch (Exception e) { + return R.fail("查询失败,返回数据处理异常"); + } + } + return R.fail("查询失败,ID错误"); + } + + @SaCheckPermission("ct:agentOrder:query") + @GetMapping("/syncExpress/{id}") + public R syncExpress(@PathVariable Long id) { + AgentOrderVo vo = iAgentOrderService.queryById(id); + if (ObjectUtil.isNotNull(vo)) { + try { + CTResponse response = ctService.updateExpress(vo.getOrderNum()); + if (ObjectUtils.isNotNull(response) && response.isSuccess()) { + JSONObject data = response.getDecryptData(); + if (ObjectUtils.isNotNull(data) && ObjectUtils.isNotNull(data.getStr("freightVendor"))) { + AgentOrderBo agentOrderBo = new AgentOrderBo(); + agentOrderBo.setId(vo.getId()); + agentOrderBo.setExpressNum(data.getStr("freightCode")); + agentOrderBo.setExpressVendor(data.getStr("freightVendor")); + iAgentOrderService.updateByBo(agentOrderBo); + return R.ok(data); + } + return R.ok("查询失败,返回数据处理异常", data); + } + } catch (Exception e) { + return R.fail("查询失败,返回数据处理异常"); + } + } + return R.fail("查询失败,ID错误"); + } + /** * 新增订单 */ @@ -79,6 +251,7 @@ public class AgentOrderController extends BaseController { @RepeatSubmit() @PostMapping() public R add(@Validated(AddGroup.class) @RequestBody AgentOrderBo bo) { + bo.setSerialNumber(UUID.randomUUID().toString().replace("-", "")); return toAjax(iAgentOrderService.insertByBo(bo)); } @@ -105,4 +278,5 @@ public class AgentOrderController extends BaseController { @PathVariable Long[] ids) { return toAjax(iAgentOrderService.deleteWithValidByIds(Arrays.asList(ids), true)); } + } diff --git a/ct/src/main/java/com/ruoyi/ct/domain/AgentOrder.java b/ct/src/main/java/com/ruoyi/ct/domain/AgentOrder.java index 5bd2833..487fdcf 100755 --- a/ct/src/main/java/com/ruoyi/ct/domain/AgentOrder.java +++ b/ct/src/main/java/com/ruoyi/ct/domain/AgentOrder.java @@ -175,4 +175,9 @@ public class AgentOrder extends BaseEntity { private String uploadMsgId; + private Date activeTime; + + private Date rechargeTime; + + private Integer hasError; } diff --git a/ct/src/main/java/com/ruoyi/ct/domain/Bill.java b/ct/src/main/java/com/ruoyi/ct/domain/Bill.java new file mode 100644 index 0000000..ee05824 --- /dev/null +++ b/ct/src/main/java/com/ruoyi/ct/domain/Bill.java @@ -0,0 +1,194 @@ +package com.ruoyi.ct.domain; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +@Data +public class Bill { + private String a0; + private String a1; + private String a3; + private String a4; + @ExcelProperty(value = "结算账期") + private String a; + @ExcelProperty(value = "原始账期") + private String b; + @ExcelProperty(value = "渠道名称") + private String c; + @ExcelProperty(value = "父代理商名称") + private String d; + @ExcelProperty(value = "父代理商编码") + private String e; + @ExcelProperty(value = "代理商名称") + private String f; + @ExcelProperty(value = "代理商编码") + private String g; + @ExcelProperty(value = "网点名称") + private String h; + @ExcelProperty(value = "网点编码") + private String i; + @ExcelProperty(value = "套餐名称") + private String j; + @ExcelProperty(value = "套餐编码") + private String k; + @ExcelProperty(value = "设备号") + private String l; + @ExcelProperty(value = "资产ID") + private String m; + @ExcelProperty(value = "类型") + private String n; + @ExcelProperty(value = "金额(元)") + private String o; + @ExcelProperty(value = "原始清单ID") + private String p; + @ExcelProperty(value = "不含税价(元)") + private String q; + @ExcelProperty(value = "酬金结算比例") + private String r; + @ExcelProperty(value = "酬金比例单位") + private String s; + @ExcelProperty(value = "有效计算金额(元)") + private String t; + @ExcelProperty(value = "结算频率") + private String u; + @ExcelProperty(value = "受理员工") + private String v; + @ExcelProperty(value = "受理员工工号") + private String w; + @ExcelProperty(value = "促销员工") + private String x; + @ExcelProperty(value = "促销员工工号") + private String y; + @ExcelProperty(value = "发展区局") + private String z; + @ExcelProperty(value = "设备区局") + private String aa; + @ExcelProperty(value = "行政分局") + private String ab; + @ExcelProperty(value = "佣金策略") + private String ac; + @ExcelProperty(value = "佣金结算说明") + private String ad; + @ExcelProperty(value = "销售策略名称") + private String ae; + @ExcelProperty(value = "销售策略编码") + private String af; + @ExcelProperty(value = "产品名称") + private String ag; + @ExcelProperty(value = "产品编码") + private String ah; + @ExcelProperty(value = "入网日期") + private String ai; + @ExcelProperty(value = "完工日期") + private String aj; + @ExcelProperty(value = "设备状态") + private String ak; + @ExcelProperty(value = "佣金类型") + private String al; + @ExcelProperty(value = "清单状态") + private String am; + @ExcelProperty(value = "清单编号") + private String an; + @ExcelProperty(value = "报账单号") + private String ao; + @ExcelProperty(value = "结算标志") + private String ap; + @ExcelProperty(value = "结算人") + private String aq; + @ExcelProperty(value = "结算时间") + private String ar; + @ExcelProperty(value = "是否调账") + private String as; + @ExcelProperty(value = "调整原因") + private String at; + @ExcelProperty(value = "集团渠道编码") + private String au; + @ExcelProperty(value = "集团渠道类型第一级") + private String av; + @ExcelProperty(value = "集团渠道类型第二级") + private String aw; + @ExcelProperty(value = "集团渠道类型第三级") + private String ax; + @ExcelProperty(value = "融合类型") + private String ay; + @ExcelProperty(value = "折扣率") + private String az; + @ExcelProperty(value = "客户类型") + private String ba; + @ExcelProperty(value = "维系月份") + private String bb; + @ExcelProperty(value = "派单渠道") + private String bc; + @ExcelProperty(value = "维系类型") + private String bd; + @ExcelProperty(value = "维系路径") + private String be; + @ExcelProperty(value = "供应商名称") + private String bf; + @ExcelProperty(value = "供应商编码") + private String bg; + @ExcelProperty(value = "预算责任中心名称") + private String bh; + @ExcelProperty(value = "预算责任中心编码") + private String bi; + @ExcelProperty(value = "成本中心名称") + private String bj; + @ExcelProperty(value = "成本中心编码") + private String bk; + @ExcelProperty(value = "用途名称") + private String bl; + @ExcelProperty(value = "用途编码") + private String bm; + @ExcelProperty(value = "经济事项名称") + private String bn; + @ExcelProperty(value = "经济事项编码") + private String bo; + @ExcelProperty(value = "开账账期") + private String bp; + @ExcelProperty(value = "网格内外标志") + private String bq; + @ExcelProperty(value = "安装地址") + private String br; + @ExcelProperty(value = "客户等级") + private String bs; + @ExcelProperty(value = "是否摊销") + private String bt; + @ExcelProperty(value = "代催员工") + private String bu; + @ExcelProperty(value = "销账本金") + private String bv; + @ExcelProperty(value = "销账违约金") + private String bw; + @ExcelProperty(value = "调整本金") + private String bx; + @ExcelProperty(value = "调整违约金") + private String by; + @ExcelProperty(value = "销账月") + private String bz; + @ExcelProperty(value = "展示字段1") + private String ca; + @ExcelProperty(value = "展示字段1描述") + private String cb; + @ExcelProperty(value = "展示字段2") + private String cc; + @ExcelProperty(value = "展示字段2描述") + private String cd; + @ExcelProperty(value = "展示字段3") + private String ce; + @ExcelProperty(value = "展示字段3描述") + private String cf; + @ExcelProperty(value = "展示字段4") + private String cg; + @ExcelProperty(value = "展示字段4描述") + private String ch; + @ExcelProperty(value = "展示字段5") + private String ci; + @ExcelProperty(value = "展示字段5描述") + private String cj; + @ExcelProperty(value = "佣金政策编号") + private String ck; + @ExcelProperty(value = "佣金政策名称") + private String cl; + @ExcelProperty(value = "工单(主单)编号") + private String cm; +} diff --git a/ct/src/main/java/com/ruoyi/ct/domain/Good.java b/ct/src/main/java/com/ruoyi/ct/domain/Good.java index 1a4883d..24c377c 100755 --- a/ct/src/main/java/com/ruoyi/ct/domain/Good.java +++ b/ct/src/main/java/com/ruoyi/ct/domain/Good.java @@ -23,7 +23,7 @@ public class Good extends BaseEntity { private static final long serialVersionUID=1L; /** - * + * */ @TableId(value = "id") private Long id; @@ -36,20 +36,24 @@ public class Good extends BaseEntity { */ private String content; /** - * + * */ private String saleId; + /** + * 电信ID + */ + private String personnelId; /** * 状态 */ private String status; /** - * + * */ @TableLogic private String delFlag; /** - * + * */ private String remark; diff --git a/ct/src/main/java/com/ruoyi/ct/domain/bo/AgentOrderBo.java b/ct/src/main/java/com/ruoyi/ct/domain/bo/AgentOrderBo.java index cbfc1ac..30d1772 100755 --- a/ct/src/main/java/com/ruoyi/ct/domain/bo/AgentOrderBo.java +++ b/ct/src/main/java/com/ruoyi/ct/domain/bo/AgentOrderBo.java @@ -24,31 +24,31 @@ public class AgentOrderBo extends BaseEntity { /** * */ - @NotNull(message = "不能为空", groups = { EditGroup.class }) +// @NotNull(message = "不能为空", groups = { EditGroup.class }) private Long id; /** * 代理商ID */ - @NotNull(message = "代理商ID不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "代理商ID不能为空", groups = { AddGroup.class, EditGroup.class }) private Long agentId; /** * 代理商名称 */ - @NotBlank(message = "代理商名称不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "代理商名称不能为空", groups = { AddGroup.class, EditGroup.class }) private String agentName; /** * 代理商账号ID */ - @NotNull(message = "代理商账号ID不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotNull(message = "代理商账号ID不能为空", groups = { AddGroup.class, EditGroup.class }) private Long agentAccountId; /** * 商品ID */ - @NotBlank(message = "商品ID不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "商品ID不能为空", groups = { AddGroup.class, EditGroup.class }) private String saleId; private String title; private String content; @@ -56,69 +56,63 @@ public class AgentOrderBo extends BaseEntity { /** * 厅店ID,默认13 */ - @NotBlank(message = "厅店ID,默认13不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "厅店ID,默认13不能为空", groups = { AddGroup.class, EditGroup.class }) private String storeId; /** * 代理商电信ID */ - @NotBlank(message = "代理商电信ID不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "代理商电信ID不能为空", groups = { AddGroup.class, EditGroup.class }) private String personnelId; /** * 用户姓名 */ - @NotBlank(message = "姓名不能为空", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "姓名不能为空", groups = { AddGroup.class, EditGroup.class }) private String name; /** * 用户身份证号 */ - @NotBlank(message = "身份证号不能为空", groups = { AddGroup.class, EditGroup.class }) - @Pattern(regexp = "([1-9]\\d{5})(19\\d{2}|20\\d{2})(0[1-9]|1[0-2])(0[1-9]|[1-2]\\d|3[0-1])\\d{3}([0-9]|X|x)", message = "身份证号码错误", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "身份证号不能为空", groups = { AddGroup.class, EditGroup.class }) +// @Pattern(regexp = "([1-9]\\d{5})(19\\d{2}|20\\d{2})(0[1-9]|1[0-2])(0[1-9]|[1-2]\\d|3[0-1])\\d{3}([0-9]|X|x)", message = "身份证号码错误", groups = { AddGroup.class, EditGroup.class }) private String idCard; /** * 用户联系电话 */ - @NotBlank(message = "联系电话不能为空", groups = { AddGroup.class, EditGroup.class }) - @Pattern(regexp = "1[3-9]\\d{9}", message = "联系电话错误", groups = { AddGroup.class, EditGroup.class }) +// @NotBlank(message = "联系电话不能为空", groups = { AddGroup.class, EditGroup.class }) +// @Pattern(regexp = "1[3-9]\\d{9}", message = "联系电话错误", groups = { AddGroup.class, EditGroup.class }) private String contactMobile; /** * 收货地址 */ - @NotBlank(message = "收货地址不能为空", groups = { AddGroup.class, EditGroup.class }) private String installedAddress; /** * 省 */ - @NotBlank(message = "省不能为空", groups = { AddGroup.class, EditGroup.class }) private String province; /** * 市 */ - @NotBlank(message = "市不能为空", groups = { AddGroup.class, EditGroup.class }) private String city; /** * 区 */ - @NotBlank(message = "区不能为空", groups = { AddGroup.class, EditGroup.class }) private String county; /** * 下单流水号 */ - @NotBlank(message = "下单流水号不能为空", groups = { AddGroup.class, EditGroup.class }) private String serialNumber; /** * 入网号码 */ - @NotBlank(message = "入网号码不能为空", groups = { AddGroup.class, EditGroup.class }) private String number; /** @@ -129,7 +123,6 @@ public class AgentOrderBo extends BaseEntity { /** * 业务办理页面url */ - @NotBlank(message = "业务办理页面url不能为空", groups = { AddGroup.class, EditGroup.class }) private String pageUrl; /** @@ -215,4 +208,10 @@ public class AgentOrderBo extends BaseEntity { private Integer frontFace; private String uploadMsgId; + + private Date activeTime; + + private Date rechargeTime; + + private Integer hasError; } diff --git a/ct/src/main/java/com/ruoyi/ct/domain/bo/GoodBo.java b/ct/src/main/java/com/ruoyi/ct/domain/bo/GoodBo.java index 5de30f5..2571c0a 100755 --- a/ct/src/main/java/com/ruoyi/ct/domain/bo/GoodBo.java +++ b/ct/src/main/java/com/ruoyi/ct/domain/bo/GoodBo.java @@ -44,6 +44,12 @@ public class GoodBo extends BaseEntity { @NotBlank(message = "不能为空", groups = { AddGroup.class, EditGroup.class }) private String saleId; + /** + * 电信ID + */ + @NotBlank(message = "不能为空", groups = { AddGroup.class, EditGroup.class }) + private String personnelId; + /** * 状态 */ diff --git a/ct/src/main/java/com/ruoyi/ct/domain/vo/AgentAccountGoodVo.java b/ct/src/main/java/com/ruoyi/ct/domain/vo/AgentAccountGoodVo.java index 69944f6..46db4f2 100755 --- a/ct/src/main/java/com/ruoyi/ct/domain/vo/AgentAccountGoodVo.java +++ b/ct/src/main/java/com/ruoyi/ct/domain/vo/AgentAccountGoodVo.java @@ -74,4 +74,6 @@ public class AgentAccountGoodVo implements Serializable { private String imageIds; private String remark; +// private AgentVo agentVo; + } diff --git a/ct/src/main/java/com/ruoyi/ct/domain/vo/AgentOrderVo.java b/ct/src/main/java/com/ruoyi/ct/domain/vo/AgentOrderVo.java index fb1ad61..280bdc4 100755 --- a/ct/src/main/java/com/ruoyi/ct/domain/vo/AgentOrderVo.java +++ b/ct/src/main/java/com/ruoyi/ct/domain/vo/AgentOrderVo.java @@ -248,4 +248,13 @@ public class AgentOrderVo implements Serializable { private Integer frontFace; private String uploadMsgId; + + @ExcelProperty(value = "激活时间") + private Date activeTime; + + @ExcelProperty(value = "首冲时间") + private Date rechargeTime; + + @ExcelProperty(value = "是否异常订单") + private Integer hasError; } diff --git a/ct/src/main/java/com/ruoyi/ct/domain/vo/GoodVo.java b/ct/src/main/java/com/ruoyi/ct/domain/vo/GoodVo.java index c222cb1..2695c9c 100755 --- a/ct/src/main/java/com/ruoyi/ct/domain/vo/GoodVo.java +++ b/ct/src/main/java/com/ruoyi/ct/domain/vo/GoodVo.java @@ -22,7 +22,7 @@ public class GoodVo implements Serializable { private static final long serialVersionUID = 1L; /** - * + * */ @ExcelProperty(value = "") private Long id; @@ -40,10 +40,15 @@ public class GoodVo implements Serializable { private String content; /** - * + * */ - @ExcelProperty(value = "") + @ExcelProperty(value = "saleId") private String saleId; + /** + * 电信ID + */ + @ExcelProperty(value = "电信ID") + private String personnelId; /** * 状态 @@ -52,31 +57,31 @@ public class GoodVo implements Serializable { private String status; /** - * + * */ @ExcelProperty(value = "") private String createBy; /** - * + * */ @ExcelProperty(value = "") private Date createTime; /** - * + * */ @ExcelProperty(value = "") private String updateBy; /** - * + * */ @ExcelProperty(value = "") private Date updateTime; /** - * + * */ @ExcelProperty(value = "") private String remark; diff --git a/ct/src/main/java/com/ruoyi/ct/service/CTService.java b/ct/src/main/java/com/ruoyi/ct/service/CTService.java index 6cd8482..a922fe0 100644 --- a/ct/src/main/java/com/ruoyi/ct/service/CTService.java +++ b/ct/src/main/java/com/ruoyi/ct/service/CTService.java @@ -3,6 +3,7 @@ package com.ruoyi.ct.service; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; +import com.ruoyi.common.core.domain.CTRequestBody; import com.ruoyi.common.core.domain.CTResponse; import com.ruoyi.ct.domain.bo.AgentOrderBo; @@ -11,23 +12,25 @@ import java.util.List; public interface CTService { boolean getToken(); - boolean checkToken(); + CTRequestBody checkToken(); List selectNumber(String personnelId, String saleId, String page, String pageSize) throws Exception; CTResponse saveOrder(String name, String idCard, String contactMobile, String installedAddress, String saleId, String storeId, String personnelId, String province, String city, String county, String serialNumber, String number, String logiRemark, String pageUrl, - String remark, String installAddress, String ynumber2, String images) throws Exception; + String remark, String installAddress, String ynumber2, String images, String sn) throws Exception; CTResponse saveOrder(String name, String idCard, String contactMobile, String installedAddress, String saleId, String storeId, String personnelId, String province, String city, String county, String serialNumber, String number, String logiRemark, String pageUrl, - String remark, String installAddress, String ynumber2, String images, String deliveryMethod) throws Exception; + String remark, String installAddress, String ynumber2, String images, String deliveryMethod, String sn) throws Exception; CTResponse uploadFile(String serialNumber, String name, String idCard, String type, String msgId, String img) throws Exception; CTResponse updateOrder(String name, String orderNum) throws Exception; + CTResponse updateOrderNum(String serialNumber) throws Exception; + CTResponse updateExpress(String orderNum) throws Exception; CTResponse syncOffer(String orderNum, String offerIds, String salesNumber) throws Exception; diff --git a/ct/src/main/java/com/ruoyi/ct/service/IAgentOrderService.java b/ct/src/main/java/com/ruoyi/ct/service/IAgentOrderService.java index a1a7a97..994c1a5 100755 --- a/ct/src/main/java/com/ruoyi/ct/service/IAgentOrderService.java +++ b/ct/src/main/java/com/ruoyi/ct/service/IAgentOrderService.java @@ -58,4 +58,6 @@ public interface IAgentOrderService { void updateCount(AgentAccountGoodVo agentAccountGoodVo); AgentOrderVo queryBySerialNumber(String serialNumber); + + AgentOrderVo queryByNumber(String number); } diff --git a/ct/src/main/java/com/ruoyi/ct/service/impl/AgentAccountGoodServiceImpl.java b/ct/src/main/java/com/ruoyi/ct/service/impl/AgentAccountGoodServiceImpl.java index b620652..0a2b81d 100755 --- a/ct/src/main/java/com/ruoyi/ct/service/impl/AgentAccountGoodServiceImpl.java +++ b/ct/src/main/java/com/ruoyi/ct/service/impl/AgentAccountGoodServiceImpl.java @@ -7,6 +7,8 @@ import com.ruoyi.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.ct.domain.vo.AgentVo; +import com.ruoyi.ct.mapper.AgentMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.ruoyi.ct.domain.bo.AgentAccountGoodBo; @@ -30,6 +32,7 @@ import java.util.Collection; public class AgentAccountGoodServiceImpl implements IAgentAccountGoodService { private final AgentAccountGoodMapper baseMapper; + private final AgentMapper agentMapper; /** * 查询代理商商品 @@ -46,6 +49,10 @@ public class AgentAccountGoodServiceImpl implements IAgentAccountGoodService { public TableDataInfo queryPageList(AgentAccountGoodBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); +// for (AgentAccountGoodVo agentAccountGoodVo : result.getRecords()) { +// AgentVo agentVo = agentMapper.selectVoById(agentAccountGoodVo.getAgentId()); +// agentAccountGoodVo.setAgentVo(agentVo); +// } return TableDataInfo.build(result); } diff --git a/ct/src/main/java/com/ruoyi/ct/service/impl/AgentOrderServiceImpl.java b/ct/src/main/java/com/ruoyi/ct/service/impl/AgentOrderServiceImpl.java index eddf026..63f5849 100755 --- a/ct/src/main/java/com/ruoyi/ct/service/impl/AgentOrderServiceImpl.java +++ b/ct/src/main/java/com/ruoyi/ct/service/impl/AgentOrderServiceImpl.java @@ -56,6 +56,14 @@ public class AgentOrderServiceImpl implements IAgentOrderService { return baseMapper.selectVoOne(lqw); } + @Override + public AgentOrderVo queryByNumber(String number) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(AgentOrder::getNumber, number); + lqw.last("limit 1"); + return baseMapper.selectVoOne(lqw); + } + /** * 查询订单列表 */ @@ -112,9 +120,14 @@ public class AgentOrderServiceImpl implements IAgentOrderService { lqw.eq(StringUtils.isNotBlank(bo.getStatusCd()), AgentOrder::getStatusCd, bo.getStatusCd()); lqw.eq(StringUtils.isNotBlank(bo.getRouteArr()), AgentOrder::getRouteArr, bo.getRouteArr()); lqw.eq(ObjectUtils.isNotNull(bo.getIsRecharge()), AgentOrder::getIsRecharge, bo.getIsRecharge()); + lqw.eq(ObjectUtils.isNotNull(bo.getHasError()), AgentOrder::getHasError, bo.getHasError()); lqw.eq(ObjectUtils.isNotNull(bo.getIsExpress()), AgentOrder::getIsExpress, bo.getIsExpress()); lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null, AgentOrder::getCreateTime ,params.get("beginCreateTime"), params.get("endCreateTime")); + lqw.between(params.get("beginActiveTime") != null && params.get("endActiveTime") != null, + AgentOrder::getActiveTime ,params.get("beginActiveTime"), params.get("endActiveTime")); + lqw.between(params.get("beginRechargeTime") != null && params.get("endRechargeTime") != null, + AgentOrder::getRechargeTime ,params.get("beginRechargeTime"), params.get("endRechargeTime")); lqw.orderByDesc(AgentOrder::getCreateTime); return lqw; } diff --git a/ct/src/main/java/com/ruoyi/ct/service/impl/CTServiceImpl.java b/ct/src/main/java/com/ruoyi/ct/service/impl/CTServiceImpl.java index e7cb85f..f0b0838 100644 --- a/ct/src/main/java/com/ruoyi/ct/service/impl/CTServiceImpl.java +++ b/ct/src/main/java/com/ruoyi/ct/service/impl/CTServiceImpl.java @@ -7,9 +7,13 @@ import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.core.domain.CTRequestBody; import com.ruoyi.common.core.domain.CTResponse; -import com.ruoyi.ct.domain.bo.AgentOrderBo; +import com.ruoyi.ct.CTNetException; +import com.ruoyi.ct.domain.AgentOrder; +import com.ruoyi.ct.domain.vo.AgentOrderVo; +import com.ruoyi.ct.mapper.AgentOrderMapper; import com.ruoyi.ct.service.CTService; import com.ruoyi.common.utils.redis.RedisUtils; import lombok.RequiredArgsConstructor; @@ -51,7 +55,9 @@ public class CTServiceImpl implements CTService { private String url; - private CTRequestBody requestBody; +// private CTRequestBody requestBody; + + private final AgentOrderMapper agentOrderMapper; /** * 电信返回: @@ -111,7 +117,7 @@ public class CTServiceImpl implements CTService { * @return */ @Override - public boolean checkToken() { + public CTRequestBody checkToken() { try { token = RedisUtils.getCacheObject(tokenKey); System.out.println("token = " + token); @@ -120,7 +126,7 @@ public class CTServiceImpl implements CTService { // 缓存中没有token,需要重新获取 if (!getToken()) { // 没有获取到token,提示稍后再试 - return false; + return null; } } @@ -132,13 +138,13 @@ public class CTServiceImpl implements CTService { // 缓存中没有token,需要重新获取 if (!getToken()) { // 没有获取到token,提示稍后再试 - return false; + return null; } } url = String.format("%sdqServer/api_out/xt/v1/extInterface", host); - requestBody = new CTRequestBody(); + CTRequestBody requestBody = new CTRequestBody(); requestBody.setAppId(appId); - return true; + return requestBody; } /** @@ -156,7 +162,8 @@ public class CTServiceImpl implements CTService { */ @Override public List selectNumber(String personnelId, String saleId, String page, String pageSize) throws Exception { - if (checkToken()) { + CTRequestBody requestBody = checkToken(); + if (ObjectUtil.isNotNull(requestBody)) { requestBody.setInterfaceName("SelectNumber"); Map body = new HashMap<>(); body.put("personnelId", personnelId); @@ -183,17 +190,21 @@ public class CTServiceImpl implements CTService { return null; } + /** + * 线上下单 + */ @Override public CTResponse saveOrder(String name, String idCard, String contactMobile, String installedAddress, String saleId, String storeId, String personnelId, String province, String city, String county, String serialNumber, String number, String logiRemark, String pageUrl, String remark, - String installAddress, String ynumber2, String images) throws Exception { - if (checkToken()) { + String installAddress, String ynumber2, String images, String sn) throws Exception { + CTRequestBody requestBody = checkToken(); + if (ObjectUtil.isNotNull(requestBody)) { + log.error(sn+" ------------------检查接口登录状态完成-------------------"); requestBody.setInterfaceName("SaveOrder"); Map body = new HashMap<>(); - body.put("name", name); body.put("idCard", idCard); body.put("contactMobile", contactMobile); @@ -212,33 +223,60 @@ public class CTServiceImpl implements CTService { body.put("installAddress", installAddress); // body.put("ynumber2", ynumber2); // body.put("images", images); - log.info("body:" + body); requestBody.setEncryption(JSONUtil.toJsonStr(body), publicKey); + log.error(sn+" 加密前数据:"+body); + log.error(sn+" 加密后数据:"+requestBody.toMap()); HttpResponse httpResponse = HttpRequest.post(url) .header("token", token) .form(requestBody.toMap()) .execute(); - log.error("body:"+httpResponse.body()); +// log.error("body:"+httpResponse.body()); if (httpResponse.isOk()) { + if (ObjectUtil.isNotNull(httpResponse.body()) && ObjectUtil.isNull(JSONUtil.toBean(httpResponse.body(), JSONObject.class).getStr("status"))) { + // 其他异常状态,如504等 + log.error(sn+" ------------------下单异常------------------- "); + log.error(sn+" 请求电信异常,状态码:"+httpResponse.getStatus()); + log.error(sn+" 返回:"+httpResponse.body()); + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(AgentOrder::getSerialNumber, serialNumber); + lqw.last("limit 1"); + AgentOrderVo agentOrderVo = agentOrderMapper.selectVoOne(lqw); + AgentOrder agentOrder = new AgentOrder(); + agentOrder.setId(agentOrderVo.getId()); + agentOrder.setStatus("-2"); + agentOrder.setHasError(1); + agentOrderMapper.updateById(agentOrder); + log.error(sn+" --------------------------------------------"); + throw new CTNetException(); + } CTResponse response = JSONUtil.toBean(httpResponse.body(), CTResponse.class); return response; + } else { + // 返回的不是200,或者没有返回 + log.error(sn+" ------------------下单异常-------------------"); + log.error(sn+" 请求电信异常,状态码:"+httpResponse.getStatus()); + log.error(sn+" 返回:"+httpResponse.body()); + log.error(sn+" --------------------------------------------"); } - log.error("response status:"+httpResponse.getStatus()); - log.error("request error"); return null; } log.error("token error"); return null; } + /** + * 线下下单 + */ @Override public CTResponse saveOrder(String name, String idCard, String contactMobile, String installedAddress, String saleId, String storeId, String personnelId, String province, String city, String county, String serialNumber, String number, String logiRemark, String pageUrl, String remark, - String installAddress, String ynumber2, String images, String deliveryMethod) throws Exception { - if (checkToken()) { + String installAddress, String ynumber2, String images, String deliveryMethod, String sn) throws Exception { + CTRequestBody requestBody = checkToken(); + if (ObjectUtil.isNotNull(requestBody)) { + log.error(sn+" ------------------检查接口登录状态完成-------------------"); requestBody.setInterfaceName("SaveOrder"); Map body = new HashMap<>(); @@ -261,19 +299,43 @@ public class CTServiceImpl implements CTService { body.put("installAddress", installAddress); // body.put("ynumber2", ynumber2); // body.put("images", images); - log.info("body:" + body); +// log.info("body:" + body); requestBody.setEncryption(JSONUtil.toJsonStr(body), publicKey); + log.error(sn+" 加密前数据:"+body); + log.error(sn+" 加密后数据:"+requestBody.toMap()); HttpResponse httpResponse = HttpRequest.post(url) .header("token", token) .form(requestBody.toMap()) .execute(); - log.error("body:"+httpResponse.body()); +// log.error("body:"+httpResponse.body()); if (httpResponse.isOk()) { + if (ObjectUtil.isNotNull(httpResponse.body()) && ObjectUtil.isNull(JSONUtil.toBean(httpResponse.body(), JSONObject.class).getStr("status"))) { + // 其他异常状态,如504等 + log.error(sn+" ------------------下单异常------------------- "); + log.error(sn+" 请求电信异常,状态码:"+httpResponse.getStatus()); + log.error(sn+" 返回:"+httpResponse.body()); + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(AgentOrder::getSerialNumber, serialNumber); + lqw.last("limit 1"); + AgentOrderVo agentOrderVo = agentOrderMapper.selectVoOne(lqw); + AgentOrder agentOrder = new AgentOrder(); + agentOrder.setId(agentOrderVo.getId()); + agentOrder.setStatus("-2"); + agentOrder.setHasError(1); + agentOrderMapper.updateById(agentOrder); + log.error(sn+" --------------------------------------------"); + throw new CTNetException(); + + } CTResponse response = JSONUtil.toBean(httpResponse.body(), CTResponse.class); return response; + } else { + // 返回的不是200,或者没有返回 + log.error(sn+" ------------------下单异常-------------------"); + log.error(sn+" 请求电信异常,状态码:"+httpResponse.getStatus()); + log.error(sn+" 返回:"+httpResponse.body()); + log.error(sn+" --------------------------------------------"); } - log.error("response status:"+httpResponse.getStatus()); - log.error("request error"); return null; } log.error("token error"); @@ -282,7 +344,8 @@ public class CTServiceImpl implements CTService { @Override public CTResponse uploadFile(String serialNumber, String name, String idCard, String type, String msgId, String img) throws Exception { - if (checkToken()) { + CTRequestBody requestBody = checkToken(); + if (ObjectUtil.isNotNull(requestBody)) { requestBody.setInterfaceName("UploadFile"); requestBody.setFileBase64(img); Map body = new HashMap<>(); @@ -295,8 +358,11 @@ public class CTServiceImpl implements CTService { if (ObjectUtil.isNotNull(msgId)) { body.put("msgId", msgId); } - log.info("body:" + body); + log.error("body:" + body); requestBody.setEncryption(JSONUtil.toJsonStr(body), publicKey); + log.error("body appid:" + requestBody.getAppId()); + log.error("body interface name:" + requestBody.getInterfaceName()); + log.error("body encryption:" + requestBody.getEncryption()); HttpResponse httpResponse = HttpRequest.post(url) .header("token", token) .form(requestBody.toMap()) @@ -316,7 +382,8 @@ public class CTServiceImpl implements CTService { @Override public CTResponse updateOrder(String name, String orderNum) throws Exception { - if (checkToken()) { + CTRequestBody requestBody = checkToken(); + if (ObjectUtil.isNotNull(requestBody)) { requestBody.setInterfaceName("QueryOrder"); Map body = new HashMap<>(); @@ -352,9 +419,48 @@ public class CTServiceImpl implements CTService { return null; } + @Override + public CTResponse updateOrderNum(String serialNumber) throws Exception { + CTRequestBody requestBody = checkToken(); + if (ObjectUtil.isNotNull(requestBody)) { + requestBody.setInterfaceName("QueryOrderResult"); + Map body = new HashMap<>(); + + body.put("serialNumber", serialNumber); + + log.info("body:" + body); + System.out.println("body = " + body); + requestBody.setEncryption(JSONUtil.toJsonStr(body), publicKey); + HttpResponse httpResponse = HttpRequest.post(url) + .header("token", token) + .form(requestBody.toMap()) + .execute(); + log.error("body:"+httpResponse.body()); + System.out.println("httpResponse.body() = " + httpResponse.body()); + if (httpResponse.isOk()) { + CTResponse response = JSONUtil.toBean(httpResponse.body(), CTResponse.class); + + try { + String data = response.getData(); + response.setDecryptData(JSONUtil.parseObj(decrypt(data, publicKey))); + return response; + } catch (Exception e) { + response.setDecryptData(JSONUtil.parseObj(httpResponse.body()).getJSONObject("data")); + return response; + } + + } + log.error("response status:"+httpResponse.getStatus()); + log.error("request error"); + return null; + } + return null; + } + @Override public CTResponse updateExpress(String orderNum) throws Exception { - if (checkToken()) { + CTRequestBody requestBody = checkToken(); + if (ObjectUtil.isNotNull(requestBody)) { requestBody.setInterfaceName("QueryOrderResult"); Map body = new HashMap<>(); @@ -391,7 +497,8 @@ public class CTServiceImpl implements CTService { @Override public CTResponse syncOffer(String orderNum, String offerIds, String salesNumber) throws Exception { - if (checkToken()) { + CTRequestBody requestBody = checkToken(); + if (ObjectUtil.isNotNull(requestBody)) { requestBody.setInterfaceName("QueryNumberOffer"); Map body = new HashMap<>(); diff --git a/ct/src/main/java/com/ruoyi/ct/service/impl/GoodServiceImpl.java b/ct/src/main/java/com/ruoyi/ct/service/impl/GoodServiceImpl.java index 7422cd7..185936d 100755 --- a/ct/src/main/java/com/ruoyi/ct/service/impl/GoodServiceImpl.java +++ b/ct/src/main/java/com/ruoyi/ct/service/impl/GoodServiceImpl.java @@ -63,7 +63,8 @@ public class GoodServiceImpl implements IGoodService { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.like(StringUtils.isNotBlank(bo.getName()), Good::getName, bo.getName()); lqw.eq(StringUtils.isNotBlank(bo.getContent()), Good::getContent, bo.getContent()); - lqw.eq(StringUtils.isNotBlank(bo.getSaleId()), Good::getSaleId, bo.getSaleId()); + lqw.like(StringUtils.isNotBlank(bo.getSaleId()), Good::getSaleId, bo.getSaleId()); + lqw.like(StringUtils.isNotBlank(bo.getPersonnelId()), Good::getPersonnelId, bo.getPersonnelId()); lqw.eq(StringUtils.isNotBlank(bo.getStatus()), Good::getStatus, bo.getStatus()); return lqw; } diff --git a/ct/src/main/resources/bill.xlsx b/ct/src/main/resources/bill.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c491f78c5f8353be4f1f06423ed25a3c980869c4 GIT binary patch literal 11779 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 literal 0 HcmV?d00001 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/APIController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/APIController.java index 3af3b3d..4687390 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/APIController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/APIController.java @@ -1,18 +1,34 @@ package com.ruoyi.web.controller.api; import cn.dev33.satoken.annotation.SaIgnore; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONObject; import com.ruoyi.common.core.domain.CTResponse; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.ct.domain.Bill; +import com.ruoyi.ct.domain.vo.AgentOrderVo; import com.ruoyi.ct.service.CTService; +import com.ruoyi.ct.service.IAgentOrderService; +import com.ruoyi.oss.core.OssClient; +import com.ruoyi.oss.factory.OssFactory; +import com.ruoyi.system.domain.bo.SysOssBo; +import com.ruoyi.system.domain.vo.SysOssVo; +import com.ruoyi.system.service.ISysOssService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; @SaIgnore @@ -35,7 +51,7 @@ public class APIController { public R saveOrder() throws Exception { CTResponse response = ctService.saveOrder("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", - "", "", ""); + "", "", "", ""); return R.ok(response.getData()); } @@ -44,4 +60,35 @@ public class APIController { CTResponse response = ctService.updateOrder(name, orderNum); return R.ok(response.getDecryptData()); } + + + @Resource + private final ISysOssService sysOssService; + + @Resource + private final IAgentOrderService iAgentOrderService; + + @PostMapping("/updateBill") + public void updateBill(SysOssBo sysOssBo, HttpServletResponse response) { + SysOssVo sysOss = sysOssService.getById(sysOssBo.getOssId()); + OssClient storage = OssFactory.instance(sysOss.getService()); + InputStream inputStream = storage.getObjectContent(sysOss.getUrl()); + List excelResult = ExcelUtil.importExcel(inputStream, Bill.class); + List result = new ArrayList<>(); + for (Bill bill: excelResult) { + System.out.println("bill = " + bill); + AgentOrderVo orderVo = iAgentOrderService.queryByNumber(bill.getL()); + if (ObjectUtil.isNotNull(orderVo)) { + bill.setA0(orderVo.getAgentName()); + bill.setA1(orderVo.getTitle()); + bill.setA3(orderVo.getSaleId()); + bill.setA4(orderVo.getPersonnelId()); + } + result.add(bill); + } + ExcelUtil.exportTemplate(CollUtil.newArrayList(new HashMap<>(), result), "xx-"+sysOssBo.getOriginalName(), "bill.xlsx", response); +// System.out.println("data = " + excelResult.getList()); +// List list = iAgentOrderService.queryList(bo); +// ExcelUtil.exportExcel(list, "订单", AgentOrderVo.class, response); + } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/R.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/R.java index 381a6f6..bb8c81b 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/R.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/R.java @@ -30,6 +30,8 @@ public class R implements Serializable { private String msg; + private String serialNumber; + private T data; public static R ok() { @@ -68,6 +70,10 @@ public class R implements Serializable { return restResult(null, code, msg); } + public static R fail(int code, String msg, String serialNumber) { + return restResult(null, code, msg, serialNumber); + } + /** * 返回警告消息 * @@ -97,6 +103,15 @@ public class R implements Serializable { return r; } + private static R restResult(T data, int code, String msg, String serialNumber) { + R r = new R<>(); + r.setCode(code); + r.setData(data); + r.setMsg(msg); + r.setSerialNumber(serialNumber); + return r; + } + public static Boolean isError(R ret) { return !isSuccess(ret); } diff --git a/ruoyi-job/src/main/java/com/ruoyi/job/service/SampleService.java b/ruoyi-job/src/main/java/com/ruoyi/job/service/SampleService.java index 7be3aa4..afd61f8 100644 --- a/ruoyi-job/src/main/java/com/ruoyi/job/service/SampleService.java +++ b/ruoyi-job/src/main/java/com/ruoyi/job/service/SampleService.java @@ -56,6 +56,49 @@ public class SampleService { @Resource private ISysConfigService sysConfigService; + @XxlJob("syncErrorOrder") + public void syncErrorOrder() throws Exception { + XxlJobHelper.log("Start sync Express"); + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(AgentOrder::getStatus, "-2"); + lqw.isNull(AgentOrder::getExpressNum); + List agentOrderVoList = iAgentOrderService.queryListByLQW(lqw); + for (AgentOrderVo vo: agentOrderVoList) { + XxlJobHelper.log("agentOrderVo = " + vo); + CTResponse response = ctService.updateOrderNum(vo.getSerialNumber()); + AgentOrderBo agentOrderBo = new AgentOrderBo(); + agentOrderBo.setId(vo.getId()); + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.MINUTE, -30); + Date validTo = calendar.getTime(); + if (ObjectUtils.isNotNull(response) && response.isSuccess()) { + JSONObject data = response.getDecryptData(); + XxlJobHelper.log("data = " + data); + + if (ObjectUtils.isNotNull(data) && ObjectUtils.isNotNull(data.getStr("orderNo"))) { + agentOrderBo.setStatus("0"); + agentOrderBo.setUpdateTime(new Date()); + agentOrderBo.setOrderStatus(data.getStr("groupOrderStatus")); + agentOrderBo.setOrderNum(data.getStr("orderNo")); + iAgentOrderService.updateByBo(agentOrderBo); + } else { + if (vo.getCreateTime().compareTo(validTo) < 0){ + agentOrderBo.setStatus("-3"); + agentOrderBo.setUpdateTime(new Date()); + iAgentOrderService.updateByBo(agentOrderBo); + } + + } + } else { + if (vo.getCreateTime().compareTo(validTo) < 0){ + agentOrderBo.setStatus("-3"); + agentOrderBo.setUpdateTime(new Date()); + iAgentOrderService.updateByBo(agentOrderBo); + } + } + } + } + @XxlJob("syncOffer") public void syncOffer() throws Exception { XxlJobHelper.log("Start sync syncOffer"); @@ -81,6 +124,7 @@ public class SampleService { AgentOrderBo bo = new AgentOrderBo(); bo.setId(vo.getId()); bo.setIsRecharge(1); + bo.setRechargeTime(new Date()); bo.setUpdateTime(new Date()); if (!data.contains(offerId50)) { bo.setChargeTitle(sysConfig50.getConfigName()); @@ -153,6 +197,7 @@ public class SampleService { boolean needStatistic = false; if (Objects.equals(agentOrderBo.getOrderStatus(), "S1013")) { agentOrderBo.setStatus("1"); + agentOrderBo.setActiveTime(new Date()); needStatistic = true; } else if (Objects.equals(agentOrderBo.getOrderStatus(), "S1014")) { agentOrderBo.setStatus("10"); diff --git a/ruoyi-ui/src/api/ct/agentOrder.js b/ruoyi-ui/src/api/ct/agentOrder.js index 61ca81b..f3230a3 100755 --- a/ruoyi-ui/src/api/ct/agentOrder.js +++ b/ruoyi-ui/src/api/ct/agentOrder.js @@ -17,6 +17,27 @@ export function getAgentOrder(id) { }) } +export function syncOrder(id) { + return request({ + url: '/ct/agentOrder/syncOrder/' + id, + method: 'get' + }) +} + +export function syncExpress(id) { + return request({ + url: '/ct/agentOrder/syncExpress/' + id, + method: 'get' + }) +} + +export function syncOffer(id) { + return request({ + url: '/ct/agentOrder/syncOffer/' + id, + method: 'get' + }) +} + // 新增订单 export function addAgentOrder(data) { return request({ diff --git a/ruoyi-ui/src/utils/request.js b/ruoyi-ui/src/utils/request.js index 850685c..07b1a8b 100644 --- a/ruoyi-ui/src/utils/request.js +++ b/ruoyi-ui/src/utils/request.js @@ -19,7 +19,7 @@ const service = axios.create({ // axios中请求配置有baseURL选项,表示请求URL公共部分 baseURL: process.env.VUE_APP_BASE_API, // 超时 - timeout: 10000 + timeout: 600000 }) // request拦截器 diff --git a/ruoyi-ui/src/views/ct/agentAccount/index.vue b/ruoyi-ui/src/views/ct/agentAccount/index.vue index 4124353..068c5d4 100755 --- a/ruoyi-ui/src/views/ct/agentAccount/index.vue +++ b/ruoyi-ui/src/views/ct/agentAccount/index.vue @@ -17,7 +17,7 @@ @keyup.enter.native="handleQuery" /> - + 搜索 重置 @@ -79,8 +79,8 @@ {{props.row.ipList}} - {{goods.title}} @@ -92,7 +92,7 @@ - + @@ -176,8 +176,8 @@ - - + + @@ -232,7 +232,7 @@ - +