package com.ydtech.modules.fnc.service.impl; import cn.dev33.satoken.stp.StpUtil; import com.ydtech.modules.admin.model.SysUser; import com.ydtech.modules.admin.service.SysUserService; import com.ydtech.modules.esm.service.EsmUserReferrerService; import com.ydtech.modules.fnc.entity.InsFeeAudit; import com.ydtech.modules.fnc.dao.InsFeeAuditMapper; 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.order.entity.InsAreaCompany; import com.ydtech.modules.order.entity.InsFeeOrder; import com.ydtech.modules.order.entity.InsOrders; import com.ydtech.modules.order.service.InsAreaCompanyService; import com.ydtech.modules.order.service.InsFeeOrderService; import com.ydtech.modules.order.service.InsOrdersService; import com.ydtech.utils.DateUtil; 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 InsFeeOrderService insFeeOrderService; private final InsAreaCompanyService insAreaCompanyService; private final InsDeptFeeService insDeptFeeService; private final InsCommissionService insCommissionService; private final InsCompanyFeeService insCompanyFeeService; private final EsmUserReferrerService esmUserReferrerService; private final SysUserService sysUserService; public InsFeeAuditServiceImpl(InsAreaCompanyService insAreaCompanyService, InsOrdersMapper insOrdersMapper, InsFeeOrderService insFeeOrderService,InsDeptFeeService insDeptFeeService,EsmUserReferrerService esmUserReferrerService,SysUserService sysUserService,InsCommissionService insCommissionService,InsCompanyFeeService insCompanyFeeService) { this.insAreaCompanyService = insAreaCompanyService; this.insOrdersMapper = insOrdersMapper; this.insFeeOrderService=insFeeOrderService; this.insDeptFeeService=insDeptFeeService; this.esmUserReferrerService=esmUserReferrerService; this.sysUserService=sysUserService; this.insCommissionService=insCommissionService; this.insCompanyFeeService=insCompanyFeeService; } @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()); //bigdecimal为null时设置为0 handleBigdecimal(insFeeOrder); //生成机构费用 gene_deptfee( order, insFeeOrder); //生成分销费用 saveRetail(order,insFeeOrder); //个代费用生成 saveInsCompanyFee(order,insFeeOrder); } private void handleBigdecimal(InsFeeOrder insFeeOrder) { insFeeOrder.setJqCostsProportion(insFeeOrder.getJqCostsProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getJqCostsProportion()); insFeeOrder.setSyCostsProportion(insFeeOrder.getSyCostsProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getSyCostsProportion()); insFeeOrder.setJqCostsPremiums(insFeeOrder.getJqCostsPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getJqCostsPremiums()); insFeeOrder.setSyCostsPremiums(insFeeOrder.getSyCostsPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getSyCostsPremiums()); insFeeOrder.setJqPremium(insFeeOrder.getJqPremium() ==null ? BigDecimal.ZERO:insFeeOrder.getJqPremium()); insFeeOrder.setSyPremium(insFeeOrder.getSyPremium() ==null ? BigDecimal.ZERO:insFeeOrder.getSyPremium()); insFeeOrder.setJqNoTaxPremium(insFeeOrder.getJqNoTaxPremium() ==null ? BigDecimal.ZERO:insFeeOrder.getJqNoTaxPremium()); insFeeOrder.setSyNoTaxPremium(insFeeOrder.getSyNoTaxPremium() ==null ? BigDecimal.ZERO:insFeeOrder.getSyNoTaxPremium()); insFeeOrder.setJqSuperviseCostsProportion(insFeeOrder.getJqSuperviseCostsProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getJqSuperviseCostsProportion()); insFeeOrder.setJqSuperviseCostsPremiums(insFeeOrder.getJqSuperviseCostsPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getJqSuperviseCostsPremiums()); insFeeOrder.setSySuperviseCostsProportion(insFeeOrder.getSySuperviseCostsProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getSySuperviseCostsProportion()); insFeeOrder.setSySuperviseCostsPremiums(insFeeOrder.getSySuperviseCostsPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getSySuperviseCostsPremiums()); insFeeOrder.setJqSpilloverProportion(insFeeOrder.getJqSpilloverProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getJqSpilloverProportion()); insFeeOrder.setJqSpilloverPremiums(insFeeOrder.getJqSpilloverPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getJqSpilloverPremiums()); insFeeOrder.setSySpilloverProportion(insFeeOrder.getSySpilloverProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getSySpilloverProportion()); insFeeOrder.setSySpilloverPremiums(insFeeOrder.getSySpilloverPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getSySpilloverPremiums()); insFeeOrder.setFirstDeptProportion(insFeeOrder.getFirstDeptProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getFirstDeptProportion()); insFeeOrder.setFirstDeptPremiums(insFeeOrder.getFirstDeptPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getFirstDeptPremiums()); insFeeOrder.setSecondDeptProportion(insFeeOrder.getSecondDeptProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getSecondDeptProportion()); insFeeOrder.setSecondDeptPremiums(insFeeOrder.getSecondDeptPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getSecondDeptPremiums()); insFeeOrder.setThirdDeptProportion(insFeeOrder.getThirdDeptProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getThirdDeptProportion()); insFeeOrder.setThirdDeptPremiums(insFeeOrder.getThirdDeptPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getThirdDeptPremiums()); insFeeOrder.setForthDeptProportion(insFeeOrder.getForthDeptProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getForthDeptProportion()); insFeeOrder.setForthDeptPremiums(insFeeOrder.getForthDeptPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getForthDeptPremiums()); insFeeOrder.setFifthDeptProportion(insFeeOrder.getFifthDeptProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getFifthDeptProportion()); insFeeOrder.setFifthDeptPremiums(insFeeOrder.getFifthDeptPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getFifthDeptPremiums()); insFeeOrder.setFirstRetailProportion(insFeeOrder.getFirstRetailProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getFirstRetailProportion()); insFeeOrder.setFirstRetailPremiums(insFeeOrder.getFirstRetailPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getFirstRetailPremiums()); insFeeOrder.setSecondRetailProportion(insFeeOrder.getSecondRetailProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getSecondRetailProportion()); insFeeOrder.setSecondRetailPremiums(insFeeOrder.getSecondRetailPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getSecondRetailPremiums()); insFeeOrder.setThirdRetailProportion(insFeeOrder.getThirdRetailProportion() ==null ? BigDecimal.ZERO:insFeeOrder.getThirdRetailProportion()); insFeeOrder.setThirdRetailPremiums(insFeeOrder.getThirdRetailPremiums() ==null ? BigDecimal.ZERO:insFeeOrder.getThirdRetailPremiums()); } /** * 生成机构费用 * @param order * @param insFeeOrder * @throws Exception */ private void gene_deptfee( InsOrders order, InsFeeOrder insFeeOrder) throws Exception{ InsDeptFee deptFee = new InsDeptFee(); deptFee.setOrderno(order.getOrderno()); deptFee.setQuoteno(insFeeOrder.getInsOrderNo()); deptFee.setAgreeid(insFeeOrder.getAgreementId()); deptFee.setAuditstatus("1"); deptFee.setSettlestatus("0"); if (insFeeOrder.getFirstDeptPremiums().doubleValue() > 0) { deptFee.setComcode(order.getDeptid().substring(0, 2)); //99140302M01D01 deptFee.setKeeprate(insFeeOrder.getFirstDeptProportion().doubleValue() * 0.01); deptFee.setKeepamount(insFeeOrder.getFirstDeptPremiums().doubleValue()); deptFee.setComlevel("一级"); insDeptFeeService.insert(deptFee); } if (insFeeOrder.getSecondDeptPremiums().doubleValue() > 0) { deptFee.setComcode(order.getDeptid().substring(0, 4)); //99140302M01D01 deptFee.setKeeprate(insFeeOrder.getSecondDeptProportion().setScale(2).doubleValue() * 0.01); deptFee.setKeepamount(insFeeOrder.getSecondDeptPremiums().doubleValue()); deptFee.setComlevel("二级"); insDeptFeeService.insert(deptFee); } if (insFeeOrder.getThirdDeptPremiums().doubleValue() > 0) { deptFee.setComcode(order.getDeptid().substring(0, 6)); //99140302M01D01 deptFee.setKeeprate(insFeeOrder.getThirdDeptProportion().doubleValue() * 0.01); deptFee.setKeepamount(insFeeOrder.getThirdDeptPremiums().doubleValue()); deptFee.setComlevel("三级"); insDeptFeeService.insert(deptFee); } if (insFeeOrder.getForthDeptPremiums().doubleValue() > 0) { deptFee.setComcode(order.getDeptid().substring(0, 8)); //99140302M01D01 deptFee.setKeeprate(insFeeOrder.getForthDeptProportion().doubleValue() * 0.01); deptFee.setKeepamount(insFeeOrder.getForthDeptPremiums().doubleValue()); deptFee.setComlevel("四级"); insDeptFeeService.insert(deptFee); } if (insFeeOrder.getFifthDeptPremiums().doubleValue() > 0) { deptFee.setComcode(order.getDeptid().substring(0, 11)); //99140302M01D01 deptFee.setKeeprate(insFeeOrder.getFifthDeptProportion().doubleValue() * 0.01); deptFee.setKeepamount(insFeeOrder.getFifthDeptPremiums().doubleValue()); deptFee.setComlevel("五级"); insDeptFeeService.insert(deptFee); } } /** * 三级分销费用保存 * * @param order * @return */ public void saveRetail(InsOrders order,InsFeeOrder insFeeOrder) 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.setRefereescode(user.getId()); commission.setRefereesname(user.getName()); commission.setCommissionrate(insFeeOrder.getThirdRetailProportion().doubleValue()* 0.01); commission.setCommissionamount(insFeeOrder.getThirdRetailPremiums().doubleValue()); commission.setLevel("3"); commission.setAuditstatus("1"); //0未审核 1已审核 commission.setSettlestatus("0"); //0未结算 1已结算 commission.setInsuredtime(DateUtil.getDateFormat(new Date(),DateUtil.FULL_TIME_SPLIT_PATTERN)); //承保确认时间 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.setRefereescode(user.getId()); commission.setRefereesname(user.getName()); commission.setCommissionrate(insFeeOrder.getSecondRetailProportion().doubleValue()* 0.01); commission.setCommissionamount(insFeeOrder.getSecondRetailPremiums().doubleValue()); commission.setLevel("2"); commission.setAuditstatus("1"); //0未审核 1已审核 commission.setSettlestatus("0"); //0未结算 1已结算 commission.setInsuredtime(DateUtil.getDateFormat(new Date(),DateUtil.FULL_TIME_SPLIT_PATTERN)); //承保确认时间 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.setRefereescode(user.getId()); commission.setRefereesname(user.getName()); commission.setCommissionrate(insFeeOrder.getFirstRetailProportion().doubleValue()* 0.01); commission.setCommissionamount(insFeeOrder.getFirstRetailPremiums().doubleValue()); commission.setLevel("1"); commission.setAuditstatus("1"); //0未审核 1已审核 commission.setSettlestatus("0"); //0未结算 1已结算 commission.setInsuredtime(DateUtil.getDateFormat(new Date(),DateUtil.FULL_TIME_SPLIT_PATTERN)); //承保确认时间 insCommissionService.insert(commission); } } } /** * 生成个代费用 * @param order * @param insFeeOrder * @throws Exception */ public void saveInsCompanyFee(InsOrders order,InsFeeOrder insFeeOrder) throws Exception { InsAreaCompany insAreaCompany=insAreaCompanyService.getById(insFeeOrder.getInsOrderNo()); InsCompanyFee insCompanyFee = new InsCompanyFee(); insCompanyFee.setOrderno(order.getOrderno()); 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()); //交强费用比例=交强险费用比例-五级机构管理费比例-三级分销比例 insCompanyFee.setFeerate(insFeeOrder.getJqCostsProportion().subtract(dept_rate).subtract(retail_rate).doubleValue()); //商业费用比例=商业险费用比例-五级机构管理费比例-三级分销比例 insCompanyFee.setDisrate(insFeeOrder.getSyCostsProportion().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.setDisamount(insFeeOrder.getSyNoTaxPremium().multiply(insFeeOrder.getSyCostsProportion().subtract(dept_rate).subtract(retail_rate)).divide(new BigDecimal(100)).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue()); insCompanyFee.setJqpremium(insFeeOrder.getJqNoTaxPremium().doubleValue()); insCompanyFee.setSypremium(insFeeOrder.getSyNoTaxPremium().doubleValue()); insCompanyFee.setFrameNo(order.getFrameno()); insCompanyFee.setLicenseNo(order.getLicenseno()); insCompanyFee.setInscompany(insAreaCompany.getCompanyId()); insCompanyFee.setAgreeid(insFeeOrder.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)); //保存业务员费用 insCompanyFeeService.insert(insCompanyFee); } }