package com.ydtech.modules.fnc.service.impl; import cn.dev33.satoken.stp.StpUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ydtech.constants.enums.dict.FeeAuditAuditstatus; import com.ydtech.constants.enums.dict.ins.InsFeeAuditDistributionStatusEnum; import com.ydtech.exception.SystemException; import com.ydtech.modules.admin.model.SysDeptAccount; import com.ydtech.modules.admin.model.SysUser; import com.ydtech.modules.admin.model.po.SysUserAccount; import com.ydtech.modules.admin.model.vo.SysUserBaseVO; import com.ydtech.modules.admin.service.*; import com.ydtech.modules.base.controller.BaseController; import com.ydtech.modules.esm.service.EsmUserReferrerService; import com.ydtech.modules.fnc.dao.FncInsAreaCompanyMapper; import com.ydtech.modules.fnc.dao.InsFeeAuditMapper; import com.ydtech.modules.fnc.dao.InsPlyIncomeMapper; import com.ydtech.modules.fnc.entity.InsAreaCompany; import com.ydtech.modules.fnc.entity.InsFeeAudit; import com.ydtech.modules.fnc.entity.InsFeeAuditHistory; import com.ydtech.modules.fnc.entity.InsPlyIncome; import com.ydtech.modules.fnc.service.InsFeeAuditHistoryService; import com.ydtech.modules.fnc.service.InsFeeAuditService; import com.ydtech.modules.fnc.service.InsPlyIncomeService; import com.ydtech.modules.ins.model.InsCommission; import com.ydtech.modules.ins.model.InsCompanyFee; import com.ydtech.modules.ins.model.InsDeptFee; import com.ydtech.modules.ins.service.InsCommissionService; import com.ydtech.modules.ins.service.InsCompanyFeeService; import com.ydtech.modules.ins.service.InsDeptFeeService; import com.ydtech.modules.order.dao.InsOrdersMapper; import com.ydtech.modules.order.entity.InsFeeOrder; import com.ydtech.modules.order.entity.InsOrders; import com.ydtech.modules.protocol.service.PtlAgreementService; import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew; import com.ydtech.modules.protocols.entity.po.InsFeeOrderNewDistribution; import com.ydtech.modules.protocols.service.InsFeeOrderNewDistributionService; import com.ydtech.modules.protocols.service.InsFeeOrderNewService; import com.ydtech.utils.DateUtil; import com.ydtech.utils.StringUtils; import com.ydtech.utils.idgen.IdGenerate; import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Date; import java.util.List; /** *

* 服务实现类 *

* * @author gws * @since 2023-11-22 */ @Service public class InsFeeAuditServiceImpl extends ServiceImpl implements InsFeeAuditService { private final InsOrdersMapper insOrdersMapper; private final InsPlyIncomeMapper insPlyIncomeMapper; private final FncInsAreaCompanyMapper insAreaCompanyMapper; private final InsDeptFeeService insDeptFeeService; private final InsCommissionService insCommissionService; private final InsCompanyFeeService insCompanyFeeService; private final EsmUserReferrerService esmUserReferrerService; private final SysUserService sysUserService; @Autowired private InsFeeOrderNewService insFeeOrderNewService; @Autowired private SysUserAccountService sysUserAccountService; @Autowired private SysDeptService sysDeptService; @Autowired private SysDeptAccountService sysDeptAccountService; @Autowired private SysDeptAccountHistoryService sysDeptAccountHistoryService; @Autowired private InsPlyIncomeService insPlyIncomeService; @Autowired private InsFeeAuditHistoryService insFeeAuditHistoryService; @Autowired private PtlAgreementService ptlAgreementService; @Resource private InsFeeOrderNewDistributionService insFeeOrderNewDistributionService; public InsFeeAuditServiceImpl(FncInsAreaCompanyMapper insAreaCompanyMapper, InsOrdersMapper insOrdersMapper, InsDeptFeeService insDeptFeeService, EsmUserReferrerService esmUserReferrerService, SysUserService sysUserService, InsCommissionService insCommissionService, InsCompanyFeeService insCompanyFeeService, InsPlyIncomeMapper insPlyIncomeMapper) { this.insAreaCompanyMapper = insAreaCompanyMapper; this.insOrdersMapper = insOrdersMapper; this.insDeptFeeService = insDeptFeeService; this.esmUserReferrerService = esmUserReferrerService; this.sysUserService = sysUserService; this.insCommissionService = insCommissionService; this.insCompanyFeeService = insCompanyFeeService; this.insPlyIncomeMapper = insPlyIncomeMapper; } @Override @Transactional public void feeAudit(String orderNo, String insOrderNo, boolean isAutoAudit) { //添加费用审核表及轨迹信息 InsFeeAudit insFeeAudit = saveInsFeeAuditAndHistory(orderNo, insOrderNo, isAutoAudit, FeeAuditAuditstatus.PASSED.getCode()); InsOrders order = insOrdersMapper.selectById(orderNo); InsAreaCompany insAreaCompany = insAreaCompanyMapper.selectById(insFeeAudit.getInsOrderNo()); //获取该订单的费用 InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getOne(new LambdaQueryWrapper() .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() .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()); } } // 根据分销等级计算管理费总额 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); } } } } private void createInsFeeOrderNewDistribution(InsFeeOrderNew insFeeOrderNew, InsAreaCompany insAreaCompany, InsOrders insOrders, String userId, BigDecimal commissionRate, BigDecimal commissionAmount, String commissionLevel) { InsFeeOrderNewDistribution insFeeOrderNewDistribution = new InsFeeOrderNewDistribution(); insFeeOrderNewDistribution.setId(IdGenerate.nextId()); insFeeOrderNewDistribution.setOrderNo(insFeeOrderNew.getInsOrderNo()); insFeeOrderNewDistribution.setJqPolicyNo(insAreaCompany.getJqpolicyno()); insFeeOrderNewDistribution.setSyPolicyNo(insAreaCompany.getSypolicyno()); insFeeOrderNewDistribution.setOperator(insOrders.getUserid()); insFeeOrderNewDistribution.setLicenseNo(insOrders.getLicenseno()); insFeeOrderNewDistribution.setProductId(insAreaCompany.getProductid()); insFeeOrderNewDistribution.setProduct(insAreaCompany.getProduct()); insFeeOrderNewDistribution.setSignTime(insAreaCompany.getSigningTime()); insFeeOrderNewDistribution.setInsCompany(insAreaCompany.getInscompany()); insFeeOrderNewDistribution.setUserId(userId); insFeeOrderNewDistribution.setCommissionRate(commissionRate); insFeeOrderNewDistribution.setCommissionAmount(commissionAmount); insFeeOrderNewDistribution.setCommissionLevel(commissionLevel); insFeeOrderNewDistribution.setCreateTime(new Date()); // 保存insFeeOrderNewDistribution insFeeOrderNewDistributionService.save(insFeeOrderNewDistribution); } private String getDeptFeeHistoryLog(Integer index, BigDecimal[] jqDeptPremiumsLevels, BigDecimal[] syDeptPremiumsLevels, BigDecimal[] noDeptPremiumsLevels, BigDecimal distributionFee) { StringBuilder remarkBuilder = new StringBuilder(); if (jqDeptPremiumsLevels[index - 1].compareTo(BigDecimal.ZERO) != 0) { remarkBuilder.append("交强").append(index).append("级机构管理费:"); remarkBuilder.append(jqDeptPremiumsLevels[index - 1]).append(","); } if (syDeptPremiumsLevels[index - 1].compareTo(BigDecimal.ZERO) != 0) { remarkBuilder.append("商业").append(index).append("级机构管理费:"); remarkBuilder.append(syDeptPremiumsLevels[index - 1]).append(","); } if (noDeptPremiumsLevels[index - 1].compareTo(BigDecimal.ZERO) != 0) { remarkBuilder.append("非车").append(index).append("级机构管理费:"); remarkBuilder.append(noDeptPremiumsLevels[index - 1]).append(","); } if (distributionFee.compareTo(BigDecimal.ZERO) != 0) { remarkBuilder.append("分销费:").append(distributionFee).append(","); } String remark = remarkBuilder.toString(); if (remark.endsWith(",")) { remark = remark.substring(0, remark.length() - 1); } return remark; } private void countUserAmount(InsFeeOrderNew insFeeOrderNew, String orderNo) { String distributionStatus = insFeeOrderNew.getDistributionStatus(); if (StringUtils.isNotEmpty(distributionStatus)) { if (InsFeeAuditDistributionStatusEnum.DS_3.getCode().equals(distributionStatus)) { BigDecimal totalDept = BigDecimal.ZERO; if (StringUtils.isNotEmpty(insFeeOrderNew.getFirstLevelUserId())) { String firstLevelUserId = insFeeOrderNew.getFirstLevelUserId(); BigDecimal firstDetailPremiums = insFeeOrderNew.getFirstDetailPremiums(); this.saveUpdateAccount(firstLevelUserId, firstDetailPremiums, orderNo); } else { totalDept = totalDept.add(insFeeOrderNew.getFirstDetailPremiums()); } if (StringUtils.isNotEmpty(insFeeOrderNew.getTwoLevelUserId())) { String twoLevelUserId = insFeeOrderNew.getTwoLevelUserId(); BigDecimal secondDetailProportion = insFeeOrderNew.getSecondDetailPremiums(); this.saveUpdateAccount(twoLevelUserId, secondDetailProportion, orderNo); } else { totalDept = totalDept.add(insFeeOrderNew.getSecondDetailPremiums()); } if (StringUtils.isNotEmpty(insFeeOrderNew.getThreeLevelUserId())) { String threeLevelUserId = insFeeOrderNew.getThreeLevelUserId(); BigDecimal threeDetailPremiums = insFeeOrderNew.getThirdDetailPremiums(); this.saveUpdateAccount(threeLevelUserId, threeDetailPremiums, orderNo); } else { totalDept = totalDept.add(insFeeOrderNew.getThirdDetailPremiums()); } // 机构管理 费用给五级交钱机构管理费 if (totalDept.compareTo(BigDecimal.ZERO) == 0) { BigDecimal jqDeptPremiumsLevel5 = insFeeOrderNew.getJqDeptPremiumsLevel5(); jqDeptPremiumsLevel5.add(totalDept); insFeeOrderNewService.updateById(insFeeOrderNew); } } else if (InsFeeAuditDistributionStatusEnum.DS_2.getCode().equals(distributionStatus)) { BigDecimal totalDept = BigDecimal.ZERO; if (StringUtils.isNotEmpty(insFeeOrderNew.getFirstLevelUserId())) { String firstLevelUserId = insFeeOrderNew.getFirstLevelUserId(); BigDecimal firstDetailPremiums = insFeeOrderNew.getFirstDetailPremiums(); this.saveUpdateAccount(firstLevelUserId, firstDetailPremiums, orderNo); } else { totalDept = totalDept.add(insFeeOrderNew.getFirstDetailPremiums()); } if (StringUtils.isNotEmpty(insFeeOrderNew.getTwoLevelUserId())) { String twoLevelUserId = insFeeOrderNew.getTwoLevelUserId(); BigDecimal secondDetailProportion = insFeeOrderNew.getSecondDetailPremiums(); this.saveUpdateAccount(twoLevelUserId, secondDetailProportion, orderNo); } else { totalDept = totalDept.add(insFeeOrderNew.getSecondDetailPremiums()); } // 机构管理 费用给五级交钱机构管理费 if (totalDept.compareTo(BigDecimal.ZERO) == 0) { BigDecimal jqDeptPremiumsLevel5 = insFeeOrderNew.getJqDeptPremiumsLevel5(); jqDeptPremiumsLevel5.add(totalDept); insFeeOrderNewService.updateById(insFeeOrderNew); } } else { // 一级分销 if (StringUtils.isNotEmpty(insFeeOrderNew.getFirstLevelUserId())) { String firstLevelUserId = insFeeOrderNew.getFirstLevelUserId(); BigDecimal firstDetailPremiums = insFeeOrderNew.getFirstDetailPremiums(); this.saveUpdateAccount(firstLevelUserId, firstDetailPremiums, orderNo); } else { if (insFeeOrderNew.getFirstDetailPremiums().compareTo(BigDecimal.ZERO) == 0) { BigDecimal jqDeptPremiumsLevel5 = insFeeOrderNew.getJqDeptPremiumsLevel5(); jqDeptPremiumsLevel5.add(insFeeOrderNew.getFirstDetailPremiums()); insFeeOrderNewService.updateById(insFeeOrderNew); } } } } } private void saveUpdateAccount(String userId, BigDecimal amount, String orderNo) { SysUserAccount sysUserOldAccount = new SysUserAccount(); sysUserOldAccount.setUserId(userId); sysUserOldAccount.setPromotion(amount); sysUserOldAccount.setDocumentaryStatus("2"); // 收入 sysUserOldAccount.setSuborderId(orderNo); sysUserAccountService.addOrUpdate(sysUserOldAccount); } private BigDecimal zeroBigdecimal(BigDecimal amount) { if (amount == null) { return amount = BigDecimal.ZERO; } else { return amount; } } /** * 生成保司费用(应收费用) * * @param order * @param insFeeOrder * @throws Exception */ private void gene_orderIncome(InsOrders order, InsFeeOrderNew insFeeOrder, InsAreaCompany plyDto) throws Exception { InsPlyIncome insPlyIncome = new InsPlyIncome(); insPlyIncome.setOrderno(order.getOrderno()); insPlyIncome.setDeptId(order.getDeptid()); insPlyIncome.setCompanyId(plyDto.getCompanyId()); insPlyIncome.setAgreementId(String.valueOf(plyDto.getAgreementId())); insPlyIncome.setLicenseno(order.getLicenseno()); insPlyIncome.setPayDate(StringUtils.isNullOrEmpty(plyDto.getPayDate()) ? plyDto.getCreatetime() : plyDto.getPayDate()); insPlyIncome.setSignDate(StringUtils.isNullOrEmpty(plyDto.getInsidePayTime()) ? plyDto.getPayDate() : plyDto.getInsidePayTime()); insPlyIncome.setCreateTime(LocalDate.now()); if (StringUtils.isNotEmpty(plyDto.getJqpolicyno())) { insPlyIncome.setPolicyno(plyDto.getJqpolicyno()); insPlyIncome.setRiskcode("交强"); insPlyIncome.setTaxamount(plyDto.getTaxamount()); if (!ObjectUtils.isEmpty(insFeeOrder)) { insPlyIncome.setNoTaxPremium(insFeeOrder.getJqNoTaxPremium()); insPlyIncome.setCommissionFeerate(insFeeOrder.getJqSuperviseCostsProportion()); insPlyIncome.setOtherFeerate(insFeeOrder.getJqCostsProportion().subtract(insFeeOrder.getJqSuperviseCostsProportion())); insPlyIncome.setCommissionFeevalue(insFeeOrder.getJqSuperviseCostsPremiums()); insPlyIncome.setOtherFeevalue(insFeeOrder.getJqCostsPremiums().subtract(insFeeOrder.getJqSuperviseCostsPremiums())); insPlyIncome.setAllFeeValue(insFeeOrder.getJqCostsPremiums()); } insPlyIncomeMapper.insert(insPlyIncome); } if (StringUtils.isNotEmpty(plyDto.getSypolicyno())) { insPlyIncome.setPolicyno(plyDto.getSypolicyno()); insPlyIncome.setRiskcode("商业"); insPlyIncome.setTaxamount(new BigDecimal(0)); if (!ObjectUtils.isEmpty(insFeeOrder)) { insPlyIncome.setNoTaxPremium(insFeeOrder.getSyNoTaxPremium()); insPlyIncome.setCommissionFeerate(insFeeOrder.getSySuperviseCostsProportion()); insPlyIncome.setOtherFeerate(insFeeOrder.getSyCostsProportion().subtract(insFeeOrder.getSySuperviseCostsProportion())); insPlyIncome.setCommissionFeevalue(insFeeOrder.getSySuperviseCostsPremiums()); insPlyIncome.setOtherFeevalue(insFeeOrder.getSyCostsPremiums().subtract(insFeeOrder.getSySuperviseCostsPremiums())); insPlyIncome.setAllFeeValue(insFeeOrder.getSyCostsPremiums()); } insPlyIncomeMapper.insert(insPlyIncome); } } /** * 生成机构费用 * * @param order * @param insFeeOrder * @throws Exception */ private void gene_deptfee(InsOrders order, InsFeeOrderNew insFeeOrder, InsAreaCompany plyDto) { InsDeptFee deptFee = new InsDeptFee(); deptFee.setOrderno(order.getOrderno()); if (!ObjectUtils.isEmpty(insFeeOrder)) { deptFee.setQuoteno(insFeeOrder.getInsOrderNo()); } deptFee.setAgreeid(String.valueOf(plyDto.getAgreementId())); deptFee.setAuditstatus("1"); deptFee.setSettlestatus("0"); if (plyDto.getInsidePayTime() != null) { deptFee.setSignDate(DateUtil.formatFullTime(plyDto.getInsidePayTime(), DateUtil.FULL_TIME_SPLIT_PATTERN)); } deptFee.setInscompany(plyDto.getCompanyId()); if (StringUtils.isNotEmpty(plyDto.getJqpolicyno())) { deptFee.setPolicyno(plyDto.getJqpolicyno()); deptFee.setRiskcode("交强"); deptFee.setLicenseno(order.getLicenseno()); geneJqInsDeptFee(order, insFeeOrder, deptFee); } if (StringUtils.isNotEmpty(plyDto.getSypolicyno())) { deptFee.setPolicyno(plyDto.getSypolicyno()); deptFee.setRiskcode("商业"); deptFee.setLicenseno(order.getLicenseno()); geneSyInsDeptFee(order, insFeeOrder, deptFee); } } private void geneJqInsDeptFee(InsOrders order, InsFeeOrderNew insFeeOrder, InsDeptFee deptFee) { if (!ObjectUtils.isEmpty(insFeeOrder)) { if (insFeeOrder.getJqDeptPremiumsLevel1().doubleValue() > 0) { deptFee.setComcode(order.getDeptid().substring(0, 2)); //99140302M01D01 deptFee.setComlevel("一级"); insDeptFeeService.insert(deptFee); } if (insFeeOrder.getJqDeptPremiumsLevel2().doubleValue() > 0) { deptFee.setComcode(order.getDeptid().substring(0, 4)); //99140302M01D01 deptFee.setComlevel("二级"); insDeptFeeService.insert(deptFee); } if (insFeeOrder.getJqDeptPremiumsLevel3().doubleValue() > 0) { deptFee.setComcode(order.getDeptid().substring(0, 6)); //99140302M01D01 deptFee.setComlevel("三级"); insDeptFeeService.insert(deptFee); } if (insFeeOrder.getJqDeptPremiumsLevel4().doubleValue() > 0) { deptFee.setComcode(order.getDeptid().substring(0, 8)); //99140302M01D01 deptFee.setComlevel("四级"); insDeptFeeService.insert(deptFee); } if (insFeeOrder.getJqDeptPremiumsLevel5().doubleValue() > 0) { deptFee.setComcode(order.getDeptid().substring(0, 11)); //99140302M01D01 deptFee.setComlevel("五级"); insDeptFeeService.insert(deptFee); } } } private void geneSyInsDeptFee(InsOrders order, InsFeeOrderNew insFeeOrder, InsDeptFee deptFee) { if (!ObjectUtils.isEmpty(insFeeOrder)) { if (insFeeOrder.getSyDeptPremiumsLevel1().doubleValue() > 0) { deptFee.setComcode(order.getDeptid().substring(0, 2)); //99140302M01D01 deptFee.setComlevel("一级"); insDeptFeeService.insert(deptFee); } if (insFeeOrder.getSyDeptPremiumsLevel2().doubleValue() > 0) { deptFee.setComcode(order.getDeptid().substring(0, 4)); //99140302M01D01 deptFee.setComlevel("二级"); insDeptFeeService.insert(deptFee); } if (insFeeOrder.getSyDeptPremiumsLevel3().doubleValue() > 0) { deptFee.setComcode(order.getDeptid().substring(0, 6)); //99140302M01D01 deptFee.setComlevel("三级"); insDeptFeeService.insert(deptFee); } if (insFeeOrder.getSyDeptPremiumsLevel4().doubleValue() > 0) { deptFee.setComcode(order.getDeptid().substring(0, 8)); //99140302M01D01 deptFee.setComlevel("四级"); insDeptFeeService.insert(deptFee); } if (insFeeOrder.getSyDeptPremiumsLevel5().doubleValue() > 0) { deptFee.setComcode(order.getDeptid().substring(0, 11)); //99140302M01D01 deptFee.setComlevel("五级"); insDeptFeeService.insert(deptFee); } } } /** * 三级分销费用保存 * * @param order * @return */ public void saveRetail(InsOrders order, InsFeeOrder insFeeOrder, InsAreaCompany plyDto) throws Exception { List userlist = new ArrayList<>(); esmUserReferrerService.getUpUser(order.getUserid(), userlist); //userlist:包括本人在内向上所有人 if (userlist.size() - 1 > 0) { if (userlist.size() - 1 >= 1 && insFeeOrder.getThirdRetailPremiums().doubleValue() > 0) {//三级分销 SysUser user = sysUserService.getById(userlist.get(1)); InsCommission commission = new InsCommission(); commission.setOrderno(order.getOrderno()); commission.setQuoteno(insFeeOrder.getInsOrderNo()); commission.setDeptid(order.getDeptid()); commission.setDeptname(order.getDeptname()); commission.setInscompany(plyDto.getCompanyId()); commission.setAgreeid(String.valueOf(plyDto.getAgreementId())); commission.setRefereescode(user.getId()); commission.setRefereesname(user.getName()); commission.setLevel("3"); commission.setAuditstatus("1"); //0未审核 1已审核 commission.setSettlestatus("0"); //0未结算 1已结算 commission.setInsuredtime(DateUtil.formatFullTime(plyDto.getPayDate(), DateUtil.FULL_TIME_SPLIT_PATTERN)); commission.setSignDate(DateUtil.formatFullTime(plyDto.getInsidePayTime(), DateUtil.FULL_TIME_SPLIT_PATTERN)); if (StringUtils.isNotEmpty(plyDto.getJqpolicyno())) { commission.setPolicyno(plyDto.getJqpolicyno()); commission.setRiskcode("交强"); commission.setLicenseno(order.getLicenseno()); commission.setCommissionrate(insFeeOrder.getThirdRetailProportion().doubleValue()); commission.setCommissionamount(insFeeOrder.getJqNoTaxPremium().multiply(insFeeOrder.getThirdRetailProportion()).divide(new BigDecimal(100)).doubleValue()); insCommissionService.insert(commission); } if (StringUtils.isNotEmpty(plyDto.getSypolicyno())) { commission.setPolicyno(plyDto.getSypolicyno()); commission.setRiskcode("商业"); commission.setLicenseno(order.getLicenseno()); commission.setCommissionrate(insFeeOrder.getThirdRetailProportion().doubleValue()); commission.setCommissionamount(insFeeOrder.getSyNoTaxPremium().multiply(insFeeOrder.getThirdRetailProportion()).divide(new BigDecimal(100)).doubleValue()); insCommissionService.insert(commission); } } if (userlist.size() - 1 >= 2 && insFeeOrder.getSecondRetailPremiums().doubleValue() > 0) {//二级分销 SysUser user = sysUserService.getById(userlist.get(2)); InsCommission commission = new InsCommission(); commission.setOrderno(order.getOrderno()); commission.setQuoteno(insFeeOrder.getInsOrderNo()); commission.setDeptid(order.getDeptid()); commission.setDeptname(order.getDeptname()); commission.setInscompany(plyDto.getCompanyId()); commission.setAgreeid(String.valueOf(plyDto.getAgreementId())); commission.setRefereescode(user.getId()); commission.setRefereesname(user.getName()); // commission.setCommissionrate(insFeeOrder.getSecondRetailProportion().doubleValue()); // commission.setCommissionamount(insFeeOrder.getSecondRetailPremiums().doubleValue()); commission.setLevel("2"); commission.setAuditstatus("1"); //0未审核 1已审核 commission.setSettlestatus("0"); //0未结算 1已结算 commission.setInsuredtime(DateUtil.formatFullTime(plyDto.getPayDate(), DateUtil.FULL_TIME_SPLIT_PATTERN)); commission.setSignDate(DateUtil.formatFullTime(plyDto.getInsidePayTime(), DateUtil.FULL_TIME_SPLIT_PATTERN)); if (StringUtils.isNotEmpty(plyDto.getJqpolicyno())) { commission.setPolicyno(plyDto.getJqpolicyno()); commission.setRiskcode("交强"); commission.setLicenseno(order.getLicenseno()); commission.setCommissionrate(insFeeOrder.getSecondRetailProportion().doubleValue()); commission.setCommissionamount(insFeeOrder.getJqNoTaxPremium().multiply(insFeeOrder.getSecondRetailProportion()).divide(new BigDecimal(100)).doubleValue()); insCommissionService.insert(commission); } if (StringUtils.isNotEmpty(plyDto.getSypolicyno())) { commission.setPolicyno(plyDto.getSypolicyno()); commission.setRiskcode("商业"); commission.setLicenseno(order.getLicenseno()); commission.setCommissionrate(insFeeOrder.getSecondRetailProportion().doubleValue()); commission.setCommissionamount(insFeeOrder.getSyNoTaxPremium().multiply(insFeeOrder.getSecondRetailProportion()).divide(new BigDecimal(100)).doubleValue()); insCommissionService.insert(commission); } } if (userlist.size() - 1 >= 3 && insFeeOrder.getFirstRetailPremiums().doubleValue() > 0) {//一级分销 SysUser user = sysUserService.getById(userlist.get(3)); InsCommission commission = new InsCommission(); commission.setOrderno(order.getOrderno()); commission.setQuoteno(insFeeOrder.getInsOrderNo()); commission.setDeptid(order.getDeptid()); commission.setDeptname(order.getDeptname()); commission.setInscompany(plyDto.getCompanyId()); commission.setAgreeid(String.valueOf(plyDto.getAgreementId())); commission.setRefereescode(user.getId()); commission.setRefereesname(user.getName()); // commission.setCommissionrate(insFeeOrder.getFirstRetailProportion().doubleValue()); // commission.setCommissionamount(insFeeOrder.getFirstRetailPremiums().doubleValue()); commission.setLevel("1"); commission.setAuditstatus("1"); //0未审核 1已审核 commission.setSettlestatus("0"); //0未结算 1已结算 commission.setInsuredtime(DateUtil.formatFullTime(plyDto.getPayDate(), DateUtil.FULL_TIME_SPLIT_PATTERN)); commission.setSignDate(DateUtil.formatFullTime(plyDto.getInsidePayTime(), DateUtil.FULL_TIME_SPLIT_PATTERN)); if (StringUtils.isNotEmpty(plyDto.getJqpolicyno())) { commission.setPolicyno(plyDto.getJqpolicyno()); commission.setRiskcode("交强"); commission.setLicenseno(order.getLicenseno()); commission.setCommissionrate(insFeeOrder.getFirstRetailProportion().doubleValue()); commission.setCommissionamount(insFeeOrder.getJqNoTaxPremium().multiply(insFeeOrder.getFirstRetailProportion()).divide(new BigDecimal(100)).doubleValue()); insCommissionService.insert(commission); } if (StringUtils.isNotEmpty(plyDto.getSypolicyno())) { commission.setPolicyno(plyDto.getSypolicyno()); commission.setRiskcode("商业"); commission.setLicenseno(order.getLicenseno()); commission.setCommissionrate(insFeeOrder.getFirstRetailProportion().doubleValue()); commission.setCommissionamount(insFeeOrder.getSyNoTaxPremium().multiply(insFeeOrder.getFirstRetailProportion()).divide(new BigDecimal(100)).doubleValue()); insCommissionService.insert(commission); } } } } /** * 生成个代费用 * * @param order * @param insFeeOrder * @throws Exception */ public void saveInsCompanyFee(InsOrders order, InsFeeOrder insFeeOrder, InsAreaCompany plyDto) throws Exception { InsCompanyFee insCompanyFee = new InsCompanyFee(); insCompanyFee.setOrderno(order.getOrderno()); insCompanyFee.setFrameNo(order.getFrameno()); insCompanyFee.setLicenseNo(order.getLicenseno()); insCompanyFee.setInscompany(plyDto.getCompanyId()); insCompanyFee.setAgreeid(String.valueOf(plyDto.getAgreementId())); insCompanyFee.setUserid(order.getUserid()); insCompanyFee.setUsername(order.getUsername()); insCompanyFee.setDeptid(order.getDeptid()); insCompanyFee.setDeptname(order.getDeptname()); insCompanyFee.setSettletype("B"); insCompanyFee.setSettlestatus("0"); insCompanyFee.setCreatetime(DateUtil.getDateFormat(new Date(), DateUtil.FULL_TIME_SPLIT_PATTERN)); if (plyDto.getInsidePayTime() != null) { insCompanyFee.setSignDate(DateUtil.formatFullTime(plyDto.getInsidePayTime(), DateUtil.FULL_TIME_SPLIT_PATTERN)); } if (ObjectUtils.isNotEmpty(insFeeOrder)) { BigDecimal dept_rate = insFeeOrder.getFirstDeptProportion() .add(insFeeOrder.getSecondDeptProportion()) .add(insFeeOrder.getThirdDeptProportion()) .add(insFeeOrder.getForthDeptProportion()) .add(insFeeOrder.getFifthDeptProportion()); BigDecimal retail_rate = insFeeOrder.getFirstRetailProportion() .add(insFeeOrder.getSecondRetailProportion()) .add(insFeeOrder.getThirdRetailProportion()); if (StringUtils.isNotEmpty(plyDto.getJqpolicyno())) { insCompanyFee.setPolicyno(plyDto.getJqpolicyno()); insCompanyFee.setRiskcode("交强"); //交强费用比例=交强险费用比例-五级机构管理费比例-三级分销比例 insCompanyFee.setFeerate(insFeeOrder.getJqCostsProportion().subtract(dept_rate).subtract(retail_rate).doubleValue()); insCompanyFee.setFeeamount(insFeeOrder.getJqNoTaxPremium().multiply(insFeeOrder.getJqCostsProportion().subtract(dept_rate).subtract(retail_rate)).divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); insCompanyFee.setJqpremium(insFeeOrder.getJqNoTaxPremium().doubleValue()); //保存业务员费用 insCompanyFeeService.insert(insCompanyFee); } if (StringUtils.isNotEmpty(plyDto.getSypolicyno())) { insCompanyFee.setPolicyno(plyDto.getSypolicyno()); insCompanyFee.setRiskcode("商业"); insCompanyFee.setFeerate(0); insCompanyFee.setFeeamount(0); insCompanyFee.setJqpremium(0); //商业费用比例=商业险费用比例-五级机构管理费比例-三级分销比例 insCompanyFee.setDisrate(insFeeOrder.getSyCostsProportion().subtract(dept_rate).subtract(retail_rate).doubleValue()); insCompanyFee.setDisamount(insFeeOrder.getSyNoTaxPremium().multiply(insFeeOrder.getSyCostsProportion().subtract(dept_rate).subtract(retail_rate)).divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()); insCompanyFee.setSypremium(insFeeOrder.getSyNoTaxPremium().doubleValue()); //保存业务员费用 insCompanyFeeService.insert(insCompanyFee); } } } /** * 保存保险费用审核信息及审核历史。 * * @param orderNo 订单号 * @param insOrderNo 保险订单号 * @param isAutoAudit 是否自动审核,true表示自动审核,false表示人工审核 * @param auditstatus 审核状态码 */ @Override @Transactional public InsFeeAudit saveInsFeeAuditAndHistory(String orderNo, String insOrderNo, boolean isAutoAudit, String auditstatus) { //查询费用审核表 InsFeeAudit insFeeAudit = getOne(new LambdaQueryWrapper().eq(InsFeeAudit::getOrderno, orderNo)); String userId; // 填充审核人 if (isAutoAudit) { userId = "自动审核"; } else { userId = StpUtil.getLoginId().toString(); } //添加审核轨迹表 InsFeeAuditHistory insFeeAuditHistory = new InsFeeAuditHistory(); if (insFeeAudit == null) { insFeeAudit = new InsFeeAudit(); // 设置订单号和保险订单号 insFeeAudit.setAudituser(userId); insFeeAudit.setOrderno(orderNo); insFeeAudit.setInsOrderNo(insOrderNo); insFeeAudit.setAudittime(LocalDateTime.now()); insFeeAudit.setAuditstatus(auditstatus); this.save(insFeeAudit); } else { //状态码为已审核且数据不为空,则更新审核状态 insFeeAudit.setAuditstatus(auditstatus); insFeeAudit.setAudittime(LocalDateTime.now()); insFeeAudit.setAudituser(userId); this.update(insFeeAudit, new LambdaUpdateWrapper().eq(InsFeeAudit::getOrderno, orderNo)); } //复制审核对象的属性 BeanUtils.copyProperties(insFeeAudit, insFeeAuditHistory); InsAreaCompany insAreaCompany = insAreaCompanyMapper.selectById(insFeeAudit.getInsOrderNo()); // 设置操作时间和操作人及保险公司名称 insFeeAuditHistory.setInsCompany(insAreaCompany.getInscompany()); insFeeAuditHistory.setOperatorTime(LocalDateTime.now()); insFeeAuditHistory.setOperator(BaseController.getUser().getName()); // 保存审核轨迹 insFeeAuditHistoryService.save(insFeeAuditHistory); return insFeeAudit; } @Override public InsFeeAudit saveDefaultInsFeeAuditAndHistory(String orderNo, String insOrderNo, String auditstatus) { //查询费用审核表 InsFeeAudit insFeeAudit = getOne(new LambdaQueryWrapper().eq(InsFeeAudit::getOrderno, orderNo)); //添加审核轨迹表 InsFeeAuditHistory insFeeAuditHistory = new InsFeeAuditHistory(); if (insFeeAudit == null) { insFeeAudit = new InsFeeAudit(); // 设置订单号和保险订单号 insFeeAudit.setOrderno(orderNo); insFeeAudit.setInsOrderNo(insOrderNo); insFeeAudit.setAuditstatus(auditstatus); this.save(insFeeAudit); } else { //状态码为已审核且数据不为空,则更新审核状态 insFeeAudit.setAuditstatus(auditstatus); this.update(insFeeAudit, new LambdaUpdateWrapper().eq(InsFeeAudit::getOrderno, orderNo)); } //复制审核对象的属性 BeanUtils.copyProperties(insFeeAudit, insFeeAuditHistory); InsAreaCompany insAreaCompany = insAreaCompanyMapper.selectById(insFeeAudit.getInsOrderNo()); // 设置操作时间和操作人及保险公司名称 insFeeAuditHistory.setInsCompany(insAreaCompany.getInscompany()); insFeeAuditHistory.setOperatorTime(LocalDateTime.now()); insFeeAuditHistory.setOperator(BaseController.getUser().getName()); // 保存审核轨迹 insFeeAuditHistoryService.save(insFeeAuditHistory); return insFeeAudit; } }