package com.ydtech.modules.fnc.service.impl; import cn.dev33.satoken.stp.StpUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ydtech.modules.admin.model.SysDept; import com.ydtech.modules.admin.model.SysUser; import com.ydtech.modules.admin.service.SysDeptService; import com.ydtech.modules.admin.service.SysUserService; 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.order.service.InsOrdersService; 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 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 SysDeptService sysDeptService; 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); InsFeeOrder insFeeOrder=insFeeOrderService.getByInsOrderNo(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(sysDept.getComlevel().equals("1")){ BigDecimal jqDeptPremiumsLevel1 = insFeeOrderNew.getJqDeptPremiumsLevel1(); } }); //bigdecimal为null时设置为0 // handleBigdecimal(insFeeOrder); //生成保司费用(应收费用) gene_orderIncome( order, insFeeOrder,insAreaCompany); //生成机构费用 gene_deptfee( order, insFeeOrder,insAreaCompany); //生成分销费用 saveRetail(order,insFeeOrder,insAreaCompany); //个代费用生成 saveInsCompanyFee(order,insFeeOrder,insAreaCompany); } /** * 生成保司费用(应收费用) * @param order * @param insFeeOrder * @throws Exception */ private void gene_orderIncome( InsOrders order, InsFeeOrder 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()); 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)); 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, InsFeeOrder insFeeOrder,InsAreaCompany plyDto) throws Exception{ InsDeptFee deptFee = new InsDeptFee(); deptFee.setOrderno(order.getOrderno()); deptFee.setQuoteno(insFeeOrder.getInsOrderNo()); deptFee.setAgreeid(String.valueOf(plyDto.getAgreementId())); deptFee.setAuditstatus("1"); deptFee.setSettlestatus("0"); 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()); geneInsDeptFee(order, insFeeOrder, deptFee); } if(StringUtils.isNotEmpty(plyDto.getSypolicyno())){ deptFee.setPolicyno(plyDto.getSypolicyno()); deptFee.setRiskcode("商业"); deptFee.setLicenseno(order.getLicenseno()); geneInsDeptFee(order, insFeeOrder, deptFee); } } private void geneInsDeptFee(InsOrders order, InsFeeOrder insFeeOrder, InsDeptFee deptFee) { if (insFeeOrder.getFirstDeptPremiums().doubleValue() > 0) { deptFee.setComcode(order.getDeptid().substring(0, 2)); //99140302M01D01 deptFee.setComlevel("一级"); insDeptFeeService.insert(deptFee); } if (insFeeOrder.getSecondDeptPremiums().doubleValue() > 0) { deptFee.setComcode(order.getDeptid().substring(0, 4)); //99140302M01D01 deptFee.setComlevel("二级"); insDeptFeeService.insert(deptFee); } if (insFeeOrder.getThirdDeptPremiums().doubleValue() > 0) { deptFee.setComcode(order.getDeptid().substring(0, 6)); //99140302M01D01 deptFee.setComlevel("三级"); insDeptFeeService.insert(deptFee); } if (insFeeOrder.getForthDeptPremiums().doubleValue() > 0) { deptFee.setComcode(order.getDeptid().substring(0, 8)); //99140302M01D01 deptFee.setComlevel("四级"); insDeptFeeService.insert(deptFee); } if (insFeeOrder.getFifthDeptPremiums().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)); insCompanyFee.setSignDate(DateUtil.formatFullTime(plyDto.getInsidePayTime(),DateUtil.FULL_TIME_SPLIT_PATTERN)); 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); } } }