| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156 |
- package com.ydtech.modules.fnc.service.impl;
- import cn.dev33.satoken.stp.StpUtil;
- import cn.hutool.core.collection.CollUtil;
- import com.alibaba.fastjson.JSON;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.ydtech.constants.enums.dict.FeeAuditAuditstatus;
- import com.ydtech.constants.enums.dict.ins.InsFeeAuditDistributionStatusEnum;
- import com.ydtech.exception.SystemException;
- import com.ydtech.modules.admin.model.SysDept;
- import com.ydtech.modules.admin.model.SysDeptAccount;
- import com.ydtech.modules.admin.model.SysUser;
- import com.ydtech.modules.admin.model.SysUserRole;
- import com.ydtech.modules.admin.dao.SysPartnerAccountMapper;
- import com.ydtech.modules.admin.dao.SysPremiumDetailsMapper;
- import com.ydtech.modules.admin.model.*;
- import com.ydtech.modules.admin.model.po.SysChannelCost;
- import com.ydtech.modules.admin.model.po.SysUserAccount;
- import com.ydtech.modules.admin.model.vo.SysUserBaseVO;
- import com.ydtech.modules.admin.service.*;
- import com.ydtech.modules.base.controller.BaseController;
- import com.ydtech.modules.esm.model.EsmUserReferrer;
- import com.ydtech.modules.esm.service.EsmUserReferrerService;
- import com.ydtech.modules.fnc.dao.FncInsAreaCompanyMapper;
- import com.ydtech.modules.fnc.dao.InsFeeAuditMapper;
- import com.ydtech.modules.fnc.dao.InsPlyIncomeMapper;
- import com.ydtech.modules.fnc.entity.InsAreaCompany;
- import com.ydtech.modules.fnc.entity.InsFeeAudit;
- import com.ydtech.modules.fnc.entity.InsFeeAuditHistory;
- import com.ydtech.modules.fnc.entity.InsPlyIncome;
- import com.ydtech.modules.fnc.service.InsFeeAuditHistoryService;
- import com.ydtech.modules.fnc.service.InsFeeAuditService;
- import com.ydtech.modules.fnc.service.InsPlyIncomeService;
- 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.constants.BusinessConstant;
- import com.ydtech.modules.order.dao.InsOrdersMapper;
- import com.ydtech.modules.order.entity.InsFeeOrder;
- import com.ydtech.modules.order.entity.InsOrders;
- import com.ydtech.modules.order.entity.vo.FeeOrderNewVo;
- import com.ydtech.modules.order.entity.vo.OrderVo;
- import com.ydtech.modules.order.entity.vo.sendProject.SendProjectInfo;
- import com.ydtech.modules.protocol.service.PtlAgreementService;
- import com.ydtech.modules.protocol.utils.AssertionUtils;
- import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
- import com.ydtech.modules.protocols.entity.po.InsFeeOrderNewDistribution;
- import com.ydtech.modules.protocols.service.InsFeeOrderNewDistributionService;
- import com.ydtech.modules.protocols.service.InsFeeOrderNewService;
- import com.ydtech.modules.sendProject.dao.SendProjectMapper;
- import com.ydtech.modules.sendProject.entity.SendProjectEntity;
- import com.ydtech.utils.DateUtil;
- import com.ydtech.utils.StringUtils;
- import com.ydtech.utils.idgen.IdGenerate;
- import com.ydtech.utils.sendProjectUtils.SendProjrctUtils;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.lang3.ObjectUtils;
- import org.redisson.Redisson;
- import org.redisson.api.RLock;
- import org.springframework.beans.BeanUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import javax.annotation.Resource;
- import java.math.BigDecimal;
- import java.text.SimpleDateFormat;
- import java.time.LocalDateTime;
- import java.util.*;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- import java.util.concurrent.TimeUnit;
- /**
- * <p>
- * 服务实现类
- * </p>
- *
- * @author gws
- * @since 2023-11-22
- */
- @Service
- @Slf4j
- public class InsFeeAuditServiceImpl extends ServiceImpl<InsFeeAuditMapper, InsFeeAudit> implements InsFeeAuditService {
- private final InsOrdersMapper insOrdersMapper;
- private final InsPlyIncomeMapper insPlyIncomeMapper;
- 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;
- @Autowired
- private InsPlyIncomeService insPlyIncomeService;
- @Autowired
- private InsFeeAuditHistoryService insFeeAuditHistoryService;
- @Autowired
- private PtlAgreementService ptlAgreementService;
- @Autowired
- private SysChannelCostService sysChannelCostService;
- @Resource
- private SysPremiumDetailsMapper sysPremiumDetailsMapper;
- @Resource
- private SysPartnerAccountMapper sysPartnerAccountMapper;
- @Autowired
- private Redisson redisson;
- @Resource
- private InsFeeOrderNewDistributionService insFeeOrderNewDistributionService;
- @Autowired
- private SendProjrctUtils sendProjrctUtils;
- @Autowired
- private SysUserRoleService sysUserRoleService;
- @Autowired
- private SendProjectMapper sendProjectMapper;
- private ExecutorService executorService= Executors.newCachedThreadPool();
- private static final String STRING_0 = "0";
- private static final String STRING_1 = "1";
- private static final String STRING_2 = "2";
- private static final Integer INTEGER_0 = 0;
- public InsFeeAuditServiceImpl(FncInsAreaCompanyMapper insAreaCompanyMapper, InsOrdersMapper insOrdersMapper,
- InsDeptFeeService insDeptFeeService, EsmUserReferrerService esmUserReferrerService,
- SysUserService sysUserService, InsCommissionService insCommissionService,
- InsCompanyFeeService insCompanyFeeService, InsPlyIncomeMapper insPlyIncomeMapper) {
- this.insAreaCompanyMapper = insAreaCompanyMapper;
- this.insOrdersMapper = insOrdersMapper;
- 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, boolean isAutoAudit, String auditStatus) {
- // add by 2024-09-25 强制配置电销组长逻辑
- InsOrders order = insOrdersMapper.selectById(orderNo);
- SysUserBaseVO sysUserBaseVO = sysUserService.selectUserById(order.getUserid());
- SysUser user = sysUserService.getById(order.getUserid());
- SysDept dept = sysDeptService.getById(user.getDeptId());
- if("3".equals(sysUserBaseVO.getRoleId()) && "3".equals(dept.getManagementSource())){
- //查找电销组长,没有的话提示
- if (StringUtils.isBlank(user.getManagerId())) {
- throw new SystemException("电销组员未配置电销管理人");
- }
- }
- RLock locked = redisson.getLock("feeAudit." + insOrderNo);
- try {
- boolean isLock = locked.tryLock(60, 10, TimeUnit.SECONDS);
- if (!isLock) {
- throw new SystemException("当前业务繁忙,请稍后重试\n");
- }
- //添加费用审核表及轨迹信息
- InsFeeAudit insFeeAudit = saveInsFeeAuditAndHistory(orderNo, insOrderNo, isAutoAudit, auditStatus);
- //InsOrders order = insOrdersMapper.selectById(orderNo);
- InsAreaCompany insAreaCompany = insAreaCompanyMapper.selectById(insFeeAudit.getInsOrderNo());
- //获取该订单的费用
- InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getOne(new LambdaQueryWrapper<InsFeeOrderNew>()
- .eq(InsFeeOrderNew::getInsOrderNo, insFeeAudit.getInsOrderNo()));
- //生成机构费用
- gene_deptfee(order, insFeeOrderNew, insAreaCompany);
- //结算费用生成
- insPlyIncomeService.saveBalanceNew(order, insFeeOrderNew, insAreaCompany, user.getLeaderId(), user.getLeaderName());
- //生成 用户账户表 数据
- if (StringUtils.isNotEmpty(order.getUserid())) {
- //用戶賬戶表
- SysUserAccount sysUserAccount = new SysUserAccount();
- //add by hxl 2024-05-07 begin ==========
- //判断当前用户是否是出单员,如果是直接给团队长结算 角色id为19为出单员
- String userId = "";
- // SysUserBaseVO sysUserBaseVO = sysUserService.selectUserById(order.getUserid());
- // SysUser user = sysUserService.getById(order.getUserid());
- // SysDept dept = sysDeptService.getById(user.getDeptId());
- //出单员是19 且是渠道的话,给渠道团队长
- if ("19".equals(sysUserBaseVO.getRoleId()) && "1".equals(dept.getManagementSource())) {
- //查找该出单员的的团队长
- //找到上级
- userId = user.getOperatorCode();
- //if (userId == null || "".equals(userId)) {
- // throw new SystemException("出单员" + sysUserBaseVO.getName() + "所在机构缺少团队长,请设置!!!");
- //}
- //添加电销出单员出去单给电销组长结算
- } else if("3".equals(sysUserBaseVO.getRoleId()) && "3".equals(dept.getManagementSource())){
- //查找电销组长
- userId = user.getManagerId();
- } else {
- userId = order.getUserid();
- }
- sysUserAccount.setUserId(userId);
- // add by hxl 2024-05-07 end ==================
- if (ObjectUtils.isNotEmpty(insFeeOrderNew)) {
- //用户出口手续费
- BigDecimal totalPremiumAmount = new BigDecimal(0);
- totalPremiumAmount = totalPremiumAmount.add(insFeeOrderNew.getJqExportSuperviseCostsPremiums())
- .add(insFeeOrderNew.getSyExportSuperviseCostsPremiums()).add(insFeeOrderNew.getNoExportSuperviseCostsPremiums());
- //用户出口跟单费
- BigDecimal totalOtherPremiumAmount = new BigDecimal(0);
- totalOtherPremiumAmount =
- totalOtherPremiumAmount.add(insFeeOrderNew.getJqExportOtherCostsPremiums()).add(insFeeOrderNew.getSyExportOtherCostsPremiums()).add(insFeeOrderNew.getNoExportOtherCostsPremiums());
- //用戶
- //算佣金
- this.countUserAmount(insFeeOrderNew, insAreaCompany.getId());
- sysUserAccount.setHandlingFee(totalPremiumAmount);
- sysUserAccount.setDocumentary(totalOtherPremiumAmount);
- sysUserAccount.setDocumentaryStatus("2"); // 收入
- sysUserAccount.setSuborderId(insAreaCompany.getId()); // 订单Id
- sysUserAccountService.addOrUpdate(sysUserAccount);
- if (insFeeOrderNew.getDistributionStatus() != null) {
- createInsFeeOrderNewDistribution(insFeeOrderNew, insAreaCompany, order, order.getUserid(), BigDecimal.ZERO, BigDecimal.ZERO, "0");
- if (insFeeOrderNew.getFirstLevelUserId() != null) {
- createInsFeeOrderNewDistribution(insFeeOrderNew, insAreaCompany, order,
- insFeeOrderNew.getFirstLevelUserId(), insFeeOrderNew.getFirstDetailProportion(),
- insFeeOrderNew.getFirstDetailPremiums(), "1");
- }
- if (insFeeOrderNew.getTwoLevelUserId() != null) {
- createInsFeeOrderNewDistribution(insFeeOrderNew, insAreaCompany, order,
- insFeeOrderNew.getTwoLevelUserId(), insFeeOrderNew.getSecondDetailProportion(),
- insFeeOrderNew.getSecondDetailPremiums(), "2");
- }
- if (insFeeOrderNew.getThreeLevelUserId() != null) {
- createInsFeeOrderNewDistribution(insFeeOrderNew, insAreaCompany, order,
- insFeeOrderNew.getThreeLevelUserId(), insFeeOrderNew.getThirdDetailProportion(),
- insFeeOrderNew.getThirdDetailPremiums(), "3");
- }
- }
- String deptid = insFeeOrderNew.getDeptId();
- // 定义一个数组来存储各级机构的管理费
- 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 == 1) {
- if (insFeeOrderNew.getFirstLevelUserId() == null) {
- distributionFee = distributionFee.add(insFeeOrderNew.getFirstDetailPremiums());
- }
- if (insFeeOrderNew.getTwoLevelUserId() == null) {
- distributionFee = distributionFee.add(insFeeOrderNew.getSecondDetailPremiums());
- }
- if (insFeeOrderNew.getThreeLevelUserId() == null) {
- distributionFee = distributionFee.add(insFeeOrderNew.getThirdDetailPremiums());
- }
- }
- // 根据分销等级计算管理费总额
- sumManagementFee = sumManagementFee.add(jqDeptPremiumsLevels[i - 1])
- .add(syDeptPremiumsLevels[i - 1])
- .add(noDeptPremiumsLevels[i - 1]);
- if (i == 1) {
- sumManagementFee = sumManagementFee.add(distributionFee);
- }
- // 如果机构信息不为空,更新管理费并记录历史
- if (levelSysDeptAccount != null) {
- levelSysDeptAccount.setManagementFee(levelSysDeptAccount.getManagementFee().add(sumManagementFee));
- sysDeptAccountService.updateById(levelSysDeptAccount);
- } else {
- // 如果机构信息为空,新建机构信息并记录历史
- levelSysDeptAccount = new SysDeptAccount();
- levelSysDeptAccount.setDeptId(levelDeptId);
- levelSysDeptAccount.setManagementFee(sumManagementFee);
- levelSysDeptAccount.setCreateTime(new Date());
- sysDeptAccountService.save(levelSysDeptAccount);
- }
- // 记录历史信息
- // 拼接备注
- String remark = this.getDeptFeeHistoryLog(i, jqDeptPremiumsLevels, syDeptPremiumsLevels, noDeptPremiumsLevels,
- distributionFee);
- sysDeptAccountHistoryService.addHistory(levelDeptId, sumManagementFee, levelSysDeptAccount.getManagementFee(), "2",
- insOrderNo, BaseController.getUser().getId(), remark);
- }
- }
- }
- // 获取加投结算数据 并审核通过
- LambdaQueryWrapper<SysChannelCost> costWrapper = new LambdaQueryWrapper<>();
- costWrapper.eq(SysChannelCost::getOrderNo, insOrderNo);
- List<SysChannelCost> costList = sysChannelCostService.list(costWrapper);
- if(CollUtil.isNotEmpty(costList)){
- for (SysChannelCost sysChannelCost : costList) {
- sysChannelCost.setStatus(1); // 审核通过
- sysChannelCost.setPayDate(insAreaCompany.getPayDate());
- sysChannelCost.setSigningTime(insAreaCompany.getSigningTime());
- sysChannelCost.setUpdateTime(LocalDateTime.now());
- sysChannelCost.setUpdateBy(BaseController.getUser().getName());
- }
- sysChannelCostService.updateBatchById(costList);
- }
- // //抽层状态修改
- // sysPremiumDetailsMapper.updateStatus(insAreaCompany.getId());
- // List<SysPremiumDetails> sysPremiumDetails = sysPremiumDetailsMapper.selectList(new LambdaQueryWrapper<SysPremiumDetails>()
- // .eq(SysPremiumDetails::getCompanyId,insAreaCompany.getId()).eq(SysPremiumDetails::getType,2));
- // if (sysPremiumDetails.size()>0) {
- // for (SysPremiumDetails sysPremiumDetail : sysPremiumDetails) {
- // SysPartnerAccount sysPartnerAccount = sysPartnerAccountMapper.selectOne(new LambdaQueryWrapper<SysPartnerAccount>()
- // .eq(SysPartnerAccount::getUserId,sysPremiumDetail.getUserId()));
- // if (sysPartnerAccount == null) {
- // SysPartnerAccount sysPartnerAccount1 = new SysPartnerAccount();
- // sysPartnerAccount1.setCreateTime(new Date());
- // sysPartnerAccount1.setSumPremium(sysPremiumDetail.getSumpremium());
- // sysPartnerAccount1.setExtractFee(sysPremiumDetail.getExtractFee());
- // sysPartnerAccount1.setCashFee(sysPremiumDetail.getExtractFee());
- // sysPartnerAccount1.setUserId(sysPremiumDetail.getUserId());
- // sysPartnerAccountMapper.insert(sysPartnerAccount1);
- // }else {
- // sysPartnerAccount.setSumPremium(sysPartnerAccount.getSumPremium().add(sysPremiumDetail.getSumpremium()));
- // sysPartnerAccount.setExtractFee(sysPartnerAccount.getExtractFee().add(sysPremiumDetail.getExtractFee()));
- // sysPartnerAccount.setCashFee(sysPartnerAccount.getCashFee().add(sysPremiumDetail.getExtractFee()));
- // sysPartnerAccountMapper.updateById(sysPartnerAccount);
- // }
- // }
- //
- // }
- } catch (Exception e) {
- throw new SystemException("当前业务繁忙,请稍后重试");
- } finally {
- //释放锁
- if (locked.isHeldByCurrentThread()) {
- locked.unlock();
- }
- }
- }
- private void createInsFeeOrderNewDistribution(InsFeeOrderNew insFeeOrderNew, InsAreaCompany insAreaCompany, InsOrders insOrders,
- String userId, BigDecimal commissionRate, BigDecimal commissionAmount,
- String commissionLevel) {
- InsFeeOrderNewDistribution insFeeOrderNewDistribution = new InsFeeOrderNewDistribution();
- insFeeOrderNewDistribution.setId(IdGenerate.nextId());
- insFeeOrderNewDistribution.setOrderNo(insFeeOrderNew.getInsOrderNo());
- insFeeOrderNewDistribution.setJqPolicyNo(insAreaCompany.getJqpolicyno());
- insFeeOrderNewDistribution.setSyPolicyNo(insAreaCompany.getSypolicyno());
- insFeeOrderNewDistribution.setOperator(insOrders.getUserid());
- insFeeOrderNewDistribution.setLicenseNo(insOrders.getLicenseno());
- insFeeOrderNewDistribution.setProductId(insAreaCompany.getProductid());
- insFeeOrderNewDistribution.setProduct(insAreaCompany.getProduct());
- insFeeOrderNewDistribution.setSignTime(insAreaCompany.getSigningTime());
- insFeeOrderNewDistribution.setInsCompany(insAreaCompany.getInscompany());
- insFeeOrderNewDistribution.setUserId(userId);
- insFeeOrderNewDistribution.setCommissionRate(commissionRate);
- insFeeOrderNewDistribution.setCommissionAmount(commissionAmount);
- insFeeOrderNewDistribution.setCommissionLevel(commissionLevel);
- insFeeOrderNewDistribution.setCreateTime(new Date());
- // 保存insFeeOrderNewDistribution
- insFeeOrderNewDistributionService.save(insFeeOrderNewDistribution);
- }
- private String getDeptFeeHistoryLog(Integer index, BigDecimal[] jqDeptPremiumsLevels, BigDecimal[] syDeptPremiumsLevels,
- BigDecimal[] noDeptPremiumsLevels, BigDecimal distributionFee) {
- StringBuilder remarkBuilder = new StringBuilder();
- if (jqDeptPremiumsLevels[index - 1].compareTo(BigDecimal.ZERO) != 0) {
- remarkBuilder.append("交强").append(index).append("级机构管理费:");
- remarkBuilder.append(jqDeptPremiumsLevels[index - 1]).append(",");
- }
- if (syDeptPremiumsLevels[index - 1].compareTo(BigDecimal.ZERO) != 0) {
- remarkBuilder.append("商业").append(index).append("级机构管理费:");
- remarkBuilder.append(syDeptPremiumsLevels[index - 1]).append(",");
- }
- if (noDeptPremiumsLevels[index - 1].compareTo(BigDecimal.ZERO) != 0) {
- remarkBuilder.append("非车").append(index).append("级机构管理费:");
- remarkBuilder.append(noDeptPremiumsLevels[index - 1]).append(",");
- }
- if (distributionFee.compareTo(BigDecimal.ZERO) != 0) {
- remarkBuilder.append("分销费:").append(distributionFee).append(",");
- }
- String remark = remarkBuilder.toString();
- if (remark.endsWith(",")) {
- remark = remark.substring(0, remark.length() - 1);
- }
- return remark;
- }
- 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 sysUserOldAccount = new SysUserAccount();
- sysUserOldAccount.setUserId(userId);
- sysUserOldAccount.setPromotion(amount);
- sysUserOldAccount.setDocumentaryStatus("2"); // 收入
- sysUserOldAccount.setSuborderId(orderNo);
- sysUserAccountService.addOrUpdate(sysUserOldAccount);
- }
- 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) {
- 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);
- }
- }
- }
- /**
- * 保存保险费用审核信息及审核历史。
- *
- * @param orderNo 订单号
- * @param insOrderNo 保险订单号
- * @param isAutoAudit 是否自动审核,true表示自动审核,false表示人工审核
- * @param auditstatus 审核状态码
- */
- @Override
- @Transactional
- public InsFeeAudit saveInsFeeAuditAndHistory(String orderNo, String insOrderNo, boolean isAutoAudit, String auditstatus) {
- //查询费用审核表
- InsFeeAudit insFeeAudit = getOne(new LambdaQueryWrapper<InsFeeAudit>().eq(InsFeeAudit::getInsOrderNo, insOrderNo));
- if (insFeeAudit != null && insFeeAudit.getAuditstatus().equals("1")) {
- throw new SystemException("该订单费用已审核,请刷新页面");
- }
- String userId;
- // 填充审核人
- if (isAutoAudit) {
- userId = "自动审核";
- } else {
- userId = StpUtil.getLoginId().toString();
- }
- //添加审核轨迹表
- InsFeeAuditHistory insFeeAuditHistory = new InsFeeAuditHistory();
- if (insFeeAudit == null) {
- insFeeAudit = new InsFeeAudit();
- // 设置订单号和保险订单号
- insFeeAudit.setAudituser(userId);
- insFeeAudit.setOrderno(orderNo);
- insFeeAudit.setInsOrderNo(insOrderNo);
- insFeeAudit.setAudittime(LocalDateTime.now());
- insFeeAudit.setAuditstatus(auditstatus);
- this.save(insFeeAudit);
- } else {
- //状态码为已审核且数据不为空,则更新审核状态
- insFeeAudit.setAuditstatus(FeeAuditAuditstatus.PASSED.getCode());
- insFeeAudit.setAudittime(LocalDateTime.now());
- insFeeAudit.setAudituser(userId);
- boolean update = this.update(insFeeAudit, new LambdaUpdateWrapper<InsFeeAudit>()
- .eq(InsFeeAudit::getAuditstatus, FeeAuditAuditstatus.UNREVICEWED.getCode())
- .eq(InsFeeAudit::getInsOrderNo, insOrderNo)
- );
- AssertionUtils.isSucceed(update, "审核状态异常");
- }
- //复制审核对象的属性
- BeanUtils.copyProperties(insFeeAudit, insFeeAuditHistory);
- InsAreaCompany insAreaCompany = insAreaCompanyMapper.selectById(insFeeAudit.getInsOrderNo());
- // 设置操作时间和操作人及保险公司名称
- insFeeAuditHistory.setInsCompany(insAreaCompany.getInscompany());
- insFeeAuditHistory.setOperatorTime(LocalDateTime.now());
- insFeeAuditHistory.setOperator(BaseController.getUser().getName());
- // 保存审核轨迹
- insFeeAuditHistoryService.save(insFeeAuditHistory);
- return insFeeAudit;
- }
- @Override
- public InsFeeAudit saveDefaultInsFeeAuditAndHistory(String orderNo, String insOrderNo, String auditstatus, String rejectInfo) {
- //查询费用审核表
- InsFeeAudit insFeeAudit = getOne(new LambdaQueryWrapper<InsFeeAudit>()
- .eq(InsFeeAudit::getOrderno, orderNo)
- .eq(InsFeeAudit::getInsOrderNo, insOrderNo));
- //添加审核轨迹表
- InsFeeAuditHistory insFeeAuditHistory = new InsFeeAuditHistory();
- if (insFeeAudit == null) {
- insFeeAudit = new InsFeeAudit();
- // 设置订单号和保险订单号
- insFeeAudit.setOrderno(orderNo);
- insFeeAudit.setInsOrderNo(insOrderNo);
- insFeeAudit.setAuditstatus(auditstatus);
- this.save(insFeeAudit);
- } else {
- //状态码为已审核且数据不为空,则更新审核状态
- //如果审核状态为已审核则一直都是已审核
- if (insFeeAudit.getAuditstatus().equals(FeeAuditAuditstatus.PASSED.getCode())) {
- insFeeAudit.setAuditstatus(insFeeAudit.getAuditstatus());
- } else {
- insFeeAudit.setAuditstatus(auditstatus);
- }
- insFeeAudit.setAudituser(BaseController.getUser().getName());
- insFeeAudit.setAudittime(LocalDateTime.now());
- insFeeAudit.setRejectinfo(rejectInfo);
- this.update(insFeeAudit, new LambdaUpdateWrapper<InsFeeAudit>()
- .eq(InsFeeAudit::getOrderno, orderNo)
- .eq(InsFeeAudit::getInsOrderNo, insOrderNo));
- }
- //复制审核对象的属性
- BeanUtils.copyProperties(insFeeAudit, insFeeAuditHistory);
- InsAreaCompany insAreaCompany = insAreaCompanyMapper.selectById(insFeeAudit.getInsOrderNo());
- // 设置操作时间和操作人及保险公司名称
- insFeeAuditHistory.setInsCompany(insAreaCompany.getInscompany());
- insFeeAuditHistory.setOperatorTime(LocalDateTime.now());
- insFeeAuditHistory.setOperator(BaseController.getUser().getName());
- // 保存审核轨迹
- insFeeAuditHistoryService.save(insFeeAuditHistory);
- return insFeeAudit;
- }
- /**
- * 获取费用审核 根据子订单id
- *
- * @return
- */
- @Override
- public InsFeeAudit getFeeAuditByInsOrderNo(String insOrderNo) {
- LambdaQueryWrapper<InsFeeAudit> queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.eq(InsFeeAudit::getInsOrderNo, insOrderNo);
- return this.getOne(queryWrapper);
- }
- @Override
- public void sendProject(String insOrderNo) {
- log.info("订单:{},审核通过后首次推送服务", insOrderNo);
- executorService.submit(new Runnable() {
- @Override
- public void run() {
- log.info("异步线程开始!程序启动时间:{}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
- SendProjectInfo sendProjectInfo = new SendProjectInfo();
- //查询归属信息
- OrderVo orderAndAreaCompany = new OrderVo();
- EsmUserReferrer esmUserReferrer = new EsmUserReferrer();
- try {
- log.info("查询ins_orders数据库入参:{}", insOrderNo);
- orderAndAreaCompany = insOrdersMapper.getOrderAndAreaCompany(insOrderNo);
- log.info("查询ins_orders数据库出参:{}", JSON.toJSON(orderAndAreaCompany));
- log.info("查询esm_user_referrer数据库入参:{}", orderAndAreaCompany.getUserid());
- esmUserReferrer = esmUserReferrerService.getById(orderAndAreaCompany.getUserid());
- log.info("查询esm_user_referrer数据库出参:{}", JSON.toJSON(esmUserReferrer));
- } catch (Exception e) {
- e.printStackTrace();
- log.error("查询ins_orders/esm_user_referrer数据库报错:{}", e.getMessage());
- }
- if (esmUserReferrer != null) {
- sendProjectInfo.setReferrerNo(esmUserReferrer.getReferrerId());
- }
- if (orderAndAreaCompany != null) {
- sendProjectInfo.setUserId(orderAndAreaCompany.getUserid());
- }
- //查询费用信息
- log.info("查询ins_fee_order_new数据库");
- InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getOne(new LambdaQueryWrapper<InsFeeOrderNew>()
- .eq(InsFeeOrderNew::getInsOrderNo, insOrderNo));
- log.info("查询ins_fee_order_new数据库出参:{}", JSON.toJSON(insFeeOrderNew));
- FeeOrderNewVo.ExportFee exportFee = exportFee(insFeeOrderNew);
- BigDecimal totalAmount = exportFee.getTotalAmount();
- StringBuffer uuid = new StringBuffer();
- uuid.append(new SimpleDateFormat("yyyyMMddHHmmss"))
- .append(UUID.randomUUID());
- SendProjectInfo userInfo = new SendProjectInfo();
- try {
- log.info("查询数据库保险订单表入参:{}", insOrderNo);
- userInfo = insOrdersMapper.getOrderByCompanyId(insOrderNo);
- log.info("查询数据库保险订单表出参:{}", JSON.toJSON(userInfo));
- } catch (Exception e) {
- log.error("查询数据库保险订单表报错:{}", e.getMessage());
- }
- if (userInfo == null) {
- return;
- }
- sendProjectInfo.setGiveBudget(totalAmount);
- sendProjectInfo.setUuid(uuid.toString());
- sendProjectInfo.setUserName(userInfo.getUserName());
- sendProjectInfo.setUserPhone(userInfo.getUserPhone());
- sendProjectInfo.setUserCarNum(userInfo.getUserCarNum());
- SendProjectEntity addSendProject = new SendProjectEntity();
- addSendProject.setTotalAmount(sendProjectInfo.getGiveBudget());
- addSendProject.setUserName(sendProjectInfo.getUserName());
- addSendProject.setUserCarNum(sendProjectInfo.getUserCarNum());
- addSendProject.setUserPhone(sendProjectInfo.getUserPhone());
- addSendProject.setSendState(STRING_2);
- addSendProject.setSendUuid(sendProjectInfo.getSendUuid());
- addSendProject.setUserId(sendProjectInfo.getUserId());
- addSendProject.setReferrerNo(sendProjectInfo.getReferrerNo());
- addSendProject.setFailNum(INTEGER_0);
- addSendProject.setState(STRING_1);
- addSendProject.setIsDelete(STRING_0);
- addSendProject.setCreateTime(new Date());
- addSendProject.setUpdateTime(new Date());
- try {
- log.info("新增推送服务数据库入参:{}", JSON.toJSON(addSendProject));
- sendProjectMapper.addSendProjectInfo(addSendProject);
- } catch (Exception e) {
- e.printStackTrace();
- log.error("新增推送服务数据库报错:{}", e.getMessage());
- }
- sendProjrctUtils.firstSendProject(sendProjectInfo);
- }
- });
- }
- private FeeOrderNewVo.ExportFee exportFee(InsFeeOrderNew insFeeOrderNew) {
- List<FeeOrderNewVo.ExportFee> exportFeeList = new ArrayList<>();
- //region 出口费用
- //交强
- FeeOrderNewVo.ExportFee jqExportFee = this.assignExportFee(BusinessConstant.FEE_INSURANCE_TYPE_1,
- insFeeOrderNew.getJqPremium(), insFeeOrderNew.getJqCostsExportProportion(),
- insFeeOrderNew.getJqExportOtherCostsProportion(),
- insFeeOrderNew.getJqExportSuperviseCostsPremiums(), insFeeOrderNew.getJqExportOtherCostsPremiums()
- );
- //exportFeeList.add(jqExportFee);
- //交强
- FeeOrderNewVo.ExportFee syExportFee = this.assignExportFee(BusinessConstant.FEE_INSURANCE_TYPE_2,
- insFeeOrderNew.getSyPremium(), insFeeOrderNew.getSyCostsExportProportion(),
- insFeeOrderNew.getSyExportOtherCostsProportion(),
- insFeeOrderNew.getSyExportSuperviseCostsPremiums(), insFeeOrderNew.getSyExportOtherCostsPremiums()
- );
- //exportFeeList.add(syExportFee);
- //交强
- FeeOrderNewVo.ExportFee noExportFee = this.assignExportFee(BusinessConstant.FEE_INSURANCE_TYPE_3,
- insFeeOrderNew.getNoPremium(), insFeeOrderNew.getNoCostsExportProportion(),
- insFeeOrderNew.getNoExportOtherCostsProportion(),
- insFeeOrderNew.getNoExportSuperviseCostsPremiums(), insFeeOrderNew.getNoExportOtherCostsPremiums());
- // exportFeeList.add(noExportFee);
- //add by hxl 添加出单员不能查看优惠的限制 2024-07-11
- String userId = BaseController.getUserId();
- SysUserRole sysUserRole = sysUserRoleService.selectByUserId(userId);
- if (sysUserRole != null && sysUserRole.getRoleId() == 19) {
- jqExportFee.setTotalAmount(BigDecimal.ZERO);
- jqExportFee.setTotalProportion(BigDecimal.ZERO);
- syExportFee.setTotalAmount(BigDecimal.ZERO);
- syExportFee.setTotalProportion(BigDecimal.ZERO);
- noExportFee.setTotalAmount(BigDecimal.ZERO);
- noExportFee.setTotalProportion(BigDecimal.ZERO);
- }
- exportFeeList.add(jqExportFee);
- exportFeeList.add(syExportFee);
- exportFeeList.add(noExportFee);
- //出口费用合计
- FeeOrderNewVo.ExportFee exportFeeTotal = assignExportFeeTotal(exportFeeList);
- return exportFeeTotal;
- }
- private FeeOrderNewVo.ExportFee assignExportFeeTotal(List<FeeOrderNewVo.ExportFee> exportFeeList) {
- FeeOrderNewVo.ExportFee exportFee = new FeeOrderNewVo.ExportFee();
- exportFee.setInsuranceType(BusinessConstant.FEE_INSURANCE_TYPE_4);
- //总费用合计
- BigDecimal totalAmount = exportFeeList.stream().map(FeeOrderNewVo.ExportFee::getTotalAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
- exportFee.setTotalAmount(Optional.of(totalAmount).orElse(BigDecimal.ZERO));
- return exportFee;
- }
- /**
- * 出口费用赋值
- *
- * @param title
- * @param premium
- * @param superviseCostsProportion
- * @param otherCostsProportion
- * @param superviseCostsPremiums
- * @param otherCostsPremiums
- * @return
- */
- public FeeOrderNewVo.ExportFee assignExportFee(String title, BigDecimal premium, BigDecimal superviseCostsProportion,
- BigDecimal otherCostsProportion,
- BigDecimal superviseCostsPremiums, BigDecimal otherCostsPremiums
- ) {
- FeeOrderNewVo.ExportFee exportFee = new FeeOrderNewVo.ExportFee();
- exportFee.setInsuranceType(title);
- //保费
- exportFee.setPremium(premium);
- //手续费比例
- exportFee.setSuperviseCosts(superviseCostsProportion);
- //跟单比例
- exportFee.setOtherCostsProportion(otherCostsProportion);
- //总比例
- exportFee.setTotalProportion(superviseCostsProportion.add(otherCostsProportion));
- //手续费
- exportFee.setSuperviseCostsPremiums(superviseCostsPremiums);
- //跟单费
- exportFee.setOtherCostsPremiums(otherCostsPremiums);
- //总费用
- exportFee.setTotalAmount(superviseCostsPremiums.add(otherCostsPremiums));
- return exportFee;
- }
- }
|