From 35601b1455ec05ece1414bd288fa38944c03bfdd Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期四, 26 九月 2024 20:15:17 +0800 Subject: [PATCH] 修改bug --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java | 3 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java | 89 +++++++++- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java | 113 +++++++------ ruoyi-gateway/src/main/resources/bootstrap.yml | 22 +- ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml | 55 ++---- ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java | 14 + ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml | 55 ++---- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/RedisLock.java | 51 ++++++ ruoyi-auth/src/main/resources/bootstrap.yml | 22 +- 9 files changed, 250 insertions(+), 174 deletions(-) diff --git a/ruoyi-auth/src/main/resources/bootstrap.yml b/ruoyi-auth/src/main/resources/bootstrap.yml index 4377cca..0122628 100644 --- a/ruoyi-auth/src/main/resources/bootstrap.yml +++ b/ruoyi-auth/src/main/resources/bootstrap.yml @@ -22,24 +22,18 @@ nacos: discovery: # 服务注册地址 -# server-addr: 192.168.110.169:8848 + server-addr: 192.168.110.169:8848 service: ${spring.application.name} group: DEFAULT_GROUP -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb -# username: nacos -# password: nacos - - server-addr: 127.0.0.1:8848 - namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb + username: nacos + password: nacos config: # 配置中心地址 -# server-addr: 192.168.110.169:8848 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb -# username: nacos -# password: nacos - - server-addr: 127.0.0.1:8848 - namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1 + server-addr: 192.168.110.169:8848 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb + username: nacos + password: nacos group: DEFAULT_GROUP name: ${spring.application.name} # 配置文件格式 diff --git a/ruoyi-gateway/src/main/resources/bootstrap.yml b/ruoyi-gateway/src/main/resources/bootstrap.yml index ccdca4c..1beff53 100644 --- a/ruoyi-gateway/src/main/resources/bootstrap.yml +++ b/ruoyi-gateway/src/main/resources/bootstrap.yml @@ -22,25 +22,19 @@ nacos: discovery: # 服务注册地址 -# server-addr: 192.168.110.169:8848 + server-addr: 192.168.110.169:8848 service: ${spring.application.name} group: DEFAULT_GROUP -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb -# username: nacos -# password: nacos - - server-addr: 127.0.0.1:8848 - namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb + username: nacos + password: nacos config: # 配置中心地址 -# server-addr: 192.168.110.169:8848 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb -# username: nacos -# password: nacos + server-addr: 192.168.110.169:8848 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb + username: nacos + password: nacos group: DEFAULT_GROUP - - server-addr: 127.0.0.1:8848 - namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1 name: ${spring.application.name} # 配置文件格式 file-extension: yml diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml b/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml index 0fabec1..d837d2b 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml @@ -21,25 +21,19 @@ nacos: discovery: # 服务注册地址 -# server-addr: 192.168.110.169:8848 + server-addr: 192.168.110.169:8848 service: ${spring.application.name} group: DEFAULT_GROUP -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb -# username: nacos -# password: nacos - - server-addr: 127.0.0.1:8848 - namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb + username: nacos + password: nacos config: # 配置中心地址 -# server-addr: 192.168.110.169:8848 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb + server-addr: 192.168.110.169:8848 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb group: DEFAULT_GROUP -# username: nacos -# password: nacos - - server-addr: 127.0.0.1:8848 - namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1 + username: nacos + password: nacos name: ${spring.application.name} # 配置文件格式 file-extension: yml @@ -60,15 +54,12 @@ type: nacos nacos: # 开发环境 -# server-addr: 192.168.110.169:8848 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb + server-addr: 192.168.110.169:8848 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb group: DEFAULT_GROUP data-id: seata-server.properties -# username: nacos -# password: nacos - - server-addr: 127.0.0.1:8848 - namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1 + username: nacos + password: nacos # 生产环境 # server-addr: 192.168.0.137:8848,192.168.0.123:8848 # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a @@ -81,14 +72,11 @@ nacos: application: seata-server # 开发环境 -# server-addr: 192.168.110.169:8848 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb + server-addr: 192.168.110.169:8848 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb group: DEFAULT_GROUP -# username: nacos -# password: nacos - - server-addr: 127.0.0.1:8848 - namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1 + username: nacos + password: nacos # 生产环境 # server-addr: 192.168.0.137:8848,192.168.0.123:8848 # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a @@ -99,15 +87,12 @@ nacos: discovery: # 开发环境 -# server-addr: 192.168.110.169:8848 # nacos注册中心地址 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 + server-addr: 192.168.110.169:8848 # nacos注册中心地址 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 group: DEFAULT_GROUP application: seata-server #Nacos 中 Seata 名称 -# username: nacos -# password: nacos - - server-addr: 127.0.0.1:8848 - namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1 + username: nacos + password: nacos # 生产环境 # server-addr: 192.168.0.137:8848,192.168.0.123:8848 # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java index ecb1330..b8db1ec 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java +++ b/ruoyi-service/ruoyi-chargingPile/src/main/java/com/ruoyi/chargingPile/controller/TChargingGunController.java @@ -14,6 +14,7 @@ import com.ruoyi.chargingPile.api.vo.GunStatusStatisticsVO; import com.ruoyi.chargingPile.api.vo.SiteNameVO; import com.ruoyi.chargingPile.api.vo.TChargingGunVO; +import com.ruoyi.chargingPile.config.FileUploadConfig; import com.ruoyi.chargingPile.service.ISiteService; import com.ruoyi.chargingPile.service.TChargingGunService; import com.ruoyi.chargingPile.service.TChargingPileService; @@ -63,13 +64,16 @@ @Autowired private TChargingGunService chargingGunService; - @Autowired + @Resource private ChargingOrderClient chargingOrderClient; @Resource private TChargingPileService chargingPileService; @Resource private ISiteService siteService; + + @Autowired + private FileUploadConfig fileUploadConfig; /** * 查询充电枪列表 @@ -152,11 +156,13 @@ public void downloadQRCode(@PathVariable Integer id, HttpServletResponse response){ try { TChargingGun chargingGun = chargingGunService.getById(id); - String fileName = URLEncoder.encode(chargingGun.getCode(), "UTF-8") + ".jpg"; + TChargingPile chargingPile = chargingPileService.getById(chargingGun.getId()); + String code = chargingPile.getCode() + chargingGun.getCode(); + String fileName = URLEncoder.encode(code, "UTF-8") + ".jpg"; response.setContentType("application/force-download"); response.addHeader("Content-Disposition", "attachment;fileName=" + fileName); - String url = "https://www.baidu.com?id=" + id; - String filePath = "D:/Program Files/nginx-1.20.2/html"; + String url = "https://mxcd.zhinenganguan.com?No=" + code; + String filePath = fileUploadConfig.getLocation(); QRCodeUtils.encode(url, filePath); FileInputStream inputStream = new FileInputStream(filePath); ServletOutputStream out = response.getOutputStream(); diff --git a/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml b/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml index bd39d02..af5069b 100644 --- a/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml +++ b/ruoyi-service/ruoyi-chargingPile/src/main/resources/bootstrap.yml @@ -22,26 +22,20 @@ nacos: discovery: # 服务注册地址 -# server-addr: 192.168.110.169:8848 + server-addr: 192.168.110.169:8848 service: ${spring.application.name} group: DEFAULT_GROUP -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb -# username: nacos -# password: nacos - - server-addr: 127.0.0.1:8848 - namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb + username: nacos + password: nacos config: # 配置中心地址 -# server-addr: 192.168.110.169:8848 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb + server-addr: 192.168.110.169:8848 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb group: DEFAULT_GROUP name: ${spring.application.name} -# username: nacos -# password: nacos - - server-addr: 127.0.0.1:8848 - namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1 + username: nacos + password: nacos # 配置文件格式 file-extension: yml # 共享配置 @@ -61,15 +55,12 @@ type: nacos nacos: # 开发环境 -# server-addr: 192.168.110.169:8848 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb + server-addr: 192.168.110.169:8848 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb group: DEFAULT_GROUP data-id: seata-server.properties -# username: nacos -# password: nacos - - server-addr: 127.0.0.1:8848 - namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1 + username: nacos + password: nacos # 生产环境 # server-addr: 192.168.0.137:8848,192.168.0.123:8848 # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a @@ -82,14 +73,11 @@ nacos: application: seata-server # 开发环境 -# server-addr: 192.168.110.169:8848 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb + server-addr: 192.168.110.169:8848 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb group: DEFAULT_GROUP -# username: nacos -# password: nacos - - server-addr: 127.0.0.1:8848 - namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1 + username: nacos + password: nacos # 生产环境 # server-addr: 192.168.0.137:8848,192.168.0.123:8848 # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a @@ -100,15 +88,12 @@ nacos: discovery: # 开发环境 -# server-addr: 192.168.110.169:8848 # nacos注册中心地址 -# namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 + server-addr: 192.168.110.169:8848 # nacos注册中心地址 + namespace: b5290bc2-e3aa-4988-8a7d-9c07e4e073cb # 命名空间 group: DEFAULT_GROUP application: seata-server #Nacos 中 Seata 名称 -# username: nacos -# password: nacos - - server-addr: 127.0.0.1:8848 - namespace: 9e80b38d-9abb-4602-b4da-174f6f79d8d1 + username: nacos + password: nacos # 生产环境 # server-addr: 192.168.0.137:8848,192.168.0.123:8848 # namespace: c6cf40b5-44e8-43f9-be61-8d10fa830e2a diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java index 83ea8cf..6f50e62 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TShoppingOrderController.java @@ -1,4 +1,5 @@ package com.ruoyi.order.controller; + import java.math.BigDecimal; import java.time.LocalDateTime; @@ -41,7 +42,7 @@ /** * <p> - * 前端控制器 + * 前端控制器 * </p> * * @author xiaochen @@ -60,14 +61,24 @@ private GoodsClient goodsClient; @Resource private CouponClient couponClient; - - + @Resource + private TokenService tokenService; + @Resource + private AliPaymentClient aliPaymentClient; + @Resource + private WxPaymentClient wxPaymentClient; + @Resource + private AppCouponClient appCouponClient; + @Resource + private SysUserClient sysUserClient; + + @PostMapping("/getShoppingOrderList") @ApiOperation(value = "列表查询", tags = {"管理后台-购物订单"}) public AjaxResult<PageInfo<TShoppingOrder>> getShoppingOrderList(@RequestBody ShoppingOrderQuery query) { if (StringUtils.hasLength(query.getPhone())) { List<Long> data = appUserClient.getUserIdsByPhone(query.getPhone()).getData(); - if (data.isEmpty()){ + if (data.isEmpty()) { return AjaxResult.success(new PageInfo<TShoppingOrder>()); } query.setUserIds(data); @@ -77,54 +88,47 @@ query.setGoodsIds(data); List<Integer> data1 = couponClient.getCouponIdsByName(query.getName()).getData(); query.setCouponIds(data1); - if (data.isEmpty() && data1.isEmpty()){ + if (data.isEmpty() && data1.isEmpty()) { return AjaxResult.success(new PageInfo<TShoppingOrder>()); } } PageInfo<TShoppingOrder> res = shoppingOrderService.pageList(query); return AjaxResult.success(res); } - @Resource - private SysUserClient sysUserClient; + @GetMapping("/getShoppingOrderInfoById") @ApiOperation(value = "根据订单id查看订单详情", tags = {"管理后台-购物订单"}) public AjaxResult<TShoppingOrder> getShoppingOrderList(String id) { TShoppingOrder byId = shoppingOrderService.getById(id); - if (byId.getConsignerId()!=null){ + if (byId.getConsignerId() != null) { SysUser data = sysUserClient.getSysUser(byId.getConsignerId()).getData(); - if (data!=null){ + if (data != null) { byId.setConsignerName(data.getUserName()); } } - if (byId.getCancellationId()!=null){ + if (byId.getCancellationId() != null) { SysUser data = sysUserClient.getSysUser(byId.getCancellationId()).getData(); - if (data!=null){ + if (data != null) { byId.setCancellationName(data.getUserName()); } } - if (byId.getAppUserAddressId()!=null){ + if (byId.getAppUserAddressId() != null) { TAppUserAddress data = appUserClient.getAddressById(byId.getAppUserAddressId()).getData(); - if (data!=null){ - byId.setReceivingName(data.getName()+"-"+data.getPhone()); + if (data != null) { + byId.setReceivingName(data.getName() + "-" + data.getPhone()); byId.setReceivingAddress(data.getAddress()); } } return AjaxResult.success(byId); } + @GetMapping("/deleteShoppingOrder") @ApiOperation(value = "批量删除订单", tags = {"管理后台-购物订单"}) public AjaxResult<TShoppingOrder> deleteShoppingOrder(String ids) { shoppingOrderService.removeBatchByIds(Arrays.asList(ids.split(","))); return AjaxResult.success(); } - @Resource - private TokenService tokenService; - @Resource - private AliPaymentClient aliPaymentClient; - @Resource - private WxPaymentClient wxPaymentClient; - @Resource - private AppCouponClient appCouponClient; + @GetMapping("/cancelShoppingOrder") @ApiOperation(value = "取消订单", tags = {"管理后台-购物订单"}) public AjaxResult cancelShoppingOrder(String id) { @@ -134,7 +138,7 @@ byId.setCancellationId(userid); byId.setCancellationTime(LocalDateTime.now()); byId.setStatus(4); - switch (byId.getPaymentType()){ + switch (byId.getPaymentType()) { case 1: // 微信 WxPaymentRefundModel wxPaymentRefundModel = new WxPaymentRefundModel(); @@ -144,8 +148,8 @@ // todo 部署到线上之后写回调地址 // wxPaymentRefundModel.setNotify_url(""); String string = byId.getPaymentAmount().multiply(new BigDecimal("100")).toString(); - if (string.contains(".")){ - string = string.substring(0,string.indexOf(".")); + if (string.contains(".")) { + string = string.substring(0, string.indexOf(".")); } int i = Integer.parseInt(string); WxPaymentRefundModel.RefundAmount refundAmount = new WxPaymentRefundModel.RefundAmount(); @@ -163,10 +167,10 @@ refundReq.setRefundAmount(byId.getPaymentAmount().toString()); refundReq.setRefundReason("后台退款"); RefundResp data = aliPaymentClient.refund(refundReq).getData(); - if (data!=null){ + if (data != null) { // 退款成功 回退优惠券 // byId.setStatus(4); - if (byId.getAppCouponId()!=null){ + if (byId.getAppCouponId() != null) { appCouponClient.refund(byId.getAppCouponId().toString()); byId.setRefundCode(gw); byId.setRefundAmount(byId.getPaymentAmount()); @@ -179,9 +183,10 @@ shoppingOrderService.updateById(byId); return AjaxResult.success(); } + @GetMapping("/consignerShoppingOrder") @ApiOperation(value = "发货", tags = {"管理后台-购物订单"}) - public AjaxResult consignerShoppingOrder(String id,String companyName,String code) { + public AjaxResult consignerShoppingOrder(String id, String companyName, String code) { TShoppingOrder byId = shoppingOrderService.getById(id); byId.setExpressCompany(companyName); byId.setExpressNumber(code); @@ -192,16 +197,17 @@ shoppingOrderService.updateById(byId); return AjaxResult.success(); } + @GetMapping("/getMyShoppingOrderList") @ApiOperation(value = "获取购买订单列表", tags = {"小程序-商城购买订单"}) - public AjaxResult<Map<String, Object>> getMyShoppingOrderList(GetMyShoppingOrderList query){ + public AjaxResult<Map<String, Object>> getMyShoppingOrderList(GetMyShoppingOrderList query) { Map<String, Object> list = shoppingOrderService.getMyShoppingOrderList(query); return AjaxResult.success(list); } - + @GetMapping("/getMyShoppingOrderListNum") @ApiOperation(value = "获取购买订单列表数量", tags = {"小程序-商城购买订单"}) - public AjaxResult<Map<String, Object>> getMyShoppingOrderListNum(){ + public AjaxResult<Map<String, Object>> getMyShoppingOrderListNum() { Long userId = tokenService.getLoginUserApplet().getUserId(); long dfh = shoppingOrderService.count(new LambdaQueryWrapper<TShoppingOrder>().eq(TShoppingOrder::getDelFlag, 0) .eq(TShoppingOrder::getStatus, 1).eq(TShoppingOrder::getAppUserId, userId)); @@ -215,29 +221,27 @@ map.put("ywc", ywc); return AjaxResult.success(map); } - @GetMapping("/getMyShoppingOrderInfo/{id}") - @ApiOperation(value = "获取购买订单详情", tags = {"小程序-商城购买订单","管理后台-支付订单-订单信息"}) - public AjaxResult<MyShoppingOrderInfo> getMyShoppingOrderInfo(@PathVariable String id){ + @ApiOperation(value = "获取购买订单详情", tags = {"小程序-商城购买订单", "管理后台-支付订单-订单信息"}) + public AjaxResult<MyShoppingOrderInfo> getMyShoppingOrderInfo(@PathVariable String id) { MyShoppingOrderInfo info = shoppingOrderService.getMyShoppingOrderInfo(id); return AjaxResult.success(info); } - @PutMapping("/confirmReceipt/{id}") @ApiOperation(value = "确认收货操作", tags = {"小程序-商城购买订单"}) - public AjaxResult confirmReceipt(@PathVariable String id){ + public AjaxResult confirmReceipt(@PathVariable String id) { TShoppingOrder shoppingOrder = shoppingOrderService.getById(id); - if(shoppingOrder.getStatus() == 3){ + if (shoppingOrder.getStatus() == 3) { return AjaxResult.error("不能重复确认收货"); } - if(shoppingOrder.getStatus() == 1){ + if (shoppingOrder.getStatus() == 1) { return AjaxResult.error("订单还未发货呢"); } - if(shoppingOrder.getStatus() == 4){ + if (shoppingOrder.getStatus() == 4) { return AjaxResult.error("订单已取消,不允许操作。"); } shoppingOrder.setStatus(3); @@ -248,7 +252,7 @@ @PutMapping("/cancelOrder/{id}") @ApiOperation(value = "取消订单操作", tags = {"小程序-商城购买订单"}) - public AjaxResult cancelOrder(@PathVariable String id){ + public AjaxResult cancelOrder(@PathVariable String id) { return shoppingOrderService.cancelOrder(id); } @@ -256,9 +260,9 @@ * 商城订单取消微信退款回调 */ @PostMapping("/cancelShoppingOrderWxRefund") - public void cancelShoppingOrderWxRefund(HttpServletRequest request){ + public void cancelShoppingOrderWxRefund(HttpServletRequest request) { WxRefundNotifyResp data = wxPaymentClient.refundNotify(request).getData(); - if(null != data){ + if (null != data) { String out_refund_no = data.getOut_refund_no(); String refund_id = data.getRefund_id(); String tradeState = data.getTradeState(); @@ -268,31 +272,30 @@ } - @ResponseBody @GetMapping(value = "/getNoInvoicedOrder") @ApiOperation(value = "获取未开票的订单数据", tags = {"小程序-充电发票"}) - public AjaxResult<List<MyShoppingOrderList>> getNoInvoicedOrder(GetNoInvoicedOrder query){ + public AjaxResult<List<MyShoppingOrderList>> getNoInvoicedOrder(GetNoInvoicedOrder query) { List<MyShoppingOrderList> list = shoppingOrderService.getNoInvoicedOrder(query); return AjaxResult.success(list); } - + @PostMapping("/create") - public R<TShoppingOrder> shopCreate(@RequestBody ExchangeDto exchangeDto){ + public R<TShoppingOrder> shopCreate(@RequestBody ExchangeDto exchangeDto) { TShoppingOrder shoppingOrder = new TShoppingOrder(); shoppingOrder.setTitle(exchangeDto.getTitle()); shoppingOrder.setCode(OrderCodeUtil.getOrderCode("GW")); shoppingOrder.setAppUserId(exchangeDto.getUserId()); shoppingOrder.setOrderType(exchangeDto.getGoodType()); - if (exchangeDto.getGoodType()==1) { + if (exchangeDto.getGoodType() == 1) { shoppingOrder.setGoodsId(exchangeDto.getGoodId()); - }else { + } else { shoppingOrder.setCouponId(exchangeDto.getGoodId()); } shoppingOrder.setPurchaseQuantity(exchangeDto.getNum()); shoppingOrder.setAppUserAddressId(exchangeDto.getAddressId()); shoppingOrder.setOrderAmount(exchangeDto.getOrderPrice()); - if (exchangeDto.getCouponId()!=null) { + if (exchangeDto.getCouponId() != null) { shoppingOrder.setAppCouponId(exchangeDto.getCouponId()); } shoppingOrder.setCouponDiscountAmount(exchangeDto.getDiscountPrice()); @@ -307,16 +310,16 @@ shoppingOrder.setCreateTime(LocalDateTime.now()); shoppingOrder.setDelFlag(false); shoppingOrderService.save(shoppingOrder); - + return R.ok(shoppingOrder); - + } - + @PostMapping("/callBack") - public R callBack(@RequestParam("code")String code,@RequestParam("outTradeNo")String outTradeNo){ - shoppingOrderService.callBack(code,outTradeNo); + public R callBack(@RequestParam("code") String code, @RequestParam("outTradeNo") String outTradeNo) { + shoppingOrderService.callBack(code, outTradeNo); return R.ok(); - + } } diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java index 964eaa8..a558cc9 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TChargingOrderServiceImpl.java @@ -620,8 +620,7 @@ chargingOrder.setChargeAmount(electrovalence); chargingOrder.setVipDiscountAmount(discountAmount); this.updateById(chargingOrder); - - + TChargingPile chargingPile = chargingPileClient.getChargingPileById(tChargingGun.getChargingPileId()).getData(); //调用远程启动充电消息 PlatformStartCharging platformStartCharging = new PlatformStartCharging(); diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java index 75e28c4..858885d 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/TShoppingOrderServiceImpl.java @@ -25,6 +25,7 @@ import com.ruoyi.order.mapper.TShoppingOrderMapper; import com.ruoyi.order.service.TShoppingOrderRefundService; import com.ruoyi.order.service.TShoppingOrderService; +import com.ruoyi.order.util.RedisLock; import com.ruoyi.other.api.domain.TCoupon; import com.ruoyi.other.api.domain.TGoods; import com.ruoyi.other.api.feignClient.CouponClient; @@ -37,6 +38,8 @@ import com.ruoyi.payment.api.vo.AliQueryOrder; import com.ruoyi.payment.api.vo.NotifyV3PayDecodeRespBody; import io.seata.spring.annotation.GlobalTransactional; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; @@ -85,6 +88,9 @@ @Resource private TShoppingOrderRefundService shoppingOrderRefundService; + + @Autowired + public RedisTemplate redisTemplate; @@ -309,7 +315,7 @@ //退款金额 BigDecimal refundAmount = shoppingOrder.getPaymentAmount().subtract(bigDecimal); - + //先查询第三方订单状态订单是否退款 //支付方式(1=微信,2=支付宝) Integer paymentType = shoppingOrder.getPaymentType(); @@ -387,6 +393,44 @@ AjaxResult success = cancelShoppingOrderWxRefund(resp.getOutTradeNo(), resp.getTradeNo(), "SUCCESS", sdf1.format(new Date())); if(success.isSuccess()){ shoppingOrderRefundService.save(shoppingOrderRefund); + //商品 + if(shoppingOrder.getOrderType() == 1){ + //redis锁 和支付使用同一个锁 + RedisLock redisLock = new RedisLock(redisTemplate, "SHOPPING_GOODS_LOCK", 5, 30000); + try { + redisLock.lock(); + TGoods goods = goodsClient.getGoodsById(shoppingOrder.getGoodsId()).getData(); + Integer inventory = goods.getInventory(); + if(-1 != inventory){ + goods.setInventory(inventory + shoppingOrder.getPurchaseQuantity()); + goodsClient.updateGoods(goods); + } + }catch (Exception e){ + e.printStackTrace(); + }finally { + //解锁 + redisLock.unlock(); + } + } + //优惠券 + if(shoppingOrder.getOrderType() == 2){ + //redis锁 和支付使用同一个锁 + RedisLock redisLock = new RedisLock(redisTemplate, "SHOPPING_COUPON_LOCK", 5, 30000); + try { + redisLock.lock(); + TCoupon coupon = couponClient.getCouponById1(shoppingOrder.getCouponId()).getData(); + Integer inventory = coupon.getInventoryQuantity(); + if(-1 != inventory){ + coupon.setInventoryQuantity(inventory + shoppingOrder.getPurchaseQuantity()); + couponClient.updateCoupon(coupon); + } + }catch (Exception e){ + e.printStackTrace(); + }finally { + //解锁 + redisLock.unlock(); + } + } } } } @@ -415,26 +459,41 @@ TShoppingOrder shoppingOrder = this.getById(one.getShoppingOrderId()); //商品 if(shoppingOrder.getOrderType() == 1){ - // todo 需完善redis锁 //redis锁 和支付使用同一个锁 - TGoods goods = goodsClient.getGoodsById(shoppingOrder.getGoodsId()).getData(); - Integer inventory = goods.getInventory(); - if(-1 != inventory){ - goods.setInventory(inventory + shoppingOrder.getPurchaseQuantity()); - goodsClient.updateGoods(goods); + RedisLock redisLock = new RedisLock(redisTemplate, "SHOPPING_GOODS_LOCK", 5, 30000); + try { + redisLock.lock(); + TGoods goods = goodsClient.getGoodsById(shoppingOrder.getGoodsId()).getData(); + Integer inventory = goods.getInventory(); + if(-1 != inventory){ + goods.setInventory(inventory + shoppingOrder.getPurchaseQuantity()); + goodsClient.updateGoods(goods); + } + }catch (Exception e){ + e.printStackTrace(); + }finally { + //解锁 + redisLock.unlock(); } - //解锁 } //优惠券 if(shoppingOrder.getOrderType() == 2){ - //redis锁 - TCoupon coupon = couponClient.getCouponById1(shoppingOrder.getCouponId()).getData(); - Integer inventory = coupon.getInventoryQuantity(); - if(-1 != inventory){ - coupon.setInventoryQuantity(inventory + shoppingOrder.getPurchaseQuantity()); - couponClient.updateCoupon(coupon); + //redis锁 和支付使用同一个锁 + RedisLock redisLock = new RedisLock(redisTemplate, "SHOPPING_COUPON_LOCK", 5, 30000); + try { + redisLock.lock(); + TCoupon coupon = couponClient.getCouponById1(shoppingOrder.getCouponId()).getData(); + Integer inventory = coupon.getInventoryQuantity(); + if(-1 != inventory){ + coupon.setInventoryQuantity(inventory + shoppingOrder.getPurchaseQuantity()); + couponClient.updateCoupon(coupon); + } + }catch (Exception e){ + e.printStackTrace(); + }finally { + //解锁 + redisLock.unlock(); } - //解锁 } } return AjaxResult.success(); diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/RedisLock.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/RedisLock.java new file mode 100644 index 0000000..b9954c8 --- /dev/null +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/util/RedisLock.java @@ -0,0 +1,51 @@ +package com.ruoyi.order.util; + +import org.springframework.data.redis.core.RedisTemplate; + +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +/** + * @author zhibing.pu + * @Date 2024/9/26 18:43 + */ +public class RedisLock { + private RedisTemplate<String, String> redisTemplate; + private String lockKey; + private int expireTime; // 锁的超时时间 + private int timeout; // 获取锁的超时时间 + + + public RedisLock(RedisTemplate<String, String> redisTemplate, String lockKey, int expireTime, int timeout) { + this.redisTemplate = redisTemplate; + this.lockKey = lockKey; + this.expireTime = expireTime; + this.timeout = timeout; + } + + public boolean lock() { + String identifier = UUID.randomUUID().toString(); + long end = System.currentTimeMillis() + timeout; + while (System.currentTimeMillis() < end) { + if (redisTemplate.opsForValue().setIfAbsent(lockKey, identifier, expireTime, TimeUnit.SECONDS)) { + return true; + } + // 可以使用延时来减少CPU占用 + try { + Thread.sleep(100); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + return false; + } + + public boolean unlock() { + String identifier = redisTemplate.opsForValue().get(lockKey); + if (identifier != null && identifier.equals(UUID.randomUUID().toString())) { + redisTemplate.delete(lockKey); + return true; + } + return false; + } +} -- Gitblit v1.7.1