Răsfoiți Sursa

费用审核添加锁

785834757 2 ani în urmă
părinte
comite
0cffe47c6e

+ 1 - 2
src/main/java/com/ydtech/modules/fnc/controller/CarSettleController.java

@@ -90,7 +90,6 @@ public class CarSettleController extends BaseController {
     public HttpResult auditFee(@RequestBody @Valid AuditOrderFeeVo auditOrderFeeVo) {
 //        订单号
         String orderNo = auditOrderFeeVo.getOrderNo();
-
         //查询改订单是已审核
         List<InsFeeAudit> feeList = insFeeAuditService.lambdaQuery()
                 .eq(InsFeeAudit::getOrderno, orderNo)
@@ -120,7 +119,7 @@ public class CarSettleController extends BaseController {
                 return HttpResult.error("系统异常");
             }
 
-            return HttpResult.ok();
+            return HttpResult.ok("审核成功");
         } else {
             return HttpResult.error("订单号有误-未承保");
         }

+ 145 - 125
src/main/java/com/ydtech/modules/fnc/service/impl/InsFeeAuditServiceImpl.java

@@ -42,6 +42,8 @@ import com.ydtech.utils.DateUtil;
 import com.ydtech.utils.StringUtils;
 import com.ydtech.utils.idgen.IdGenerate;
 import org.apache.commons.lang3.ObjectUtils;
+import org.redisson.Redisson;
+import org.redisson.api.RLock;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -54,6 +56,7 @@ import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 /**
  * <p>
@@ -99,6 +102,9 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
     @Autowired
     private PtlAgreementService ptlAgreementService;
 
+    @Autowired
+    private Redisson redisson;
+
     @Resource
     private InsFeeOrderNewDistributionService insFeeOrderNewDistributionService;
 
@@ -120,143 +126,157 @@ public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFe
     @Override
     @Transactional
     public void feeAudit(String orderNo, String insOrderNo, boolean isAutoAudit, String auditStatus) {
-        //添加费用审核表及轨迹信息
-        InsFeeAudit insFeeAudit = saveInsFeeAuditAndHistory(orderNo, insOrderNo, isAutoAudit, auditStatus);
-
-        InsOrders order = insOrdersMapper.selectById(orderNo);
-        InsAreaCompany insAreaCompany = insAreaCompanyMapper.selectById(insFeeAudit.getInsOrderNo());
-
-
 
-        //获取该订单的费用
-        InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getOne(new LambdaQueryWrapper<InsFeeOrderNew>()
-                .eq(InsFeeOrderNew::getInsOrderNo, insFeeAudit.getInsOrderNo()));
-
-        //生成机构费用
-        gene_deptfee(order, insFeeOrderNew, insAreaCompany);
-        //结算费用生成
-        insPlyIncomeService.saveBalanceNew(order, insFeeOrderNew, insAreaCompany);
-
-        //生成  用户账户表  数据
-        if (StringUtils.isNotEmpty(order.getUserid())) {
-            //用戶賬戶表
-            SysUserAccount sysUserAccount = new SysUserAccount();
-            //add  by  hxl  2024-05-07  begin   ==========
-            //判断当前用户是否是出单员,如果是直接给团队长结算   角色id为19为出单员
-            String userId = "";
-            SysUserBaseVO sysUserBaseVO = sysUserService.selectUserById(order.getUserid());
-            if ("19".equals(sysUserBaseVO.getRoleId())) {
-                //查找该机构的团队长
-                userId = sysUserService.findTDZUserIdByDeptId(sysUserBaseVO.getDeptId());
-                if (userId == null || "".equals(userId)) {
-                    throw new SystemException("出单员" + sysUserBaseVO.getName() + "所在机构缺少团队长,请设置!!!");
-                }
-
-            } else {
-                userId = order.getUserid();
+        RLock locked = redisson.getLock("feeAudit."+insOrderNo);
+        try {
+            boolean isLock = locked.tryLock(60, 10, TimeUnit.SECONDS);
+            if(!isLock){
+                throw new SystemException("当前业务繁忙,请稍后重试\n");
             }
-            sysUserAccount.setUserId(userId);
-            // add by  hxl   2024-05-07  end ==================
-            if (ObjectUtils.isNotEmpty(insFeeOrderNew)) {
-
-                //用户出口手续费
-                BigDecimal totalPremiumAmount = new BigDecimal(0);
-                totalPremiumAmount = totalPremiumAmount.add(insFeeOrderNew.getJqExportSuperviseCostsPremiums())
-                        .add(insFeeOrderNew.getSyExportSuperviseCostsPremiums()).add(insFeeOrderNew.getNoExportSuperviseCostsPremiums());
-
-                //用户出口跟单费
-                BigDecimal totalOtherPremiumAmount = new BigDecimal(0);
-                totalOtherPremiumAmount =
-                        totalOtherPremiumAmount.add(insFeeOrderNew.getJqExportOtherCostsPremiums()).add(insFeeOrderNew.getSyExportOtherCostsPremiums()).add(insFeeOrderNew.getNoExportOtherCostsPremiums());
-                //用戶
-                //算佣金
-                this.countUserAmount(insFeeOrderNew, insAreaCompany.getId());
-                sysUserAccount.setHandlingFee(totalPremiumAmount);
-                sysUserAccount.setDocumentary(totalOtherPremiumAmount);
-                sysUserAccount.setDocumentaryStatus("2");  // 收入
-                sysUserAccount.setSuborderId(insAreaCompany.getId());  // 订单Id
-                sysUserAccountService.addOrUpdate(sysUserAccount);
-                if (insFeeOrderNew.getDistributionStatus() !=null) {
-                    createInsFeeOrderNewDistribution(insFeeOrderNew, insAreaCompany, order, order.getUserid(),BigDecimal.ZERO, BigDecimal.ZERO, "0");
-                    if (insFeeOrderNew.getFirstLevelUserId() != null) {
-                        createInsFeeOrderNewDistribution(insFeeOrderNew, insAreaCompany, order,
-                                insFeeOrderNew.getFirstLevelUserId(), insFeeOrderNew.getFirstDetailProportion(),
-                                insFeeOrderNew.getFirstDetailPremiums(), "1");
-                    }
-                    if (insFeeOrderNew.getTwoLevelUserId() != null) {
-                        createInsFeeOrderNewDistribution(insFeeOrderNew, insAreaCompany, order,
-                                insFeeOrderNew.getTwoLevelUserId(), insFeeOrderNew.getSecondDetailProportion(),
-                                insFeeOrderNew.getSecondDetailPremiums(), "2");
-                    }
-                    if (insFeeOrderNew.getThreeLevelUserId() != null) {
-                        createInsFeeOrderNewDistribution(insFeeOrderNew, insAreaCompany, order,
-                                insFeeOrderNew.getThreeLevelUserId(), insFeeOrderNew.getThirdDetailProportion(),
-                                insFeeOrderNew.getThirdDetailPremiums(), "3");
+            //添加费用审核表及轨迹信息
+            InsFeeAudit insFeeAudit = saveInsFeeAuditAndHistory(orderNo, insOrderNo, isAutoAudit, auditStatus);
+
+            InsOrders order = insOrdersMapper.selectById(orderNo);
+            InsAreaCompany insAreaCompany = insAreaCompanyMapper.selectById(insFeeAudit.getInsOrderNo());
+
+
+            //获取该订单的费用
+            InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getOne(new LambdaQueryWrapper<InsFeeOrderNew>()
+                    .eq(InsFeeOrderNew::getInsOrderNo, insFeeAudit.getInsOrderNo()));
+
+            //生成机构费用
+            gene_deptfee(order, insFeeOrderNew, insAreaCompany);
+            //结算费用生成
+            insPlyIncomeService.saveBalanceNew(order, insFeeOrderNew, insAreaCompany);
+
+            //生成  用户账户表  数据
+            if (StringUtils.isNotEmpty(order.getUserid())) {
+                //用戶賬戶表
+                SysUserAccount sysUserAccount = new SysUserAccount();
+                //add  by  hxl  2024-05-07  begin   ==========
+                //判断当前用户是否是出单员,如果是直接给团队长结算   角色id为19为出单员
+                String userId = "";
+                SysUserBaseVO sysUserBaseVO = sysUserService.selectUserById(order.getUserid());
+                if ("19".equals(sysUserBaseVO.getRoleId())) {
+                    //查找该机构的团队长
+                    userId = sysUserService.findTDZUserIdByDeptId(sysUserBaseVO.getDeptId());
+                    if (userId == null || "".equals(userId)) {
+                        throw new SystemException("出单员" + sysUserBaseVO.getName() + "所在机构缺少团队长,请设置!!!");
                     }
+
+                } else {
+                    userId = order.getUserid();
                 }
+                sysUserAccount.setUserId(userId);
+                // add by  hxl   2024-05-07  end ==================
+                if (ObjectUtils.isNotEmpty(insFeeOrderNew)) {
+
+                    //用户出口手续费
+                    BigDecimal totalPremiumAmount = new BigDecimal(0);
+                    totalPremiumAmount = totalPremiumAmount.add(insFeeOrderNew.getJqExportSuperviseCostsPremiums())
+                            .add(insFeeOrderNew.getSyExportSuperviseCostsPremiums()).add(insFeeOrderNew.getNoExportSuperviseCostsPremiums());
+
+                    //用户出口跟单费
+                    BigDecimal totalOtherPremiumAmount = new BigDecimal(0);
+                    totalOtherPremiumAmount =
+                            totalOtherPremiumAmount.add(insFeeOrderNew.getJqExportOtherCostsPremiums()).add(insFeeOrderNew.getSyExportOtherCostsPremiums()).add(insFeeOrderNew.getNoExportOtherCostsPremiums());
+                    //用戶
+                    //算佣金
+                    this.countUserAmount(insFeeOrderNew, insAreaCompany.getId());
+                    sysUserAccount.setHandlingFee(totalPremiumAmount);
+                    sysUserAccount.setDocumentary(totalOtherPremiumAmount);
+                    sysUserAccount.setDocumentaryStatus("2");  // 收入
+                    sysUserAccount.setSuborderId(insAreaCompany.getId());  // 订单Id
+                    sysUserAccountService.addOrUpdate(sysUserAccount);
+                    if (insFeeOrderNew.getDistributionStatus() != null) {
+                        createInsFeeOrderNewDistribution(insFeeOrderNew, insAreaCompany, order, order.getUserid(), BigDecimal.ZERO, BigDecimal.ZERO, "0");
+                        if (insFeeOrderNew.getFirstLevelUserId() != null) {
+                            createInsFeeOrderNewDistribution(insFeeOrderNew, insAreaCompany, order,
+                                    insFeeOrderNew.getFirstLevelUserId(), insFeeOrderNew.getFirstDetailProportion(),
+                                    insFeeOrderNew.getFirstDetailPremiums(), "1");
+                        }
+                        if (insFeeOrderNew.getTwoLevelUserId() != null) {
+                            createInsFeeOrderNewDistribution(insFeeOrderNew, insAreaCompany, order,
+                                    insFeeOrderNew.getTwoLevelUserId(), insFeeOrderNew.getSecondDetailProportion(),
+                                    insFeeOrderNew.getSecondDetailPremiums(), "2");
+                        }
+                        if (insFeeOrderNew.getThreeLevelUserId() != null) {
+                            createInsFeeOrderNewDistribution(insFeeOrderNew, insAreaCompany, order,
+                                    insFeeOrderNew.getThreeLevelUserId(), insFeeOrderNew.getThirdDetailProportion(),
+                                    insFeeOrderNew.getThirdDetailPremiums(), "3");
+                        }
+                    }
 
 
-                String deptid = insFeeOrderNew.getDeptId();
-                // 定义一个数组来存储各级机构的管理费
-                BigDecimal[] jqDeptPremiumsLevels = {insFeeOrderNew.getJqDeptPremiumsLevel1(), insFeeOrderNew.getJqDeptPremiumsLevel2(),
-                        insFeeOrderNew.getJqDeptPremiumsLevel3(), insFeeOrderNew.getJqDeptPremiumsLevel4(),
-                        insFeeOrderNew.getJqDeptPremiumsLevel5()};
-                BigDecimal[] syDeptPremiumsLevels = {insFeeOrderNew.getSyDeptPremiumsLevel1(), insFeeOrderNew.getSyDeptPremiumsLevel2(),
-                        insFeeOrderNew.getSyDeptPremiumsLevel3(), insFeeOrderNew.getSyDeptPremiumsLevel4(),
-                        insFeeOrderNew.getSyDeptPremiumsLevel5()};
-                BigDecimal[] noDeptPremiumsLevels = {insFeeOrderNew.getNoDeptPremiumsLevel1(), insFeeOrderNew.getNoDeptPremiumsLevel2(),
-                        insFeeOrderNew.getNoDeptPremiumsLevel3(), insFeeOrderNew.getNoDeptPremiumsLevel4(),
-                        insFeeOrderNew.getNoDeptPremiumsLevel5()};
-
-                for (int i = 1; i <= 5; i++) {
-                    // 根据循环次数确定机构ID的长度,第五级为11
-                    String levelDeptId = deptid.substring(0, (i == 5) ? 11 : i * 2);
-                    // 获取对应级别的机构信息
-                    SysDeptAccount levelSysDeptAccount = sysDeptAccountService.getOne(new LambdaQueryWrapper<SysDeptAccount>()
-                            .eq(SysDeptAccount::getDeptId, levelDeptId));
-
-                    // 初始化管理费总额为0
-                    BigDecimal sumManagementFee = BigDecimal.ZERO;
-
-                    // 根据分销等级和分销用户情况计算分销费用
-                    BigDecimal distributionFee = BigDecimal.ZERO;
-                    if (i == 5) {
-                        if (insFeeOrderNew.getTwoLevelUserId() == null) {
-                            distributionFee = distributionFee.add(insFeeOrderNew.getSecondDetailPremiums());
+                    String deptid = insFeeOrderNew.getDeptId();
+                    // 定义一个数组来存储各级机构的管理费
+                    BigDecimal[] jqDeptPremiumsLevels = {insFeeOrderNew.getJqDeptPremiumsLevel1(), insFeeOrderNew.getJqDeptPremiumsLevel2(),
+                            insFeeOrderNew.getJqDeptPremiumsLevel3(), insFeeOrderNew.getJqDeptPremiumsLevel4(),
+                            insFeeOrderNew.getJqDeptPremiumsLevel5()};
+                    BigDecimal[] syDeptPremiumsLevels = {insFeeOrderNew.getSyDeptPremiumsLevel1(), insFeeOrderNew.getSyDeptPremiumsLevel2(),
+                            insFeeOrderNew.getSyDeptPremiumsLevel3(), insFeeOrderNew.getSyDeptPremiumsLevel4(),
+                            insFeeOrderNew.getSyDeptPremiumsLevel5()};
+                    BigDecimal[] noDeptPremiumsLevels = {insFeeOrderNew.getNoDeptPremiumsLevel1(), insFeeOrderNew.getNoDeptPremiumsLevel2(),
+                            insFeeOrderNew.getNoDeptPremiumsLevel3(), insFeeOrderNew.getNoDeptPremiumsLevel4(),
+                            insFeeOrderNew.getNoDeptPremiumsLevel5()};
+
+                    for (int i = 1; i <= 5; i++) {
+                        // 根据循环次数确定机构ID的长度,第五级为11
+                        String levelDeptId = deptid.substring(0, (i == 5) ? 11 : i * 2);
+                        // 获取对应级别的机构信息
+                        SysDeptAccount levelSysDeptAccount = sysDeptAccountService.getOne(new LambdaQueryWrapper<SysDeptAccount>()
+                                .eq(SysDeptAccount::getDeptId, levelDeptId));
+
+                        // 初始化管理费总额为0
+                        BigDecimal sumManagementFee = BigDecimal.ZERO;
+
+                        // 根据分销等级和分销用户情况计算分销费用
+                        BigDecimal distributionFee = BigDecimal.ZERO;
+                        if (i == 5) {
+                            if (insFeeOrderNew.getTwoLevelUserId() == null) {
+                                distributionFee = distributionFee.add(insFeeOrderNew.getSecondDetailPremiums());
+                            }
+                            if (insFeeOrderNew.getThreeLevelUserId() == null) {
+                                distributionFee = distributionFee.add(insFeeOrderNew.getThirdDetailPremiums());
+                            }
                         }
-                        if (insFeeOrderNew.getThreeLevelUserId() == null) {
-                            distributionFee = distributionFee.add(insFeeOrderNew.getThirdDetailPremiums());
+
+                        // 根据分销等级计算管理费总额
+                        sumManagementFee = sumManagementFee.add(jqDeptPremiumsLevels[i - 1])
+                                .add(syDeptPremiumsLevels[i - 1])
+                                .add(noDeptPremiumsLevels[i - 1]);
+                        if (i == 1) {
+                            sumManagementFee = sumManagementFee.add(distributionFee);
                         }
-                    }
 
-                    // 根据分销等级计算管理费总额
-                    sumManagementFee = sumManagementFee.add(jqDeptPremiumsLevels[i - 1])
-                            .add(syDeptPremiumsLevels[i - 1])
-                            .add(noDeptPremiumsLevels[i - 1]);
-                    if (i == 1) {
-                        sumManagementFee = sumManagementFee.add(distributionFee);
+                        // 如果机构信息不为空,更新管理费并记录历史
+                        if (levelSysDeptAccount != null) {
+                            levelSysDeptAccount.setManagementFee(levelSysDeptAccount.getManagementFee().add(sumManagementFee));
+                            sysDeptAccountService.updateById(levelSysDeptAccount);
+                        } else {
+                            // 如果机构信息为空,新建机构信息并记录历史
+                            levelSysDeptAccount = new SysDeptAccount();
+                            levelSysDeptAccount.setDeptId(levelDeptId);
+                            levelSysDeptAccount.setManagementFee(sumManagementFee);
+                            levelSysDeptAccount.setCreateTime(new Date());
+                            sysDeptAccountService.save(levelSysDeptAccount);
+                        }
+                        // 记录历史信息
+                        // 拼接备注
+                        String remark = this.getDeptFeeHistoryLog(i, jqDeptPremiumsLevels, syDeptPremiumsLevels, noDeptPremiumsLevels,
+                                distributionFee);
+                        sysDeptAccountHistoryService.addHistory(levelDeptId, sumManagementFee, levelSysDeptAccount.getManagementFee(), "2",
+                                insOrderNo, BaseController.getUser().getId(), remark);
                     }
 
-                    // 如果机构信息不为空,更新管理费并记录历史
-                    if (levelSysDeptAccount != null) {
-                        levelSysDeptAccount.setManagementFee(levelSysDeptAccount.getManagementFee().add(sumManagementFee));
-                        sysDeptAccountService.updateById(levelSysDeptAccount);
-                    } else {
-                        // 如果机构信息为空,新建机构信息并记录历史
-                        levelSysDeptAccount = new SysDeptAccount();
-                        levelSysDeptAccount.setDeptId(levelDeptId);
-                        levelSysDeptAccount.setManagementFee(sumManagementFee);
-                        levelSysDeptAccount.setCreateTime(new Date());
-                        sysDeptAccountService.save(levelSysDeptAccount);
-                    }
-                    // 记录历史信息
-                    // 拼接备注
-                    String remark = this.getDeptFeeHistoryLog(i, jqDeptPremiumsLevels, syDeptPremiumsLevels, noDeptPremiumsLevels,
-                            distributionFee);
-                    sysDeptAccountHistoryService.addHistory(levelDeptId, sumManagementFee, levelSysDeptAccount.getManagementFee(), "2",
-                            insOrderNo, BaseController.getUser().getId(), remark);
                 }
-
+            }
+        }catch (Exception e){
+            throw new SystemException("当前业务繁忙,请稍后重试");
+        }finally {
+            //释放锁
+            if(locked.isHeldByCurrentThread()){
+                locked.unlock();
             }
         }
     }