package com.ydtech.modules.fnc.service.impl;
import cn.dev33.satoken.stp.StpUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ydtech.constants.enums.dict.ins.InsFeeAuditDistributionStatusEnum;
import com.ydtech.modules.admin.model.SysDept;
import com.ydtech.modules.admin.model.SysDeptAccount;
import com.ydtech.modules.admin.model.SysDeptAccountHistory;
import com.ydtech.modules.admin.model.SysUser;
import com.ydtech.modules.admin.model.po.SysUserAccount;
import com.ydtech.modules.admin.service.*;
import com.ydtech.modules.base.controller.BaseController;
import com.ydtech.modules.esm.service.EsmUserReferrerService;
import com.ydtech.modules.fnc.dao.FncInsAreaCompanyMapper;
import com.ydtech.modules.fnc.dao.InsPlyIncomeMapper;
import com.ydtech.modules.fnc.entity.InsFeeAudit;
import com.ydtech.modules.fnc.dao.InsFeeAuditMapper;
import com.ydtech.modules.fnc.entity.InsPlyIncome;
import com.ydtech.modules.fnc.service.InsFeeAuditService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ydtech.modules.ins.model.InsCommission;
import com.ydtech.modules.ins.model.InsCompanyFee;
import com.ydtech.modules.ins.model.InsDeptFee;
import com.ydtech.modules.ins.service.InsCommissionService;
import com.ydtech.modules.ins.service.InsCompanyFeeService;
import com.ydtech.modules.ins.service.InsDeptFeeService;
import com.ydtech.modules.order.dao.InsOrdersMapper;
import com.ydtech.modules.fnc.entity.InsAreaCompany;
import com.ydtech.modules.order.entity.InsFeeOrder;
import com.ydtech.modules.order.entity.InsOrders;
import com.ydtech.modules.order.service.InsFeeOrderService;
import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
import com.ydtech.modules.protocols.service.InsFeeOrderNewService;
import com.ydtech.utils.DateUtil;
import com.ydtech.utils.StringUtils;
import com.ydtech.utils.idgen.IdGenerate;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
*
* 服务实现类
*
*
* @author gws
* @since 2023-11-22
*/
@Service
public class InsFeeAuditServiceImpl extends ServiceImpl implements InsFeeAuditService {
private final InsOrdersMapper insOrdersMapper;
private final InsPlyIncomeMapper insPlyIncomeMapper;
private final InsFeeOrderService insFeeOrderService;
private final FncInsAreaCompanyMapper insAreaCompanyMapper;
private final InsDeptFeeService insDeptFeeService;
private final InsCommissionService insCommissionService;
private final InsCompanyFeeService insCompanyFeeService;
private final EsmUserReferrerService esmUserReferrerService;
private final SysUserService sysUserService;
@Autowired
private InsFeeOrderNewService insFeeOrderNewService;
@Autowired
private SysUserAccountService sysUserAccountService;
@Autowired
private SysDeptService sysDeptService;
@Autowired
private SysDeptAccountService sysDeptAccountService;
@Autowired
private SysDeptAccountHistoryService sysDeptAccountHistoryService;
public InsFeeAuditServiceImpl(FncInsAreaCompanyMapper insAreaCompanyMapper, InsOrdersMapper insOrdersMapper, InsFeeOrderService insFeeOrderService,InsDeptFeeService insDeptFeeService,EsmUserReferrerService esmUserReferrerService,SysUserService sysUserService,InsCommissionService insCommissionService,InsCompanyFeeService insCompanyFeeService,InsPlyIncomeMapper insPlyIncomeMapper) {
this.insAreaCompanyMapper = insAreaCompanyMapper;
this.insOrdersMapper = insOrdersMapper;
this.insFeeOrderService=insFeeOrderService;
this.insDeptFeeService=insDeptFeeService;
this.esmUserReferrerService=esmUserReferrerService;
this.sysUserService=sysUserService;
this.insCommissionService=insCommissionService;
this.insCompanyFeeService=insCompanyFeeService;
this.insPlyIncomeMapper=insPlyIncomeMapper;
}
@Override
@Transactional
public void feeAudit(String orderNo, String insOrderNo) throws Exception{
//保存审核表
InsFeeAudit insFeeAudit=new InsFeeAudit();
insFeeAudit.setOrderno(orderNo);
insFeeAudit.setInsOrderNo(insOrderNo);
insFeeAudit.setAuditstatus("1");
insFeeAudit.setAudittime(LocalDateTime.now());
insFeeAudit.setAudituser(StpUtil.getLoginId().toString());
this.save(insFeeAudit);
InsOrders order=insOrdersMapper.selectById(orderNo);
InsFeeOrderNew insFeeOrder=insFeeOrderNewService.getInsFeeOrderNewByCompanyId(insFeeAudit.getInsOrderNo());
InsAreaCompany insAreaCompany=insAreaCompanyMapper.selectById(insFeeAudit.getInsOrderNo());
//获取该订单的费用
InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getOne(new LambdaQueryWrapper()
.eq(InsFeeOrderNew::getInsOrderNo, insFeeAudit.getInsOrderNo()));
//获取操作人员的机构来源
String deptId=order.getDeptid();
List teamList = sysDeptService.findTeamList(deptId);
teamList.forEach(sysDept -> {
if(StringUtils.isNotEmpty(sysDept.getComlevel()) && sysDept.getComlevel().equals("1")){
BigDecimal jqDeptPremiumsLevel1 = insFeeOrderNew.getJqDeptPremiumsLevel1();
}
});
//bigdecimal为null时设置为0
// handleBigdecimal(insFeeOrder);
//生成保司费用(应收费用)
gene_orderIncome( order, insFeeOrderNew,insAreaCompany);
//生成机构费用
gene_deptfee( order, insFeeOrderNew,insAreaCompany);
//生成分销费用
// saveRetail(order,insFeeOrderNew,insAreaCompany);
//个代费用生成
// saveInsCompanyFee(order,insFeeOrderNew,insAreaCompany);
// 生成 用户账户表 数据
if(StringUtils.isNotEmpty(order.getUserid())){
// 用戶賬戶表
SysUserAccount sysUserAccount = new SysUserAccount();
sysUserAccount.setUserId(order.getUserid());
if (ObjectUtils.isNotEmpty(insFeeOrderNew) ) {
// 手续非佣金 = 交强监管费用 + 商业监管费用 + 非车监管费用
// 非跟单费用 = 交强非跟单费用 + 商业非跟单费用 + 非车非跟单费用
//手续费入口费用
// BigDecimal jqPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getJqSuperviseCostsPremiums());//交强监管费
// BigDecimal syPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getSySuperviseCostsPremiums());//商业监管费
// BigDecimal noPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getNoSuperviseCostsPremiums());//非车监管费用
// BigDecimal totalPremiumAmount = jqPremiumAmount.add(syPremiumAmount).add(noPremiumAmount); // 手续非佣金
// //其他费用入口费用
// BigDecimal jqOtherCostsPremiums =this.zeroBigdecimal(insFeeOrderNew.getJqOtherCostsPremiums());//交强其他费用
// BigDecimal syOtherCostsPremiums =this.zeroBigdecimal(insFeeOrderNew.getSyOtherCostsPremiums()); //商业其他费用
// BigDecimal noOtherCostsProportion = this.zeroBigdecimal(insFeeOrderNew.getNoOtherCostsPremiums());//非车其他费用
// BigDecimal totalOtherPremiumAmount = jqOtherCostsPremiums.add(syOtherCostsPremiums).add(noOtherCostsProportion); //非跟单费用
//总机构 交强管理比例
BigDecimal sumJqDeptProportion = insFeeOrderNew.getJqDeptProportionLevel1()
.add(insFeeOrderNew.getJqDeptProportionLevel2())
.add(insFeeOrderNew.getJqDeptProportionLevel3())
.add(insFeeOrderNew.getJqDeptProportionLevel4())
.add(insFeeOrderNew.getJqDeptProportionLevel5());
//总机构 商业管理比例
BigDecimal sumSyDeptProportion = insFeeOrderNew.getSyDeptProportionLevel1()
.add(insFeeOrderNew.getSyDeptProportionLevel2())
.add(insFeeOrderNew.getSyDeptProportionLevel3())
.add(insFeeOrderNew.getSyDeptProportionLevel4())
.add(insFeeOrderNew.getSyDeptProportionLevel5());
//总机构 非车管理比例
BigDecimal sumNoDeptProportion = insFeeOrderNew.getNoDeptProportionLevel1()
.add(insFeeOrderNew.getNoDeptProportionLevel2())
.add(insFeeOrderNew.getNoDeptProportionLevel3())
.add(insFeeOrderNew.getNoDeptProportionLevel4())
.add(insFeeOrderNew.getNoDeptProportionLevel5());
//总分销比例
BigDecimal sumRetail = insFeeOrderNew.getFirstDetailProportion().add(insFeeOrderNew.getSecondDetailProportion()).add(insFeeOrderNew.getThirdDetailProportion());
//交强出口比例
BigDecimal jqExportProceduresProportion = new BigDecimal(0);
if(insFeeOrderNew.getJqCostsProportion().compareTo(sumJqDeptProportion.add(sumRetail))>0){
jqExportProceduresProportion = insFeeOrderNew.getJqCostsProportion().subtract(sumJqDeptProportion).subtract(sumRetail);
}
//商业出口比例
BigDecimal syExportProceduresProportion = new BigDecimal(0);
if(insFeeOrderNew.getSyCostsProportion().compareTo(sumSyDeptProportion.add(sumRetail))>0){
syExportProceduresProportion = insFeeOrderNew.getSyCostsProportion().subtract(sumSyDeptProportion).subtract(sumRetail);
}
//非车出口比例
BigDecimal noExportProceduresProportion = new BigDecimal(0);
if(insFeeOrderNew.getNoCostsProportion().compareTo(sumNoDeptProportion.add(sumRetail))>0){
noExportProceduresProportion = insFeeOrderNew.getNoCostsProportion().subtract(sumNoDeptProportion).subtract(sumRetail);
}
//交强手续费出口比例
BigDecimal jqExportProceduresFee = insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqSuperviseCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
//交强跟单出口费用
BigDecimal jqExportOtherFee = insFeeOrderNew.getJqPremium()
.multiply(jqExportProceduresProportion
.subtract(insFeeOrderNew.getJqSuperviseCostsProportion()).divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
//商业手续费出口比例
BigDecimal syExportProceduresFee = insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSySuperviseCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
//商业跟单出口比例
BigDecimal syExportOtherFee = insFeeOrderNew.getSyPremium()
.multiply(syExportProceduresProportion
.subtract(insFeeOrderNew.getSySuperviseCostsProportion()).divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
//非车手续费出口比例
BigDecimal noExportProceduresFee = insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoSuperviseCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
//非车跟单出口比例
BigDecimal noExportOtherFee = insFeeOrderNew.getNoPremium()
.multiply(noExportProceduresProportion
.subtract(insFeeOrderNew.getNoSuperviseCostsProportion()).divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
//用户出口手续费
BigDecimal totalPremiumAmount = new BigDecimal(0);
totalPremiumAmount = totalPremiumAmount.add(jqExportProceduresFee).add(syExportProceduresFee).add(noExportProceduresFee);
//用户出口跟单费
BigDecimal totalOtherPremiumAmount = new BigDecimal(0);
totalOtherPremiumAmount = totalOtherPremiumAmount.add(jqExportOtherFee).add(syExportOtherFee).add(noExportOtherFee);
// 用戶
sysUserAccount.setHandlingFee(totalPremiumAmount);
sysUserAccount.setDocumentary(totalOtherPremiumAmount);
// 算佣金
this.countUserAmount(insFeeOrderNew,orderNo);
sysUserAccount.setDocumentaryStatus("2"); // 收入
sysUserAccount.setSuborderId(orderNo); // 订单Id
sysUserAccountService.addOrUpdate(sysUserAccount);
String deptid = insFeeOrderNew.getDeptId();
String distributionStatus = insFeeOrderNew.getDistributionStatus();
// 定义一个数组来存储各级机构的管理费
BigDecimal[] jqDeptPremiumsLevels = {insFeeOrderNew.getJqDeptPremiumsLevel1(), insFeeOrderNew.getJqDeptPremiumsLevel2(),
insFeeOrderNew.getJqDeptPremiumsLevel3(), insFeeOrderNew.getJqDeptPremiumsLevel4(),
insFeeOrderNew.getJqDeptPremiumsLevel5()};
BigDecimal[] syDeptPremiumsLevels = {insFeeOrderNew.getSyDeptPremiumsLevel1(), insFeeOrderNew.getSyDeptPremiumsLevel2(),
insFeeOrderNew.getSyDeptPremiumsLevel3(), insFeeOrderNew.getSyDeptPremiumsLevel4(),
insFeeOrderNew.getSyDeptPremiumsLevel5()};
BigDecimal[] noDeptPremiumsLevels = {insFeeOrderNew.getNoDeptPremiumsLevel1(), insFeeOrderNew.getNoDeptPremiumsLevel2(),
insFeeOrderNew.getNoDeptPremiumsLevel3(), insFeeOrderNew.getNoDeptPremiumsLevel4(),
insFeeOrderNew.getNoDeptPremiumsLevel5()};
for (int i = 1; i <= 5; i++) {
// 根据循环次数确定机构ID的长度,第五级为11
String levelDeptId = deptid.substring(0, (i == 5) ? 11 : i * 2);
// 获取对应级别的机构信息
SysDeptAccount levelSysDeptAccount = sysDeptAccountService.getOne(new LambdaQueryWrapper()
.eq(SysDeptAccount::getDeptId, levelDeptId));
// 初始化管理费总额为0
BigDecimal sumManagementFee = BigDecimal.ZERO;
// 根据分销等级和分销用户情况计算分销费用
BigDecimal distributionFee = BigDecimal.ZERO;
if (i == 5) {
if (InsFeeAuditDistributionStatusEnum.DS_2.getCode().equals(distributionStatus) && insFeeOrderNew.getTwoLevelUserId() == null) {
distributionFee = insFeeOrderNew.getSecondDetailPremiums();
} else if (InsFeeAuditDistributionStatusEnum.DS_3.getCode().equals(distributionStatus) && insFeeOrderNew.getThreeLevelUserId() == null) {
distributionFee = insFeeOrderNew.getThirdDetailPremiums();
}
}
// 根据分销等级计算管理费总额
if (i == 5) {
sumManagementFee = sumManagementFee.add(jqDeptPremiumsLevels[i - 1])
.add(syDeptPremiumsLevels[i - 1])
.add(noDeptPremiumsLevels[i - 1])
.add(distributionFee);
} else {
sumManagementFee = sumManagementFee.add(jqDeptPremiumsLevels[i - 1])
.add(syDeptPremiumsLevels[i - 1])
.add(noDeptPremiumsLevels[i - 1]);
}
// 如果机构信息不为空,更新管理费并记录历史
if (levelSysDeptAccount != null) {
levelSysDeptAccount.setManagementFee(levelSysDeptAccount.getManagementFee().add(sumManagementFee));
sysDeptAccountService.updateById(levelSysDeptAccount);
// 记录历史信息
SysDeptAccountHistory sysDeptAccountHistory = new SysDeptAccountHistory();
sysDeptAccountHistory.setId(IdGenerate.nextId());
sysDeptAccountHistory.setDeptId(levelDeptId);
sysDeptAccountHistory.setAmount(sumManagementFee);
sysDeptAccountHistory.setSurplusAmount(levelSysDeptAccount.getManagementFee());
sysDeptAccountHistory.setDocumentary("2"); //收入
sysDeptAccountHistory.setSuborder(orderNo);
sysDeptAccountHistory.setFromBankCard(null);
sysDeptAccountHistory.setToBankCard(null);
sysDeptAccountHistory.setUserId(BaseController.getUser().getId());
sysDeptAccountHistory.setCreateTime(new Date());
sysDeptAccountHistory.setRemark("交强" + i + "级机构管理费:" + jqDeptPremiumsLevels[i - 1] +
",商业" + i + "级机构管理费:" + syDeptPremiumsLevels[i - 1] +
",非车" + i + "级机构管理费:" + noDeptPremiumsLevels[i - 1] +
",分销费:" + distributionFee);
sysDeptAccountHistoryService.save(sysDeptAccountHistory);
} else {
// 如果机构信息为空,新建机构信息并记录历史
SysDeptAccount sysDeptAccount = new SysDeptAccount();
sysDeptAccount.setDeptId(levelDeptId);
sysDeptAccount.setManagementFee(sumManagementFee);
sysDeptAccount.setCreateTime(new Date());
sysDeptAccountService.save(sysDeptAccount);
// 记录历史信息
SysDeptAccountHistory sysDeptAccountHistory = new SysDeptAccountHistory();
sysDeptAccountHistory.setId(IdGenerate.nextId());
sysDeptAccountHistory.setDeptId(levelDeptId);
sysDeptAccountHistory.setAmount(sumManagementFee);
sysDeptAccountHistory.setSurplusAmount(sumManagementFee);
sysDeptAccountHistory.setDocumentary("2"); //收入
sysDeptAccountHistory.setSuborder(orderNo);
sysDeptAccountHistory.setFromBankCard(null);
sysDeptAccountHistory.setToBankCard(null);
sysDeptAccountHistory.setUserId(BaseController.getUser().getId());
sysDeptAccountHistory.setCreateTime(new Date());
sysDeptAccountHistory.setRemark("交强" + i + "级机构管理费:" + jqDeptPremiumsLevels[i - 1] +
",商业" + i + "级机构管理费:" + syDeptPremiumsLevels[i - 1] +
",非车" + i + "级机构管理费:" + noDeptPremiumsLevels[i - 1] +
",分销费:" + distributionFee);
sysDeptAccountHistoryService.save(sysDeptAccountHistory);
}
}
}
}
}
@Override
public boolean autoFeeAudit(String orderNo, String insOrderNo) throws Exception {
//保存审核表
InsFeeAudit insFeeAudit=new InsFeeAudit();
insFeeAudit.setOrderno(orderNo);
insFeeAudit.setInsOrderNo(insOrderNo);
insFeeAudit.setAuditstatus("1");
insFeeAudit.setAudittime(LocalDateTime.now());
insFeeAudit.setAudituser("自动审核");
this.save(insFeeAudit);
InsOrders order=insOrdersMapper.selectById(orderNo);
InsFeeOrderNew insFeeOrder=insFeeOrderNewService.getInsFeeOrderNewByCompanyId(insFeeAudit.getInsOrderNo());
InsAreaCompany insAreaCompany=insAreaCompanyMapper.selectById(insFeeAudit.getInsOrderNo());
//获取该订单的费用
InsFeeOrderNew insFeeOrderNew = insFeeOrderNewService.getOne(new LambdaQueryWrapper()
.eq(InsFeeOrderNew::getInsOrderNo, insFeeAudit.getInsOrderNo()));
//获取操作人员的机构来源
String deptId=order.getDeptid();
List teamList = sysDeptService.findTeamList(deptId);
teamList.forEach(sysDept -> {
if(StringUtils.isNotEmpty(sysDept.getComlevel()) && sysDept.getComlevel().equals("1")){
BigDecimal jqDeptPremiumsLevel1 = insFeeOrderNew.getJqDeptPremiumsLevel1();
}
});
//bigdecimal为null时设置为0
// handleBigdecimal(insFeeOrder);
//生成保司费用(应收费用)
gene_orderIncome( order, insFeeOrderNew,insAreaCompany);
//生成机构费用
gene_deptfee( order, insFeeOrderNew,insAreaCompany);
//生成分销费用
// saveRetail(order,insFeeOrderNew,insAreaCompany);
//个代费用生成
// saveInsCompanyFee(order,insFeeOrderNew,insAreaCompany);
// 生成 用户账户表 数据
if(StringUtils.isNotEmpty(order.getUserid())){
// 用戶賬戶表
SysUserAccount sysUserAccount = new SysUserAccount();
sysUserAccount.setUserId(order.getUserid());
if (ObjectUtils.isNotEmpty(insFeeOrderNew) ) {
// 手续非佣金 = 交强监管费用 + 商业监管费用 + 非车监管费用
// 非跟单费用 = 交强非跟单费用 + 商业非跟单费用 + 非车非跟单费用
//手续费入口费用
// BigDecimal jqPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getJqSuperviseCostsPremiums());//交强监管费
// BigDecimal syPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getSySuperviseCostsPremiums());//商业监管费
// BigDecimal noPremiumAmount = this.zeroBigdecimal(insFeeOrderNew.getNoSuperviseCostsPremiums());//非车监管费用
// BigDecimal totalPremiumAmount = jqPremiumAmount.add(syPremiumAmount).add(noPremiumAmount); // 手续非佣金
// //其他费用入口费用
// BigDecimal jqOtherCostsPremiums =this.zeroBigdecimal(insFeeOrderNew.getJqOtherCostsPremiums());//交强其他费用
// BigDecimal syOtherCostsPremiums =this.zeroBigdecimal(insFeeOrderNew.getSyOtherCostsPremiums()); //商业其他费用
// BigDecimal noOtherCostsProportion = this.zeroBigdecimal(insFeeOrderNew.getNoOtherCostsPremiums());//非车其他费用
// BigDecimal totalOtherPremiumAmount = jqOtherCostsPremiums.add(syOtherCostsPremiums).add(noOtherCostsProportion); //非跟单费用
//总机构 交强管理比例
BigDecimal sumJqDeptProportion = insFeeOrderNew.getJqDeptProportionLevel1()
.add(insFeeOrderNew.getJqDeptProportionLevel2())
.add(insFeeOrderNew.getJqDeptProportionLevel3())
.add(insFeeOrderNew.getJqDeptProportionLevel4())
.add(insFeeOrderNew.getJqDeptProportionLevel5());
//总机构 商业管理比例
BigDecimal sumSyDeptProportion = insFeeOrderNew.getSyDeptProportionLevel1()
.add(insFeeOrderNew.getSyDeptProportionLevel2())
.add(insFeeOrderNew.getSyDeptProportionLevel3())
.add(insFeeOrderNew.getSyDeptProportionLevel4())
.add(insFeeOrderNew.getSyDeptProportionLevel5());
//总机构 非车管理比例
BigDecimal sumNoDeptProportion = insFeeOrderNew.getNoDeptProportionLevel1()
.add(insFeeOrderNew.getNoDeptProportionLevel2())
.add(insFeeOrderNew.getNoDeptProportionLevel3())
.add(insFeeOrderNew.getNoDeptProportionLevel4())
.add(insFeeOrderNew.getNoDeptProportionLevel5());
//总分销比例
BigDecimal sumRetail = insFeeOrderNew.getFirstDetailProportion().add(insFeeOrderNew.getSecondDetailProportion()).add(insFeeOrderNew.getThirdDetailProportion());
//交强出口比例
BigDecimal jqExportProceduresProportion = new BigDecimal(0);
if(insFeeOrderNew.getJqCostsProportion().compareTo(sumJqDeptProportion.add(sumRetail))>0){
jqExportProceduresProportion = insFeeOrderNew.getJqCostsProportion().subtract(sumJqDeptProportion).subtract(sumRetail);
}
//商业出口比例
BigDecimal syExportProceduresProportion = new BigDecimal(0);
if(insFeeOrderNew.getSyCostsProportion().compareTo(sumSyDeptProportion.add(sumRetail))>0){
syExportProceduresProportion = insFeeOrderNew.getSyCostsProportion().subtract(sumSyDeptProportion).subtract(sumRetail);
}
//非车出口比例
BigDecimal noExportProceduresProportion = new BigDecimal(0);
if(insFeeOrderNew.getNoCostsProportion().compareTo(sumNoDeptProportion.add(sumRetail))>0){
noExportProceduresProportion = insFeeOrderNew.getNoCostsProportion().subtract(sumNoDeptProportion).subtract(sumRetail);
}
//交强手续费出口比例
BigDecimal jqExportProceduresFee = insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqSuperviseCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
//交强跟单出口费用
BigDecimal jqExportOtherFee = insFeeOrderNew.getJqPremium()
.multiply(jqExportProceduresProportion
.subtract(insFeeOrderNew.getJqSuperviseCostsProportion()).divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
//商业手续费出口比例
BigDecimal syExportProceduresFee = insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSySuperviseCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
//商业跟单出口比例
BigDecimal syExportOtherFee = insFeeOrderNew.getSyPremium()
.multiply(syExportProceduresProportion
.subtract(insFeeOrderNew.getSySuperviseCostsProportion()).divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
//非车手续费出口比例
BigDecimal noExportProceduresFee = insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoSuperviseCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
//非车跟单出口比例
BigDecimal noExportOtherFee = insFeeOrderNew.getNoPremium()
.multiply(noExportProceduresProportion
.subtract(insFeeOrderNew.getNoSuperviseCostsProportion()).divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN);
//用户出口手续费
BigDecimal totalPremiumAmount = new BigDecimal(0);
totalPremiumAmount = totalPremiumAmount.add(jqExportProceduresFee).add(syExportProceduresFee).add(noExportProceduresFee);
//用户出口跟单费
BigDecimal totalOtherPremiumAmount = new BigDecimal(0);
totalOtherPremiumAmount = totalOtherPremiumAmount.add(jqExportOtherFee).add(syExportOtherFee).add(noExportOtherFee);
// 用戶
sysUserAccount.setHandlingFee(totalPremiumAmount);
sysUserAccount.setDocumentary(totalOtherPremiumAmount);
// 算佣金
this.countUserAmount(insFeeOrderNew,orderNo);
sysUserAccount.setDocumentaryStatus("2"); // 收入
sysUserAccount.setSuborderId(orderNo); // 订单Id
sysUserAccountService.addOrUpdate(sysUserAccount);
String deptid = insFeeOrderNew.getDeptId();
String distributionStatus = insFeeOrderNew.getDistributionStatus();
// 定义一个数组来存储各级机构的管理费
BigDecimal[] jqDeptPremiumsLevels = {insFeeOrderNew.getJqDeptPremiumsLevel1(), insFeeOrderNew.getJqDeptPremiumsLevel2(),
insFeeOrderNew.getJqDeptPremiumsLevel3(), insFeeOrderNew.getJqDeptPremiumsLevel4(),
insFeeOrderNew.getJqDeptPremiumsLevel5()};
BigDecimal[] syDeptPremiumsLevels = {insFeeOrderNew.getSyDeptPremiumsLevel1(), insFeeOrderNew.getSyDeptPremiumsLevel2(),
insFeeOrderNew.getSyDeptPremiumsLevel3(), insFeeOrderNew.getSyDeptPremiumsLevel4(),
insFeeOrderNew.getSyDeptPremiumsLevel5()};
BigDecimal[] noDeptPremiumsLevels = {insFeeOrderNew.getNoDeptPremiumsLevel1(), insFeeOrderNew.getNoDeptPremiumsLevel2(),
insFeeOrderNew.getNoDeptPremiumsLevel3(), insFeeOrderNew.getNoDeptPremiumsLevel4(),
insFeeOrderNew.getNoDeptPremiumsLevel5()};
for (int i = 1; i <= 5; i++) {
// 根据循环次数确定机构ID的长度,第五级为11
String levelDeptId = deptid.substring(0, (i == 5) ? 11 : i * 2);
// 获取对应级别的机构信息
SysDeptAccount levelSysDeptAccount = sysDeptAccountService.getOne(new LambdaQueryWrapper()
.eq(SysDeptAccount::getDeptId, levelDeptId));
// 初始化管理费总额为0
BigDecimal sumManagementFee = BigDecimal.ZERO;
// 根据分销等级和分销用户情况计算分销费用
BigDecimal distributionFee = BigDecimal.ZERO;
if (i == 5) {
if (InsFeeAuditDistributionStatusEnum.DS_2.getCode().equals(distributionStatus) && insFeeOrderNew.getTwoLevelUserId() == null) {
distributionFee = insFeeOrderNew.getSecondDetailPremiums();
} else if (InsFeeAuditDistributionStatusEnum.DS_3.getCode().equals(distributionStatus) && insFeeOrderNew.getThreeLevelUserId() == null) {
distributionFee = insFeeOrderNew.getThirdDetailPremiums();
}
}
// 根据分销等级计算管理费总额
if (i == 5) {
sumManagementFee = sumManagementFee.add(jqDeptPremiumsLevels[i - 1])
.add(syDeptPremiumsLevels[i - 1])
.add(noDeptPremiumsLevels[i - 1])
.add(distributionFee);
} else {
sumManagementFee = sumManagementFee.add(jqDeptPremiumsLevels[i - 1])
.add(syDeptPremiumsLevels[i - 1])
.add(noDeptPremiumsLevels[i - 1]);
}
// 如果机构信息不为空,更新管理费并记录历史
if (levelSysDeptAccount != null) {
levelSysDeptAccount.setManagementFee(levelSysDeptAccount.getManagementFee().add(sumManagementFee));
sysDeptAccountService.updateById(levelSysDeptAccount);
// 记录历史信息
SysDeptAccountHistory sysDeptAccountHistory = new SysDeptAccountHistory();
sysDeptAccountHistory.setId(IdGenerate.nextId());
sysDeptAccountHistory.setDeptId(levelDeptId);
sysDeptAccountHistory.setAmount(sumManagementFee);
sysDeptAccountHistory.setSurplusAmount(levelSysDeptAccount.getManagementFee());
sysDeptAccountHistory.setDocumentary("2"); //收入
sysDeptAccountHistory.setSuborder(orderNo);
sysDeptAccountHistory.setFromBankCard(null);
sysDeptAccountHistory.setToBankCard(null);
sysDeptAccountHistory.setUserId(BaseController.getUser().getId());
sysDeptAccountHistory.setCreateTime(new Date());
sysDeptAccountHistory.setRemark("交强" + i + "级机构管理费:" + jqDeptPremiumsLevels[i - 1] +
",商业" + i + "级机构管理费:" + syDeptPremiumsLevels[i - 1] +
",非车" + i + "级机构管理费:" + noDeptPremiumsLevels[i - 1] +
",分销费:" + distributionFee);
sysDeptAccountHistoryService.save(sysDeptAccountHistory);
} else {
// 如果机构信息为空,新建机构信息并记录历史
SysDeptAccount sysDeptAccount = new SysDeptAccount();
sysDeptAccount.setDeptId(levelDeptId);
sysDeptAccount.setManagementFee(sumManagementFee);
sysDeptAccount.setCreateTime(new Date());
sysDeptAccountService.save(sysDeptAccount);
// 记录历史信息
SysDeptAccountHistory sysDeptAccountHistory = new SysDeptAccountHistory();
sysDeptAccountHistory.setId(IdGenerate.nextId());
sysDeptAccountHistory.setDeptId(levelDeptId);
sysDeptAccountHistory.setAmount(sumManagementFee);
sysDeptAccountHistory.setSurplusAmount(sumManagementFee);
sysDeptAccountHistory.setDocumentary("2"); //收入
sysDeptAccountHistory.setSuborder(orderNo);
sysDeptAccountHistory.setFromBankCard(null);
sysDeptAccountHistory.setToBankCard(null);
sysDeptAccountHistory.setUserId(BaseController.getUser().getId());
sysDeptAccountHistory.setCreateTime(new Date());
sysDeptAccountHistory.setRemark("交强" + i + "级机构管理费:" + jqDeptPremiumsLevels[i - 1] +
",商业" + i + "级机构管理费:" + syDeptPremiumsLevels[i - 1] +
",非车" + i + "级机构管理费:" + noDeptPremiumsLevels[i - 1] +
",分销费:" + distributionFee);
sysDeptAccountHistoryService.save(sysDeptAccountHistory);
}
}
}
}
return true;
}
private void countUserAmount(InsFeeOrderNew insFeeOrderNew ,String orderNo) {
String distributionStatus = insFeeOrderNew.getDistributionStatus();
if(StringUtils.isNotEmpty(distributionStatus)){
if(InsFeeAuditDistributionStatusEnum.DS_3.getCode().equals(distributionStatus)){
BigDecimal totalDept = BigDecimal.ZERO;
if(StringUtils.isNotEmpty(insFeeOrderNew.getFirstLevelUserId())){
String firstLevelUserId = insFeeOrderNew.getFirstLevelUserId();
BigDecimal firstDetailPremiums = insFeeOrderNew.getFirstDetailPremiums();
this.saveUpdateAccount(firstLevelUserId,firstDetailPremiums,orderNo);
}else {
totalDept = totalDept.add(insFeeOrderNew.getFirstDetailPremiums());
}
if(StringUtils.isNotEmpty(insFeeOrderNew.getTwoLevelUserId())){
String twoLevelUserId = insFeeOrderNew.getTwoLevelUserId();
BigDecimal secondDetailProportion = insFeeOrderNew.getSecondDetailPremiums();
this.saveUpdateAccount(twoLevelUserId,secondDetailProportion,orderNo);
}else {
totalDept =totalDept.add(insFeeOrderNew.getSecondDetailPremiums());
}
if(StringUtils.isNotEmpty(insFeeOrderNew.getThreeLevelUserId())){
String threeLevelUserId = insFeeOrderNew.getThreeLevelUserId();
BigDecimal threeDetailPremiums = insFeeOrderNew.getThirdDetailPremiums();
this.saveUpdateAccount(threeLevelUserId,threeDetailPremiums,orderNo);
}else {
totalDept =totalDept.add(insFeeOrderNew.getThirdDetailPremiums());
}
// 机构管理 费用给五级交钱机构管理费
if(totalDept.compareTo(BigDecimal.ZERO) ==0){
BigDecimal jqDeptPremiumsLevel5 = insFeeOrderNew.getJqDeptPremiumsLevel5();
jqDeptPremiumsLevel5.add(totalDept);
insFeeOrderNewService.updateById(insFeeOrderNew);
}
} else if (InsFeeAuditDistributionStatusEnum.DS_2.getCode().equals(distributionStatus)) {
BigDecimal totalDept = BigDecimal.ZERO;
if(StringUtils.isNotEmpty(insFeeOrderNew.getFirstLevelUserId())){
String firstLevelUserId = insFeeOrderNew.getFirstLevelUserId();
BigDecimal firstDetailPremiums = insFeeOrderNew.getFirstDetailPremiums();
this.saveUpdateAccount(firstLevelUserId,firstDetailPremiums,orderNo);
}else {
totalDept = totalDept.add(insFeeOrderNew.getFirstDetailPremiums());
}
if(StringUtils.isNotEmpty(insFeeOrderNew.getTwoLevelUserId())){
String twoLevelUserId = insFeeOrderNew.getTwoLevelUserId();
BigDecimal secondDetailProportion = insFeeOrderNew.getSecondDetailPremiums();
this.saveUpdateAccount(twoLevelUserId,secondDetailProportion,orderNo);
}else {
totalDept =totalDept.add(insFeeOrderNew.getSecondDetailPremiums());
}
// 机构管理 费用给五级交钱机构管理费
if(totalDept.compareTo(BigDecimal.ZERO) ==0){
BigDecimal jqDeptPremiumsLevel5 = insFeeOrderNew.getJqDeptPremiumsLevel5();
jqDeptPremiumsLevel5.add(totalDept);
insFeeOrderNewService.updateById(insFeeOrderNew);
}
}else {
// 一级分销
if(StringUtils.isNotEmpty(insFeeOrderNew.getFirstLevelUserId())){
String firstLevelUserId = insFeeOrderNew.getFirstLevelUserId();
BigDecimal firstDetailPremiums = insFeeOrderNew.getFirstDetailPremiums();
this.saveUpdateAccount(firstLevelUserId,firstDetailPremiums,orderNo);
}else {
if(insFeeOrderNew.getFirstDetailPremiums().compareTo(BigDecimal.ZERO) ==0){
BigDecimal jqDeptPremiumsLevel5 = insFeeOrderNew.getJqDeptPremiumsLevel5();
jqDeptPremiumsLevel5.add(insFeeOrderNew.getFirstDetailPremiums());
insFeeOrderNewService.updateById(insFeeOrderNew);
}
}
}
}
}
private void saveUpdateAccount(String userId, BigDecimal amount, String orderNo) {
SysUserAccount sysUserAccount = new SysUserAccount();
sysUserAccount.setUserId(userId);
sysUserAccount.setPromotion(amount);
sysUserAccount.setDocumentaryStatus("2"); // 收入
sysUserAccount.setSuborderId(orderNo);
sysUserAccountService.addOrUpdate(sysUserAccount);
}
private BigDecimal zeroBigdecimal(BigDecimal amount) {
if (amount == null) {
return amount = BigDecimal.ZERO;
} else {
return amount;
}
}
/**
* 生成保司费用(应收费用)
* @param order
* @param insFeeOrder
* @throws Exception
*/
private void gene_orderIncome( InsOrders order, InsFeeOrderNew insFeeOrder,InsAreaCompany plyDto) throws Exception{
InsPlyIncome insPlyIncome =new InsPlyIncome();
insPlyIncome.setOrderno(order.getOrderno());
insPlyIncome.setDeptId(order.getDeptid());
insPlyIncome.setCompanyId(plyDto.getCompanyId());
insPlyIncome.setAgreementId(String.valueOf(plyDto.getAgreementId()));
insPlyIncome.setLicenseno(order.getLicenseno());
insPlyIncome.setPayDate(StringUtils.isNullOrEmpty(plyDto.getPayDate())?plyDto.getCreatetime():plyDto.getPayDate());
insPlyIncome.setSignDate(StringUtils.isNullOrEmpty(plyDto.getInsidePayTime())?plyDto.getPayDate():plyDto.getInsidePayTime());
insPlyIncome.setCreateTime(LocalDateTime.now() );
if(StringUtils.isNotEmpty(plyDto.getJqpolicyno())){
insPlyIncome.setPolicyno(plyDto.getJqpolicyno());
insPlyIncome.setRiskcode("交强");
insPlyIncome.setTaxamount(plyDto.getTaxamount());
if(!ObjectUtils.isEmpty(insFeeOrder)){
insPlyIncome.setNoTaxPremium(insFeeOrder.getJqNoTaxPremium());
insPlyIncome.setCommissionFeerate(insFeeOrder.getJqSuperviseCostsProportion());
insPlyIncome.setOtherFeerate(insFeeOrder.getJqCostsProportion().subtract(insFeeOrder.getJqSuperviseCostsProportion()));
insPlyIncome.setCommissionFeevalue(insFeeOrder.getJqSuperviseCostsPremiums());
insPlyIncome.setOtherFeevalue(insFeeOrder.getJqCostsPremiums().subtract(insFeeOrder.getJqSuperviseCostsPremiums()));
insPlyIncome.setAllFeeValue(insFeeOrder.getJqCostsPremiums());
}
insPlyIncomeMapper.insert(insPlyIncome);
}
if(StringUtils.isNotEmpty(plyDto.getSypolicyno())){
insPlyIncome.setPolicyno(plyDto.getSypolicyno());
insPlyIncome.setRiskcode("商业");
insPlyIncome.setTaxamount(new BigDecimal(0));
if(!ObjectUtils.isEmpty(insFeeOrder)){
insPlyIncome.setNoTaxPremium(insFeeOrder.getSyNoTaxPremium());
insPlyIncome.setCommissionFeerate(insFeeOrder.getSySuperviseCostsProportion());
insPlyIncome.setOtherFeerate(insFeeOrder.getSyCostsProportion().subtract(insFeeOrder.getSySuperviseCostsProportion()));
insPlyIncome.setCommissionFeevalue(insFeeOrder.getSySuperviseCostsPremiums());
insPlyIncome.setOtherFeevalue(insFeeOrder.getSyCostsPremiums().subtract(insFeeOrder.getSySuperviseCostsPremiums()));
insPlyIncome.setAllFeeValue(insFeeOrder.getSyCostsPremiums());
}
insPlyIncomeMapper.insert(insPlyIncome);
}
}
/**
* 生成机构费用
* @param order
* @param insFeeOrder
* @throws Exception
*/
private void gene_deptfee( InsOrders order, InsFeeOrderNew insFeeOrder,InsAreaCompany plyDto) throws Exception{
InsDeptFee deptFee = new InsDeptFee();
deptFee.setOrderno(order.getOrderno());
if(!ObjectUtils.isEmpty(insFeeOrder)){
deptFee.setQuoteno(insFeeOrder.getInsOrderNo());
}
deptFee.setAgreeid(String.valueOf(plyDto.getAgreementId()));
deptFee.setAuditstatus("1");
deptFee.setSettlestatus("0");
if(plyDto.getInsidePayTime()!=null){
deptFee.setSignDate(DateUtil.formatFullTime(plyDto.getInsidePayTime(),DateUtil.FULL_TIME_SPLIT_PATTERN));
}
deptFee.setInscompany(plyDto.getCompanyId());
if(StringUtils.isNotEmpty(plyDto.getJqpolicyno())){
deptFee.setPolicyno(plyDto.getJqpolicyno());
deptFee.setRiskcode("交强");
deptFee.setLicenseno(order.getLicenseno());
geneJqInsDeptFee(order, insFeeOrder, deptFee);
}
if(StringUtils.isNotEmpty(plyDto.getSypolicyno())){
deptFee.setPolicyno(plyDto.getSypolicyno());
deptFee.setRiskcode("商业");
deptFee.setLicenseno(order.getLicenseno());
geneSyInsDeptFee(order, insFeeOrder, deptFee);
}
}
private void geneJqInsDeptFee(InsOrders order, InsFeeOrderNew insFeeOrder, InsDeptFee deptFee) {
if(!ObjectUtils.isEmpty(insFeeOrder)){
if (insFeeOrder.getJqDeptPremiumsLevel1().doubleValue() > 0) {
deptFee.setComcode(order.getDeptid().substring(0, 2)); //99140302M01D01
deptFee.setComlevel("一级");
insDeptFeeService.insert(deptFee);
}
if (insFeeOrder.getJqDeptPremiumsLevel2().doubleValue() > 0) {
deptFee.setComcode(order.getDeptid().substring(0, 4)); //99140302M01D01
deptFee.setComlevel("二级");
insDeptFeeService.insert(deptFee);
}
if (insFeeOrder.getJqDeptPremiumsLevel3().doubleValue() > 0) {
deptFee.setComcode(order.getDeptid().substring(0, 6)); //99140302M01D01
deptFee.setComlevel("三级");
insDeptFeeService.insert(deptFee);
}
if (insFeeOrder.getJqDeptPremiumsLevel4().doubleValue() > 0) {
deptFee.setComcode(order.getDeptid().substring(0, 8)); //99140302M01D01
deptFee.setComlevel("四级");
insDeptFeeService.insert(deptFee);
}
if (insFeeOrder.getJqDeptPremiumsLevel5().doubleValue() > 0) {
deptFee.setComcode(order.getDeptid().substring(0, 11)); //99140302M01D01
deptFee.setComlevel("五级");
insDeptFeeService.insert(deptFee);
}
}
}
private void geneSyInsDeptFee(InsOrders order, InsFeeOrderNew insFeeOrder, InsDeptFee deptFee) {
if(!ObjectUtils.isEmpty(insFeeOrder)){
if (insFeeOrder.getSyDeptPremiumsLevel1().doubleValue() > 0) {
deptFee.setComcode(order.getDeptid().substring(0, 2)); //99140302M01D01
deptFee.setComlevel("一级");
insDeptFeeService.insert(deptFee);
}
if (insFeeOrder.getSyDeptPremiumsLevel2().doubleValue() > 0) {
deptFee.setComcode(order.getDeptid().substring(0, 4)); //99140302M01D01
deptFee.setComlevel("二级");
insDeptFeeService.insert(deptFee);
}
if (insFeeOrder.getSyDeptPremiumsLevel3().doubleValue() > 0) {
deptFee.setComcode(order.getDeptid().substring(0, 6)); //99140302M01D01
deptFee.setComlevel("三级");
insDeptFeeService.insert(deptFee);
}
if (insFeeOrder.getSyDeptPremiumsLevel4().doubleValue() > 0) {
deptFee.setComcode(order.getDeptid().substring(0, 8)); //99140302M01D01
deptFee.setComlevel("四级");
insDeptFeeService.insert(deptFee);
}
if (insFeeOrder.getSyDeptPremiumsLevel5().doubleValue() > 0) {
deptFee.setComcode(order.getDeptid().substring(0, 11)); //99140302M01D01
deptFee.setComlevel("五级");
insDeptFeeService.insert(deptFee);
}
}
}
/**
* 三级分销费用保存
*
* @param order
* @return
*/
public void saveRetail(InsOrders order,InsFeeOrder insFeeOrder,InsAreaCompany plyDto) throws Exception{
List 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);
}
}
}
}