|
|
@@ -1,10 +1,35 @@
|
|
|
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>
|
|
|
@@ -17,4 +42,243 @@ import org.springframework.stereotype.Service;
|
|
|
@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);
|
|
|
+ } else if (insFeeOrder.getSecondDeptPremiums().doubleValue() > 0) {
|
|
|
+ deptFee.setComcode(order.getDeptid().substring(0, 4)); //99140302M01D01
|
|
|
+ deptFee.setKeeprate(insFeeOrder.getSecondDeptProportion().doubleValue() * 0.01);
|
|
|
+ deptFee.setKeepamount(insFeeOrder.getSecondDeptPremiums().doubleValue());
|
|
|
+ deptFee.setComlevel("二级");
|
|
|
+ insDeptFeeService.insert(deptFee);
|
|
|
+ }else 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);
|
|
|
+ }else 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);
|
|
|
+ }else 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.formatFullTime(insAreaCompany.getAudittime(),DateUtil.FULL_TIME_SPLIT_PATTERN));
|
|
|
+ //保存业务员费用
|
|
|
+ insCompanyFeeService.insert(insCompanyFee);
|
|
|
+ }
|
|
|
}
|