From 4f9707811eef19b7c9f59d587d05208b40a23b54 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期四, 10 七月 2025 17:35:02 +0800 Subject: [PATCH] 增加redis锁 --- UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 259 +++++++++++++++++++++++++++------------------------ 1 files changed, 139 insertions(+), 120 deletions(-) diff --git a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java index 7cc99cb..4120934 100644 --- a/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java +++ b/UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java @@ -672,136 +672,150 @@ */ @Override public ResultUtil cancleOrderPrivateCar(Integer id, Integer payType, Integer cancleId, Integer type) throws Exception { - OrderPrivateCar orderPrivateCar = this.selectById(id); - Integer uid = orderPrivateCar.getUserId(); - UserInfo userInfo = userInfoService.selectById(uid); - ResultUtil resultUtil = ResultUtil.success(""); - - if(null == orderPrivateCar){ - return ResultUtil.error("取消订单失败,订单信息有误", ""); - } - if(orderPrivateCar.getState() != 12){ - return ResultUtil.error("取消订单失败,不合法的操作", ""); - } - OrderCancel orderCancel = null; - if(null == cancleId || cancleId==0){ - orderCancel = orderCancelService.query(id, 1, null, null, 1); - }else{ - orderCancel = orderCancelService.selectById(cancleId); - } - - CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, orderPrivateCar.getCompanyId()); - if(null != query){ - String code = id + "_1_" + UUIDUtil.getRandomCode(3); - if(payType == 1){//微信支付 - if(ToolUtil.isEmpty(userInfo.getAppletsOpenId())){ - return ResultUtil.error("未授权微信,无法完成支付"); + boolean lock = redisUtil.lock(id + "_cancleOrder", 10); + if(!lock){ + int num1 = 1; + while (num1 <= 10){ + Thread.sleep(3000);//等待3秒 + lock = redisUtil.lock(id + "_cancleOrder", 10); + if(lock){ + break; + }else{ + num1++; } - orderCancel.setPayType(1); - orderCancelService.updateById(orderCancel); - resultUtil = payMoneyUtil.weixinpay("订单取消",id +"",code,query.getMoney()+"","/base/wxCancelOrderTaxi","JSAPI",userInfo.getAppletsOpenId()); - if(resultUtil.getCode()==200){ - paymentRecordService.saveData(1, null, null, id, 1, 1, query.getMoney(), null, 1, code);//添加预支付数据 - new Thread(()->{ - int num = 1; - int min = 5000; - int w = 0; - while (num <= 10) { - try { - w += min * num; - OrderPrivateCar orderPrivateCar1 = orderPrivateCarMapper.selectById(id); - if (orderPrivateCar1.getState() == 10) { - break; - } - ResultUtil<Map<String, Object>> resultUtil1 = payMoneyUtil.queryWXOrder("", code, "JSAPI"); - if (resultUtil1.getCode() == 200) { - /** - * SUCCESS--支付成功 - * REFUND--转入退款 - * NOTPAY--未支付 - * CLOSED--已关闭 - * REVOKED--已撤销(刷卡支付) - * USERPAYING--用户支付中 - * PAYERROR--支付失败(其他原因,如银行返回失败) - * ACCEPT--已接收,等待扣款 - */ - String s = resultUtil1.getData().get("trade_state").toString(); - if ("REFUND".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) { + } + } + ResultUtil resultUtil = ResultUtil.success(""); + try { + OrderPrivateCar orderPrivateCar = this.selectById(id); + Integer uid = orderPrivateCar.getUserId(); + UserInfo userInfo = userInfoService.selectById(uid); + + if(null == orderPrivateCar){ + return ResultUtil.error("取消订单失败,订单信息有误", ""); + } + if(orderPrivateCar.getState() != 12){ + return ResultUtil.error("取消订单失败,不合法的操作", ""); + } + OrderCancel orderCancel = null; + if(null == cancleId || cancleId==0){ + orderCancel = orderCancelService.query(id, 1, null, null, 1); + }else{ + orderCancel = orderCancelService.selectById(cancleId); + } + + CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, orderPrivateCar.getCompanyId()); + if(null != query){ + String code = id + "_1_" + UUIDUtil.getRandomCode(3); + if(payType == 1){//微信支付 + if(ToolUtil.isEmpty(userInfo.getAppletsOpenId())){ + return ResultUtil.error("未授权微信,无法完成支付"); + } + orderCancel.setPayType(1); + orderCancelService.updateById(orderCancel); + resultUtil = payMoneyUtil.weixinpay("订单取消",id +"",code,query.getMoney()+"","/base/wxCancelOrderTaxi","JSAPI",userInfo.getAppletsOpenId()); + if(resultUtil.getCode()==200){ + paymentRecordService.saveData(1, null, null, id, 1, 1, query.getMoney(), null, 1, code);//添加预支付数据 + new Thread(()->{ + int num = 1; + int min = 5000; + int w = 0; + while (num <= 10) { + try { + w += min * num; + OrderPrivateCar orderPrivateCar1 = orderPrivateCarMapper.selectById(id); + if (orderPrivateCar1.getState() == 10) { break; } - if ("SUCCESS".equals(s) || "ACCEPT".equals(s)) { - String transaction_id = resultUtil1.getData().get("transaction_id").toString(); - payCancelOrderPrivateCar(id, transaction_id, 1); - break; - } - if ("NOTPAY".equals(s) || "USERPAYING".equals(s)) { + ResultUtil<Map<String, Object>> resultUtil1 = payMoneyUtil.queryWXOrder("", code, "JSAPI"); + if (resultUtil1.getCode() == 200) { + /** + * SUCCESS--支付成功 + * REFUND--转入退款 + * NOTPAY--未支付 + * CLOSED--已关闭 + * REVOKED--已撤销(刷卡支付) + * USERPAYING--用户支付中 + * PAYERROR--支付失败(其他原因,如银行返回失败) + * ACCEPT--已接收,等待扣款 + */ + String s = resultUtil1.getData().get("trade_state").toString(); + if ("REFUND".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) { + break; + } + if ("SUCCESS".equals(s) || "ACCEPT".equals(s)) { + String transaction_id = resultUtil1.getData().get("transaction_id").toString(); + payCancelOrderPrivateCar(id, transaction_id, 1); + break; + } + if ("NOTPAY".equals(s) || "USERPAYING".equals(s)) { + Thread.sleep(w); + num++; + } + } else { Thread.sleep(w); num++; } - } else { - Thread.sleep(w); - num++; + }catch (Exception e){ + e.printStackTrace(); } - }catch (Exception e){ - e.printStackTrace(); } - } - }).start(); - - }else{ - resultUtil = ResultUtil.error("支付失败", ""); + }).start(); + + }else{ + resultUtil = ResultUtil.error("支付失败", ""); + } + } - - } - if(payType == 2){//支付宝支付 - orderCancel.setPayType(2); - orderCancelService.updateById(orderCancel); - resultUtil = payMoneyUtil.alipay("订单取消","订单取消", "",code,query.getMoney()+"","/base/aliCancelOrderTaxi"); - if(resultUtil.getCode()==200){ - paymentRecordService.saveData(1, null, null, id, 1, 2, query.getMoney(), null, 1, code);//添加预支付数据 - resultUtil = resultUtil; - }else{ - resultUtil = ResultUtil.error("支付失败", ""); + if(payType == 2){//支付宝支付 + orderCancel.setPayType(2); + orderCancelService.updateById(orderCancel); + resultUtil = payMoneyUtil.alipay("订单取消","订单取消", "",code,query.getMoney()+"","/base/aliCancelOrderTaxi"); + if(resultUtil.getCode()==200){ + paymentRecordService.saveData(1, null, null, id, 1, 2, query.getMoney(), null, 1, code);//添加预支付数据 + resultUtil = resultUtil; + }else{ + resultUtil = ResultUtil.error("支付失败", ""); + } } - } - if(payType == 3){//余额支付 - if(userInfo.getBalance() != null && userInfo.getBalance() < query.getMoney()){ - return ResultUtil.error("余额不足,无法完成支付", ""); - } - - userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(query.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - //添加交易明细 - transactionDetailsService.saveData(uid, "取消订单", query.getMoney(), 2, 1, 1, 1, id); - userInfoService.updateById(userInfo); - - //解除小号绑定 + if(payType == 3){//余额支付 + if(userInfo.getBalance() != null && userInfo.getBalance() < query.getMoney()){ + return ResultUtil.error("余额不足,无法完成支付", ""); + } + + userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(query.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + //添加交易明细 + transactionDetailsService.saveData(uid, "取消订单", query.getMoney(), 2, 1, 1, 1, id); + userInfoService.updateById(userInfo); + + //解除小号绑定 // if(orderPrivateCar.getBindId() != null){ // chinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId(),orderPrivateCar.getTelX()); // } - - orderPrivateCar.setState(10); - orderPrivateCar.setTelX(""); - orderPrivateCar.setBindId(""); - this.updateById(orderPrivateCar); - - orderCancel.setState(2); - orderCancel.setPayType(3); - orderCancelService.updateById(orderCancel); - - //添加已收入明细 - incomeService.saveData(1, orderPrivateCar.getCompanyId(), 3, orderPrivateCar.getId(), 1, query.getMoney()); - //添加已收入明细 - Company company = companyService.selectById(orderPrivateCar.getCompanyId()); - Double taxi = company.getSpeMoney(); - BigDecimal c =new BigDecimal(query.getMoney());//司机收入 - incomeService.saveData(2, orderPrivateCar.getDriverId(), 3, orderPrivateCar.getId(), 1, c.doubleValue()); - Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); - driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driverService.updateById(driver); - - this.deleteTask(id);//删除定时任务 + + orderPrivateCar.setState(10); + orderPrivateCar.setTelX(""); + orderPrivateCar.setBindId(""); + this.updateById(orderPrivateCar); + + orderCancel.setState(2); + orderCancel.setPayType(3); + orderCancelService.updateById(orderCancel); + + //添加已收入明细 + incomeService.saveData(1, orderPrivateCar.getCompanyId(), 3, orderPrivateCar.getId(), 1, query.getMoney()); + //添加已收入明细 + Company company = companyService.selectById(orderPrivateCar.getCompanyId()); + Double taxi = company.getSpeMoney(); + BigDecimal c =new BigDecimal(query.getMoney());//司机收入 + incomeService.saveData(2, orderPrivateCar.getDriverId(), 3, orderPrivateCar.getId(), 1, c.doubleValue()); + Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); + driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driverService.updateById(driver); + + this.deleteTask(id);//删除定时任务 // new Thread(new Runnable() { // @Override @@ -809,10 +823,15 @@ // pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); // } // }).start(); - - //添加消息 - systemNoticeService.addSystemNotice(1, "您已使用余额成功支付取消订单费用,谢谢使用!", orderPrivateCar.getUserId(), 1); + + //添加消息 + systemNoticeService.addSystemNotice(1, "您已使用余额成功支付取消订单费用,谢谢使用!", orderPrivateCar.getUserId(), 1); + } } + }catch (Exception e){ + e.printStackTrace(); + }finally { + redisUtil.unlock(id + "_cancleOrder"); } return resultUtil; } -- Gitblit v1.7.1