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锁 --- DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java | 292 +++++++++++++++++++++++++++++++--------------------------- 1 files changed, 157 insertions(+), 135 deletions(-) diff --git a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java index 7d6f9f5..651e9bd 100644 --- a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java +++ b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java @@ -84,6 +84,8 @@ @Value("${callbackPath}") private String callbackPath; + @Autowired + private RedisUtil redisUtil; /** @@ -94,142 +96,162 @@ */ @Override public ResultUtil saveData(Reassign reassign, Integer uid, Integer type) throws Exception { - type = null == type ? 2 : type;//现目前微信只支持小程序支付 - String content = reassign.getRemark(); - if(ToolUtil.isNotEmpty(content)){ - List<SensitiveWords> sensitiveWords = sensitiveWordsMapper.selectList(null); - for(SensitiveWords s : sensitiveWords){ - content = content.replaceAll(s.getContent(), "***"); + boolean lock = redisUtil.lock(reassign.getOrderId() + "_reassign", 10); + if(!lock){ + int num1 = 1; + while (num1 <= 10){ + Thread.sleep(3000);//等待3秒 + lock = redisUtil.lock(reassign.getOrderId() + "_reassign", 10); + if(lock){ + break; + }else{ + num1++; + } } } - reassign.setRemark(content); + ResultUtil resultUtil = ResultUtil.success(); - Driver driver = driverService.selectById(uid); - // TODO: 2020/11/12 司机端不控制重复提交(如果重复提交且未支付,直接将之前的数据删除) + try { + type = null == type ? 2 : type;//现目前微信只支持小程序支付 + String content = reassign.getRemark(); + if(ToolUtil.isNotEmpty(content)){ + List<SensitiveWords> sensitiveWords = sensitiveWordsMapper.selectList(null); + for(SensitiveWords s : sensitiveWords){ + content = content.replaceAll(s.getContent(), "***"); + } + } + reassign.setRemark(content); + Driver driver = driverService.selectById(uid); + // TODO: 2020/11/12 司机端不控制重复提交(如果重复提交且未支付,直接将之前的数据删除) // Reassign query = reassignMapper.query(uid, null, null, null, 1); // if(null != query){ // return ResultUtil.error("有未完成支付的改派申请"); // } - Reassign query = reassignMapper.query(uid, null, reassign.getOrderId(), reassign.getOrderType(), 1); - if(null != query){ + Reassign query = reassignMapper.query(uid, null, reassign.getOrderId(), reassign.getOrderType(), 1); + if(null != query){ // return ResultUtil.error("不能重复提交申请"); - reassignMapper.deleteById(query.getId()); - } - query = reassignMapper.query(uid, null, reassign.getOrderId(), reassign.getOrderType(), 2); - if(null != query){ - return ResultUtil.error("您提交的申请正在处理中"); - } - - //获取支付金额 - Double aDouble = orderService.queryReassignMoney(reassign.getOrderId(), reassign.getOrderType()); - reassign.setMoney(aDouble); - reassign.setOriginalDriverId(uid); - reassign.setOriginalCarId(driver.getCarId()); - reassign.setInsertTime(new Date()); - this.insert(reassign); - - systemNoticeService.addSystemNotice(2, "您的改派申请已成功提交,我们会尽快为你处理!", uid); - - //开始支付 - if(null != reassign.getPayType()){ - if(reassign.getPayType() == 1){//微信支付 - reassign.setState(1); - ResultUtil resultUtil1 = payMoneyUtil.weixinpay("改派订单",reassign.getId()+"",reassign.getId() + "_" + reassign.getOrderType(),aDouble+"","/base/wxReassign","APP", ""); - //Map<String, String> map = icbcPayUtil.placeAnOrder(reassign.getId() + "_" + reassign.getOrderType(), 9, 5, uid.toString(), "改派订单", aDouble, callbackPath + "/base/wxReassign", "", type, driver.getAppletsOpenId()); - if(resultUtil1.getCode()==200){ - paymentRecordService.saveData(1, null, null, reassign.getOrderId(), reassign.getOrderType(), 1, aDouble, null, 1);//添加预支付数据 - resultUtil = resultUtil1; - }else{ - resultUtil = ResultUtil.error("获取支付信息失败", ""); + reassignMapper.deleteById(query.getId()); + } + query = reassignMapper.query(uid, null, reassign.getOrderId(), reassign.getOrderType(), 2); + if(null != query){ + return ResultUtil.error("您提交的申请正在处理中"); + } + + //获取支付金额 + Double aDouble = orderService.queryReassignMoney(reassign.getOrderId(), reassign.getOrderType()); + reassign.setMoney(aDouble); + reassign.setOriginalDriverId(uid); + reassign.setOriginalCarId(driver.getCarId()); + reassign.setInsertTime(new Date()); + this.insert(reassign); + + systemNoticeService.addSystemNotice(2, "您的改派申请已成功提交,我们会尽快为你处理!", uid); + + //开始支付 + if(null != reassign.getPayType()){ + if(reassign.getPayType() == 1){//微信支付 + reassign.setState(1); + ResultUtil resultUtil1 = payMoneyUtil.weixinpay("改派订单",reassign.getId()+"",reassign.getId() + "_" + reassign.getOrderType(),aDouble+"","/base/wxReassign","APP", ""); + //Map<String, String> map = icbcPayUtil.placeAnOrder(reassign.getId() + "_" + reassign.getOrderType(), 9, 5, uid.toString(), "改派订单", aDouble, callbackPath + "/base/wxReassign", "", type, driver.getAppletsOpenId()); + if(resultUtil1.getCode()==200){ + paymentRecordService.saveData(1, null, null, reassign.getOrderId(), reassign.getOrderType(), 1, aDouble, null, 1);//添加预支付数据 + resultUtil = resultUtil1; + }else{ + resultUtil = ResultUtil.error("获取支付信息失败", ""); + } + } + if(reassign.getPayType() == 2){//支付宝 + reassign.setState(1); + ResultUtil resultUtil1 = payMoneyUtil.alipay("改派订单","改派订单",reassign.getId() + "_" + reassign.getOrderType(),aDouble+"","/base/aliReassign", ""); + //Map<String, String> map = icbcPayUtil.placeAnOrder(reassign.getId() + "_" + reassign.getOrderType(), 10, 5, uid.toString(), "改派订单", aDouble, callbackPath + "/base/aliReassign", "", 2, ""); + if(resultUtil1.getCode()==200){ + paymentRecordService.saveData(1, null, null, reassign.getOrderId(), reassign.getOrderType(), 2, aDouble, null, 1);//添加预支付数据 + resultUtil = resultUtil1; + }else{ + resultUtil = ResultUtil.error("获取支付信息失败", ""); + } + } + if(reassign.getPayType() == 3){//余额 + reassign.setState(2); + reassign.setPayTime(new Date()); + reassignMapper.updateById(reassign); + + Double balance = driver.getBalance(); + Double laveBusinessMoney = driver.getLaveBusinessMoney(); + Double laveActivityMoney = driver.getLaveActivityMoney(); + if(null == balance || balance < aDouble){ + throw new SystemException("账户余额不足"); + } + if(null != laveBusinessMoney && laveBusinessMoney.compareTo(aDouble) >= 0){ + driver.setLaveBusinessMoney(new BigDecimal(laveBusinessMoney).subtract(new BigDecimal(aDouble)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + }else if(null != laveActivityMoney && laveActivityMoney.compareTo(aDouble) >= 0){ + driver.setLaveActivityMoney(new BigDecimal(laveActivityMoney).subtract(new BigDecimal(aDouble)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + } + driver.setBalance(new BigDecimal(balance).subtract(new BigDecimal(aDouble)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driverService.updateById(driver); + //添加交易明细 + transactionDetailsService.saveData(uid, "司机改派支付", aDouble, 2, 1, 2, reassign.getOrderType(), reassign.getOrderId()); + + + //修改改派通知状态 + switch (reassign.getOrderType()){ + case 1: + OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(reassign.getOrderId()); + orderPrivateCar.setOldState(orderPrivateCar.getState()); + orderPrivateCar.setState(11); + orderPrivateCar.setReassignNotice(2); + orderPrivateCarService.updateById(orderPrivateCar); + + //添加已收入明细 + incomeService.saveData(1, orderPrivateCar.getCompanyId(), 4, orderPrivateCar.getId(), 1, reassign.getMoney()); + break; + case 2: + OrderTaxi orderTaxi = orderTaxiService.selectById(reassign.getOrderId()); + orderTaxi.setOldState(orderTaxi.getState()); + orderTaxi.setState(11); + orderTaxi.setReassignNotice(2); + orderTaxiService.updateById(orderTaxi); + + //添加已收入明细 + incomeService.saveData(1, orderTaxi.getCompanyId(), 4, orderTaxi.getId(), 2, reassign.getMoney()); + break; + case 4: + OrderLogistics orderLogistics = orderLogisticsService.selectById(reassign.getOrderId()); + orderLogistics.setOldState(orderLogistics.getState()); + orderLogistics.setState(11); + orderLogistics.setReassignNotice(2); + orderLogisticsService.updateById(orderLogistics); + + //添加已收入明细 + incomeService.saveData(1, orderLogistics.getCompanyId(), 4, orderLogistics.getId(), orderLogistics.getType(), reassign.getMoney()); + break; + case 5: + OrderLogistics orderLogistics1 = orderLogisticsService.selectById(reassign.getOrderId()); + orderLogistics1.setOldState(orderLogistics1.getState()); + orderLogistics1.setState(11); + orderLogistics1.setReassignNotice(2); + orderLogisticsService.updateById(orderLogistics1); + + //添加已收入明细 + incomeService.saveData(1, orderLogistics1.getCompanyId(), 4, orderLogistics1.getId(), orderLogistics1.getType(), reassign.getMoney()); + break; + } + + systemNoticeService.addSystemNotice(2, "您已使用余额成功支付改派申请费用!", uid); + //开始推送调度单 + Map<String, String> map = new HashMap<>(); + map.put("orderId", reassign.getOrderId().toString()); + map.put("orderType", reassign.getOrderType().toString()); + List<Dispatch> dispatches = dispatchMapper.queryDispatchs(driver.getFranchiseeId() == null ? driver.getCompanyId() : driver.getFranchiseeId(), 1); +// for(Dispatch dispatch : dispatches){ +// jgPushUtil.push(2,"有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId()); +// } } } - if(reassign.getPayType() == 2){//支付宝 - reassign.setState(1); - ResultUtil resultUtil1 = payMoneyUtil.alipay("改派订单","改派订单",reassign.getId() + "_" + reassign.getOrderType(),aDouble+"","/base/aliReassign", ""); - //Map<String, String> map = icbcPayUtil.placeAnOrder(reassign.getId() + "_" + reassign.getOrderType(), 10, 5, uid.toString(), "改派订单", aDouble, callbackPath + "/base/aliReassign", "", 2, ""); - if(resultUtil1.getCode()==200){ - paymentRecordService.saveData(1, null, null, reassign.getOrderId(), reassign.getOrderType(), 2, aDouble, null, 1);//添加预支付数据 - resultUtil = resultUtil1; - }else{ - resultUtil = ResultUtil.error("获取支付信息失败", ""); - } - } - if(reassign.getPayType() == 3){//余额 - reassign.setState(2); - reassign.setPayTime(new Date()); - reassignMapper.updateById(reassign); - - Double balance = driver.getBalance(); - Double laveBusinessMoney = driver.getLaveBusinessMoney(); - Double laveActivityMoney = driver.getLaveActivityMoney(); - if(null == balance || balance < aDouble){ - throw new SystemException("账户余额不足"); - } - if(null != laveBusinessMoney && laveBusinessMoney.compareTo(aDouble) >= 0){ - driver.setLaveBusinessMoney(new BigDecimal(laveBusinessMoney).subtract(new BigDecimal(aDouble)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - }else if(null != laveActivityMoney && laveActivityMoney.compareTo(aDouble) >= 0){ - driver.setLaveActivityMoney(new BigDecimal(laveActivityMoney).subtract(new BigDecimal(aDouble)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - } - driver.setBalance(new BigDecimal(balance).subtract(new BigDecimal(aDouble)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driverService.updateById(driver); - //添加交易明细 - transactionDetailsService.saveData(uid, "司机改派支付", aDouble, 2, 1, 2, reassign.getOrderType(), reassign.getOrderId()); - - - //修改改派通知状态 - switch (reassign.getOrderType()){ - case 1: - OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(reassign.getOrderId()); - orderPrivateCar.setOldState(orderPrivateCar.getState()); - orderPrivateCar.setState(11); - orderPrivateCar.setReassignNotice(2); - orderPrivateCarService.updateById(orderPrivateCar); - - //添加已收入明细 - incomeService.saveData(1, orderPrivateCar.getCompanyId(), 4, orderPrivateCar.getId(), 1, reassign.getMoney()); - break; - case 2: - OrderTaxi orderTaxi = orderTaxiService.selectById(reassign.getOrderId()); - orderTaxi.setOldState(orderTaxi.getState()); - orderTaxi.setState(11); - orderTaxi.setReassignNotice(2); - orderTaxiService.updateById(orderTaxi); - - //添加已收入明细 - incomeService.saveData(1, orderTaxi.getCompanyId(), 4, orderTaxi.getId(), 2, reassign.getMoney()); - break; - case 4: - OrderLogistics orderLogistics = orderLogisticsService.selectById(reassign.getOrderId()); - orderLogistics.setOldState(orderLogistics.getState()); - orderLogistics.setState(11); - orderLogistics.setReassignNotice(2); - orderLogisticsService.updateById(orderLogistics); - - //添加已收入明细 - incomeService.saveData(1, orderLogistics.getCompanyId(), 4, orderLogistics.getId(), orderLogistics.getType(), reassign.getMoney()); - break; - case 5: - OrderLogistics orderLogistics1 = orderLogisticsService.selectById(reassign.getOrderId()); - orderLogistics1.setOldState(orderLogistics1.getState()); - orderLogistics1.setState(11); - orderLogistics1.setReassignNotice(2); - orderLogisticsService.updateById(orderLogistics1); - - //添加已收入明细 - incomeService.saveData(1, orderLogistics1.getCompanyId(), 4, orderLogistics1.getId(), orderLogistics1.getType(), reassign.getMoney()); - break; - } - - systemNoticeService.addSystemNotice(2, "您已使用余额成功支付改派申请费用!", uid); - //开始推送调度单 - Map<String, String> map = new HashMap<>(); - map.put("orderId", reassign.getOrderId().toString()); - map.put("orderType", reassign.getOrderType().toString()); - List<Dispatch> dispatches = dispatchMapper.queryDispatchs(driver.getFranchiseeId() == null ? driver.getCompanyId() : driver.getFranchiseeId(), 1); - for(Dispatch dispatch : dispatches){ - jgPushUtil.push(2,"有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId()); - } - } + }catch (Exception e){ + e.printStackTrace(); + }finally { + redisUtil.unlock(reassign.getOrderId() + "_reassign"); } return resultUtil; } @@ -351,9 +373,9 @@ map.put("orderId", reassign.getOrderId().toString()); map.put("orderType", reassign.getOrderType().toString()); List<Dispatch> dispatches = dispatchMapper.queryDispatchs(driver.getFranchiseeId() == null ? driver.getCompanyId() : driver.getFranchiseeId(), 1); - for(Dispatch dispatch : dispatches){ - jgPushUtil.push(2,"有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId()); - } +// for(Dispatch dispatch : dispatches){ +// jgPushUtil.push(2,"有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId()); +// } } } return resultUtil; @@ -406,9 +428,9 @@ map.put("orderId", reassign.getOrderId().toString()); map.put("orderType", reassign.getOrderType().toString()); List<Dispatch> dispatches = dispatchMapper.queryDispatchs(driver.getFranchiseeId() == null ? driver.getCompanyId() : driver.getFranchiseeId(), 1); - for(Dispatch dispatch : dispatches){ - jgPushUtil.push(2,"有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId()); - } +// for(Dispatch dispatch : dispatches){ +// jgPushUtil.push(2,"有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId()); +// } } query.setState(2); query.setCode(order_id); @@ -498,9 +520,9 @@ map.put("orderId", reassign.getOrderId().toString()); map.put("orderType", reassign.getOrderType().toString()); List<Dispatch> dispatches = dispatchMapper.queryDispatchs(driver.getFranchiseeId() == null ? driver.getCompanyId() : driver.getFranchiseeId(), 1); - for(Dispatch dispatch : dispatches){ - jgPushUtil.push(2,"有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId()); - } +// for(Dispatch dispatch : dispatches){ +// jgPushUtil.push(2,"有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId()); +// } }else{ System.err.println("预支付数据异常(orderId = " + id + ")"); } -- Gitblit v1.7.1