| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691 |
- 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;
- /**
- * <p>
- * 服务实现类
- * </p>
- *
- * @author gws
- * @since 2023-11-22
- */
- @Service
- public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFeeAudit> 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<InsFeeOrderNew>()
- .eq(InsFeeOrderNew::getInsOrderNo, insFeeAudit.getInsOrderNo()));
- //获取操作人员的机构来源
- String deptId=order.getDeptid();
- List<SysDept> 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); //非跟单费用
- // 用戶
- 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<SysDeptAccount>()
- .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);
- }
- }
- }
- }
- }
- 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<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.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);
- }
- }
- }
- }
|