package com.ydtech.modules.fnc.service.impl; import cn.dev33.satoken.stp.StpUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ydtech.constants.enums.dict.ins.InsFeeAuditDistributionStatusEnum; import com.ydtech.modules.admin.model.SysDept; import com.ydtech.modules.admin.model.SysDeptAccount; import com.ydtech.modules.admin.model.SysDeptAccountHistory; import com.ydtech.modules.admin.model.SysUser; import com.ydtech.modules.admin.model.po.SysUserAccount; 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.InsPlyIncomeMapper; import com.ydtech.modules.fnc.entity.InsFeeAudit; import com.ydtech.modules.fnc.dao.InsFeeAuditMapper; import com.ydtech.modules.fnc.entity.InsPlyIncome; import com.ydtech.modules.fnc.service.InsFeeAuditService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.fnc.entity.InsAreaCompany; import com.ydtech.modules.order.entity.InsFeeOrder; import com.ydtech.modules.order.entity.InsOrders; import com.ydtech.modules.order.service.InsFeeOrderService; import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew; 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.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; 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 InsFeeOrderService insFeeOrderService; 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; public InsFeeAuditServiceImpl(FncInsAreaCompanyMapper insAreaCompanyMapper, InsOrdersMapper insOrdersMapper, InsFeeOrderService insFeeOrderService,InsDeptFeeService insDeptFeeService,EsmUserReferrerService esmUserReferrerService,SysUserService sysUserService,InsCommissionService insCommissionService,InsCompanyFeeService insCompanyFeeService,InsPlyIncomeMapper insPlyIncomeMapper) { this.insAreaCompanyMapper = insAreaCompanyMapper; this.insOrdersMapper = insOrdersMapper; this.insFeeOrderService=insFeeOrderService; 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) throws Exception{ //保存审核表 InsFeeAudit insFeeAudit=new InsFeeAudit(); insFeeAudit.setOrderno(orderNo); insFeeAudit.setInsOrderNo(insOrderNo); insFeeAudit.setAuditstatus("1"); insFeeAudit.setAudittime(LocalDateTime.now()); insFeeAudit.setAudituser(StpUtil.getLoginId().toString()); this.save(insFeeAudit); InsOrders order=insOrdersMapper.selectById(orderNo); InsFeeOrderNew insFeeOrder=insFeeOrderNewService.getInsFeeOrderNewByCompanyId(insFeeAudit.getInsOrderNo()); InsAreaCompany insAreaCompany=insAreaCompanyMapper.selectById(insFeeAudit.getInsOrderNo()); //获取该订单的费用 InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getOne(new LambdaQueryWrapper() .eq(InsFeeOrderNew::getInsOrderNo, insFeeAudit.getInsOrderNo())); //获取操作人员的机构来源 String deptId=order.getDeptid(); List teamList = sysDeptService.findTeamList(deptId); teamList.forEach(sysDept -> { if(StringUtils.isNotEmpty(sysDept.getComlevel()) && sysDept.getComlevel().equals("1")){ BigDecimal jqDeptPremiumsLevel1 = insFeeOrderNew.getJqDeptPremiumsLevel1(); } }); //bigdecimal为null时设置为0 // handleBigdecimal(insFeeOrder); //生成保司费用(应收费用) gene_orderIncome( order, insFeeOrderNew,insAreaCompany); //生成机构费用 gene_deptfee( order, insFeeOrderNew,insAreaCompany); //生成分销费用 // saveRetail(order,insFeeOrderNew,insAreaCompany); //个代费用生成 // saveInsCompanyFee(order,insFeeOrderNew,insAreaCompany); // 生成 用户账户表 数据 if(StringUtils.isNotEmpty(order.getUserid())){ // 用戶賬戶表 SysUserAccount sysUserAccount = new SysUserAccount(); sysUserAccount.setUserId(order.getUserid()); if (ObjectUtils.isNotEmpty(insFeeOrderNew) ) { // 手续非佣金 = 交强监管费用 + 商业监管费用 + 非车监管费用 // 非跟单费用 = 交强非跟单费用 + 商业非跟单费用 + 非车非跟单费用 //手续费入口费用 // BigDecimal jqPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getJqSuperviseCostsPremiums());//交强监管费 // BigDecimal syPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getSySuperviseCostsPremiums());//商业监管费 // BigDecimal noPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getNoSuperviseCostsPremiums());//非车监管费用 // BigDecimal totalPremiumAmount = jqPremiumAmount.add(syPremiumAmount).add(noPremiumAmount); // 手续非佣金 // //其他费用入口费用 // BigDecimal jqOtherCostsPremiums =this.zeroBigdecimal(insFeeOrderNew.getJqOtherCostsPremiums());//交强其他费用 // BigDecimal syOtherCostsPremiums =this.zeroBigdecimal(insFeeOrderNew.getSyOtherCostsPremiums()); //商业其他费用 // BigDecimal noOtherCostsProportion = this.zeroBigdecimal(insFeeOrderNew.getNoOtherCostsPremiums());//非车其他费用 // BigDecimal totalOtherPremiumAmount = jqOtherCostsPremiums.add(syOtherCostsPremiums).add(noOtherCostsProportion); //非跟单费用 //总机构 交强管理比例 BigDecimal sumJqDeptProportion = insFeeOrderNew.getJqDeptProportionLevel1() .add(insFeeOrderNew.getJqDeptProportionLevel2()) .add(insFeeOrderNew.getJqDeptProportionLevel3()) .add(insFeeOrderNew.getJqDeptProportionLevel4()) .add(insFeeOrderNew.getJqDeptProportionLevel5()); //总机构 商业管理比例 BigDecimal sumSyDeptProportion = insFeeOrderNew.getSyDeptProportionLevel1() .add(insFeeOrderNew.getSyDeptProportionLevel2()) .add(insFeeOrderNew.getSyDeptProportionLevel3()) .add(insFeeOrderNew.getSyDeptProportionLevel4()) .add(insFeeOrderNew.getSyDeptProportionLevel5()); //总机构 非车管理比例 BigDecimal sumNoDeptProportion = insFeeOrderNew.getNoDeptProportionLevel1() .add(insFeeOrderNew.getNoDeptProportionLevel2()) .add(insFeeOrderNew.getNoDeptProportionLevel3()) .add(insFeeOrderNew.getNoDeptProportionLevel4()) .add(insFeeOrderNew.getNoDeptProportionLevel5()); //总分销比例 BigDecimal sumRetail = insFeeOrderNew.getFirstDetailProportion().add(insFeeOrderNew.getSecondDetailProportion()).add(insFeeOrderNew.getThirdDetailProportion()); //交强出口比例 BigDecimal jqExportProceduresProportion = new BigDecimal(0); if(insFeeOrderNew.getJqCostsProportion().compareTo(sumJqDeptProportion.add(sumRetail))>0){ jqExportProceduresProportion = insFeeOrderNew.getJqCostsProportion().subtract(sumJqDeptProportion).subtract(sumRetail); } //商业出口比例 BigDecimal syExportProceduresProportion = new BigDecimal(0); if(insFeeOrderNew.getSyCostsProportion().compareTo(sumSyDeptProportion.add(sumRetail))>0){ syExportProceduresProportion = insFeeOrderNew.getSyCostsProportion().subtract(sumSyDeptProportion).subtract(sumRetail); } //非车出口比例 BigDecimal noExportProceduresProportion = new BigDecimal(0); if(insFeeOrderNew.getNoCostsProportion().compareTo(sumNoDeptProportion.add(sumRetail))>0){ noExportProceduresProportion = insFeeOrderNew.getNoCostsProportion().subtract(sumNoDeptProportion).subtract(sumRetail); } //交强手续费出口比例 BigDecimal jqExportProceduresFee = insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqSuperviseCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN); //交强跟单出口费用 BigDecimal jqExportOtherFee = insFeeOrderNew.getJqPremium() .multiply(jqExportProceduresProportion .subtract(insFeeOrderNew.getJqSuperviseCostsProportion()).divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN); //商业手续费出口比例 BigDecimal syExportProceduresFee = insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSySuperviseCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN); //商业跟单出口比例 BigDecimal syExportOtherFee = insFeeOrderNew.getSyPremium() .multiply(syExportProceduresProportion .subtract(insFeeOrderNew.getSySuperviseCostsProportion()).divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN); //非车手续费出口比例 BigDecimal noExportProceduresFee = insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoSuperviseCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN); //非车跟单出口比例 BigDecimal noExportOtherFee = insFeeOrderNew.getNoPremium() .multiply(noExportProceduresProportion .subtract(insFeeOrderNew.getNoSuperviseCostsProportion()).divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN); //用户出口手续费 BigDecimal totalPremiumAmount = new BigDecimal(0); totalPremiumAmount = totalPremiumAmount.add(jqExportProceduresFee).add(syExportProceduresFee).add(noExportProceduresFee); //用户出口跟单费 BigDecimal totalOtherPremiumAmount = new BigDecimal(0); totalOtherPremiumAmount = totalOtherPremiumAmount.add(jqExportOtherFee).add(syExportOtherFee).add(noExportOtherFee); // 用戶 sysUserAccount.setHandlingFee(totalPremiumAmount); sysUserAccount.setDocumentary(totalOtherPremiumAmount); // 算佣金 this.countUserAmount(insFeeOrderNew,orderNo); sysUserAccount.setDocumentaryStatus("2"); // 收入 sysUserAccount.setSuborderId(orderNo); // 订单Id sysUserAccountService.addOrUpdate(sysUserAccount); String deptid = insFeeOrderNew.getDeptId(); String distributionStatus = insFeeOrderNew.getDistributionStatus(); // 定义一个数组来存储各级机构的管理费 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 (InsFeeAuditDistributionStatusEnum.DS_2.getCode().equals(distributionStatus) && insFeeOrderNew.getTwoLevelUserId() == null) { distributionFee = insFeeOrderNew.getSecondDetailPremiums(); } else if (InsFeeAuditDistributionStatusEnum.DS_3.getCode().equals(distributionStatus) && insFeeOrderNew.getThreeLevelUserId() == null) { distributionFee = insFeeOrderNew.getThirdDetailPremiums(); } } // 根据分销等级计算管理费总额 if (i == 5) { sumManagementFee = sumManagementFee.add(jqDeptPremiumsLevels[i - 1]) .add(syDeptPremiumsLevels[i - 1]) .add(noDeptPremiumsLevels[i - 1]) .add(distributionFee); } else { sumManagementFee = sumManagementFee.add(jqDeptPremiumsLevels[i - 1]) .add(syDeptPremiumsLevels[i - 1]) .add(noDeptPremiumsLevels[i - 1]); } // 如果机构信息不为空,更新管理费并记录历史 if (levelSysDeptAccount != null) { levelSysDeptAccount.setManagementFee(levelSysDeptAccount.getManagementFee().add(sumManagementFee)); sysDeptAccountService.updateById(levelSysDeptAccount); // 记录历史信息 SysDeptAccountHistory sysDeptAccountHistory = new SysDeptAccountHistory(); sysDeptAccountHistory.setId(IdGenerate.nextId()); sysDeptAccountHistory.setDeptId(levelDeptId); sysDeptAccountHistory.setAmount(sumManagementFee); sysDeptAccountHistory.setSurplusAmount(levelSysDeptAccount.getManagementFee()); sysDeptAccountHistory.setDocumentary("2"); //收入 sysDeptAccountHistory.setSuborder(orderNo); sysDeptAccountHistory.setFromBankCard(null); sysDeptAccountHistory.setToBankCard(null); sysDeptAccountHistory.setUserId(BaseController.getUser().getId()); sysDeptAccountHistory.setCreateTime(new Date()); sysDeptAccountHistory.setRemark("交强" + i + "级机构管理费:" + jqDeptPremiumsLevels[i - 1] + ",商业" + i + "级机构管理费:" + syDeptPremiumsLevels[i - 1] + ",非车" + i + "级机构管理费:" + noDeptPremiumsLevels[i - 1] + ",分销费:" + distributionFee); sysDeptAccountHistoryService.save(sysDeptAccountHistory); } else { // 如果机构信息为空,新建机构信息并记录历史 SysDeptAccount sysDeptAccount = new SysDeptAccount(); sysDeptAccount.setDeptId(levelDeptId); sysDeptAccount.setManagementFee(sumManagementFee); sysDeptAccount.setCreateTime(new Date()); sysDeptAccountService.save(sysDeptAccount); // 记录历史信息 SysDeptAccountHistory sysDeptAccountHistory = new SysDeptAccountHistory(); sysDeptAccountHistory.setId(IdGenerate.nextId()); sysDeptAccountHistory.setDeptId(levelDeptId); sysDeptAccountHistory.setAmount(sumManagementFee); sysDeptAccountHistory.setSurplusAmount(sumManagementFee); sysDeptAccountHistory.setDocumentary("2"); //收入 sysDeptAccountHistory.setSuborder(orderNo); sysDeptAccountHistory.setFromBankCard(null); sysDeptAccountHistory.setToBankCard(null); sysDeptAccountHistory.setUserId(BaseController.getUser().getId()); sysDeptAccountHistory.setCreateTime(new Date()); sysDeptAccountHistory.setRemark("交强" + i + "级机构管理费:" + jqDeptPremiumsLevels[i - 1] + ",商业" + i + "级机构管理费:" + syDeptPremiumsLevels[i - 1] + ",非车" + i + "级机构管理费:" + noDeptPremiumsLevels[i - 1] + ",分销费:" + distributionFee); sysDeptAccountHistoryService.save(sysDeptAccountHistory); } } } } } @Override public boolean autoFeeAudit(String orderNo, String insOrderNo) throws Exception { //保存审核表 InsFeeAudit insFeeAudit=new InsFeeAudit(); insFeeAudit.setOrderno(orderNo); insFeeAudit.setInsOrderNo(insOrderNo); insFeeAudit.setAuditstatus("1"); insFeeAudit.setAudittime(LocalDateTime.now()); insFeeAudit.setAudituser("自动审核"); this.save(insFeeAudit); InsOrders order=insOrdersMapper.selectById(orderNo); InsFeeOrderNew insFeeOrder=insFeeOrderNewService.getInsFeeOrderNewByCompanyId(insFeeAudit.getInsOrderNo()); InsAreaCompany insAreaCompany=insAreaCompanyMapper.selectById(insFeeAudit.getInsOrderNo()); //获取该订单的费用 InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getOne(new LambdaQueryWrapper() .eq(InsFeeOrderNew::getInsOrderNo, insFeeAudit.getInsOrderNo())); //获取操作人员的机构来源 String deptId=order.getDeptid(); List teamList = sysDeptService.findTeamList(deptId); teamList.forEach(sysDept -> { if(StringUtils.isNotEmpty(sysDept.getComlevel()) && sysDept.getComlevel().equals("1")){ BigDecimal jqDeptPremiumsLevel1 = insFeeOrderNew.getJqDeptPremiumsLevel1(); } }); //bigdecimal为null时设置为0 // handleBigdecimal(insFeeOrder); //生成保司费用(应收费用) gene_orderIncome( order, insFeeOrderNew,insAreaCompany); //生成机构费用 gene_deptfee( order, insFeeOrderNew,insAreaCompany); //生成分销费用 // saveRetail(order,insFeeOrderNew,insAreaCompany); //个代费用生成 // saveInsCompanyFee(order,insFeeOrderNew,insAreaCompany); // 生成 用户账户表 数据 if(StringUtils.isNotEmpty(order.getUserid())){ // 用戶賬戶表 SysUserAccount sysUserAccount = new SysUserAccount(); sysUserAccount.setUserId(order.getUserid()); if (ObjectUtils.isNotEmpty(insFeeOrderNew) ) { // 手续非佣金 = 交强监管费用 + 商业监管费用 + 非车监管费用 // 非跟单费用 = 交强非跟单费用 + 商业非跟单费用 + 非车非跟单费用 //手续费入口费用 // BigDecimal jqPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getJqSuperviseCostsPremiums());//交强监管费 // BigDecimal syPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getSySuperviseCostsPremiums());//商业监管费 // BigDecimal noPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getNoSuperviseCostsPremiums());//非车监管费用 // BigDecimal totalPremiumAmount = jqPremiumAmount.add(syPremiumAmount).add(noPremiumAmount); // 手续非佣金 // //其他费用入口费用 // BigDecimal jqOtherCostsPremiums =this.zeroBigdecimal(insFeeOrderNew.getJqOtherCostsPremiums());//交强其他费用 // BigDecimal syOtherCostsPremiums =this.zeroBigdecimal(insFeeOrderNew.getSyOtherCostsPremiums()); //商业其他费用 // BigDecimal noOtherCostsProportion = this.zeroBigdecimal(insFeeOrderNew.getNoOtherCostsPremiums());//非车其他费用 // BigDecimal totalOtherPremiumAmount = jqOtherCostsPremiums.add(syOtherCostsPremiums).add(noOtherCostsProportion); //非跟单费用 //总机构 交强管理比例 BigDecimal sumJqDeptProportion = insFeeOrderNew.getJqDeptProportionLevel1() .add(insFeeOrderNew.getJqDeptProportionLevel2()) .add(insFeeOrderNew.getJqDeptProportionLevel3()) .add(insFeeOrderNew.getJqDeptProportionLevel4()) .add(insFeeOrderNew.getJqDeptProportionLevel5()); //总机构 商业管理比例 BigDecimal sumSyDeptProportion = insFeeOrderNew.getSyDeptProportionLevel1() .add(insFeeOrderNew.getSyDeptProportionLevel2()) .add(insFeeOrderNew.getSyDeptProportionLevel3()) .add(insFeeOrderNew.getSyDeptProportionLevel4()) .add(insFeeOrderNew.getSyDeptProportionLevel5()); //总机构 非车管理比例 BigDecimal sumNoDeptProportion = insFeeOrderNew.getNoDeptProportionLevel1() .add(insFeeOrderNew.getNoDeptProportionLevel2()) .add(insFeeOrderNew.getNoDeptProportionLevel3()) .add(insFeeOrderNew.getNoDeptProportionLevel4()) .add(insFeeOrderNew.getNoDeptProportionLevel5()); //总分销比例 BigDecimal sumRetail = insFeeOrderNew.getFirstDetailProportion().add(insFeeOrderNew.getSecondDetailProportion()).add(insFeeOrderNew.getThirdDetailProportion()); //交强出口比例 BigDecimal jqExportProceduresProportion = new BigDecimal(0); if(insFeeOrderNew.getJqCostsProportion().compareTo(sumJqDeptProportion.add(sumRetail))>0){ jqExportProceduresProportion = insFeeOrderNew.getJqCostsProportion().subtract(sumJqDeptProportion).subtract(sumRetail); } //商业出口比例 BigDecimal syExportProceduresProportion = new BigDecimal(0); if(insFeeOrderNew.getSyCostsProportion().compareTo(sumSyDeptProportion.add(sumRetail))>0){ syExportProceduresProportion = insFeeOrderNew.getSyCostsProportion().subtract(sumSyDeptProportion).subtract(sumRetail); } //非车出口比例 BigDecimal noExportProceduresProportion = new BigDecimal(0); if(insFeeOrderNew.getNoCostsProportion().compareTo(sumNoDeptProportion.add(sumRetail))>0){ noExportProceduresProportion = insFeeOrderNew.getNoCostsProportion().subtract(sumNoDeptProportion).subtract(sumRetail); } //交强手续费出口比例 BigDecimal jqExportProceduresFee = insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqSuperviseCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN); //交强跟单出口费用 BigDecimal jqExportOtherFee = insFeeOrderNew.getJqPremium() .multiply(jqExportProceduresProportion .subtract(insFeeOrderNew.getJqSuperviseCostsProportion()).divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN); //商业手续费出口比例 BigDecimal syExportProceduresFee = insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSySuperviseCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN); //商业跟单出口比例 BigDecimal syExportOtherFee = insFeeOrderNew.getSyPremium() .multiply(syExportProceduresProportion .subtract(insFeeOrderNew.getSySuperviseCostsProportion()).divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN); //非车手续费出口比例 BigDecimal noExportProceduresFee = insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoSuperviseCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN); //非车跟单出口比例 BigDecimal noExportOtherFee = insFeeOrderNew.getNoPremium() .multiply(noExportProceduresProportion .subtract(insFeeOrderNew.getNoSuperviseCostsProportion()).divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN); //用户出口手续费 BigDecimal totalPremiumAmount = new BigDecimal(0); totalPremiumAmount = totalPremiumAmount.add(jqExportProceduresFee).add(syExportProceduresFee).add(noExportProceduresFee); //用户出口跟单费 BigDecimal totalOtherPremiumAmount = new BigDecimal(0); totalOtherPremiumAmount = totalOtherPremiumAmount.add(jqExportOtherFee).add(syExportOtherFee).add(noExportOtherFee); // 用戶 sysUserAccount.setHandlingFee(totalPremiumAmount); sysUserAccount.setDocumentary(totalOtherPremiumAmount); // 算佣金 this.countUserAmount(insFeeOrderNew,orderNo); sysUserAccount.setDocumentaryStatus("2"); // 收入 sysUserAccount.setSuborderId(orderNo); // 订单Id sysUserAccountService.addOrUpdate(sysUserAccount); String deptid = insFeeOrderNew.getDeptId(); String distributionStatus = insFeeOrderNew.getDistributionStatus(); // 定义一个数组来存储各级机构的管理费 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 (InsFeeAuditDistributionStatusEnum.DS_2.getCode().equals(distributionStatus) && insFeeOrderNew.getTwoLevelUserId() == null) { distributionFee = insFeeOrderNew.getSecondDetailPremiums(); } else if (InsFeeAuditDistributionStatusEnum.DS_3.getCode().equals(distributionStatus) && insFeeOrderNew.getThreeLevelUserId() == null) { distributionFee = insFeeOrderNew.getThirdDetailPremiums(); } } // 根据分销等级计算管理费总额 if (i == 5) { sumManagementFee = sumManagementFee.add(jqDeptPremiumsLevels[i - 1]) .add(syDeptPremiumsLevels[i - 1]) .add(noDeptPremiumsLevels[i - 1]) .add(distributionFee); } else { sumManagementFee = sumManagementFee.add(jqDeptPremiumsLevels[i - 1]) .add(syDeptPremiumsLevels[i - 1]) .add(noDeptPremiumsLevels[i - 1]); } // 如果机构信息不为空,更新管理费并记录历史 if (levelSysDeptAccount != null) { levelSysDeptAccount.setManagementFee(levelSysDeptAccount.getManagementFee().add(sumManagementFee)); sysDeptAccountService.updateById(levelSysDeptAccount); // 记录历史信息 SysDeptAccountHistory sysDeptAccountHistory = new SysDeptAccountHistory(); sysDeptAccountHistory.setId(IdGenerate.nextId()); sysDeptAccountHistory.setDeptId(levelDeptId); sysDeptAccountHistory.setAmount(sumManagementFee); sysDeptAccountHistory.setSurplusAmount(levelSysDeptAccount.getManagementFee()); sysDeptAccountHistory.setDocumentary("2"); //收入 sysDeptAccountHistory.setSuborder(orderNo); sysDeptAccountHistory.setFromBankCard(null); sysDeptAccountHistory.setToBankCard(null); sysDeptAccountHistory.setUserId(BaseController.getUser().getId()); sysDeptAccountHistory.setCreateTime(new Date()); sysDeptAccountHistory.setRemark("交强" + i + "级机构管理费:" + jqDeptPremiumsLevels[i - 1] + ",商业" + i + "级机构管理费:" + syDeptPremiumsLevels[i - 1] + ",非车" + i + "级机构管理费:" + noDeptPremiumsLevels[i - 1] + ",分销费:" + distributionFee); sysDeptAccountHistoryService.save(sysDeptAccountHistory); } else { // 如果机构信息为空,新建机构信息并记录历史 SysDeptAccount sysDeptAccount = new SysDeptAccount(); sysDeptAccount.setDeptId(levelDeptId); sysDeptAccount.setManagementFee(sumManagementFee); sysDeptAccount.setCreateTime(new Date()); sysDeptAccountService.save(sysDeptAccount); // 记录历史信息 SysDeptAccountHistory sysDeptAccountHistory = new SysDeptAccountHistory(); sysDeptAccountHistory.setId(IdGenerate.nextId()); sysDeptAccountHistory.setDeptId(levelDeptId); sysDeptAccountHistory.setAmount(sumManagementFee); sysDeptAccountHistory.setSurplusAmount(sumManagementFee); sysDeptAccountHistory.setDocumentary("2"); //收入 sysDeptAccountHistory.setSuborder(orderNo); sysDeptAccountHistory.setFromBankCard(null); sysDeptAccountHistory.setToBankCard(null); sysDeptAccountHistory.setUserId(BaseController.getUser().getId()); sysDeptAccountHistory.setCreateTime(new Date()); sysDeptAccountHistory.setRemark("交强" + i + "级机构管理费:" + jqDeptPremiumsLevels[i - 1] + ",商业" + i + "级机构管理费:" + syDeptPremiumsLevels[i - 1] + ",非车" + i + "级机构管理费:" + noDeptPremiumsLevels[i - 1] + ",分销费:" + distributionFee); sysDeptAccountHistoryService.save(sysDeptAccountHistory); } } } } return true; } 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 sysUserAccount = new SysUserAccount(); sysUserAccount.setUserId(userId); sysUserAccount.setPromotion(amount); sysUserAccount.setDocumentaryStatus("2"); // 收入 sysUserAccount.setSuborderId(orderNo); sysUserAccountService.addOrUpdate(sysUserAccount); } 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(LocalDateTime.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) throws Exception{ 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); } } } }