| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- 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;
- /**
- * <p>
- * 服务实现类
- * </p>
- *
- * @author gws
- * @since 2023-11-22
- */
- @Service
- public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFeeAudit> 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<String> 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);
- }
- }
|