|
|
@@ -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();
|
|
|
}
|
|
|
}
|
|
|
}
|