| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085 |
- package com.ydtech.modules.fnc.service.impl;
- import cn.dev33.satoken.stp.StpUtil;
- import cn.hutool.core.collection.CollUtil;
- import cn.hutool.extra.spring.SpringUtil;
- 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.constants.ManagementSource;
- import com.ydtech.modules.admin.dao.SysPartnerAccountMapper;
- import com.ydtech.modules.admin.dao.SysPremiumDetailsMapper;
- import com.ydtech.modules.admin.dao.SysUserBankCardMapper;
- 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.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.lg.service.PushLgDataServerService;
- 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.service.InsOrdersService;
- 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.utils.DateUtil;
- import com.ydtech.utils.StringUtils;
- import com.ydtech.utils.idgen.IdGenerate;
- 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.data.redis.core.RedisTemplate;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import javax.annotation.Resource;
- import java.math.BigDecimal;
- import java.time.LocalDateTime;
- import java.util.*;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- import java.util.concurrent.TimeUnit;
- import java.util.stream.Collectors;
- /**
- * <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 SysUserRoleService sysUserRoleService;
- @Autowired
- private PushLgDataServerService dataServerService;
- private ExecutorService executorService = Executors.newCachedThreadPool();
- @Autowired
- private InsOrdersService insOrdersService;
- @Autowired
- private SysSwitchConfigService sysSwitchConfigService;
- @Autowired
- private RedisTemplate redisTemplate;
- 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(rollbackFor = Exception.class)
- 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);
- }
- //先把钱加到总账户,再修改抽层状态
- List<SysPremiumDetails> sysPremiumDetails = sysPremiumDetailsMapper.selectList(new LambdaQueryWrapper<SysPremiumDetails>()
- .eq(SysPremiumDetails::getCompanyId, insAreaCompany.getId())
- .eq(SysPremiumDetails::getType, 2)
- .eq(SysPremiumDetails::getStatus, 0));
- if (sysPremiumDetails.isEmpty()) {
- //已承保记录保费数据
- com.ydtech.modules.order.entity.InsAreaCompany insAreaCompany1 = new com.ydtech.modules.order.entity.InsAreaCompany();
- BeanUtils.copyProperties(insAreaCompany, insAreaCompany1);
- insOrdersService.saveFeeInfo(insAreaCompany1);
- sysPremiumDetails = sysPremiumDetailsMapper.selectList(new LambdaQueryWrapper<SysPremiumDetails>()
- .eq(SysPremiumDetails::getCompanyId, insAreaCompany.getId())
- .eq(SysPremiumDetails::getType, 2)
- .eq(SysPremiumDetails::getStatus, 0));
- }
- Map<String, List<SysPremiumDetails>> listMap = sysPremiumDetails.stream()
- .sorted(Comparator.comparing(SysPremiumDetails::getId))
- .collect(Collectors.groupingBy(SysPremiumDetails::getUserId));
- for (String key : listMap.keySet()) {
- List<SysPremiumDetails> sysPremiumDetails1 = listMap.get(key);
- if (sysPremiumDetails1.size() > 1) {
- SysPremiumDetails sysPremiumDetails2 = sysPremiumDetails1.get(0);
- SysPartnerAccount sysPartnerAccount = sysPartnerAccountMapper.selectOne(new LambdaQueryWrapper<SysPartnerAccount>()
- .eq(SysPartnerAccount::getUserId, sysPremiumDetails2.getUserId()));
- BigDecimal extractFee = sysPremiumDetails1.stream()
- .map(SysPremiumDetails::getExtractFee)
- .reduce(BigDecimal.ZERO, BigDecimal::add);
- if (sysPartnerAccount == null) {
- SysPartnerAccount sysPartnerAccount1 = new SysPartnerAccount();
- sysPartnerAccount1.setCreateTime(new Date());
- sysPartnerAccount1.setSumPremium(sysPremiumDetails2.getSumpremium());
- sysPartnerAccount1.setExtractFee(extractFee);
- sysPartnerAccount1.setCashFee(extractFee);
- sysPartnerAccount1.setUserId(sysPremiumDetails2.getUserId());
- sysPartnerAccountMapper.insert(sysPartnerAccount1);
- } else {
- sysPartnerAccount.setSumPremium(sysPartnerAccount.getSumPremium()
- .add(sysPremiumDetails2.getSumpremium()));
- sysPartnerAccount.setExtractFee(sysPartnerAccount.getExtractFee().add(extractFee));
- sysPartnerAccount.setCashFee(sysPartnerAccount.getCashFee().add(extractFee));
- sysPartnerAccountMapper.updateById(sysPartnerAccount);
- }
- } else {
- for (SysPremiumDetails sysPremiumDetail : sysPremiumDetails1) {
- 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);
- }
- }
- }
- }
- sysPremiumDetailsMapper.updateStatus(insAreaCompany.getId());
- if (isManagement(order.getUserid()) && sysSwitchConfigService.getBalanceExtractStatus()) {
- dataServerService.sendLgDataServer(insOrderNo);
- }
- // 审核完成之后 清空锁
- redisTemplate.delete("FEE_AUDIT:"+insOrderNo);
- } catch (Exception e) {
- e.printStackTrace();
- throw new SystemException("当前业务繁忙,请稍后重试");
- } finally {
- //释放锁
- if (locked.isHeldByCurrentThread()) {
- locked.unlock();
- }
- }
- }
- public boolean isManagement(String userId) {
- SysUser sysUser = SpringUtil.getBean(SysUserBankCardMapper.class).selectByIdPay(userId);
- if (ManagementSource.MS_02.getCode().equals(sysUser.getManagementSource())) {
- return true;
- }
- return false;
- }
- 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().getId());
- 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);
- }
- }
|