package com.ydtech.modules.fnc.service.impl; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.ydtech.constants.InsuranceEnum; import com.ydtech.constants.enums.dict.agreement.ProductsType; import com.ydtech.core.page.HttpResult; import com.ydtech.exception.SystemException; import com.ydtech.modules.base.controller.BaseController; import com.ydtech.modules.esm.model.EsmInsCompany; import com.ydtech.modules.esm.service.EsmInsCompanyService; import com.ydtech.modules.fnc.dao.InsPlyIncomeMapper; import com.ydtech.modules.fnc.dto.PlatformSettlementRecordDto; import com.ydtech.modules.fnc.entity.*; import com.ydtech.modules.fnc.service.*; import com.ydtech.modules.fnc.vo.InsPlyIncomeVo; import com.ydtech.modules.fnc.vo.SettlementDocumentaryFeesVo; import com.ydtech.modules.ins.model.vo.res.*; import com.ydtech.modules.inv.model.dto.*; import com.ydtech.modules.inv.utils.EasyExcelUtils; import com.ydtech.modules.order.entity.BasePageResult; import com.ydtech.modules.order.entity.InsOrders; import com.ydtech.modules.order.entity.api.dajia.response.NVHLODR1001Response; import com.ydtech.modules.order.entity.api.zhongmei.response.SubmitResponse; import com.ydtech.modules.order.entity.crawler.response.CrawlerVerifyPaymentResponse; import com.ydtech.modules.order.entity.dto.DrivingInsuranceDto; import com.ydtech.modules.order.service.InsAreaCompanyService; import com.ydtech.modules.order.service.InsOrdersService; import com.ydtech.modules.protocol.entity.constants.PtlApiType; import com.ydtech.modules.protocol.entity.po.PtlAgreement; import com.ydtech.modules.protocol.entity.vo.PtlAgreementQueryVo; import com.ydtech.modules.protocol.service.PtlAgreementService; import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew; import com.ydtech.modules.protocols.service.InsFeeOrderNewService; import com.ydtech.utils.BigDecimalUtils; import com.ydtech.utils.SnowFlakeUtil; import com.ydtech.utils.StringOperations; import com.ydtech.utils.excel.ExcelEasypoiUtils; import com.ydtech.utils.excel.ExcelStyleUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.YearMonth; import java.time.format.DateTimeFormatter; import java.util.*; /** *

* 保司结算手续费 服务实现类 *

* * @author gws * @since 2024-01-05 */ @Slf4j @Service public class InsPlyIncomeServiceImpl extends ServiceImpl implements InsPlyIncomeService { @Autowired @Lazy private InsOrdersService insOrdersService; @Autowired private InsAreaCompanyService insAreaCompanyService; @Autowired private InsFeeOrderNewService insFeeOrderNewService; @Autowired private SettlementDocumentaryFeesService settlementDocumentaryFeesService; @Autowired private SettlementDocumentaryLogService settlementDocumentaryLogService; @Autowired private PtlAgreementService ptlAgreementService; @Autowired private EsmInsCompanyService EsmInsCompanyService; @Autowired private ImportAsyncService importAsyncService; @Autowired private IncomeTaskRelationshipService incomeTaskRelationshipService; @Autowired private SettlementDocumentaryFeesSumService settlementDocumentaryFeesSumService; @Autowired private InsPlyIncomeLogService insPlyIncomeLogService; @Value("${upload.file.path}") private String uploadPath; @Value("${upload.file.url}") private String uploadUrl; public HttpResult> queryplyIncome(InsPlyIncomeVo insPlyIncomeVo) { try { Page page = new Page<>(insPlyIncomeVo.getPageNum(), insPlyIncomeVo.getPageSize()); PageInfo> pageHelper = null; PageHelper.startPage(insPlyIncomeVo.getPageNum(), insPlyIncomeVo.getPageSize()); List list = this.baseMapper.selectByCondition(insPlyIncomeVo); pageHelper = new PageInfo(list); BasePageResult pageResult = new BasePageResult(insPlyIncomeVo.getPageNum(), insPlyIncomeVo.getPageSize(), pageHelper.getTotal(), pageHelper.getPages(), list); return HttpResult.ok(pageResult); } catch (Exception e) { e.printStackTrace(); return HttpResult.error("查询异常"); } } @Override public void saveBalanceNew(InsOrders order, InsFeeOrderNew insFeeOrderNew, InsAreaCompany insAreaCompany) { if (ObjectUtils.isEmpty(order) || ObjectUtils.isEmpty(insFeeOrderNew) || ObjectUtils.isEmpty(insAreaCompany)) { return; } String agreeType = this.judgeAgreeType(insAreaCompany.getAgreementId()); if (StringUtils.isNotEmpty(agreeType)) { // 判断协议类型 平台 保险 if ("1".equals(agreeType)) { this.savePinTai(order, insFeeOrderNew, insAreaCompany); //手续费不分非车不非车 跟单也不分 } else { // 保险 逻辑: 手续费生成一条 跟单费生成一条 非车手续费一条 非车跟单费一条 if (((insFeeOrderNew.getJqSuperviseCostsPremiums() != null && insFeeOrderNew.getJqSuperviseCostsPremiums().compareTo(BigDecimal.ZERO) != 0)) || (insFeeOrderNew.getSySuperviseCostsPremiums() != null && insFeeOrderNew.getSySuperviseCostsPremiums().compareTo(BigDecimal.ZERO) != 0)) { //手续费 this.saveInsuranceProcedures(order, insFeeOrderNew, insAreaCompany); } if (insFeeOrderNew.getJqOtherCostsPremiums() != null && insFeeOrderNew.getJqOtherCostsPremiums().compareTo(BigDecimal.ZERO) != 0) { //跟单费 this.saveOtherAmount(order, insFeeOrderNew, insAreaCompany); } if (insFeeOrderNew.getNoSuperviseCostsPremiums() != null && insFeeOrderNew.getNoSuperviseCostsPremiums().compareTo(BigDecimal.ZERO) != 0) { // 非车手续费 this.saveNoSupervise(order, insFeeOrderNew, insAreaCompany); } if (insFeeOrderNew.getNoOtherCostsPremiums() != null && insFeeOrderNew.getNoOtherCostsPremiums().compareTo(BigDecimal.ZERO) != 0) { // 非车跟单费 this.saveNoOtherAmount(order, insFeeOrderNew, insAreaCompany); } } } } private void saveNoOtherAmount(InsOrders order, InsFeeOrderNew insFeeOrderNew, InsAreaCompany insAreaCompany) { InsPlyIncome insPlyIncome = new InsPlyIncome(); insPlyIncome.setOrderno(insFeeOrderNew.getInsOrderNo()); // 子订单号 String noPolicyno = this.setNoPolicyno(insAreaCompany); if (StringUtils.isNotEmpty(noPolicyno)) { insPlyIncome.setNoPolicyno(noPolicyno); // 非车保单号 } insPlyIncome.setOtherFeevalue(insFeeOrderNew.getNoOtherCostsPremiums()); //非车跟单费 insPlyIncome.setOtherFeerate(insFeeOrderNew.getNoOtherCostsProportion()); //非车跟单费用比例 this.saveRiskCode(order.getProductid(), insPlyIncome); insPlyIncome.setPayDate(insAreaCompany.getPayDate()); insPlyIncome.setSignDate(insAreaCompany.getSigningTime()); insPlyIncome.setCompanyId(insAreaCompany.getCompanyId()); insPlyIncome.setAgreementId(insFeeOrderNew.getAgreementId()); insPlyIncome.setLicenseno(order.getLicenseno()); insPlyIncome.setTaxamount(insAreaCompany.getTaxamount()); insPlyIncome.setNoTaxPremium(insFeeOrderNew.getNoNoTaxPremium()); insPlyIncome.setCreateTime(LocalDate.now()); insPlyIncome.setDocumentaryFeesStatus("0"); insPlyIncome.setInsuredName(order.getInsuredname()); insPlyIncome.setHandlingFeesStatus("0"); insPlyIncome.setNoNoTaxPremium(insFeeOrderNew.getNoNoTaxPremium()); insPlyIncome.setNoPremium(insFeeOrderNew.getNoPremium()); insPlyIncome.setIsNotCar("1"); insPlyIncome.setIsNotDocumentary("1"); insPlyIncome.setJqStartDate(StringOperations.emptyStringToNull(insAreaCompany.getJqStartDate())); insPlyIncome.setJqEndDate(StringOperations.emptyStringToNull(insAreaCompany.getJqEndDate())); insPlyIncome.setSyStartDate(StringOperations.emptyStringToNull(insAreaCompany.getSyStartDate())); insPlyIncome.setSyEndDate(StringOperations.emptyStringToNull(insAreaCompany.getSyEndDate())); insPlyIncome.setAllFeeValue(insFeeOrderNew.getNoOtherCostsPremiums()); insPlyIncome.setNoOtherCostsPremium(insFeeOrderNew.getNoOtherCostsPremiums()); insPlyIncome.setNoOtherCostsProportion(insFeeOrderNew.getNoOtherCostsProportion()); this.saveByCompanyId(insFeeOrderNew, insAreaCompany.getCompanyId(), insPlyIncome); this.getDeptId(insPlyIncome); baseMapper.insert(insPlyIncome); } private void saveNoSupervise(InsOrders order, InsFeeOrderNew insFeeOrderNew, InsAreaCompany insAreaCompany) { InsPlyIncome insPlyIncome = new InsPlyIncome(); insPlyIncome.setOrderno(insFeeOrderNew.getInsOrderNo()); // 子订单号 insPlyIncome.setCommissionFeevalue(insFeeOrderNew.getNoSuperviseCostsPremiums());// 非车手续费 insPlyIncome.setCommissionFeerate(insFeeOrderNew.getNoSuperviseCostsProportion());// 非车手续费比例 String noPolicyno = this.setNoPolicyno(insAreaCompany); if (StringUtils.isNotEmpty(noPolicyno)) { insPlyIncome.setNoPolicyno(noPolicyno); // 非车保单号 } // insPlyIncome.setDeptId(insFeeOrderNew.getDeptId()); this.saveRiskCode(order.getProductid(), insPlyIncome); insPlyIncome.setPayDate(insAreaCompany.getPayDate()); insPlyIncome.setSignDate(insAreaCompany.getSigningTime()); insPlyIncome.setCompanyId(insAreaCompany.getCompanyId()); insPlyIncome.setAgreementId(insFeeOrderNew.getAgreementId()); insPlyIncome.setLicenseno(order.getLicenseno()); insPlyIncome.setTaxamount(insAreaCompany.getTaxamount()); insPlyIncome.setCreateTime(LocalDate.now()); insPlyIncome.setDocumentaryFeesStatus("0"); insPlyIncome.setHandlingFeesStatus("0"); insPlyIncome.setIsNotCar("1"); insPlyIncome.setIsNotDocumentary("0"); insPlyIncome.setAllFeeValue(insFeeOrderNew.getNoSuperviseCostsPremiums()); insPlyIncome.setUserId(insFeeOrderNew.getUserId()); insPlyIncome.setInsuredName(order.getInsuredname()); insPlyIncome.setNoPremium(insFeeOrderNew.getNoPremium()); //非车保费 insPlyIncome.setNoNoTaxPremium(insFeeOrderNew.getNoNoTaxPremium()); //非车不含税保费 insPlyIncome.setJqStartDate(StringOperations.emptyStringToNull(insAreaCompany.getJqStartDate())); insPlyIncome.setJqEndDate(StringOperations.emptyStringToNull(insAreaCompany.getJqEndDate())); insPlyIncome.setSyStartDate(StringOperations.emptyStringToNull(insAreaCompany.getSyStartDate())); insPlyIncome.setSyEndDate(StringOperations.emptyStringToNull(insAreaCompany.getSyEndDate())); insPlyIncome.setNoSuperviseCostsPremiums(insFeeOrderNew.getNoSuperviseCostsPremiums()); insPlyIncome.setNoSuperviseCostsProportion(insFeeOrderNew.getNoSuperviseCostsProportion()); this.getDeptId(insPlyIncome); this.saveByCompanyId(insFeeOrderNew, insAreaCompany.getCompanyId(), insPlyIncome); baseMapper.insert(insPlyIncome); } private void saveRiskCode(String productid, InsPlyIncome insPlyIncome) { if (ProductsType.PT_0330.getCode().equals(productid)) { insPlyIncome.setRiskcode(ProductsType.PT_0330.getDesc()); } if (ProductsType.PT_034001.getCode().equals(productid)) { insPlyIncome.setRiskcode(ProductsType.PT_034001.getDesc()); } if (ProductsType.PT_034002.getCode().equals(productid)) { insPlyIncome.setRiskcode(ProductsType.PT_034002.getDesc()); } if (ProductsType.PT_0330034002.getCode().equals(productid)) { insPlyIncome.setRiskcode(ProductsType.PT_0330034002.getDesc()); } if (ProductsType.PT_0330034001.getCode().equals(productid)) { insPlyIncome.setRiskcode(ProductsType.PT_0330034001.getDesc()); } } private void saveOtherAmount(InsOrders order, InsFeeOrderNew insFeeOrderNew, InsAreaCompany insAreaCompany) { BigDecimal otherAmount = this.calculateTotal(insFeeOrderNew.getJqOtherCostsPremiums(), insFeeOrderNew.getSyOtherCostsPremiums(), null); BigDecimal otherProportion = this.calculateTotal(insFeeOrderNew.getSyOtherCostsProportion(), insFeeOrderNew.getJqOtherCostsProportion(), null); BigDecimal allNoTaxPremium = this.calculateTotal(insFeeOrderNew.getJqNoTaxPremium(), insFeeOrderNew.getSyNoTaxPremium(), null); //交强不含税保费 BigDecimal allPremium = this.calculateTotal(insFeeOrderNew.getJqPremium(), insFeeOrderNew.getSyPremium(), null);// 总保费 InsPlyIncome insPlyIncome = new InsPlyIncome(insFeeOrderNew.getInsOrderNo(), insAreaCompany.getJqpolicyno(), insAreaCompany.getSypolicyno(), null, null, null, null, order.getProductid(), insAreaCompany.getPayDate(), insAreaCompany.getSigningTime(), insAreaCompany.getCompanyId(), null, insFeeOrderNew.getAgreementId(), order.getLicenseno(), insAreaCompany.getTaxamount(), allNoTaxPremium, null, otherProportion, null, otherAmount, otherAmount, null, null, LocalDate.now(), null, null, null, "0" , "0", "0", "1"); this.saveRiskCode(order.getProductid(), insPlyIncome); insPlyIncome.setTaxPremium(allPremium); insPlyIncome.setJqPremium(insFeeOrderNew.getJqPremium()); insPlyIncome.setSyPremium(insFeeOrderNew.getSyPremium()); insPlyIncome.setJqNoTaxPremium(insFeeOrderNew.getJqNoTaxPremium()); insPlyIncome.setSyNoTaxPremium(insFeeOrderNew.getSyNoTaxPremium()); insPlyIncome.setJqOtherCostsProportion(insFeeOrderNew.getJqOtherCostsProportion()); //交强跟单费比例 insPlyIncome.setSyOtherCostsProportion(insFeeOrderNew.getSyOtherCostsProportion()); //商业跟单费比例 insPlyIncome.setSyOtherCostsPremium(insFeeOrderNew.getSyOtherCostsPremiums()); insPlyIncome.setJqOtherCostsPremium(insFeeOrderNew.getJqOtherCostsPremiums()); insPlyIncome.setJqStartDate(StringOperations.emptyStringToNull(insAreaCompany.getJqStartDate())); insPlyIncome.setJqEndDate(StringOperations.emptyStringToNull(insAreaCompany.getJqEndDate())); insPlyIncome.setSyStartDate(StringOperations.emptyStringToNull(insAreaCompany.getSyStartDate())); insPlyIncome.setSyEndDate(StringOperations.emptyStringToNull(insAreaCompany.getSyEndDate())); insPlyIncome.setUserId(insFeeOrderNew.getUserId()); insPlyIncome.setInsuredName(order.getInsuredname()); this.getDeptId(insPlyIncome); this.saveByCompanyId(insFeeOrderNew, insAreaCompany.getCompanyId(), insPlyIncome); baseMapper.insert(insPlyIncome); } private void saveInsuranceProcedures(InsOrders order, InsFeeOrderNew insFeeOrderNew, InsAreaCompany insAreaCompany) { // 保险手续费 BigDecimal handlingAmount = this.calculateTotal(insFeeOrderNew.getJqSuperviseCostsPremiums(), insFeeOrderNew.getSySuperviseCostsPremiums(), null); BigDecimal handlingProportion = this.calculateTotal(insFeeOrderNew.getJqSuperviseCostsProportion(), insFeeOrderNew.getSySuperviseCostsProportion(), null); BigDecimal allNoTaxPremium = this.calculateTotal(insFeeOrderNew.getJqNoTaxPremium(), insFeeOrderNew.getSyNoTaxPremium(), null); //不含税保费 InsPlyIncome insPlyIncome = new InsPlyIncome(insFeeOrderNew.getInsOrderNo(), insAreaCompany.getJqpolicyno(), insAreaCompany.getSypolicyno(), null, null, null, null, order.getProductid(), insAreaCompany.getPayDate(), insAreaCompany.getSigningTime(), insAreaCompany.getCompanyId(), null, insFeeOrderNew.getAgreementId(), order.getLicenseno(), insAreaCompany.getTaxamount() , allNoTaxPremium, handlingProportion, null, handlingAmount, null, handlingAmount, null, null, LocalDate.now(), null, null, null, "0", "0", "0", "0"); BigDecimal allTaxPremium = this.calculateTotal(insFeeOrderNew.getJqPremium(), insFeeOrderNew.getSyPremium(), null); insPlyIncome.setJqPremium(insFeeOrderNew.getJqPremium()); insPlyIncome.setSyPremium(insFeeOrderNew.getSyPremium()); insPlyIncome.setJqNoTaxPremium(insFeeOrderNew.getJqNoTaxPremium()); insPlyIncome.setSyNoTaxPremium(insFeeOrderNew.getSyNoTaxPremium()); insPlyIncome.setJqSuperviseCostsProportion(insFeeOrderNew.getJqSuperviseCostsProportion()); insPlyIncome.setJqSuperviseCostsPremiums(insFeeOrderNew.getJqSuperviseCostsPremiums()); insPlyIncome.setSySuperviseCostsProportion(insFeeOrderNew.getSySuperviseCostsProportion()); insPlyIncome.setSySuperviseCostsPremiums(insFeeOrderNew.getSySuperviseCostsPremiums()); this.saveRiskCode(order.getProductid(), insPlyIncome); insPlyIncome.setTaxPremium(allTaxPremium); insPlyIncome.setUserId(insFeeOrderNew.getUserId()); insPlyIncome.setInsuredName(order.getInsuredname()); insPlyIncome.setJqStartDate(StringOperations.emptyStringToNull(insAreaCompany.getJqStartDate())); insPlyIncome.setJqEndDate(StringOperations.emptyStringToNull(insAreaCompany.getJqEndDate())); insPlyIncome.setSyStartDate(StringOperations.emptyStringToNull(insAreaCompany.getSyStartDate())); insPlyIncome.setSyEndDate(StringOperations.emptyStringToNull(insAreaCompany.getSyEndDate())); this.saveByCompanyId(insFeeOrderNew, insAreaCompany.getCompanyId(), insPlyIncome); this.getDeptId(insPlyIncome); baseMapper.insert(insPlyIncome); } private String setNoPolicyno(com.ydtech.modules.fnc.entity.InsAreaCompany insAreaCompany) { if (insAreaCompany.getJypremium() == null || insAreaCompany.getJypremium().compareTo(BigDecimal.ZERO) == 0) { // 非车跟单费 return null; } String crossInsurance = insAreaCompany.getCrossInsurance(); if (StringUtils.isEmpty(crossInsurance)) { return null; } JSONArray objects = JSON.parseArray(crossInsurance); if (objects.isEmpty()) { return null; } if (ObjectUtils.isEmpty(insAreaCompany.getApiType()) || PtlApiType.PTL_API_2.getCode() == insAreaCompany.getApiType()) { List drivingInsurancesDTOS = objects.toJavaList(CrawlerVerifyPaymentResponse.DrivingInsurancesDTO.class); return drivingInsurancesDTOS.get(0).getApplication(); } // 永诚 if(insAreaCompany.getCompanyId().contains(InsuranceEnum.AICS.getCode())){ List javaList = objects.toJavaList(DrivingInsuranceDto.class); return javaList.get(0).getPolicyNumber(); } // 大家 if(insAreaCompany.getCompanyId().contains(InsuranceEnum.DJPC.getCode())){ List javaList = objects.toJavaList(NVHLODR1001Response.policyInfosDTO.class); return javaList.get(0).getPlyNo(); } // 国任 if(insAreaCompany.getCompanyId().contains(InsuranceEnum.XDCX.getCode())){ List javaList = objects.toJavaList(DrivingInsuranceDto.class); return javaList.get(0).getPolicyNumber(); } // 中煤 if(insAreaCompany.getCompanyId().contains(InsuranceEnum.ZMBX.getCode())){ List javaList = objects.toJavaList(SubmitResponse.AccidentNo.class); return javaList.get(0).getRideProposalNo(); } // 紫金 if(insAreaCompany.getCompanyId().contains(InsuranceEnum.ZKIC.getCode())){ List javaList = objects.toJavaList(DrivingInsuranceDto.class); return javaList.get(0).getPolicyNumber(); } return null; } private void savePinTai(InsOrders order, InsFeeOrderNew insFeeOrderNew, InsAreaCompany insAreaCompany) { BigDecimal handlingAmount = this.calculateTotal(insFeeOrderNew.getJqSuperviseCostsPremiums(), insFeeOrderNew.getSySuperviseCostsPremiums(), insFeeOrderNew.getNoSuperviseCostsPremiums()); //手续费 BigDecimal handlingProportion = this.calculateTotal(insFeeOrderNew.getJqSuperviseCostsProportion(), insFeeOrderNew.getSySuperviseCostsProportion(), insFeeOrderNew.getNoSuperviseCostsProportion());//手续费比例 BigDecimal otherAmount = this.calculateTotal(insFeeOrderNew.getJqOtherCostsPremiums(), insFeeOrderNew.getSyOtherCostsPremiums(), insFeeOrderNew.getNoOtherCostsPremiums());//跟单费 BigDecimal otherProportion = this.calculateTotal(insFeeOrderNew.getSyOtherCostsProportion(), insFeeOrderNew.getJqOtherCostsProportion(), insFeeOrderNew.getNoOtherCostsProportion()); //跟单费比例 // 不含税保费 BigDecimal allNoTaxPremium = this.calculateTotal(insFeeOrderNew.getJqNoTaxPremium(), insFeeOrderNew.getSyNoTaxPremium(), insFeeOrderNew.getNoNoTaxPremium()); BigDecimal allAmount = this.calculateTotal(otherAmount, handlingAmount, null); BigDecimal jqReceivableProportion = this.calculateTotal(insFeeOrderNew.getJqSuperviseCostsProportion(), insFeeOrderNew.getJqOtherCostsProportion(), null);// 交强应收 比例 BigDecimal syReceivableProportion = this.calculateTotal(insFeeOrderNew.getSySuperviseCostsProportion(), insFeeOrderNew.getSyOtherCostsProportion(), null);//商业应收比例 BigDecimal noReceivableProportion = this.calculateTotal(insFeeOrderNew.getNoSuperviseCostsProportion(), insFeeOrderNew.getNoOtherCostsProportion(), null); String noPolicyno = this.setNoPolicyno(insAreaCompany); InsPlyIncome insPlyIncome = new InsPlyIncome(insFeeOrderNew.getInsOrderNo(), insAreaCompany.getJqpolicyno(), insAreaCompany.getSypolicyno(), noPolicyno, null, null, null, order.getProductid(), insAreaCompany.getPayDate(), insAreaCompany.getSigningTime(), insAreaCompany.getCompanyId(), null, insFeeOrderNew.getAgreementId(), order.getLicenseno(), insAreaCompany.getTaxamount(), allNoTaxPremium, handlingProportion, otherProportion, handlingAmount, otherAmount, allAmount, null, null, LocalDate.now(), null, null, null, "0", "0", "0", "0"); insPlyIncome.setJqReceivableProportion(jqReceivableProportion); insPlyIncome.setSyReceivableProportion(syReceivableProportion); insPlyIncome.setNoReceivableProportion(noReceivableProportion); // 应收金额 = 商业手续费+商业跟单 + 交强手续费 +交强跟单费 + 非车手续费 + 非车跟单费 = allAmount insPlyIncome.setJqSuperviseCostsPremiums(insFeeOrderNew.getJqSuperviseCostsPremiums()); // 交强手续费 insPlyIncome.setSySuperviseCostsPremiums(insFeeOrderNew.getSySuperviseCostsPremiums()); // 商业手续费 insPlyIncome.setNoSuperviseCostsPremiums(insFeeOrderNew.getNoSuperviseCostsPremiums()); // 非车手续费 insPlyIncome.setJqSuperviseCostsProportion(insFeeOrderNew.getJqSuperviseCostsProportion()); //交强手续费 比例 insPlyIncome.setSySuperviseCostsProportion(insFeeOrderNew.getSySuperviseCostsProportion()); // 商业手续费 比例 insPlyIncome.setNoSuperviseCostsProportion(insFeeOrderNew.getNoSuperviseCostsProportion());// 非车手续费 比例 insPlyIncome.setJqOtherCostsProportion(insFeeOrderNew.getJqOtherCostsProportion()); //交强跟单费比例 insPlyIncome.setSyOtherCostsProportion(insFeeOrderNew.getSyOtherCostsProportion()); //商业跟单费比例 insPlyIncome.setNoOtherCostsProportion(insFeeOrderNew.getNoOtherCostsProportion()); //非车跟单费比例 insPlyIncome.setJqPremium(insFeeOrderNew.getJqPremium()); insPlyIncome.setSyPremium(insFeeOrderNew.getSyPremium()); insPlyIncome.setNoPremium(insFeeOrderNew.getNoPremium()); insPlyIncome.setReceivableAmount(allAmount); insPlyIncome.setJqNoTaxPremium(insFeeOrderNew.getJqNoTaxPremium()); insPlyIncome.setSyNoTaxPremium(insFeeOrderNew.getSyNoTaxPremium()); insPlyIncome.setNoNoTaxPremium(insFeeOrderNew.getNoNoTaxPremium()); insPlyIncome.setUserId(insFeeOrderNew.getUserId()); insPlyIncome.setJqStartDate(StringOperations.emptyStringToNull(insAreaCompany.getJqStartDate())); insPlyIncome.setJqEndDate(StringOperations.emptyStringToNull(insAreaCompany.getJqEndDate())); insPlyIncome.setSyStartDate(StringOperations.emptyStringToNull(insAreaCompany.getSyStartDate())); insPlyIncome.setSyEndDate(StringOperations.emptyStringToNull(insAreaCompany.getSyEndDate())); this.getDeptId(insPlyIncome); this.saveRiskCode(order.getProductid(), insPlyIncome); insPlyIncome.setInsuredName(order.getInsuredname()); this.saveByCompanyId(insFeeOrderNew, insAreaCompany.getCompanyId(), insPlyIncome); baseMapper.insert(insPlyIncome); } private void getDeptId(InsPlyIncome insPlyIncome) { PtlAgreement ptlAgreement = ptlAgreementService.getById(insPlyIncome.getAgreementId()); String deptId = ptlAgreement.getDeptId(); insPlyIncome.setDeptId(deptId); } private void saveByCompanyId(InsFeeOrderNew insFeeOrderNew, String companyId, InsPlyIncome insPlyIncome) { PtlAgreement ptlAgreementQueryVo = this.ptlAgreementService.getByAgreementIdNew(insFeeOrderNew.getAgreementId()); if (ObjectUtils.isNotEmpty(ptlAgreementQueryVo)) { if (StringUtils.isNotEmpty(ptlAgreementQueryVo.getPartnerCompaniesId())) { // 合作公司id String partnerCompaniesId = ptlAgreementQueryVo.getPartnerCompaniesId(); insPlyIncome.setPartnerCompaniesId(partnerCompaniesId); EsmInsCompany esmInsCompany = EsmInsCompanyService.getById(partnerCompaniesId); String name = esmInsCompany.getNamesimple(); //合作名称 insPlyIncome.setPartnerCompaniesName(name); insPlyIncome.setPartnerCompaniesId(ptlAgreementQueryVo.getPartnerCompaniesId()); } if (StringUtils.isNotEmpty(ptlAgreementQueryVo.getInsuranceCompanyId())) { String insuranceCompanyId = ptlAgreementQueryVo.getInsuranceCompanyId(); EsmInsCompany esmInsCompany = EsmInsCompanyService.getById(insuranceCompanyId); String name = esmInsCompany.getNamesimple(); //保险公司名称 简称 insPlyIncome.setCompanyName(name); } } } private BigDecimal calculateTotal(BigDecimal value1, BigDecimal value2, BigDecimal value3) { BigDecimal total = BigDecimal.ZERO; if (value1 != null) { total = total.add(value1); } if (value2 != null) { total = total.add(value2); } if (value3 != null) { total = total.add(value3); } return total; } private String judgeAgreeType(Long agreementId) { if (agreementId == null) { return null; } HttpResult byAgreementId = ptlAgreementService.getByAgreementId(agreementId.toString()); if (byAgreementId != null && ObjectUtils.isNotEmpty(byAgreementId.getData())) { PtlAgreement agreement = byAgreementId.getData().getAgreement(); String agreementType = agreement.getAgreementType(); if (StringUtils.isNotEmpty(agreementType)) { return agreementType; } } return null; } public HttpResult> queryNew(InsPlyIncomeVo insPlyIncomeVo) { try { HashMap params = new HashMap<>(); PageInfo> pageHelper = null; PageHelper.startPage(insPlyIncomeVo.getPageNum(), insPlyIncomeVo.getPageSize()); params.put("pageNum", insPlyIncomeVo.getPageNum()); params.put("pageSize", insPlyIncomeVo.getPageSize()); params = this.saveParams(insPlyIncomeVo, params); if (StringUtils.isNotEmpty(insPlyIncomeVo.getIds())) { params.put("ids", insPlyIncomeVo.getIds().split(",")); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getId())) { SettlementDocumentaryFeesEntity settlementDocumentaryFeesEntity = settlementDocumentaryFeesService.getById(insPlyIncomeVo.getId()); // 通过任务id查询 明细 String taskId = settlementDocumentaryFeesEntity.getTaskId(); List incomeIds = incomeTaskRelationshipService.getByTaskId(taskId); if (!CollectionUtils.isEmpty(incomeIds)) { params.put("incomeIds", incomeIds); params.remove("handlingFeesStatus"); params.remove("id"); } } List list = this.baseMapper.queryNew(params); pageHelper = new PageInfo(list); BasePageResult pageResult = new BasePageResult(insPlyIncomeVo.getPageNum(), insPlyIncomeVo.getPageSize(), pageHelper.getTotal(), pageHelper.getPages(), list); return HttpResult.ok(pageResult); } catch (Exception e) { e.printStackTrace(); return HttpResult.error("查询异常"); } } @Override public HashMap totalAmount(List selectIds) { HashMap params = new HashMap<>(); params.put("selectIds", selectIds); HashMap resultMap = baseMapper.totalAmount(params); return resultMap; } @Override @Transactional public HttpResult batchPinBalance(InsPlyIncomeVo insPlyIncomeVo) { LocalDateTime now = LocalDateTime.now(); if (!CollectionUtils.isEmpty(insPlyIncomeVo.getSelectIds())) { List selectIds = insPlyIncomeVo.getSelectIds(); for (String id : selectIds) { InsPlyIncome insPlyIncome = new InsPlyIncome(); insPlyIncome.setHandlingFeesStatus("1"); insPlyIncome.setSettlementTime(now); insPlyIncome.setSettlementUserId(BaseController.getUser().getId()); insPlyIncome.setId(id); baseMapper.updateById(insPlyIncome); } } SettlementDocumentaryLogEntity settlementDocumentaryLogEntity = new SettlementDocumentaryLogEntity(); settlementDocumentaryLogEntity.setIds(insPlyIncomeVo.getIds()); // settlementDocumentaryLogEntity.setCompanyId(insPlyIncomeVo.getCompanyId()); settlementDocumentaryLogEntity.setAmount(insPlyIncomeVo.getOtherFeevalue()); //跟单费金额 settlementDocumentaryLogEntity.setHandingAmount(insPlyIncomeVo.getCommissionFeevalue()); //手续费金额 settlementDocumentaryLogEntity.setCreateTime(new Date()); settlementDocumentaryLogService.save(settlementDocumentaryLogEntity); return HttpResult.ok(); } @Override public List totalPinAmount(InsPlyIncomeVo insPlyIncomeVo) { HashMap params = new HashMap<>(); params = this.saveParams(insPlyIncomeVo, params); List result = baseMapper.totalPinAmount(params); return result; } private HashMap saveParams(InsPlyIncomeVo insPlyIncomeVo, HashMap params) { if (ObjectUtils.isNotEmpty(insPlyIncomeVo.getId())) { params.put("id", insPlyIncomeVo.getId()); } if (ObjectUtils.isNotEmpty(insPlyIncomeVo.getStartDate())) { params.put("startDate", insPlyIncomeVo.getStartDate().toString()); } if (ObjectUtils.isNotEmpty(insPlyIncomeVo.getEndDate())) { params.put("endDate", insPlyIncomeVo.getEndDate().toString()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getOrderno())) { params.put("orderno", insPlyIncomeVo.getOrderno()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getIsNotDocumentary())) { params.put("isOther", insPlyIncomeVo.getIsNotDocumentary()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getIsNotCar())) { params.put("isNotCar", insPlyIncomeVo.getIsNotCar()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getAgreementType())) { params.put("agreementType", insPlyIncomeVo.getAgreementType()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getLicenseno())) { params.put("licenseno", insPlyIncomeVo.getLicenseno()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getUserId())) { params.put("userId", insPlyIncomeVo.getUserId()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getCompanyId())) { params.put("companyId", insPlyIncomeVo.getCompanyId()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getRiskcode())) { params.put("riskcode", insPlyIncomeVo.getRiskcode()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getPolicyno())) { params.put("policyno", insPlyIncomeVo.getPolicyno()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getSyPolicyno())) { params.put("syPolicyno", insPlyIncomeVo.getSyPolicyno()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getNoPolicyno())) { params.put("noPolicyno", insPlyIncomeVo.getNoPolicyno()); } if (insPlyIncomeVo.getCreateTime() != null) { params.put("createTime", insPlyIncomeVo.getCreateTime().toString()); } if (insPlyIncomeVo.getSettlementTime() != null) { params.put("settlementTime", insPlyIncomeVo.getSettlementTime().toString()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getHandlingFeesStatus())) { params.put("handlingFeesStatus", insPlyIncomeVo.getHandlingFeesStatus()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getPartnerCompaniesId())) { params.put("partnerCompaniesId", insPlyIncomeVo.getPartnerCompaniesId()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getYear())) { params.put("year", insPlyIncomeVo.getYear()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getMonth())) { params.put("month", insPlyIncomeVo.getMonth()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getDay())) { params.put("day", insPlyIncomeVo.getDay()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getSignDateEnd())) { params.put("signDateEnd", insPlyIncomeVo.getSignDateEnd()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getSignDateStart())) { params.put("signDateStart", insPlyIncomeVo.getSignDateStart()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getCompanyName())) { params.put("companyName", insPlyIncomeVo.getCompanyName()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getInsuredName())) { params.put("insuredName", insPlyIncomeVo.getInsuredName()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getPartnerCompaniesName())) { params.put("partnerCompaniesName", insPlyIncomeVo.getPartnerCompaniesName()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getDockingPerson())) { params.put("dockingPerson", insPlyIncomeVo.getDockingPerson()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getYeartsStart()) && StringUtils.isNotEmpty(insPlyIncomeVo.getYeartsEnd())) { params.put("yeartsStart", insPlyIncomeVo.getYeartsStart()); params.put("yeartsEnd", insPlyIncomeVo.getYeartsEnd()); } if (insPlyIncomeVo.getJqStartDate() != null) { params.put("jqStartDate", insPlyIncomeVo.getJqStartDate()); } if (insPlyIncomeVo.getJqStartDate() != null) { params.put("jqEndDate", insPlyIncomeVo.getJqEndDate()); } if (insPlyIncomeVo.getSyStartDate() != null) { params.put("syStartDate", insPlyIncomeVo.getSyStartDate()); } if (insPlyIncomeVo.getSyEndDate() != null) { params.put("syEndDate", insPlyIncomeVo.getSyEndDate()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getProvinceId())) { params.put("provinceId", insPlyIncomeVo.getProvinceId()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getCityId())) { params.put("cityId", insPlyIncomeVo.getCityId()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getCountyId())) { params.put("countyId", insPlyIncomeVo.getCountyId()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getDeptId())) { params.put("deptId", insPlyIncomeVo.getDeptId()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getAllPartnerCompaniesId())) { params.put("allPartnerCompaniesId", insPlyIncomeVo.getAllPartnerCompaniesId().substring(0, 5)); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getProvincePartnerCompaniesId())) { params.put("provincePartnerCompaniesId", insPlyIncomeVo.getProvincePartnerCompaniesId()); } if (!CollectionUtils.isEmpty(insPlyIncomeVo.getSelectIds())) { params.put("selectIds", insPlyIncomeVo.getSelectIds()); } if (!CollectionUtils.isEmpty(insPlyIncomeVo.getPartnerCompaniesIdList())) { params.put("partnerCompaniesIdList", insPlyIncomeVo.getPartnerCompaniesIdList()); } if(StringUtils.isNotEmpty(insPlyIncomeVo.getCreateTimeQuery())){ params.put("createTimeQuery", insPlyIncomeVo.getCreateTimeQuery()); } if(StringUtils.isNotEmpty(insPlyIncomeVo.getSettlementDate())){ params.put("settlementDate", insPlyIncomeVo.getSettlementDate()); } return params; } @Override public HttpResult> nonSettlementQuery(InsPlyIncomeVo insPlyIncomeVo) { try { HashMap params = new HashMap<>(); PageInfo> pageHelper = null; PageHelper.startPage(insPlyIncomeVo.getPageNum(), insPlyIncomeVo.getPageSize()); params.put("pageNum", insPlyIncomeVo.getPageNum()); params.put("pageSize", insPlyIncomeVo.getPageSize()); if (StringUtils.isNotEmpty(insPlyIncomeVo.getIsNotCar())) { params.put("isNotCar", insPlyIncomeVo.getIsNotCar()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getIsNotDocumentary())) { params.put("isOther", insPlyIncomeVo.getIsNotDocumentary()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getYear())) { params.put("year", insPlyIncomeVo.getYear()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getMonth())) { params.put("month", insPlyIncomeVo.getMonth()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getDocumentaryFeesStatus())) { params.put("documentaryFeesStatus", insPlyIncomeVo.getDocumentaryFeesStatus()); } List list = this.baseMapper.NonSettlementQuery(params); pageHelper = new PageInfo(list); BasePageResult pageResult = new BasePageResult(insPlyIncomeVo.getPageNum(), insPlyIncomeVo.getPageSize(), pageHelper.getTotal(), pageHelper.getPages(), list); return HttpResult.ok(pageResult); } catch (Exception e) { e.printStackTrace(); return HttpResult.error("查询异常"); } } @Override public HttpResult> nonSettldetail(InsPlyIncomeVo insPlyIncomeVo) { try { String ids = insPlyIncomeVo.getIds(); ArrayList resultList = new ArrayList<>(); if (ObjectUtils.isNotEmpty(ids)) { String[] split = ids.split(","); for (int i = 0; i < split.length; i++) { String id = split[i]; resultList.add(this.baseMapper.getById(id)); } } return HttpResult.ok(resultList); } catch (Exception e) { e.printStackTrace(); return HttpResult.error("查询异常"); } } /** * @param multipartFile * @return totalAmount 总金额 * totalHandingAmount 总手续费金额 * totalOtherAmount 总跟单费金额 * resultHashMap 返回 ids 已经上面的金额 * resultNoSelect 未匹配的车牌号 */ @Override public HashMap importData(MultipartFile multipartFile) { BigDecimal totalAmount = BigDecimal.ZERO; BigDecimal totalHandingAmount = BigDecimal.ZERO; BigDecimal totalOtherAmount = BigDecimal.ZERO; HashMap resultHashMap = new HashMap<>(); HashSet partnerCompaniesIdSet = new HashSet<>(); List ids = new ArrayList<>(); LocalDateTime now = LocalDateTime.now(); ArrayList> resultNoSelect = new ArrayList<>(); try { List dtoList = ExcelEasypoiUtils.importExcel(multipartFile, InsPlyIncomeExcelDto.class, 0, 1, 1); for (InsPlyIncomeExcelDto excelItem : dtoList) { String reason =""; HashMap objectObjectHashMap = new HashMap<>(); if (StringUtils.isNotEmpty(excelItem.getLicenseno())) { objectObjectHashMap.put("licenseno", excelItem.getLicenseno());//车牌号 } if (StringUtils.isNotEmpty(excelItem.getPolicyno())) { objectObjectHashMap.put("policyno", excelItem.getPolicyno()); //交强保单号 } if (StringUtils.isNotEmpty(excelItem.getSyPolicyno())) { objectObjectHashMap.put("syPolicyno", excelItem.getSyPolicyno());//商业保单号 } if (StringUtils.isNotEmpty(excelItem.getNoPolicyno())) { objectObjectHashMap.put("noPolicyno", excelItem.getNoPolicyno()); //非车保单号 } objectObjectHashMap.put("agreementType","1"); InsPlyIncome insPlyIncome = baseMapper.findByLicenseno(objectObjectHashMap); if (ObjectUtils.isNotEmpty(insPlyIncome)) { // 如果能查询出来则 修改结算 变成已结算 if(excelItem.getJqReceivableProportion()!=null && excelItem.getJqReceivableProportion().compareTo(BigDecimal.ZERO) !=0 ){ objectObjectHashMap.put("jqReceivableProportion", excelItem.getJqReceivableProportion()); //非车保单号 List insPlyIncomes = baseMapper.queryNew(objectObjectHashMap); if(insPlyIncomes.isEmpty()){ reason="交强应收比例错误!"; } } if(excelItem.getSyReceivableProportion()!=null && excelItem.getSyReceivableProportion().compareTo(BigDecimal.ZERO) !=0 ){ objectObjectHashMap.put("syReceivableProportion", excelItem.getSyReceivableProportion()); //非车保单号 List insPlyIncomes = baseMapper.queryNew(objectObjectHashMap); if(insPlyIncomes.isEmpty() && StringUtils.isEmpty(reason)){ reason="商业应收比例错误!"; } } if(excelItem.getNoReceivableProportion()!=null && excelItem.getNoReceivableProportion().compareTo(BigDecimal.ZERO) !=0 ){ objectObjectHashMap.put("noReceivableProportion", excelItem.getNoReceivableProportion()); //非车保单号 List insPlyIncomes = baseMapper.queryNew(objectObjectHashMap); if(insPlyIncomes.isEmpty() && StringUtils.isEmpty(reason)){ reason="非车应收比例错误!"; } } //判断是否是相同保司机构 partnerCompaniesIdSet.add(insPlyIncome.getPartnerCompaniesId()); if(StringUtils.isNotEmpty(reason)){ objectObjectHashMap.put("reason",reason); resultNoSelect.add(objectObjectHashMap); // 添加未匹配的车牌号 }else { ids.add(insPlyIncome.getId()); if (insPlyIncome.getAllFeeValue() != null && insPlyIncome.getAllFeeValue().compareTo(BigDecimal.ZERO) != 0) { totalAmount = totalAmount.add(insPlyIncome.getAllFeeValue()); //总金额 } if (insPlyIncome.getCommissionFeevalue() != null && insPlyIncome.getCommissionFeevalue().compareTo(BigDecimal.ZERO) != 0) { totalHandingAmount = totalHandingAmount.add(insPlyIncome.getCommissionFeevalue()); //总手续费 } if (insPlyIncome.getOtherFeevalue() != null && insPlyIncome.getOtherFeevalue().compareTo(BigDecimal.ZERO) != 0) { totalOtherAmount = totalOtherAmount.add(insPlyIncome.getOtherFeevalue()); //总跟单费 } } } else { objectObjectHashMap.put("reason","未查询车辆"); resultNoSelect.add(objectObjectHashMap); // 添加未匹配的车牌号 } } if(partnerCompaniesIdSet.size()>1){ throw new SystemException("表里有不同保司机构"); } resultHashMap.put("totalAmount", totalAmount); resultHashMap.put("totalHandingAmount", totalHandingAmount); resultHashMap.put("totalOtherAmount", totalOtherAmount); resultHashMap.put("resultList", resultNoSelect); resultHashMap.put("settIdList",ids); return resultHashMap; } catch (IOException e) { throw new SystemException("导入失败!"); } } /** * @param multipartFile * @return resultList 包含总金额 还有 未匹配表中的数据 */ @Override public HashMap bxImportData(MultipartFile multipartFile, String isNotCar) { BigDecimal totalAmount = BigDecimal.ZERO; HashMap params = new HashMap<>(); ArrayList> resultList = new ArrayList<>(); HashMap resultMap = new HashMap<>(); StringBuffer strBuilder = new StringBuffer(); boolean open = true; String ids = ""; try { List dtoList = ExcelEasypoiUtils.importExcel(multipartFile, InsBxPlyIncomeExcelDto.class, 0, 1, 1); Integer i = 0; if (!CollectionUtils.isEmpty(dtoList)) { for (InsBxPlyIncomeExcelDto excelItem : dtoList) { String reason = ""; i = i + 1; params.clear(); if (StringUtils.isNotEmpty(excelItem.getLicenseno())) { String licenseno = excelItem.getLicenseno();//车牌号 params.put("licenseno", licenseno); InsPlyIncome byBxLicenseno = baseMapper.findByBxLicenseno(params); if (ObjectUtils.isEmpty(byBxLicenseno)) { reason = "该数据车牌号有问题"; } } if (StringUtils.isNotEmpty(excelItem.getPolicyno())) { String policyno = excelItem.getPolicyno(); //交强保单号 params.put("policyno", policyno); InsPlyIncome byBxLicenseno = baseMapper.findByBxLicenseno(params); if (ObjectUtils.isEmpty(byBxLicenseno)) { reason = "该数据交强保单号有问题"; } } if (StringUtils.isNotEmpty(excelItem.getSyPolicyno())) { String syPolicyno = excelItem.getSyPolicyno(); //商业保单号 params.put("syPolicyno", syPolicyno); InsPlyIncome byBxLicenseno = baseMapper.findByBxLicenseno(params); if (ObjectUtils.isEmpty(byBxLicenseno)) { reason = "该数据商业保单号有问题"; } } if (excelItem.getJqSuperviseCostsProportion() != null && excelItem.getJqSuperviseCostsProportion().compareTo(BigDecimal.ZERO) != 0) { params.put("jqSuperviseCostsProportion", excelItem.getJqSuperviseCostsProportion()); InsPlyIncome byBxLicenseno = baseMapper.findByBxLicenseno(params); if (ObjectUtils.isEmpty(byBxLicenseno)) { reason = "该数据交强手续费比例有问题"; } } if (excelItem.getSySuperviseCostsProportion() != null && excelItem.getSySuperviseCostsProportion().compareTo(BigDecimal.ZERO) != 0) { params.put("sySuperviseCostsProportion", excelItem.getSySuperviseCostsProportion()); InsPlyIncome byBxLicenseno = baseMapper.findByBxLicenseno(params); if (ObjectUtils.isEmpty(byBxLicenseno)) { reason = "该数据商业手续费比例有问题"; } } // 只查手续费 params.put("isOther", "0"); params.put("isNotCar", isNotCar); InsPlyIncome insPlyIncome = baseMapper.findByBxLicenseno(params); if (ObjectUtils.isNotEmpty(insPlyIncome) && open) { open = false; resultMap.put("companyId", insPlyIncome.getCompanyId()); // 保险公司id resultMap.put("partnerCompaniesId", insPlyIncome.getPartnerCompaniesId()); //合作公司id resultMap.put("agreementId", insPlyIncome.getAgreementId()); //协议id } if (ObjectUtils.isNotEmpty(insPlyIncome)) { // 比配上汇总金额 未匹配则返回到数据当中 strBuilder.append(insPlyIncome.getId()).append(","); if (insPlyIncome.getCommissionFeevalue() != null && insPlyIncome.getCommissionFeevalue().compareTo(BigDecimal.ZERO) != 0) { totalAmount = totalAmount.add(insPlyIncome.getCommissionFeevalue()); //添加总手续费 } } else { HashMap noMatching = new HashMap<>(); if (StringUtils.isNotEmpty(excelItem.getLicenseno())) { noMatching.put("licenseno", excelItem.getLicenseno()); } if (StringUtils.isNotEmpty(excelItem.getPolicyno())) { noMatching.put("policyno", excelItem.getPolicyno()); } if (StringUtils.isNotEmpty(excelItem.getSyPolicyno())) { noMatching.put("syPolicyno", excelItem.getSyPolicyno()); } resultList.add(noMatching); } resultMap.put("reason", reason); } } if (strBuilder.length() > 0) { ids = strBuilder.deleteCharAt(strBuilder.length() - 1).toString(); } resultMap.put("ids", ids); resultMap.put("totalAmount", totalAmount); resultMap.put("resultList", resultList); return resultMap; } catch (IOException e) { throw new SystemException("导入失败!"); } } @Override public HashMap bxImportNoData(MultipartFile multipartFile, String isNotCar) { BigDecimal totalAmount = BigDecimal.ZERO; HashMap params = new HashMap<>(); HashMap resultMap = new HashMap<>(); ArrayList> resultList = new ArrayList<>(); StringBuffer strBuilder = new StringBuffer(); String ids = ""; try { Integer i = 0; List dtoList = ExcelEasypoiUtils.importExcel(multipartFile, InsBxNoPlyIncomeExcelDto.class, 0, 1, 1); if (!CollectionUtils.isEmpty(dtoList)) { for (InsBxNoPlyIncomeExcelDto excelItem : dtoList) { String reason = ""; i = i + 1; params.clear(); if (StringUtils.isNotEmpty(excelItem.getLicenseno())) { String licenseno = excelItem.getLicenseno();//车牌号 params.put("licenseno", licenseno); InsPlyIncome byBxLicenseno = baseMapper.findByBxLicenseno(params); if (ObjectUtils.isEmpty(byBxLicenseno)) { reason = "该数据车牌号有问题"; } } if (StringUtils.isNotEmpty(excelItem.getNoPolicyno())) { String policyno = excelItem.getNoPolicyno(); //非车保单号 params.put("NoPolicyno", policyno); InsPlyIncome byBxLicenseno = baseMapper.findByBxLicenseno(params); if (ObjectUtils.isEmpty(byBxLicenseno)) { reason = "该数据非车保单号有问题"; } } if (excelItem.getNoSuperviseCostsProportion() != null && excelItem.getNoSuperviseCostsProportion().compareTo(BigDecimal.ZERO) != 0) { params.put("noSuperviseCostsProportion", excelItem.getNoSuperviseCostsProportion()); InsPlyIncome byBxLicenseno = baseMapper.findByBxLicenseno(params); if (ObjectUtils.isEmpty(byBxLicenseno)) { reason = "该数据非车手续费比例有问题"; } } // 只查手续费 params.put("isOther", "0"); params.put("isNotCar", isNotCar); InsPlyIncome insPlyIncome = baseMapper.findByBxLicenseno(params); if (i == dtoList.size() && ObjectUtils.isNotEmpty(insPlyIncome)) { resultMap.put("companyId", insPlyIncome.getCompanyId()); // 保险公司id resultMap.put("partnerCompaniesId", insPlyIncome.getPartnerCompaniesId()); //合作公司id resultMap.put("agreementId", insPlyIncome.getAgreementId()); //协议id } if (ObjectUtils.isNotEmpty(insPlyIncome)) { // 比配上汇总金额 未匹配则返回到数据当中 strBuilder.append(insPlyIncome.getId()).append(","); if (insPlyIncome.getCommissionFeevalue() != null && insPlyIncome.getCommissionFeevalue().compareTo(BigDecimal.ZERO) != 0) { totalAmount = totalAmount.add(insPlyIncome.getCommissionFeevalue()); //添加总手续费 } } else { HashMap noMatching = new HashMap<>(); if (StringUtils.isNotEmpty(excelItem.getLicenseno())) { noMatching.put("licenseno", excelItem.getLicenseno()); } if (StringUtils.isNotEmpty(excelItem.getNoPolicyno())) { noMatching.put("NoPolicyno", excelItem.getNoPolicyno()); } resultList.add(noMatching); } resultMap.put("reason", reason); } if (strBuilder.length() > 0) { ids = strBuilder.deleteCharAt(strBuilder.length() - 1).toString(); } resultMap.put("ids", ids); resultMap.put("totalAmount", totalAmount); resultMap.put("resultList", resultList); } return resultMap; } catch (IOException e) { throw new SystemException("导入失败!"); } } @Override public HttpResult bxOtherDetailsExcel(InsPlyIncomeVo insPlyIncomeVo, HttpServletRequest request, HttpServletResponse response) { HashMap params = new HashMap<>(); params = this.saveParams(insPlyIncomeVo, params); List insPlyIncomes = baseMapper.queryNew(params); String filePathName = ""; List resultNoList = new ArrayList<>(); List resultList = new ArrayList<>(); //判断是否是非车 1 是非车 if ("1".equals(insPlyIncomeVo.getIsNotCar())) { filePathName = "非车跟单明细导出"; ExportParams exportParams = new ExportParams("非车跟单明细", null, ExcelType.HSSF); exportParams.setStyle(ExcelStyleUtil.class); for (InsPlyIncome item : insPlyIncomes) { BxOtherDetailsNorExcel bxOtherDetailsNorExcel = new BxOtherDetailsNorExcel(); LocalDateTime signDate = item.getSignDate(); BeanUtils.copyProperties(item, bxOtherDetailsNorExcel); bxOtherDetailsNorExcel.setSigndate(signDate); resultNoList.add(bxOtherDetailsNorExcel); } } else { filePathName = "车险跟单明细导出"; ExportParams exportParams = new ExportParams("车险跟单明细", null, ExcelType.HSSF); exportParams.setStyle(ExcelStyleUtil.class); for (InsPlyIncome item : insPlyIncomes) { BxOtherDetailsExcel bxOtherDetailsExcel = new BxOtherDetailsExcel(); LocalDateTime signDate = item.getSignDate(); BeanUtils.copyProperties(item, bxOtherDetailsExcel); bxOtherDetailsExcel.setSigndate(signDate); resultList.add(bxOtherDetailsExcel); } } String uploadPath = this.uploadPath + "/excel/"; Path path = Paths.get(uploadPath); if (!Files.exists(path)) { try { Files.createDirectories(path); } catch (IOException e) { e.printStackTrace(); } } String fileName = ""; if ("1".equals(insPlyIncomeVo.getIsNotCar())) { fileName = EasyExcelUtils.downExcel(uploadPath, filePathName, BxOtherDetailsNorExcel.class, resultNoList); } else { fileName = EasyExcelUtils.downExcel(uploadPath, filePathName, BxOtherDetailsExcel.class, resultList); } return HttpResult.ok("", uploadUrl + "excel/" + fileName); } /** * @param insPlyIncomeVo 传参字段 * ids 通过ids中的id进行开票分组 * @return */ @Override public HttpResult> invicdetail(InsPlyIncomeVo insPlyIncomeVo) { HashMap params = new HashMap<>(); params = this.saveParams(insPlyIncomeVo, params); if (StringUtils.isEmpty(insPlyIncomeVo.getIsSettlement())) { params.put("isSettlement", "1"); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getSettlementStatus())) { params.put("settlementStatus", insPlyIncomeVo.getSettlementStatus()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getCompletionStatus())) { params.put("completionStatus", insPlyIncomeVo.getCompletionStatus()); } List resultList = settlementDocumentaryFeesService.querySettleNew(params); if (resultList.size() > 0) { return HttpResult.ok(resultList); } return HttpResult.ok(); } /*** * * @param insPlyIncomeVo * @param request * @param response * @return 保险非车跟单明细导出 */ @Override public HttpResult bxNoOtherDetailsExcel(InsPlyIncomeVo insPlyIncomeVo, HttpServletRequest request, HttpServletResponse response) { HashMap params = new HashMap<>(); params = this.saveParams(insPlyIncomeVo, params); List insPlyIncomes = baseMapper.queryNew(params); ExportParams exportParams = new ExportParams("保险非车跟单明细导出", null, ExcelType.HSSF); exportParams.setStyle(ExcelStyleUtil.class); List resultList = new ArrayList<>(); for (InsPlyIncome item : insPlyIncomes) { BxNoOtherDetailsExcel bxNoOtherDetailsExcel = new BxNoOtherDetailsExcel(); BeanUtils.copyProperties(item, bxNoOtherDetailsExcel); resultList.add(bxNoOtherDetailsExcel); } String uploadPath = this.uploadPath + "/excel/"; Path path = Paths.get(uploadPath); if (!Files.exists(path)) { try { Files.createDirectories(path); } catch (IOException e) { e.printStackTrace(); } } String fileName = EasyExcelUtils.downExcel(uploadPath, "保险非车跟单明细导出", BxNoOtherDetailsExcel.class, resultList); return HttpResult.ok("", uploadUrl + "excel/" + fileName); } /** * @param insPlyIncomeVo 开票ids * @return 返回开票号 开票金额 开票时间 */ @Override public HttpResult>> otherSettldetail(InsPlyIncomeVo insPlyIncomeVo) { HashMap params = new HashMap<>(); params = this.saveParams(insPlyIncomeVo, params); List> resultList = settlementDocumentaryFeesService.getOtherSettldetail(params); if (resultList.size() > 0) { return HttpResult.ok(resultList); } return HttpResult.ok(); } @Override public InsPlyIncome getEntityById(String id) { return baseMapper.getEntityById(id); } @Override @Transactional public void updateByEntity(InsPlyIncomeVo insPlyIncomeVo) { // 根据协议 如果是含增值税结算 用保费 * 如果是 不含税保费 InsPlyIncome insPlyIncome = new InsPlyIncome(); BeanUtils.copyProperties(insPlyIncomeVo, insPlyIncome); InsPlyIncome byId = baseMapper.getById(insPlyIncomeVo.getId()); InsPlyIncomeLog insPlyIncomeLog = new InsPlyIncomeLog(); insPlyIncomeLog.setIncomeId(insPlyIncome.getId()); BeanUtils.copyProperties(byId,insPlyIncomeLog); insPlyIncomeLog.setId(null); insPlyIncomeLog.setOperationStatus("2"); insPlyIncomeLogService.saveLog(insPlyIncomeLog); //添加日志 this.amountCalculate(insPlyIncomeVo, insPlyIncome); insPlyIncome.setUpdateUserId(BaseController.getUser().getId()); baseMapper.updateById(insPlyIncome); // // insPlyIncomeVo.setCrudStatus("2"); // this.saveLog(insPlyIncomeVo); } @Override public void updateNoHand(InsPlyIncomeVo insPlyIncomeVo) { // 根据协议 如果是含增值税结算 用保费 * 如果是 不含税保费 InsPlyIncome insPlyIncome = baseMapper.getById(insPlyIncomeVo.getId()); BigDecimal bigDecimal = this.getBigDecimal(insPlyIncome.getNoPremium(), insPlyIncomeVo.getNoSuperviseCostsProportion()); insPlyIncome.setCommissionFeevalue(bigDecimal); insPlyIncome.setCommissionFeerate(insPlyIncomeVo.getNoSuperviseCostsProportion()); insPlyIncome.setNoSuperviseCostsPremiums(bigDecimal); insPlyIncome.setAllFeeValue(bigDecimal); insPlyIncome.setUpdateUserId(BaseController.getUser().getId()); insPlyIncome.setNoSuperviseCostsProportion(insPlyIncomeVo.getNoSuperviseCostsProportion()); baseMapper.updateById(insPlyIncome); InsPlyIncomeLog insPlyIncomeLog = new InsPlyIncomeLog(); insPlyIncomeLog.setIncomeId(insPlyIncome.getId()); BeanUtils.copyProperties(insPlyIncome,insPlyIncomeLog); insPlyIncomeLog.setId(null); insPlyIncomeLog.setOperationStatus("2"); insPlyIncomeLogService.saveLog(insPlyIncomeLog); //添加日志 insPlyIncomeVo.setOtherFeevalue(insPlyIncomeVo.getNoSuperviseCostsPremiums()); insPlyIncomeVo.setCrudStatus("2"); this.saveLog(insPlyIncomeVo); } @Override public HttpResult batchPinBalanceNew(InsPlyIncomeVo insPlyIncomeVo) { LocalDateTime now = LocalDateTime.now(); if(!CollectionUtils.isEmpty(insPlyIncomeVo.getSettIdList())){ for (String id : insPlyIncomeVo.getSettIdList()){ InsPlyIncome insPlyIncome = baseMapper.getById(id); if("1".equals(insPlyIncome.getHandlingFeesStatus())){ throw new SystemException("有已结算数据"); } insPlyIncome.setSettlementImageId(insPlyIncomeVo.getSettlementImageId()); insPlyIncome.setSettlementUserId(BaseController.getUser().getId()); insPlyIncome.setSettlementTime(now); insPlyIncome.setId(id); insPlyIncome.setHandlingFeesStatus("1"); baseMapper.updateById(insPlyIncome); } } return HttpResult.ok(); } /** * @param insPlyIncomeVo * @param insPlyIncome 重新计算金额 通过比例 * 计算逻辑 交强不含税保费* 交强跟单比例 = 交强跟单金额 */ private void amountCalculate(InsPlyIncomeVo insPlyIncomeVo, InsPlyIncome insPlyIncome) { if ("1".equals(insPlyIncomeVo.getAgreementType())) { //平台 // 平台 手续费 +跟单费 = 应收 手续费 = 手续费比例*保费 应收比例=手续费比例 + 跟单比例 BigDecimal jqSuperviseCostsProportion = initializationBigdecimal(insPlyIncomeVo.getJqSuperviseCostsProportion());//交强手续费比例 BigDecimal sySuperviseCostsProportion = initializationBigdecimal(insPlyIncomeVo.getSySuperviseCostsProportion()); //商业手续费比例 BigDecimal noSuperviseCostsProportion = initializationBigdecimal(insPlyIncomeVo.getNoSuperviseCostsProportion()); //非车手续费比例 BigDecimal jqOtherCostsProportion = initializationBigdecimal(insPlyIncomeVo.getJqOtherCostsProportion()); //交强跟单比例 BigDecimal syOtherCostsProportion = initializationBigdecimal(insPlyIncomeVo.getSyOtherCostsProportion()); //商业跟单比例 BigDecimal noOtherCostsProportion = initializationBigdecimal(insPlyIncomeVo.getNoOtherCostsProportion()); //非车跟单比例 BigDecimal jqPremium = initializationBigdecimal(insPlyIncomeVo.getJqPremium()); //交强保费 BigDecimal syPremium = initializationBigdecimal(insPlyIncomeVo.getSyPremium()); //商业保费 BigDecimal noPremium = initializationBigdecimal(insPlyIncomeVo.getNoPremium()); //非车保费 //手续费比例 insPlyIncome.setCommissionFeerate(this.calculateTotal(jqSuperviseCostsProportion, sySuperviseCostsProportion, noSuperviseCostsProportion)); //手续费比例 = 商业手续费比例 + 交强手续费比例 + 非车手续费比例 if (jqSuperviseCostsProportion != null && jqPremium != null) { insPlyIncome.setJqSuperviseCostsPremiums(algorithmAmount(jqPremium, jqSuperviseCostsProportion)); //交强手续费 insPlyIncome.setJqSuperviseCostsProportion(jqSuperviseCostsProportion); } if (sySuperviseCostsProportion != null && syPremium != null) { insPlyIncome.setSySuperviseCostsPremiums(algorithmAmount(syPremium, sySuperviseCostsProportion)); //商业手续费 insPlyIncome.setSySuperviseCostsProportion(sySuperviseCostsProportion); } if (noSuperviseCostsProportion != null && noPremium != null) { insPlyIncome.setNoSuperviseCostsPremiums(algorithmAmount(noPremium, noSuperviseCostsProportion)); //非车手续费 insPlyIncome.setNoSuperviseCostsProportion(noSuperviseCostsProportion); } if (jqOtherCostsProportion != null && jqPremium != null) { insPlyIncome.setJqOtherCostsPremium(algorithmAmount(jqPremium, jqOtherCostsProportion)); //交强跟单费 insPlyIncome.setJqOtherCostsProportion(jqOtherCostsProportion); } if (syOtherCostsProportion != null && syPremium != null) { insPlyIncome.setSyOtherCostsPremium(algorithmAmount(syPremium, syOtherCostsProportion)); //商业跟单费 insPlyIncome.setSyOtherCostsProportion(syOtherCostsProportion); } if (noOtherCostsProportion != null && noPremium != null) { insPlyIncome.setNoOtherCostsPremium(algorithmAmount(noPremium, noOtherCostsProportion)); //非车跟单费 insPlyIncome.setNoOtherCostsProportion(noOtherCostsProportion); } insPlyIncome.setCommissionFeevalue(this.calculateTotal(insPlyIncome.getJqSuperviseCostsPremiums(), insPlyIncome.getSySuperviseCostsPremiums(), insPlyIncome.getNoSuperviseCostsPremiums())); //手续费 insPlyIncome.setCommissionFeerate(this.calculateTotal(jqSuperviseCostsProportion, sySuperviseCostsProportion, noSuperviseCostsProportion)); //手续费比例 insPlyIncome.setOtherFeevalue(this.calculateTotal(insPlyIncome.getJqOtherCostsPremium(), insPlyIncome.getSyOtherCostsPremium(), insPlyIncome.getNoOtherCostsPremium())); //跟单费金额 insPlyIncome.setOtherFeerate(this.calculateTotal(jqOtherCostsProportion, syOtherCostsProportion, noOtherCostsProportion)); //跟单费比例 insPlyIncome.setAllFeeValue(this.calculateTotal(insPlyIncome.getCommissionFeevalue(), insPlyIncome.getOtherFeevalue(), null)); // 总费用 = 手续费+跟单费 //应收比例 交强应收比例=交强手续费比例+交强非跟单比例 insPlyIncome.setJqReceivableProportion(this.calculateTotal(jqSuperviseCostsProportion, jqOtherCostsProportion, null)); //交强应收 insPlyIncome.setSyReceivableProportion(this.calculateTotal(sySuperviseCostsProportion, syOtherCostsProportion, null)); //商业应收 insPlyIncome.setNoReceivableProportion(this.calculateTotal(noSuperviseCostsProportion, noOtherCostsProportion, null)); //非车应收 } else { BigDecimal divisor = new BigDecimal("1.06"); // 最好是使用字符串来避免精度损失 BigDecimal jqNoTaxPremium = insPlyIncomeVo.getJqPremium();// 交强手续费 按照思路 交强不含税保费* 交强手续费比例 =交强手续费 BigDecimal syNoTaxPremium = insPlyIncomeVo.getSyPremium();// 商业手续费 按照思路 商业不含税保费* 商业手续费比例 =商业手续费 BigDecimal noNoTaxPremium = insPlyIncomeVo.getNoPremium();// 非车手续费 按照思路 非车不含税保费* 非车手续费比例 =非车手续费 if (jqNoTaxPremium != null && insPlyIncomeVo.getJqSuperviseCostsProportion() != null && insPlyIncomeVo.getJqSuperviseCostsProportion().compareTo(BigDecimal.ZERO) != 0) { insPlyIncome.setJqSuperviseCostsPremiums(getBigDecimal(jqNoTaxPremium, insPlyIncomeVo.getJqSuperviseCostsProportion())); insPlyIncome.setJqSuperviseCostsProportion(insPlyIncomeVo.getJqSuperviseCostsProportion()); } if (syNoTaxPremium != null && insPlyIncomeVo.getSySuperviseCostsProportion() != null && insPlyIncomeVo.getSySuperviseCostsProportion().compareTo(BigDecimal.ZERO) != 0) { insPlyIncome.setSySuperviseCostsPremiums(getBigDecimal(syNoTaxPremium, insPlyIncomeVo.getSySuperviseCostsProportion())); insPlyIncome.setSySuperviseCostsProportion(insPlyIncomeVo.getSySuperviseCostsProportion()); } if (noNoTaxPremium != null && insPlyIncomeVo.getNoSuperviseCostsProportion() != null && insPlyIncomeVo.getNoSuperviseCostsProportion().compareTo(BigDecimal.ZERO) != 0) { insPlyIncome.setNoSuperviseCostsProportion(insPlyIncome.getNoSuperviseCostsProportion()); insPlyIncome.setNoSuperviseCostsPremiums(getBigDecimal(noNoTaxPremium, insPlyIncomeVo.getNoSuperviseCostsProportion())); } if (jqNoTaxPremium != null && insPlyIncomeVo.getJqOtherCostsProportion() != null && insPlyIncomeVo.getJqOtherCostsProportion().compareTo(BigDecimal.ZERO) != 0) { insPlyIncome.setJqOtherCostsPremium(getBigDecimal(jqNoTaxPremium, insPlyIncomeVo.getJqOtherCostsProportion())); insPlyIncome.setJqOtherCostsProportion(insPlyIncomeVo.getJqOtherCostsProportion()); } if (syNoTaxPremium != null && insPlyIncomeVo.getSyOtherCostsProportion() != null && insPlyIncomeVo.getSyOtherCostsProportion().compareTo(BigDecimal.ZERO) != 0) { insPlyIncome.setSyOtherCostsProportion(insPlyIncome.getSyOtherCostsProportion()); insPlyIncome.setSyOtherCostsPremium(getBigDecimal(syNoTaxPremium, insPlyIncomeVo.getSyOtherCostsProportion())); } if (noNoTaxPremium != null && insPlyIncomeVo.getOtherFeerate() != null && insPlyIncomeVo.getOtherFeerate().compareTo(BigDecimal.ZERO) != 0) { insPlyIncome.setNoOtherCostsProportion(insPlyIncome.getOtherFeerate()); insPlyIncome.setNoOtherCostsPremium(getBigDecimal(noNoTaxPremium, insPlyIncomeVo.getOtherFeerate())); } if ("0".equals(insPlyIncomeVo.getIsNotDocumentary()) && "0".equals(insPlyIncomeVo.getIsNotCar())) { //保险 手续费 =不含税保费* 手续费比例 insPlyIncome.setCommissionFeevalue(this.calculateTotal(insPlyIncome.getJqSuperviseCostsPremiums(), insPlyIncome.getSySuperviseCostsPremiums(), null)); // 手续费 insPlyIncome.setCommissionFeerate(this.calculateTotal(insPlyIncome.getJqSuperviseCostsProportion(), insPlyIncome.getSySuperviseCostsProportion(), null));//手续费比例 insPlyIncome.setAllFeeValue(this.calculateTotal(insPlyIncome.getCommissionFeevalue(), null, null));//总金额 } else if ("1".equals(insPlyIncomeVo.getIsNotDocumentary()) && "0".equals(insPlyIncomeVo.getIsNotCar())) { //保险跟单费 交强跟单+商业跟单 insPlyIncome.setOtherFeevalue(this.calculateTotal(insPlyIncome.getJqOtherCostsPremium(), insPlyIncome.getSyOtherCostsPremium(), null)); insPlyIncome.setOtherFeerate(this.calculateTotal(insPlyIncome.getJqOtherCostsProportion(), insPlyIncome.getSyOtherCostsProportion(), null)); insPlyIncome.setAllFeeValue(this.calculateTotal(insPlyIncome.getOtherFeevalue(), null, null));//总金额 } if ("0".equals(insPlyIncomeVo.getIsNotDocumentary()) && "1".equals(insPlyIncomeVo.getIsNotCar())) {// 非车 insPlyIncome.setCommissionFeevalue(this.calculateTotal(insPlyIncome.getNoSuperviseCostsPremiums(), null, null)); // 非车手续费 insPlyIncome.setCommissionFeerate(this.calculateTotal(insPlyIncome.getNoSuperviseCostsProportion(), null, null)); //非车比例 insPlyIncome.setAllFeeValue(this.calculateTotal(insPlyIncome.getCommissionFeevalue(), null, null));//总金额 } else if ("1".equals(insPlyIncomeVo.getIsNotDocumentary()) && "1".equals(insPlyIncomeVo.getIsNotCar())) { //非车跟单 insPlyIncome.setOtherFeevalue(this.calculateTotal(insPlyIncome.getNoOtherCostsPremium(), null, null)); //非车跟单金额 insPlyIncome.setOtherFeerate(this.calculateTotal(insPlyIncome.getNoOtherCostsProportion(), null, null)); // 非车跟单比例 insPlyIncome.setAllFeeValue(this.calculateTotal(insPlyIncome.getOtherFeevalue(), null, null));//总金额 } } } /** * 计算 金额 * * @param taxPremium * @param proportion * @return */ private static BigDecimal getBigDecimal(BigDecimal taxPremium, BigDecimal proportion) { BigDecimal divisor = new BigDecimal("1.06"); // 示例除数 // 先进行除法,保留5位小数,不进行四舍五入(使用RoundingMode.DOWN) BigDecimal dividedAmount = taxPremium.divide(divisor, 5, BigDecimal.ROUND_DOWN); // 将比例除以100,假设proportion是一个百分比值 // 然后进行乘法,并进行舍入到5位小数 BigDecimal result = dividedAmount.multiply( proportion.divide(new BigDecimal(100))).setScale(5, BigDecimal.ROUND_DOWN); return result; } /** * @param value1 保费 * @param value2 比例 * @return 费用 */ private BigDecimal algorithmAmount(BigDecimal value1, BigDecimal value2) { BigDecimal divide = value2.divide(new BigDecimal(100)); return value1.multiply(divide).setScale(5,BigDecimal.ROUND_DOWN); } private BigDecimal initializationBigdecimal(BigDecimal value) { return value != null ? value : BigDecimal.ZERO; } private void saveLog(InsPlyIncomeVo insPlyIncomeVo) { // 添加记录 SettlementDocumentaryLogEntity settlementDocumentaryLogEntity = new SettlementDocumentaryLogEntity(); settlementDocumentaryLogEntity.setCrudStatus(insPlyIncomeVo.getCrudStatus()); settlementDocumentaryLogEntity.setAmount(insPlyIncomeVo.getOtherFeevalue()); settlementDocumentaryLogEntity.setSettlementDocumentaryId(insPlyIncomeVo.getId()); settlementDocumentaryLogEntity.setAmountType("2"); settlementDocumentaryLogService.save(settlementDocumentaryLogEntity); } @Override @Transactional public HttpResult insertByEntity(InsPlyIncomeVo insPlyIncomeVo) { Long id = new SnowFlakeUtil().nextId(); InsPlyIncome insPlyIncome = new InsPlyIncome(); insPlyIncomeVo.setOrderno(id.toString()); String signdateStr = insPlyIncomeVo.getSignDate(); LocalDateTime localDateTime = this.LocalDatePareLocalDateTime(signdateStr); insPlyIncomeVo.setSignDate(null); BeanUtils.copyProperties(insPlyIncomeVo, insPlyIncome); insPlyIncome.setUserId(BaseController.getUser().getId()); insPlyIncome.setDocumentaryFeesStatus("0"); insPlyIncome.setHandlingFeesStatus("0"); insPlyIncome.setIsNotCar(insPlyIncomeVo.getIsNotCar()); // 是否是非车 insPlyIncome.setIsNotDocumentary(insPlyIncomeVo.getIsNotDocumentary()); //是否是跟单 insPlyIncome.setSignDate(localDateTime); insPlyIncome.setDeptId(BaseController.getUser().getDeptId()); insPlyIncome.setCreateTime(LocalDate.now()); insPlyIncome.setOtherFeerate(this.calculateTotal(insPlyIncomeVo.getJqOtherCostsProportion(),insPlyIncomeVo.getSyOtherCostsProportion(),insPlyIncomeVo.getNoOtherCostsProportion())); insPlyIncome.setCommissionFeerate(this.calculateTotal(insPlyIncomeVo.getJqSuperviseCostsProportion(),insPlyIncomeVo.getSySuperviseCostsProportion(),insPlyIncomeVo.getNoSuperviseCostsProportion())); if (insPlyIncome.getJqPremium() != null && insPlyIncome.getJqPremium().compareTo(BigDecimal.ZERO) != 0 && insPlyIncome.getJqSuperviseCostsProportion() != null && insPlyIncome.getJqSuperviseCostsProportion().compareTo(BigDecimal.ZERO) != 0) { insPlyIncome.setJqSuperviseCostsPremiums(getBigDecimal(insPlyIncome.getJqPremium(), insPlyIncomeVo.getJqSuperviseCostsProportion())); } if (insPlyIncome.getSyPremium() != null && insPlyIncome.getSyPremium().compareTo(BigDecimal.ZERO) != 0 && insPlyIncome.getSySuperviseCostsProportion() != null && insPlyIncome.getSySuperviseCostsProportion().compareTo(BigDecimal.ZERO) != 0) { insPlyIncome.setSySuperviseCostsPremiums(getBigDecimal(insPlyIncome.getSyPremium(), insPlyIncomeVo.getSySuperviseCostsProportion())); } if (insPlyIncome.getNoPremium() != null && insPlyIncome.getNoPremium().compareTo(BigDecimal.ZERO) != 0 && insPlyIncome.getNoSuperviseCostsProportion() != null && insPlyIncome.getNoSuperviseCostsProportion().compareTo(BigDecimal.ZERO) != 0) { insPlyIncome.setNoSuperviseCostsPremiums(getBigDecimal(insPlyIncome.getNoPremium(), insPlyIncomeVo.getNoSuperviseCostsProportion())); } if (insPlyIncome.getJqPremium() != null && insPlyIncome.getJqPremium().compareTo(BigDecimal.ZERO) != 0 && insPlyIncome.getJqOtherCostsProportion() != null && insPlyIncome.getJqOtherCostsProportion().compareTo(BigDecimal.ZERO) != 0) { insPlyIncome.setJqOtherCostsPremium(getBigDecimal(insPlyIncome.getJqPremium(), insPlyIncomeVo.getJqOtherCostsProportion())); } if (insPlyIncome.getSyPremium() != null && insPlyIncome.getSyPremium().compareTo(BigDecimal.ZERO) != 0 && insPlyIncome.getSyOtherCostsProportion() != null && insPlyIncome.getSyOtherCostsProportion().compareTo(BigDecimal.ZERO) != 0) { insPlyIncome.setSyOtherCostsPremium(getBigDecimal(insPlyIncome.getSyPremium(), insPlyIncomeVo.getSyOtherCostsProportion())); } if (insPlyIncome.getNoPremium() != null && insPlyIncome.getNoPremium().compareTo(BigDecimal.ZERO) != 0 && insPlyIncome.getNoOtherCostsProportion() != null && insPlyIncome.getNoOtherCostsProportion().compareTo(BigDecimal.ZERO) != 0) { insPlyIncome.setNoOtherCostsPremium(getBigDecimal(insPlyIncome.getNoPremium(), insPlyIncomeVo.getNoOtherCostsProportion())); } insPlyIncome.setAllFeeValue(this.calculateTotal(insPlyIncome.getCommissionFeevalue(),insPlyIncome.getOtherFeevalue(),null)); String partnerCompaniesId = insPlyIncome.getPartnerCompaniesId(); insPlyIncome.setPartnerCompaniesId(partnerCompaniesId); EsmInsCompany esmInsCompany = EsmInsCompanyService.getById(partnerCompaniesId); String name = esmInsCompany.getNamesimple(); //合作名称 insPlyIncome.setPartnerCompaniesName(name); HashMap params = new HashMap<>(); params.put("agreeId",insPlyIncomeVo.getAgreeId()); PtlAgreement ptlAgreement = ptlAgreementService.selectAgreeId(params); if (ObjectUtils.isEmpty(ptlAgreement)) { return HttpResult.error("协议匹配不上"); } insPlyIncome.setAgreementId(ptlAgreement.getId()); baseMapper.insert(insPlyIncome); InsPlyIncomeLog insPlyIncomeLog = new InsPlyIncomeLog(); insPlyIncomeLog.setIncomeId(insPlyIncome.getId()); BeanUtils.copyProperties(insPlyIncome,insPlyIncomeLog); insPlyIncomeLog.setId(null); insPlyIncomeLog.setOperationStatus("1"); insPlyIncomeLogService.saveLog(insPlyIncomeLog); //添加日志 return HttpResult.ok(); } private LocalDateTime LocalDatePareLocalDateTime(String signdateStr) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // 将字符串解析为LocalDate LocalDate signdate = LocalDate.parse(signdateStr, formatter); // 创建一个 LocalTime 对象表示中午12点 LocalTime noon = LocalTime.of(12, 0); // 使用 LocalDate 和 LocalTime 来创建 LocalDateTime return LocalDateTime.of(signdate, noon); } /** * 删除id 已开票或者已结算都不可以进行 删除 * 因为跟单没有关联表 也无法关联到开票表所以只能按照 条件去查询判断 保司机构 id * @param insPlyIncomeVo * @return */ @Override @Transactional public HttpResult deleteById(InsPlyIncomeVo insPlyIncomeVo) { HashMap params = new HashMap<>(); params.put("id",insPlyIncomeVo.getId()); List insPlyIncomes = baseMapper.queryNew(params); InsPlyIncome insPlyIncome = insPlyIncomes.get(0); if (StringUtils.isNotEmpty(insPlyIncome.getAgreementType()) && "1".equals(insPlyIncome.getAgreementType())) { if ("1".equals(insPlyIncome.getHandlingFeesStatus())) { throw new SystemException("已结算不可以进行删除"); } } else if (StringUtils.isNotEmpty(insPlyIncome.getAgreementType()) && "2".equals(insPlyIncome.getAgreementType())) { if ("0".equals(insPlyIncome.getIsNotDocumentary())) { String taskId = insPlyIncome.getTaskId(); if (StringUtils.isNotEmpty(taskId)) { throw new SystemException("已开票不能进行删除"); } } else { // 因为跟单没有关联表 也无法关联到开票表所以只能按照 条件去进行判断 if(StringUtils.isNotEmpty( insPlyIncome.getSettleOtherStatus()) && "1".equals( insPlyIncome.getSettleOtherStatus())){ throw new SystemException("已经对账不能进行删除"); } } } InsPlyIncomeLog insPlyIncomeLog = new InsPlyIncomeLog(); insPlyIncomeLog.setIncomeId(insPlyIncome.getId()); BeanUtils.copyProperties(insPlyIncome,insPlyIncomeLog); insPlyIncomeLog.setId(null); insPlyIncomeLog.setOperationStatus("3"); insPlyIncomeLogService.saveLog(insPlyIncomeLog); //添加日志 baseMapper.deleteById(insPlyIncomeVo.getId()); //删除 结算 然后删除结算表 return HttpResult.ok("删除成功"); } @Override @Transactional public void uodateBalance(InsPlyIncomeVo insPlyIncomeVo) { InsPlyIncome insPlyIncome = new InsPlyIncome(); insPlyIncomeVo.setHandlingFeesStatus("1"); BeanUtils.copyProperties(insPlyIncomeVo, insPlyIncome); insPlyIncome.setSettlementUserId(BaseController.getUser().getId()); insPlyIncome.setSettlementTime(LocalDateTime.now()); baseMapper.updateById(insPlyIncome); // 生成记录 SettlementDocumentaryLogEntity settlementDocumentaryLogEntity = new SettlementDocumentaryLogEntity(); if (StringUtils.isNotEmpty(insPlyIncomeVo.getAgreementType()) && "1".equals(insPlyIncomeVo.getAgreementType())) { // 只有平台协议 才会跟单费一笔结算 settlementDocumentaryLogEntity.setAmount(insPlyIncomeVo.getOtherFeevalue()); // 跟单费金额 } settlementDocumentaryLogEntity.setHandingAmount(insPlyIncomeVo.getCommissionFeevalue()); // 手续费金额 settlementDocumentaryLogEntity.setSettlementDocumentaryId(insPlyIncomeVo.getId()); // 关联id settlementDocumentaryLogEntity.setAmountType("1"); //手续费结算 settlementDocumentaryLogEntity.setCreateTime(new Date()); settlementDocumentaryLogService.save(settlementDocumentaryLogEntity); } @Override @Transactional public HttpResult> totalQuery(InsPlyIncomeVo insPlyIncomeVo) { HashMap params = new HashMap<>(); PageInfo> pageHelper = null; if (insPlyIncomeVo.getStartDate() != null) { params.put("startDate", insPlyIncomeVo.getStartDate().toString()); } if (insPlyIncomeVo.getEndDate() != null) { params.put("endDate", insPlyIncomeVo.getEndDate().toString()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getYear())) { params.put("year", insPlyIncomeVo.getYear()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getIsNotCar())) { params.put("isNotCar", insPlyIncomeVo.getIsNotCar()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getIsNotDocumentary())) { params.put("isOther", insPlyIncomeVo.getIsNotDocumentary()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getDocumentaryFeesStatus())) { params.put("documentaryFeesStatus", insPlyIncomeVo.getDocumentaryFeesStatus()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getCompanyId())) { params.put("companyId", insPlyIncomeVo.getCompanyId()); } params.put("pageNum", insPlyIncomeVo.getPageNum()); params.put("pageSize", insPlyIncomeVo.getPageSize()); List list = this.baseMapper.totalQuery(params); pageHelper = new PageInfo(list); return HttpResult.ok(new BasePageResult<>(insPlyIncomeVo.getPageNum(), insPlyIncomeVo.getPageSize(), pageHelper.getTotal(), pageHelper.getPages(), list)); } /** * * @param insPlyIncomeVo ids ins_ply_income 这个表的ids incomeIds settlement_documentary_fees 这个表的ids * @return */ /** * 跟单费结算 有分批结算的情况 * * @param insPlyIncomeVo * @return */ @Override @Transactional public HttpResult batchBalance(InsPlyIncomeVo insPlyIncomeVo) { // 分批结算 SettlementDocumentaryFeesVo settlementDocumentaryFeesVo = new SettlementDocumentaryFeesVo(); String id = insPlyIncomeVo.getId(); // 开票id SettlementDocumentaryFeesEntity settlementDocumentaryFeesServiceById = settlementDocumentaryFeesService.getById(id); // BigDecimal allAmount = settlementDocumentaryFeesServiceById.getSettlementAmount(); HashMap params = new HashMap<>(); params.put("id", insPlyIncomeVo.getId()); params.put("handlingFeesStatus", "1"); SettlementDocumentaryFeesEntity parentSettlementDocumentaryFeesEntity = settlementDocumentaryFeesService.getByParentSettlementAmount(params); if (ObjectUtils.isNotEmpty(parentSettlementDocumentaryFeesEntity)) { // 多次结算 BigDecimal totalAmount = parentSettlementDocumentaryFeesEntity.getTotalAmount(); totalAmount = totalAmount.add(insPlyIncomeVo.getSettlementAmount()); if (allAmount.compareTo(totalAmount) < 0) { return HttpResult.error("结算金额超出开票金额"); } } else { if (allAmount.compareTo(insPlyIncomeVo.getSettlementAmount()) < 0) { return HttpResult.error("结算金额超出开票金额"); } } settlementDocumentaryFeesVo.setInvoiceId(insPlyIncomeVo.getInvoicId()); //开票号 settlementDocumentaryFeesVo.setSettlementTime(insPlyIncomeVo.getSettlementTime()); //结算时间 settlementDocumentaryFeesVo.setSettlementStatus("2"); //2为结算状态 settlementDocumentaryFeesVo.setCompanyId(insPlyIncomeVo.getCompanyId()); // 保险公司id settlementDocumentaryFeesVo.setPartnerCompaniesId(insPlyIncomeVo.getPartnerCompaniesId()); //合作公司id settlementDocumentaryFeesVo.setUnsettledAmount(insPlyIncomeVo.getInvoicCommissionFeevalue().subtract(insPlyIncomeVo.getSettlementAmount())); //未结算金额 settlementDocumentaryFeesVo.setIsNotCar(insPlyIncomeVo.getIsNotCar()); // 是否是非车 settlementDocumentaryFeesVo.setInvoicingMethod(insPlyIncomeVo.getInvoicingMethod()); //开票方式 settlementDocumentaryFeesVo.setTaxPoints(insPlyIncomeVo.getTaxPoints()); //税点 settlementDocumentaryFeesVo.setSettlementImageId(insPlyIncomeVo.getSettlementImageId()); if ("0".equals(insPlyIncomeVo.getInvoicingMethod())) { settlementDocumentaryFeesVo.setExpendAmount(insPlyIncomeVo.getSettlementAmount().multiply(BigDecimal.ONE.subtract(insPlyIncomeVo.getTaxPoints().divide(new BigDecimal(100))))); } else { settlementDocumentaryFeesVo.setExpendAmount(insPlyIncomeVo.getSettlementAmount()); //进账金额 } settlementDocumentaryFeesVo.setSettlementAmount(insPlyIncomeVo.getSettlementAmount()); //进账金额 settlementDocumentaryFeesVo.setHandlingFeesStatus(insPlyIncomeVo.getHandlingFeesStatus()); settlementDocumentaryFeesVo.setTotalAmount(insPlyIncomeVo.getInvoicCommissionFeevalue()); settlementDocumentaryFeesVo.setCreateTime(LocalDateTime.now()); settlementDocumentaryFeesVo.setParentId(insPlyIncomeVo.getId()); settlementDocumentaryFeesVo.setAgreementType("2"); //1平台 2 保险 settlementDocumentaryFeesService.inertSettle(settlementDocumentaryFeesVo); return HttpResult.ok(); } @Override @Transactional public HttpResult batchSumBalance(InsPlyIncomeVo insPlyIncomeVo) { List multipleSelection = insPlyIncomeVo.getMultipleSelection(); HashMap params = new HashMap<>(); Date date = new Date(); BigDecimal settleMentAmount = BigDecimal.ZERO; BigDecimal settleNotMentAmount = BigDecimal.ZERO; for (InsPlyIncomeVo item : multipleSelection){ SettlementDocumentaryFeesEntity settlementDocumentaryFeesVo = new SettlementDocumentaryFeesEntity(); if(item.getInvoicCommissionFeevalue() ==null || item .getSettlementAmount().compareTo(BigDecimal.ZERO) <0){ throw new SystemException("请输入正确金额"); } String id = item.getId(); SettlementDocumentaryFeesEntity settlementDocumentaryFeesEntity = settlementDocumentaryFeesService.getBaseMapper().selectById(id); // 开票 BigDecimal invoicedNotSettledAmount = settlementDocumentaryFeesEntity.getInvoicedNotSettledAmount();//未结算金额 if(item.getInvoicCommissionFeevalue().compareTo(invoicedNotSettledAmount) >0){ throw new SystemException("结算金额大于未结算金额"); } if(item.getInvoicCommissionFeevalue().compareTo(BigDecimal.ZERO) >0){ settlementDocumentaryFeesVo.setInvoiceId(settlementDocumentaryFeesEntity.getInvoicId()); //开票号 settlementDocumentaryFeesVo.setSettlementTime(insPlyIncomeVo.getSettlementTime()); //结算时间 settlementDocumentaryFeesVo.setSettlementStatus("2"); //2为结算状态 settlementDocumentaryFeesVo.setCompanyId(settlementDocumentaryFeesEntity.getCompanyId()); // 保险公司id settlementDocumentaryFeesVo.setPartnerCompaniesId(settlementDocumentaryFeesEntity.getPartnerCompaniesId()); //合作公司id // settlementDocumentaryFeesVo.setUnsettledAmount(insPlyIncomeVo.getInvoicCommissionFeevalue().subtract(insPlyIncomeVo.getSettlementAmount())); //未结算金额 settlementDocumentaryFeesVo.setIsNotCar(settlementDocumentaryFeesEntity.getIsNotCar()); // 是否是非车 settlementDocumentaryFeesVo.setInvoicingMethod(settlementDocumentaryFeesEntity.getInvoicingMethod()); //开票方式 settlementDocumentaryFeesVo.setTaxPoints(settlementDocumentaryFeesEntity.getTaxPoints()); //税点 settlementDocumentaryFeesVo.setSettlementImageId(insPlyIncomeVo.getSettlementImageId()); if ("0".equals(insPlyIncomeVo.getInvoicingMethod())) { settlementDocumentaryFeesVo.setExpendAmount(item.getInvoicCommissionFeevalue().multiply(BigDecimal.ONE.subtract(insPlyIncomeVo.getTaxPoints().divide(new BigDecimal(100))))); } else { settlementDocumentaryFeesVo.setExpendAmount(item.getInvoicCommissionFeevalue()); //进账金额 } settlementDocumentaryFeesVo.setSettlementAmount(item.getInvoicCommissionFeevalue()); //进账金额 settlementDocumentaryFeesVo.setHandlingFeesStatus(settlementDocumentaryFeesEntity.getHandlingFeesStatus()); settlementDocumentaryFeesVo.setTotalAmount(settlementDocumentaryFeesEntity.getSettlementAmount()); settlementDocumentaryFeesVo.setCreateTime(LocalDateTime.now()); settlementDocumentaryFeesVo.setSettlementTime(LocalDate.now()); settlementDocumentaryFeesVo.setParentId(insPlyIncomeVo.getId()); settlementDocumentaryFeesVo.setAgreementType("2"); //1平台 2 保险 settlementDocumentaryFeesVo.setInvoicedSettledAmount(item.getInvoicCommissionFeevalue()); settlementDocumentaryFeesVo.setInvoicedNotSettledAmount(BigDecimal.ZERO); // 生成跟单费结算记录 SettlementDocumentaryLogEntity settlementDocumentaryLogEntity = new SettlementDocumentaryLogEntity(); settlementDocumentaryLogEntity.setAmount(item.getInvoicCommissionFeevalue()); // 结算金额 settlementDocumentaryLogEntity.setSettlementDocumentaryId(settlementDocumentaryFeesEntity.getId()); // 关联id settlementDocumentaryLogEntity.setAmountType("2"); //跟单费结算 settlementDocumentaryLogEntity.setCreateTime(date); settlementDocumentaryFeesVo.setSettlementSumId(insPlyIncomeVo.getSettlementSumId()); settlementDocumentaryFeesService.getBaseMapper().insert(settlementDocumentaryFeesVo); settlementDocumentaryLogService.save(settlementDocumentaryLogEntity); //修改开票金额 BigDecimal add = settlementDocumentaryFeesEntity.getInvoicedSettledAmount().add(item.getInvoicCommissionFeevalue()); settlementDocumentaryFeesEntity.setInvoicedSettledAmount(add); BigDecimal subtract = settlementDocumentaryFeesEntity.getSettlementAmount().subtract(add); settlementDocumentaryFeesEntity.setInvoicedNotSettledAmount(subtract); if (subtract.compareTo(BigDecimal.ZERO) == 0) { settlementDocumentaryFeesEntity.setCompletionStatus("2"); } else if (subtract.compareTo(BigDecimal.ZERO) != 0) { settlementDocumentaryFeesEntity.setCompletionStatus("1"); } settlementDocumentaryFeesService.updateById(settlementDocumentaryFeesEntity); settleMentAmount = settleMentAmount.add(settlementDocumentaryFeesEntity.getInvoicedSettledAmount()); settleNotMentAmount = settleNotMentAmount.add(settlementDocumentaryFeesEntity.getInvoicedNotSettledAmount()); } // 更新金额 SettlementDocumentaryFeesSumEntity settlementDocumentaryFeesSumEntity = settlementDocumentaryFeesSumService.getById(insPlyIncomeVo.getSettlementSumId()); settlementDocumentaryFeesSumEntity.setInvoicedSettledAmount(settleMentAmount); settlementDocumentaryFeesSumEntity.setInvoicedNotSettledAmount(settleNotMentAmount); if (settleNotMentAmount.compareTo(BigDecimal.ZERO) == 0) { settlementDocumentaryFeesSumEntity.setCompletionStatus("2"); } else if (settleNotMentAmount.compareTo(BigDecimal.ZERO) != 0) { settlementDocumentaryFeesSumEntity.setCompletionStatus("1"); } settlementDocumentaryFeesSumService.updateById(settlementDocumentaryFeesSumEntity); } return HttpResult.ok(); } /** * @param insPlyIncomeVo * @return */ @Override public List totalBxAmount(InsPlyIncomeVo insPlyIncomeVo) { HashMap params = new HashMap<>(); params = this.saveParams(insPlyIncomeVo, params); params.remove("handlingFeesStatus"); List resultList = baseMapper.totalBxAmount(params); for (InsPlyIncome item : resultList) { BigDecimal commissionFeevalue = BigDecimal.ZERO; //总金额 BigDecimal invoicCommissionFeevalue = BigDecimal.ZERO; //开票未结算 BigDecimal readyCommissionFeevalue = BigDecimal.ZERO; // 已开票已结算 BigDecimal noInvoicCommissionFeevalue = BigDecimal.ZERO; //未开票金额 BigDecimal unSettledAmount; //未结算金额 params.put("partnerCompaniesId", item.getPartnerCompaniesId()); params.remove("handlingFeesStatus"); List insPlyIncomes = baseMapper.queryNew(params); //金额总数 for (InsPlyIncome all : insPlyIncomes) { commissionFeevalue = commissionFeevalue.add(all.getCommissionFeevalue()); } //已开票金额 = 开票未结算+ 开票已结算 params.put("handlingFeesStatus", "0"); // 开票 params.put("settlementStatus", "1"); // 开票 List invoicInsPlyIncomes = settlementDocumentaryFeesService.queryNew(params); //金额总数 for (SettlementDocumentaryFeesEntity invoicInsPlyIncome : invoicInsPlyIncomes) { BigDecimal invoicIcommissionFeevalue = invoicInsPlyIncome.getSettlementAmount();// 已经开票金额 invoicCommissionFeevalue = invoicCommissionFeevalue.add(invoicIcommissionFeevalue); //开票金额 } params.put("settlementStatus", "2"); // 结算 List settleInsPlyIncomes = settlementDocumentaryFeesService.queryNew(params); //金额总数 for (SettlementDocumentaryFeesEntity settleInsPlyIncome : settleInsPlyIncomes) { BigDecimal settleIcommissionFeevalue = settleInsPlyIncome.getSettlementAmount();// 已结算金额 readyCommissionFeevalue = readyCommissionFeevalue.add(settleIcommissionFeevalue); //已结算总 } params.put("settlementStatus", 0); //未开票金额 List noInvoicInsPlyIncomes = settlementDocumentaryFeesService.queryNew(params); //金额总数 for (SettlementDocumentaryFeesEntity noInvoicInsPlyIncome : noInvoicInsPlyIncomes) { BigDecimal noInvoicIcommissionFeevalue = noInvoicInsPlyIncome.getSettlementAmount();// 未开票金额 noInvoicCommissionFeevalue = noInvoicCommissionFeevalue.add(noInvoicIcommissionFeevalue); //未开票总金额 } noInvoicCommissionFeevalue = commissionFeevalue.subtract(invoicCommissionFeevalue);// 未开票 unSettledAmount = commissionFeevalue.subtract(readyCommissionFeevalue); //未结算 //已开票金额 item.setCommissionFeevalue(commissionFeevalue); //总手续费 item.setAllInvoicCommissionFeevalue(invoicCommissionFeevalue); //总开票金额 // 开票未结算 = 开票金额 - 已开票已结算 invoicCommissionFeevalue = invoicCommissionFeevalue.subtract(readyCommissionFeevalue); item.setInvoicCommissionFeevalue(invoicCommissionFeevalue); //开票未结算 item.setReadyCommissionFeevalue(readyCommissionFeevalue); //已开票已结算 item.setNoInvoicCommissionFeevalue(noInvoicCommissionFeevalue); //未开票金额 item.setUnSettledAmount(unSettledAmount); // 未结算金额 } return resultList; } /** * @param idList 要开票的数据集合 * @param resultList 总返回数据 */ private void splicingIds(List idList, List resultList) { // 使用Map来存储agreementId到其id列表的映射 Map> idMap = new HashMap<>(); for (InsPlyIncome idItem : idList) { String partnerCompaniesId = idItem.getPartnerCompaniesId(); idMap.computeIfAbsent(partnerCompaniesId, k -> new ArrayList<>()).add(idItem.getId()); } for (InsPlyIncome resultItem : resultList) { List ids = idMap.getOrDefault(resultItem.getPartnerCompaniesId(), Collections.emptyList()); String idsString = String.join(",", ids); resultItem.setIds(idsString); } } /** * @param insPlyIncomeVo * @return 保险手续费改成多次结算 */ @Override @Transactional public HttpResult batchInvoicing(InsPlyIncomeVo insPlyIncomeVo) { ImportResult importResult = importAsyncService.getById(insPlyIncomeVo.getSelectIds().get(0)); // 查询 任务 List byTaskId = incomeTaskRelationshipService.getByTaskId(importResult.getId()); HashMap params = new HashMap<>(); if (StringUtils.isNotEmpty(importResult.getId())) { params.put("companyId", importResult.getCompanyId()); params.put("partnerCompaniesId", importResult.getPartnerCompaniesId()); params.put("isOther", "0"); if (StringUtils.isNotEmpty(importResult.getHandStatus())) { if ("0".equals(importResult.getHandStatus())) { params.put("isNotCar", "0"); } else if ("1".equals(importResult.getHandStatus())) { params.put("isNotCar", "1"); } } if (!CollectionUtils.isEmpty(byTaskId)) { params.put("incomeIds", byTaskId); } List insPlyIncomes = baseMapper.queryNew(params); if (!CollectionUtils.isEmpty(insPlyIncomes)) { if (insPlyIncomeVo != null) { // 确保insPlyIncomeVo不是null for (InsPlyIncome item : insPlyIncomes) { item.setInvoicTime(LocalDate.now()); item.setInvoicId(insPlyIncomeVo.getInvoicId()); item.setHandlingFeesStatus("2"); if (StringUtils.isNotEmpty(item.getTaskId())) { return HttpResult.error("该单据已经开票 "); } else { item.setTaskId(importResult.getId()); item.setSettlementTime(LocalDateTime.now()); baseMapper.updateById(item); } } } } } insPlyIncomeVo.setNoInvoicCommissionFeevalue(importResult.getTotalAmount()); insPlyIncomeVo.setOtherFeevalue(importResult.getTotalAmount()); insPlyIncomeVo.setHandlingFeesStatus("0"); // 0手续费 1 跟单费 insPlyIncomeVo.setIsNotCar(insPlyIncomeVo.getIsNotCar()); insPlyIncomeVo.setAgreementId(importResult.getAgreementId()); insPlyIncomeVo.setAgreementType(insPlyIncomeVo.getAgreementType()); insPlyIncomeVo.setPartnerCompaniesId(importResult.getPartnerCompaniesId()); insPlyIncomeVo.setSettlementAmount(importResult.getTotalAmount()); insPlyIncomeVo.setContractId(insPlyIncomeVo.getInvoicId()); insPlyIncomeVo.setCompanyId(importResult.getCompanyId()); insPlyIncomeVo.setTaskId(importResult.getId()); this.batchInvoic(insPlyIncomeVo); return HttpResult.ok(); } @Override public HttpResult queryInvoicing(InsPlyIncomeVo insPlyIncomeVo) { HashMap params = new HashMap<>(); params = this.saveParams(insPlyIncomeVo, params); InsPlyIncome result = baseMapper.queryInvoicing(params); //总金额 params.put("handlingFeesStatus", "0"); InsPlyIncome noResult = baseMapper.queryInvoicing(params); //未结算金额 result.setReadyCommissionFeevalue(noResult.getCommissionFeevalue()); return HttpResult.ok(result); } @Override @Transactional public HttpResult batchBxBalance(InsPlyIncomeVo insPlyIncomeVo) { // 表内总金额 SettlementDocumentaryFeesEntity byIdSettlementDocumentaryFeesEntity = settlementDocumentaryFeesService.getById(insPlyIncomeVo.getId()); BigDecimal invoicAmount = byIdSettlementDocumentaryFeesEntity.getTotalAmount(); String taskId = byIdSettlementDocumentaryFeesEntity.getTaskId(); List byTaskId = incomeTaskRelationshipService.getByTaskId(taskId); HashMap params = new HashMap<>(); params.put("id", insPlyIncomeVo.getId()); params.put("handlingFeesStatus", "0"); SettlementDocumentaryFeesEntity parentSettlementDocumentaryFeesEntity = settlementDocumentaryFeesService.getByParentSettlementAmount(params); if (ObjectUtils.isNotEmpty(parentSettlementDocumentaryFeesEntity)) { // 多次结算 BigDecimal totalAmount = parentSettlementDocumentaryFeesEntity.getTotalAmount(); totalAmount = totalAmount.add(insPlyIncomeVo.getSettlementAmount()); if (invoicAmount.compareTo(totalAmount) < 0) { return HttpResult.error("结算金额大于开票金额"); } if(totalAmount.compareTo(invoicAmount) ==0){ HashMap incomeParams = new HashMap<>(); incomeParams.put("incomeIds", byTaskId); List insPlyIncomes = baseMapper.queryNew(incomeParams); for (InsPlyIncome item : insPlyIncomes) { item.setHandlingFeesStatus("1"); item.setSettlementUserId(BaseController.getUser().getId()); baseMapper.updateById(item); } } } else { if (invoicAmount.compareTo(insPlyIncomeVo.getSettlementAmount()) < 0) { return HttpResult.error("结算金额大于开票金额"); } else if (invoicAmount.compareTo(insPlyIncomeVo.getSettlementAmount()) == 0) { HashMap incomeParams = new HashMap<>(); incomeParams.put("incomeIds", byTaskId); List insPlyIncomes = baseMapper.queryNew(incomeParams); for (InsPlyIncome item : insPlyIncomes) { item.setHandlingFeesStatus("1"); item.setSettlementUserId(BaseController.getUser().getId()); baseMapper.updateById(item); } } } // 分批结算 SettlementDocumentaryFeesVo settlementDocumentaryFeesVo = new SettlementDocumentaryFeesVo(); settlementDocumentaryFeesVo.setInvoiceId(insPlyIncomeVo.getInvoicId()); //开票号 settlementDocumentaryFeesVo.setSettlementTime(insPlyIncomeVo.getSettlementTime()); //结算时间 settlementDocumentaryFeesVo.setSettlementStatus("2"); //2为结算状态 settlementDocumentaryFeesVo.setCompanyId(insPlyIncomeVo.getCompanyId()); // 保险公司id settlementDocumentaryFeesVo.setPartnerCompaniesId(insPlyIncomeVo.getPartnerCompaniesId()); //合作公司id settlementDocumentaryFeesVo.setIsNotCar(insPlyIncomeVo.getIsNotCar()); // 是否是非车 settlementDocumentaryFeesVo.setInvoicingMethod(insPlyIncomeVo.getInvoicingMethod()); //开票方式 settlementDocumentaryFeesVo.setTaxPoints(insPlyIncomeVo.getTaxPoints()); //税点 settlementDocumentaryFeesVo.setExpendAmount(insPlyIncomeVo.getInvoicCommissionFeevalue().multiply(BigDecimal.ONE.subtract(insPlyIncomeVo.getTaxPoints().divide(new BigDecimal(100))))); settlementDocumentaryFeesVo.setTaskId(insPlyIncomeVo.getTaskId()); settlementDocumentaryFeesVo.setSettlementAmount(insPlyIncomeVo.getSettlementAmount()); //进账金额 settlementDocumentaryFeesVo.setTotalAmount(insPlyIncomeVo.getInvoicCommissionFeevalue()); settlementDocumentaryFeesVo.setHandlingFeesStatus("0"); settlementDocumentaryFeesVo.setParentId(insPlyIncomeVo.getId()); settlementDocumentaryFeesVo.setPartnerCompaniesId(insPlyIncomeVo.getPartnerCompaniesId()); settlementDocumentaryFeesVo.setSettlementImageId(insPlyIncomeVo.getSettlementImageId()); settlementDocumentaryFeesVo.setCreateTime(LocalDateTime.now()); settlementDocumentaryFeesVo.setAgreementType("2"); //1平台 2 保险 BigDecimal add = byIdSettlementDocumentaryFeesEntity.getInvoicedSettledAmount().add(insPlyIncomeVo.getSettlementAmount()); byIdSettlementDocumentaryFeesEntity.setInvoicedSettledAmount(add); BigDecimal subtract = byIdSettlementDocumentaryFeesEntity.getTotalAmount().subtract(add); byIdSettlementDocumentaryFeesEntity.setInvoicedNotSettledAmount(subtract); if (subtract.compareTo(BigDecimal.ZERO) == 0) { byIdSettlementDocumentaryFeesEntity.setCompletionStatus("2"); } else if (subtract.compareTo(BigDecimal.ZERO) != 0) { byIdSettlementDocumentaryFeesEntity.setCompletionStatus("1"); } settlementDocumentaryFeesService.updateById(byIdSettlementDocumentaryFeesEntity); settlementDocumentaryFeesService.inertSettle(settlementDocumentaryFeesVo); return HttpResult.ok(); } @Override public HttpResult querySettInvoicing(InsPlyIncomeVo insPlyIncomeVo) { HashMap params = new HashMap<>(); params = this.saveParams(insPlyIncomeVo, params); InsPlyIncome insPlyIncome = baseMapper.queryInvoicing(params); //已经开票 return HttpResult.ok(insPlyIncome); } /** * @param insPlyIncomeVo * @return */ @Override public HttpResult> allOtherAmount(InsPlyIncomeVo insPlyIncomeVo) { HashMap params = new HashMap<>(); params = this.saveParams(insPlyIncomeVo, params); List resultList = baseMapper.totalBxAmount(params); //总跟单费 for (InsPlyIncome item : resultList) { BigDecimal otherFeevalue = BigDecimal.ZERO; //总跟单金额 BigDecimal invoicCommissionFeevalue = BigDecimal.ZERO; //已开票跟单费 BigDecimal readyCommissionFeevalue = BigDecimal.ZERO; // 已开票已结算 跟单费 BigDecimal noInvoicCommissionFeevalue = BigDecimal.ZERO; //未开票跟单金额 BigDecimal unSettledAmount = BigDecimal.ZERO; //未结算跟单金额 BigDecimal expendAmount = BigDecimal.ZERO; //实收金额 BigDecimal taxesFees = BigDecimal.ZERO; //税费 BigDecimal taxPoints = BigDecimal.ZERO; //税点 params.put("partnerCompaniesId", item.getPartnerCompaniesId()); params.remove("handlingFeesStatus"); List insPlyIncomes = baseMapper.queryNew(params); // 总跟单费 for (InsPlyIncome all : insPlyIncomes) { otherFeevalue = otherFeevalue.add(all.getOtherFeevalue()); } //已开票金额 = 开票未结算+ 开票已结算 params.put("handlingFeesStatus", "1"); // 开票 params.put("settlementStatus", "1"); // 开票 List invoicInsPlyIncomes = settlementDocumentaryFeesService.queryNew(params); //金额总数 for (SettlementDocumentaryFeesEntity invoicInsPlyIncome : invoicInsPlyIncomes) { BigDecimal invoicIcommissionFeevalue = invoicInsPlyIncome.getSettlementAmount();// 已经开票金额 invoicCommissionFeevalue = invoicCommissionFeevalue.add(invoicIcommissionFeevalue); //开票金额 } params.put("settlementStatus", "2"); // 结算 List settleInsPlyIncomes = settlementDocumentaryFeesService.queryNew(params); //金额总数 for (SettlementDocumentaryFeesEntity settleInsPlyIncome : settleInsPlyIncomes) { BigDecimal settleIcommissionFeevalue = settleInsPlyIncome.getSettlementAmount();// 已结算金额 readyCommissionFeevalue = readyCommissionFeevalue.add(settleIcommissionFeevalue); //已结算总 BigDecimal divide = new BigDecimal(100).subtract(settleInsPlyIncome.getTaxPoints()).divide(new BigDecimal(100)); expendAmount = expendAmount.add(settleInsPlyIncome.getSettlementAmount().multiply(divide)); } params.put("settlementStatus", 0); //未开票金额 List noInvoicInsPlyIncomes = settlementDocumentaryFeesService.queryNew(params); //金额总数 for (SettlementDocumentaryFeesEntity noInvoicInsPlyIncome : noInvoicInsPlyIncomes) { BigDecimal noInvoicIcommissionFeevalue = noInvoicInsPlyIncome.getSettlementAmount();// 未开票金额 noInvoicCommissionFeevalue = noInvoicCommissionFeevalue.add(noInvoicIcommissionFeevalue); //未开票总金额 } noInvoicCommissionFeevalue = otherFeevalue.subtract(invoicCommissionFeevalue);// 未开票 unSettledAmount = otherFeevalue.subtract(readyCommissionFeevalue); //未结算 //已开票金额 item.setOtherFeevalue(otherFeevalue); //总手续费 item.setAllInvoicCommissionFeevalue(invoicCommissionFeevalue); //总开票金额 // 开票未结算 = 开票金额 - 已开票已结算 invoicCommissionFeevalue = invoicCommissionFeevalue.subtract(readyCommissionFeevalue); item.setInvoicCommissionFeevalue(invoicCommissionFeevalue); //开票未结算 item.setReadyCommissionFeevalue(readyCommissionFeevalue); //已开票已结算 item.setNoInvoicCommissionFeevalue(noInvoicCommissionFeevalue); //未开票金额 item.setUnSettledAmount(unSettledAmount); // 未结算金额 // 实收金额 = 结算金额 *1-税点 taxesFees = readyCommissionFeevalue.subtract(expendAmount); item.setExpendAmount(expendAmount); item.setTaxesFees(taxesFees); } return HttpResult.ok(resultList); } @Override @Transactional public HttpResult batchInvoic(InsPlyIncomeVo insPlyIncomeVo) { SettlementDocumentaryFeesVo settlementDocumentaryFeesVo = new SettlementDocumentaryFeesVo(); // 生成跟单费结算表 if (StringUtils.isNotEmpty(insPlyIncomeVo.getYear())) { settlementDocumentaryFeesVo.setTimeFrame(insPlyIncomeVo.getYear());//年度 } if (!CollectionUtils.isEmpty(insPlyIncomeVo.getMultipleSelection())) { InsPlyIncomeVo insPlyIncomeVo1 = insPlyIncomeVo.getMultipleSelection().get(0); insPlyIncomeVo.setSettlementAmount(insPlyIncomeVo1.getSettlementAmount()); insPlyIncomeVo.setOtherFeevalue(insPlyIncomeVo1.getAllTotalOtherFeevalue()); YearMonth yearMonth = YearMonth.parse(insPlyIncomeVo1.getMonthYear()); LocalDate signingTime = yearMonth.atDay(1); settlementDocumentaryFeesVo.setSigningTime(signingTime); } if (insPlyIncomeVo.getOtherFeevalue().compareTo(BigDecimal.ZERO) == 0) { throw new SystemException("总金额为0不允许开票"); } if (insPlyIncomeVo.getNoInvoicCommissionFeevalue().compareTo(BigDecimal.ZERO) == 0) { throw new SystemException("未开票金额为0不允许开票"); } if (insPlyIncomeVo.getSettlementAmount() == null || insPlyIncomeVo.getSettlementAmount().compareTo(BigDecimal.ZERO) <= 0) { throw new SystemException("开票金额错误不允许开票"); } if (insPlyIncomeVo.getNoInvoicCommissionFeevalue().compareTo(insPlyIncomeVo.getSettlementAmount()) < 0) { throw new SystemException("开票金额必须小于未开票金额 不允许开票"); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getYear())) { settlementDocumentaryFeesVo.setYear(insPlyIncomeVo.getYear()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getMonth())) { settlementDocumentaryFeesVo.setMonth(insPlyIncomeVo.getMonth()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getDay())) { settlementDocumentaryFeesVo.setDay(insPlyIncomeVo.getDay()); } settlementDocumentaryFeesVo.setCompanyId(insPlyIncomeVo.getCompanyId());// 保险公司id settlementDocumentaryFeesVo.setPartnerCompaniesId(insPlyIncomeVo.getPartnerCompaniesId()); //合作公司id settlementDocumentaryFeesVo.setAgreementId(insPlyIncomeVo.getAgreementId()); settlementDocumentaryFeesVo.setTotalAmount(insPlyIncomeVo.getOtherFeevalue()); //其他费用金额 settlementDocumentaryFeesVo.setUnsettledAmount(insPlyIncomeVo.getNoInvoicCommissionFeevalue().subtract(insPlyIncomeVo.getSettlementAmount())); //未结算 settlementDocumentaryFeesVo.setSettlementAmount(insPlyIncomeVo.getSettlementAmount());//已经开票 settlementDocumentaryFeesVo.setCreateTime(LocalDateTime.now()); settlementDocumentaryFeesVo.setSettlementStatus("1"); settlementDocumentaryFeesVo.setIsNotCar(insPlyIncomeVo.getIsNotCar()); if (StringUtils.isNotEmpty(insPlyIncomeVo.getContractId())) { settlementDocumentaryFeesVo.setInvoiceId(insPlyIncomeVo.getContractId()); //开票号 } if (StringUtils.isNotEmpty(insPlyIncomeVo.getTaskId())) { settlementDocumentaryFeesVo.setTaskId(insPlyIncomeVo.getTaskId()); } settlementDocumentaryFeesVo.setAgreementType("2"); settlementDocumentaryFeesVo.setHandlingFeesStatus(insPlyIncomeVo.getHandlingFeesStatus()); settlementDocumentaryFeesVo.setCompletionStatus("0"); settlementDocumentaryFeesVo.setInvoicedSettledAmount(BigDecimal.ZERO); settlementDocumentaryFeesVo.setInvoicedNotSettledAmount(insPlyIncomeVo.getSettlementAmount()); settlementDocumentaryFeesVo.setInvoicingMethod(insPlyIncomeVo.getInvoicingMethod()); //开票方式 settlementDocumentaryFeesVo.setTaxPoints(insPlyIncomeVo.getTaxPoints()); //税点 settlementDocumentaryFeesVo.setIds(insPlyIncomeVo.getIds()); // 税点支出 if ("0".equals(insPlyIncomeVo.getInvoicingMethod()) && BigDecimalUtils.nullToZero(insPlyIncomeVo.getTaxPoints()) != null && insPlyIncomeVo.getTaxPoints().compareTo(BigDecimal.ZERO) != 0 && BigDecimalUtils.nullToZero(insPlyIncomeVo.getSettlementAmount()) != null) { BigDecimal settlementAmount = insPlyIncomeVo.getSettlementAmount(); settlementDocumentaryFeesVo.setExpendAmount(settlementAmount.multiply(BigDecimal.ONE.subtract(insPlyIncomeVo.getTaxPoints().divide(new BigDecimal(100))))); } else { settlementDocumentaryFeesVo.setExpendAmount(insPlyIncomeVo.getSettlementAmount()); } // 跟单生成批次表 SettlementDocumentaryFeesSumEntity settlementDocumentaryFeesSumEntity = this.saveSumSettlement(insPlyIncomeVo); if(ObjectUtils.isNotEmpty(settlementDocumentaryFeesSumEntity)){ settlementDocumentaryFeesVo.setSettlementSumId(settlementDocumentaryFeesSumEntity.getId()); } return settlementDocumentaryFeesService.inertSettle(settlementDocumentaryFeesVo); } private SettlementDocumentaryFeesSumEntity saveSumSettlement(InsPlyIncomeVo insPlyIncomeVo) { String handlingFeesStatus = insPlyIncomeVo.getHandlingFeesStatus(); SettlementDocumentaryFeesSumEntity settlementDocumentaryFeesSumEntity = new SettlementDocumentaryFeesSumEntity(); BigDecimal totalAmount = BigDecimal.ZERO; if("1".equals(handlingFeesStatus)){ List nowInsPlyIncomeVo = insPlyIncomeVo.getMultipleSelection(); for (InsPlyIncomeVo item: nowInsPlyIncomeVo ){ totalAmount = totalAmount.add(item.getSettlementAmount()) ; } settlementDocumentaryFeesSumEntity.setPartnerCompaniesId(insPlyIncomeVo.getPartnerCompaniesId()); settlementDocumentaryFeesSumEntity.setCompanyId(insPlyIncomeVo.getCompanyId()); settlementDocumentaryFeesSumEntity.setCreateTime(new Date()); settlementDocumentaryFeesSumEntity.setInvoicId(insPlyIncomeVo.getContractId()); settlementDocumentaryFeesSumEntity.setInvoicingMethod(insPlyIncomeVo.getInvoicingMethod()); settlementDocumentaryFeesSumEntity.setIsNotCar(insPlyIncomeVo.getIsNotCar()); settlementDocumentaryFeesSumEntity.setSettlementStatus("1"); settlementDocumentaryFeesSumEntity.setUserId(BaseController.getUser().getId()); settlementDocumentaryFeesSumEntity.setInvoicedSettledAmount(BigDecimal.ZERO); settlementDocumentaryFeesSumEntity.setCompletionStatus("0"); settlementDocumentaryFeesSumEntity.setTotalAmount(totalAmount);// 开票总额 settlementDocumentaryFeesSumEntity.setInvoicedNotSettledAmount(totalAmount); settlementDocumentaryFeesSumService.getBaseMapper().insert(settlementDocumentaryFeesSumEntity); return settlementDocumentaryFeesSumEntity; } return settlementDocumentaryFeesSumEntity; } @Override public HttpResult pinHandlingexcel(InsPlyIncomeVo insPlyIncomeVo, HttpServletRequest request, HttpServletResponse response) { HashMap params = new HashMap<>(); params = this.saveParams(insPlyIncomeVo, params); List insPlyIncomes = baseMapper.queryNew(params); ExportParams exportParams = new ExportParams("平台手续费", null, ExcelType.HSSF); exportParams.setStyle(ExcelStyleUtil.class); List resultList = new ArrayList<>(); for (InsPlyIncome item : insPlyIncomes) { SettlementFeesExcel bxSettlementFeesExcel = new SettlementFeesExcel(); BeanUtils.copyProperties(item, bxSettlementFeesExcel); if ("1".equals(item.getHandlingFeesStatus())) { bxSettlementFeesExcel.setHandlingFeesStatus("已结算"); } else { bxSettlementFeesExcel.setHandlingFeesStatus("未结算"); } resultList.add(bxSettlementFeesExcel); } String uploadPath = this.uploadPath + "/excel/"; Path path = Paths.get(uploadPath); if (!Files.exists(path)) { try { Files.createDirectories(path); } catch (IOException e) { e.printStackTrace(); } } String fileName = EasyExcelUtils.downExcel(uploadPath, "平台手续费导出", SettlementFeesExcel.class, resultList); return HttpResult.ok("", uploadUrl + "excel/" + fileName); } @Override public HttpResult bxHandlingexcel(InsPlyIncomeVo insPlyIncomeVo, HttpServletRequest request, HttpServletResponse response) { HashMap params = new HashMap<>(); params = this.saveParams(insPlyIncomeVo, params); List insPlyIncomes = baseMapper.queryNew(params); String filePathName = ""; List resultNoList = new ArrayList<>(); List resultList = new ArrayList<>(); //判断是否是非车 1 是非车 if ("1".equals(insPlyIncomeVo.getIsNotCar())) { filePathName = "非车手续费导出"; ExportParams exportParams = new ExportParams("非车手续费", null, ExcelType.HSSF); exportParams.setStyle(ExcelStyleUtil.class); for (InsPlyIncome item : insPlyIncomes) { BxSettlementFeesNorExcel bxSettlementFeesNorExcel = new BxSettlementFeesNorExcel(); LocalDateTime signDate = item.getSignDate(); BeanUtils.copyProperties(item, bxSettlementFeesNorExcel); bxSettlementFeesNorExcel.setSigndate(signDate); resultNoList.add(bxSettlementFeesNorExcel); } } else { filePathName = "车险手续费导出"; ExportParams exportParams = new ExportParams("车险手续费", null, ExcelType.HSSF); exportParams.setStyle(ExcelStyleUtil.class); for (InsPlyIncome item : insPlyIncomes) { BxSettlementFeesExcel bxSettlementFeesExcel = new BxSettlementFeesExcel(); LocalDateTime signDate = item.getSignDate(); BeanUtils.copyProperties(item, bxSettlementFeesExcel); bxSettlementFeesExcel.setSigndate(signDate); resultList.add(bxSettlementFeesExcel); } } String uploadPath = this.uploadPath + "/excel/"; Path path = Paths.get(uploadPath); if (!Files.exists(path)) { try { Files.createDirectories(path); } catch (IOException e) { e.printStackTrace(); } } String fileName = ""; if ("1".equals(insPlyIncomeVo.getIsNotCar())) { fileName = EasyExcelUtils.downExcel(uploadPath, filePathName, BxSettlementFeesNorExcel.class, resultNoList); } else { fileName = EasyExcelUtils.downExcel(uploadPath, filePathName, BxSettlementFeesExcel.class, resultList); } return HttpResult.ok("", uploadUrl + "excel/" + fileName); } @Override public HttpResult bxOtherExcel(InsPlyIncomeVo insPlyIncomeVo, HttpServletRequest request, HttpServletResponse response) { HashMap params = new HashMap<>(); params = this.saveParams(insPlyIncomeVo, params); params.put("agreementType", "2"); params.put("isOther", "1"); params.put("isNotCar", "0"); List insPlyIncomes = baseMapper.allOtherAmount(params); ExportParams exportParams = new ExportParams("跟单费导出", null, ExcelType.HSSF); exportParams.setStyle(ExcelStyleUtil.class); List resultList = new ArrayList<>(); for (InsPlyIncome item : insPlyIncomes) { BxOtherExcel bxSettlementFeesExcel = new BxOtherExcel(); BeanUtils.copyProperties(item, bxSettlementFeesExcel); resultList.add(bxSettlementFeesExcel); } String uploadPath = this.uploadPath + "/excel/"; Path path = Paths.get(uploadPath); if (!Files.exists(path)) { try { Files.createDirectories(path); } catch (IOException e) { e.printStackTrace(); } } String fileName = EasyExcelUtils.downExcel(uploadPath, "跟单费导出", BxOtherExcel.class, resultList); return HttpResult.ok("", uploadUrl + "excel/" + fileName); } @Override public InsPlyIncome bxTotalAmount(InsPlyIncomeVo insPlyIncomeVo) { InsPlyIncome insPlyIncome = new InsPlyIncome(); HashMap params = new HashMap<>(); params = this.saveParams(insPlyIncomeVo, params); BigDecimal sumCommissionFeevalue = BigDecimal.ZERO; //总金额 BigDecimal sumInvoicCommissionFeevalue = BigDecimal.ZERO; //开票未结算 BigDecimal sumReadyCommissionFeevalue = BigDecimal.ZERO; // 已开票已结算 BigDecimal sumNoInvoicCommissionFeevalue = BigDecimal.ZERO; //未开票金额 BigDecimal sumUnSettledAmount = BigDecimal.ZERO; //未结算金额 BigDecimal sumAllInvoicCommissionFeevalue = BigDecimal.ZERO; //总开票 List resultList = baseMapper.totalBxAmount(params); for (InsPlyIncome item : resultList) { BigDecimal commissionFeevalue = BigDecimal.ZERO; //总金额 BigDecimal invoicCommissionFeevalue = BigDecimal.ZERO; //开票未结算 BigDecimal readyCommissionFeevalue = BigDecimal.ZERO; // 已开票已结算 BigDecimal noInvoicCommissionFeevalue = BigDecimal.ZERO; //未开票金额 BigDecimal unSettledAmount; //未结算金额 params.put("partnerCompaniesId", item.getPartnerCompaniesId()); params.remove("handlingFeesStatus"); List insPlyIncomes = baseMapper.queryNew(params); //金额总数 for (InsPlyIncome all : insPlyIncomes) { if(ObjectUtils.isNotEmpty(all)){ commissionFeevalue = commissionFeevalue.add(all.getCommissionFeevalue()); } } //已开票金额 = 开票未结算+ 开票已结算 params.put("handlingFeesStatus", "0"); // 开票 params.put("settlementStatus", "1"); // 开票 List invoicInsPlyIncomes = settlementDocumentaryFeesService.queryNew(params); //金额总数 for (SettlementDocumentaryFeesEntity invoicInsPlyIncome : invoicInsPlyIncomes) { BigDecimal invoicIcommissionFeevalue = invoicInsPlyIncome.getSettlementAmount();// 已经开票金额 invoicCommissionFeevalue = invoicCommissionFeevalue.add(invoicIcommissionFeevalue); //开票金额 } params.put("settlementStatus", "2"); // 结算 List settleInsPlyIncomes = settlementDocumentaryFeesService.queryNew(params); //金额总数 for (SettlementDocumentaryFeesEntity settleInsPlyIncome : settleInsPlyIncomes) { BigDecimal settleIcommissionFeevalue = settleInsPlyIncome.getSettlementAmount();// 已结算金额 readyCommissionFeevalue = readyCommissionFeevalue.add(settleIcommissionFeevalue); //已结算总 } params.put("settlementStatus", 0); //未开票金额 List noInvoicInsPlyIncomes = settlementDocumentaryFeesService.queryNew(params); //金额总数 for (SettlementDocumentaryFeesEntity noInvoicInsPlyIncome : noInvoicInsPlyIncomes) { BigDecimal noInvoicIcommissionFeevalue = noInvoicInsPlyIncome.getSettlementAmount();// 未开票金额 noInvoicCommissionFeevalue = noInvoicCommissionFeevalue.add(noInvoicIcommissionFeevalue); //未开票总金额 } noInvoicCommissionFeevalue = commissionFeevalue.subtract(invoicCommissionFeevalue);// 未开票 unSettledAmount = commissionFeevalue.subtract(readyCommissionFeevalue); //未结算 //已开票金额 item.setCommissionFeevalue(commissionFeevalue); //总手续费 item.setAllInvoicCommissionFeevalue(invoicCommissionFeevalue); //总开票金额 // 开票未结算 = 开票金额 - 已开票已结算 invoicCommissionFeevalue = invoicCommissionFeevalue.subtract(readyCommissionFeevalue); item.setInvoicCommissionFeevalue(invoicCommissionFeevalue); //开票未结算 item.setReadyCommissionFeevalue(readyCommissionFeevalue); //已开票已结算 item.setNoInvoicCommissionFeevalue(noInvoicCommissionFeevalue); //未开票金额 item.setUnSettledAmount(unSettledAmount); // 未结算金额 sumCommissionFeevalue = sumCommissionFeevalue.add(item.getCommissionFeevalue()); sumInvoicCommissionFeevalue = sumInvoicCommissionFeevalue.add(item.getInvoicCommissionFeevalue()); sumReadyCommissionFeevalue = sumReadyCommissionFeevalue.add(item.getReadyCommissionFeevalue()); sumNoInvoicCommissionFeevalue = sumNoInvoicCommissionFeevalue.add(item.getNoInvoicCommissionFeevalue()); sumUnSettledAmount = sumUnSettledAmount.add(item.getUnSettledAmount()); sumAllInvoicCommissionFeevalue = sumAllInvoicCommissionFeevalue.add(item.getAllInvoicCommissionFeevalue()); } if(sumCommissionFeevalue.compareTo(sumReadyCommissionFeevalue) <0){ sumAllInvoicCommissionFeevalue=sumCommissionFeevalue; sumReadyCommissionFeevalue=sumCommissionFeevalue; sumNoInvoicCommissionFeevalue =sumCommissionFeevalue.subtract(sumAllInvoicCommissionFeevalue); sumUnSettledAmount=sumAllInvoicCommissionFeevalue.subtract(sumReadyCommissionFeevalue); } insPlyIncome.setCommissionFeevalue(sumCommissionFeevalue); insPlyIncome.setInvoicCommissionFeevalue(sumInvoicCommissionFeevalue); insPlyIncome.setReadyCommissionFeevalue(sumReadyCommissionFeevalue); insPlyIncome.setNoInvoicCommissionFeevalue(sumNoInvoicCommissionFeevalue); insPlyIncome.setAllInvoicCommissionFeevalue(sumAllInvoicCommissionFeevalue); insPlyIncome.setUnSettledAmount(sumUnSettledAmount); return insPlyIncome; } @Override public InsPlyIncome ptTotalAmount(InsPlyIncomeVo insPlyIncomeVo) { HashMap params = new HashMap<>(); params = this.saveParams(insPlyIncomeVo, params); InsPlyIncome totalledAmount = baseMapper.ptTotalAmount(params); //总金额 return totalledAmount; } @Override public HttpResult>> otherTimeDetail(InsPlyIncomeVo insPlyIncomeVo) { HashMap params = new HashMap<>(); this.saveParams(insPlyIncomeVo, params); List> resultMap = baseMapper.otherTimeDetail(params); Set uniqueYears = new HashSet<>(); for (Map map : resultMap) { // 假设年份是以 "year" 为键的,并且它的值是 String 类型 String year = String.valueOf(map.get("year")); if (year != null) { // 确保年份不是 null uniqueYears.add(year); } } this.addMonthYear(uniqueYears, resultMap); return HttpResult.ok(resultMap); } /** * uniqueYears 年份间隔 resultMap 返回结果 * * @param uniqueYears * @param resultMap 返回一到十二月数据 */ private void addMonthYear(Set uniqueYears, List> resultMap) { // 存储已存在的年份-月份组合,以便快速查找 Set existingYearMonths = new HashSet<>(); for (Map entry : resultMap) { String monthYear = String.valueOf(entry.get("monthYear")); existingYearMonths.add(monthYear); } // 遍历所有年份和月份,并添加缺失的条目 for (String year : uniqueYears) { for (int month = 1; month <= 12; month++) { String strNumber = String.valueOf(month); if (strNumber.length() < 2) { strNumber = String.format("%02d", Integer.parseInt(strNumber)); } String yearMonth = year + "-" + strNumber; if (!existingYearMonths.contains(yearMonth)) { // 创建一个新的条目并添加到resultMap中 HashMap newEntry = new HashMap<>(); newEntry.put("year", year); newEntry.put("monthNumber", strNumber); newEntry.put("allTotalOtherFeevalue", 0); newEntry.put("invoicCommissionFeevalue", 0); newEntry.put("monthYear", yearMonth); newEntry.put("noInvoicCommissionFeevalue", 0); resultMap.add(newEntry); } } } // 使用自定义Comparator对resultMap进行排序 Collections.sort(resultMap, new Comparator>() { @Override public int compare(HashMap o1, HashMap o2) { // 比较 year String year1 = String.valueOf(o1.get("year")); String year2 = String.valueOf(o2.get("year")); int yearComparison = year1.compareTo(year2); if (yearComparison != 0) { return yearComparison; } // 如果 year 相同,则比较 monthNumber Integer monthNum1 = Integer.parseInt(String.format("%2s", o1.get("monthNumber")).replaceAll(" ", "0")); Integer monthNum2 = Integer.parseInt(String.format("%2s", o2.get("monthNumber")).replaceAll(" ", "0")); return monthNum1.compareTo(monthNum2); } }); } @Override @Transactional public HttpResult singleInvoic(InsPlyIncomeVo insPlyIncomeVo) { // 通过ids 查出跟单非结算单 SettlementDocumentaryFeesVo settlementDocumentaryFeesVo = new SettlementDocumentaryFeesVo(); // 生成跟单费结算表 if (!CollectionUtils.isEmpty(insPlyIncomeVo.getMultipleSelection())) { SettlementDocumentaryFeesSumEntity settlementDocumentaryFeesSumEntity = this.saveSumSettlement(insPlyIncomeVo); for (InsPlyIncomeVo insPlyIncomeVo1 : insPlyIncomeVo.getMultipleSelection()) { insPlyIncomeVo.setSettlementAmount(insPlyIncomeVo1.getSettlementAmount()); insPlyIncomeVo.setOtherFeevalue(insPlyIncomeVo1.getAllTotalOtherFeevalue()); YearMonth yearMonth = YearMonth.parse(insPlyIncomeVo1.getMonthYear()); LocalDate signingTime = yearMonth.atDay(1); settlementDocumentaryFeesVo.setSigningTime(signingTime); if (insPlyIncomeVo.getOtherFeevalue().compareTo(BigDecimal.ZERO) == 0) { throw new SystemException("总金额为0不允许开票"); } if (insPlyIncomeVo.getNoInvoicCommissionFeevalue().compareTo(BigDecimal.ZERO) == 0) { throw new SystemException("未开票金额为0不允许开票"); } if (insPlyIncomeVo.getSettlementAmount() == null || insPlyIncomeVo.getSettlementAmount().compareTo(BigDecimal.ZERO) <= 0) { throw new SystemException("开票金额错误不允许开票"); } if (insPlyIncomeVo.getNoInvoicCommissionFeevalue().compareTo(insPlyIncomeVo.getSettlementAmount()) < 0) { throw new SystemException("开票金额必须小于未开票金额 不允许开票"); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getYear())) { settlementDocumentaryFeesVo.setTimeFrame(insPlyIncomeVo.getYear());//年度 } if (StringUtils.isNotEmpty(insPlyIncomeVo.getYear())) { settlementDocumentaryFeesVo.setYear(insPlyIncomeVo.getYear()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getMonth())) { settlementDocumentaryFeesVo.setMonth(insPlyIncomeVo.getMonth()); } if (StringUtils.isNotEmpty(insPlyIncomeVo.getDay())) { settlementDocumentaryFeesVo.setDay(insPlyIncomeVo.getDay()); } settlementDocumentaryFeesVo.setCompletionStatus("0"); settlementDocumentaryFeesVo.setInvoicedSettledAmount(BigDecimal.ZERO); settlementDocumentaryFeesVo.setInvoicedNotSettledAmount(insPlyIncomeVo.getSettlementAmount()); settlementDocumentaryFeesVo.setCompanyId(insPlyIncomeVo.getCompanyId());// 保险公司id settlementDocumentaryFeesVo.setPartnerCompaniesId(insPlyIncomeVo.getPartnerCompaniesId()); //合作公司id settlementDocumentaryFeesVo.setTotalAmount(insPlyIncomeVo.getOtherFeevalue()); //其他费用金额 settlementDocumentaryFeesVo.setUnsettledAmount(insPlyIncomeVo.getNoInvoicCommissionFeevalue().subtract(insPlyIncomeVo.getSettlementAmount())); //未结算 settlementDocumentaryFeesVo.setSettlementAmount(insPlyIncomeVo.getSettlementAmount());//已经开票 settlementDocumentaryFeesVo.setCreateTime(LocalDateTime.now()); settlementDocumentaryFeesVo.setAgreementType("2"); settlementDocumentaryFeesVo.setIds(insPlyIncomeVo.getIncomeIds()); settlementDocumentaryFeesVo.setSettlementStatus("1"); settlementDocumentaryFeesVo.setIsNotCar(insPlyIncomeVo.getIsNotCar()); if (StringUtils.isNotEmpty(insPlyIncomeVo.getContractId())) { settlementDocumentaryFeesVo.setInvoiceId(insPlyIncomeVo.getContractId()); //开票号 } settlementDocumentaryFeesVo.setHandlingFeesStatus(insPlyIncomeVo.getHandlingFeesStatus()); settlementDocumentaryFeesVo.setInvoicingMethod(insPlyIncomeVo.getInvoicingMethod()); //开票方式 settlementDocumentaryFeesVo.setTaxPoints(insPlyIncomeVo.getTaxPoints()); //税点 settlementDocumentaryFeesVo.setIds(insPlyIncomeVo.getIds()); // settlementDocumentaryFeesVo.setSigningTime(insPlyIncomeVo.getSettlementTime()); //签单日期 // 税点支出 if (BigDecimalUtils.nullToZero(insPlyIncomeVo.getTaxPoints()) != null && BigDecimalUtils.nullToZero(insPlyIncomeVo.getSettlementAmount()) != null) { BigDecimal settlementAmount = insPlyIncomeVo.getSettlementAmount(); settlementDocumentaryFeesVo.setExpendAmount(settlementAmount.multiply(BigDecimal.ONE.subtract(insPlyIncomeVo.getTaxPoints().divide(new BigDecimal(100))))); } if(ObjectUtils.isNotEmpty(settlementDocumentaryFeesSumEntity)){ settlementDocumentaryFeesVo.setSettlementSumId(settlementDocumentaryFeesSumEntity.getId()); } settlementDocumentaryFeesService.inertSettle(settlementDocumentaryFeesVo); } } return HttpResult.ok(); } @Override public void batchUpdate(InsPlyIncomeVo insPlyIncomeVo) { HashMap params = new HashMap<>(); params = this.saveParams(insPlyIncomeVo, params); List list = this.baseMapper.queryNew(params); for (InsPlyIncome item : list) { item.setContractFileId(insPlyIncomeVo.getContractFileId()); item.setSettleOtherStatus("1"); baseMapper.updateById(item); } } @Override @Transactional public HashMap bxImportOther(MultipartFile multipartFile, String isNotCar) { HashMap resultMap = new HashMap<>(); List> resultList = new ArrayList<>(); HashMap params = new HashMap<>(); BigDecimal allAmount = BigDecimal.ZERO; params.put("isNotCar", isNotCar); try { List dtoList = ExcelEasypoiUtils.importExcel(multipartFile, InsBxOtherExcelDto.class, 0, 1, 1); for (InsBxOtherExcelDto item : dtoList) { if (StringUtils.isNotEmpty(item.getLicenseno())) { params.put("licenseno", item.getLicenseno()); } if (StringUtils.isNotEmpty(item.getPolicyno())) { params.put("policyno", item.getPolicyno()); } if (StringUtils.isNotEmpty(item.getSyPolicyno())) { params.put("syPolicyno", item.getSyPolicyno()); } params.put("handlingFeesStatus", "0"); // isOther params.put("isOther", "1"); params.put("isNotCar", "0"); InsPlyIncome byBxLicenseno = baseMapper.findByBxLicenseno(params); if (item.getJqOtherCostsProportion() == null) { item.setJqOtherCostsProportion(BigDecimal.ZERO); } if (item.getSyOtherCostsProportion() == null) { item.setSyOtherCostsProportion(BigDecimal.ZERO); } if (ObjectUtils.isNotEmpty(byBxLicenseno) && (byBxLicenseno.getJqOtherCostsProportion().compareTo(item.getJqOtherCostsProportion()) != 0 || byBxLicenseno.getSyOtherCostsProportion().compareTo(item.getSyOtherCostsProportion()) != 0)) { InsPlyIncomeLog insPlyIncomeLog = new InsPlyIncomeLog(); BeanUtils.copyProperties(byBxLicenseno,insPlyIncomeLog); insPlyIncomeLog.setOperationStatus("2"); insPlyIncomeLog.setId(null); insPlyIncomeLog.setIncomeId(byBxLicenseno.getId()); insPlyIncomeLogService.saveLog(insPlyIncomeLog); //添加日志 // 如果比例不相等 BigDecimal jqOtherCostsProportion = item.getJqOtherCostsProportion(); BigDecimal syOtherCostsProportion = item.getSyOtherCostsProportion(); BigDecimal jqOtherAmount = getBigDecimal( byBxLicenseno.getJqPremium(),item.getJqOtherCostsProportion()); BigDecimal syOtherAmount = getBigDecimal( byBxLicenseno.getSyPremium(),item.getSyOtherCostsProportion()); byBxLicenseno.setJqOtherCostsPremium(jqOtherAmount); byBxLicenseno.setSyOtherCostsPremium(syOtherAmount); byBxLicenseno.setJqOtherCostsProportion(jqOtherCostsProportion); byBxLicenseno.setSyOtherCostsProportion(syOtherCostsProportion); byBxLicenseno.setOtherFeevalue(this.calculateTotal(jqOtherAmount, syOtherAmount, null)); byBxLicenseno.setOtherFeerate(this.calculateTotal(jqOtherCostsProportion, syOtherCostsProportion, null)); byBxLicenseno.setAllFeeValue(this.calculateTotal(jqOtherAmount, syOtherAmount, null)); byBxLicenseno.setUpdateUserId(BaseController.getUser().getId()); byBxLicenseno.setUpdateUserName(BaseController.getUser().getName()); baseMapper.updateById(byBxLicenseno); HashMap map = new HashMap<>(); map.put("licenseno", item.getLicenseno()); map.put("policyno", item.getPolicyno()); map.put("syPolicyno", item.getSyPolicyno()); map.put("jqOtherCostsPremium", jqOtherAmount); map.put("syOtherCostsPremium", syOtherAmount); map.put("jqOtherCostsProportion", jqOtherCostsProportion); map.put("syOtherCostsProportion", syOtherCostsProportion); map.put("otherFeevalue", byBxLicenseno.getOtherFeevalue()); map.put("otherFeerate", byBxLicenseno.getOtherFeerate()); resultList.add(map); allAmount = allAmount.add(jqOtherAmount).add(syOtherAmount); } } resultMap.put("allAmount", allAmount); resultMap.put("resultList", resultList); } catch (IOException e) { throw new RuntimeException(e); } return resultMap; } @Override @Transactional public HashMap noBxImportOther(MultipartFile multipartFile, String isNotCar) { HashMap resultMap = new HashMap<>(); List> resultList = new ArrayList<>(); HashMap params = new HashMap<>(); BigDecimal allAmount = BigDecimal.ZERO; params.put("isNotCar", isNotCar); try { List dtoList = ExcelEasypoiUtils.importExcel(multipartFile, InsNoBxOtherExcelDto.class, 0, 1, 1); for (InsNoBxOtherExcelDto item : dtoList) { if (StringUtils.isNotEmpty(item.getLicenseno())) { params.put("licenseno", item.getLicenseno()); } if (StringUtils.isNotEmpty(item.getNoPolicyno())) { params.put("noPolicyno", item.getNoPolicyno()); } params.put("handlingFeesStatus", "0"); params.put("isNotCar", "1"); params.put("isOther", "1"); InsPlyIncome byBxLicenseno = baseMapper.findByBxLicenseno(params); if (ObjectUtils.isNotEmpty(byBxLicenseno) && byBxLicenseno.getNoOtherCostsProportion().compareTo(item.getNoOtherCostsProportion()) != 0) { InsPlyIncomeLog insPlyIncomeLog = new InsPlyIncomeLog(); insPlyIncomeLog.setIncomeId(byBxLicenseno.getId()); BeanUtils.copyProperties(byBxLicenseno,insPlyIncomeLog); insPlyIncomeLog.setOperationStatus("2"); insPlyIncomeLog.setId(null); insPlyIncomeLogService.saveLog(insPlyIncomeLog); //添加日志 HashMap newMap = new HashMap<>(); // 如果比例不相等 BigDecimal noOtherCostsProportion = item.getNoOtherCostsProportion(); BigDecimal noNoTaxPremium = byBxLicenseno.getNoPremium(); BigDecimal divisor = new BigDecimal("1.06"); // 最好是使用字符串来避免精度损失 BigDecimal noOtherAmount = getBigDecimal( noNoTaxPremium,item.getNoOtherCostsProportion()); byBxLicenseno.setNoOtherCostsPremium(noOtherAmount); byBxLicenseno.setNoOtherCostsProportion(item.getNoOtherCostsProportion()); byBxLicenseno.setAllFeeValue(this.calculateTotal(noOtherAmount, null, null)); byBxLicenseno.setOtherFeevalue(this.calculateTotal(noOtherAmount, null, null)); byBxLicenseno.setOtherFeerate(this.calculateTotal(noOtherCostsProportion, null, null)); baseMapper.updateById(byBxLicenseno); newMap.put("licenseno", item.getLicenseno()); newMap.put("noPolicyno", item.getNoPolicyno()); newMap.put("noOtherCostsPremium", noOtherAmount); newMap.put("otherFeevalue", byBxLicenseno.getOtherFeevalue()); newMap.put("otherFeerate", byBxLicenseno.getOtherFeerate()); resultList.add(newMap); allAmount = allAmount.add(noOtherAmount); } } resultMap.put("allAmount", allAmount); resultMap.put("resultList", resultList); } catch (IOException e) { throw new RuntimeException(e); } return resultMap; } @Override public void batchUpdateVoucher(InsPlyIncomeVo insPlyIncomeVo) { String s = insPlyIncomeVo.getSelectIds().get(0); ImportResult importResult = importAsyncService.getById(s); String[] split = importResult.getIds().split(","); InsPlyIncome insPlyIncome = new InsPlyIncome(); for (String id : split) { insPlyIncome.setId(id); insPlyIncome.setSettlementImageId(insPlyIncomeVo.getSettlementImageId()); insPlyIncome.setSettleOtherStatus("1"); baseMapper.updateById(insPlyIncome); } } /** * 通过任务id 去查询关联表 * * @param insPlyIncomeVo * @return */ @Override public HttpResult reconciliation(InsPlyIncomeVo insPlyIncomeVo) { String taskId = insPlyIncomeVo.getTaskId(); List incomeIdList = incomeTaskRelationshipService.getByTaskId(taskId); for (String incomeId : incomeIdList) { InsPlyIncome insPlyIncome = baseMapper.getById(incomeId); insPlyIncome.setSettleOtherStatus("1"); insPlyIncome.setSettlementImageId(insPlyIncomeVo.getSettlementImageId()); baseMapper.updateById(insPlyIncome); } return HttpResult.ok(); } /** * @version * @author: hxl * @Date: 2024/6/18 10:14 * @Description: 通过保险公司id和状态查询平台的记录 */ @Override public List platformSettlementRecord(InsPlyIncomeVo insPlyIncomeVo) { if(insPlyIncomeVo.getPartnerCompaniesId()==null || "".equals(insPlyIncomeVo.getPartnerCompaniesId())){ throw new SystemException("合作公司编码(partnerCompaniesId)不能为空"); } if(insPlyIncomeVo.getHandlingFeesStatus()==null || "".equals(insPlyIncomeVo.getHandlingFeesStatus())){ throw new SystemException("结算状态 0 未结算 1已结算(handlingFeesStatus)不能为空"); } return baseMapper.platformSettlementRecord(insPlyIncomeVo.getPartnerCompaniesId(),insPlyIncomeVo.getHandlingFeesStatus()); } /** * @param insPlyIncomeVo * @Description: 平台新增 * @return InsPlyIncome */ @Override public HttpResult ptInsert(InsPlyIncomeVo insPlyIncomeVo) { InsPlyIncome insPlyIncome = new InsPlyIncome(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); String agreementId = insPlyIncomeVo.getAgreementId(); if(StringUtils.isNotEmpty(agreementId)){ HttpResult byAgreementId = ptlAgreementService.getByAgreementId(agreementId); if(byAgreementId!=null && ObjectUtils.isNotEmpty(byAgreementId.getData())){ PtlAgreementQueryVo data = byAgreementId.getData(); PtlAgreement agreement = data.getAgreement(); if(ObjectUtils.isNotEmpty(agreement)){ insPlyIncomeVo.setPartnerCompaniesId(agreement.getPartnerCompaniesId()); insPlyIncomeVo.setCompanyId(agreement.getInsuranceCompanyId()); } } } BeanUtils.copyProperties(insPlyIncomeVo, insPlyIncome); if (StringUtils.isNotEmpty(insPlyIncome.getPartnerCompaniesId())) { // 合作公司id String partnerCompaniesId = insPlyIncome.getPartnerCompaniesId(); insPlyIncome.setPartnerCompaniesId(partnerCompaniesId); EsmInsCompany esmInsCompany = EsmInsCompanyService.getById(partnerCompaniesId); String name = esmInsCompany.getNamesimple(); //合作名称 insPlyIncome.setPartnerCompaniesName(name); insPlyIncome.setPartnerCompaniesId(insPlyIncome.getPartnerCompaniesId()); } if (StringUtils.isNotEmpty(insPlyIncome.getCompanyId())) { String insuranceCompanyId = insPlyIncome.getCompanyId(); EsmInsCompany esmInsCompany = EsmInsCompanyService.getById(insuranceCompanyId); String name = esmInsCompany.getNamesimple(); //保险公司名称 简称 insPlyIncome.setCompanyName(name); } // if (insPlyIncome.getJqPremium() != null && insPlyIncome.getJqPremium().compareTo(BigDecimal.ZERO) > 0 && insPlyIncome.getJqSuperviseCostsProportion() != null && insPlyIncome.getJqSuperviseCostsProportion().compareTo(BigDecimal.ZERO) > 0) { // insPlyIncome.setJqSuperviseCostsPremiums(this.getBigDecimal(insPlyIncome.getJqPremium(),insPlyIncome.getJqSuperviseCostsProportion())); // } // if (insPlyIncome.getSyPremium() != null && insPlyIncome.getSyPremium().compareTo(BigDecimal.ZERO) > 0 && insPlyIncome.getSySuperviseCostsProportion() != null && insPlyIncome.getSySuperviseCostsProportion().compareTo(BigDecimal.ZERO) > 0) { // insPlyIncome.setSySuperviseCostsPremiums(this.getBigDecimal(insPlyIncome.getSyPremium(),insPlyIncome.getSySuperviseCostsProportion())); // } // if (insPlyIncome.getNoPremium() != null && insPlyIncome.getNoPremium().compareTo(BigDecimal.ZERO) > 0 && insPlyIncome.getNoSuperviseCostsProportion() != null && insPlyIncome.getNoSuperviseCostsProportion().compareTo(BigDecimal.ZERO) > 0) { // insPlyIncome.setNoSuperviseCostsPremiums(this.getBigDecimal(insPlyIncome.getNoPremium(),insPlyIncome.getNoSuperviseCostsProportion())); // } // if (insPlyIncome.getJqPremium() != null && insPlyIncome.getJqPremium().compareTo(BigDecimal.ZERO) > 0 && insPlyIncome.getJqOtherCostsProportion() != null && insPlyIncome.getJqOtherCostsProportion().compareTo(BigDecimal.ZERO) > 0) { // insPlyIncome.setJqOtherCostsPremium(this.getBigDecimal(insPlyIncome.getJqPremium(),insPlyIncome.getJqOtherCostsProportion())); // } // if (insPlyIncome.getSyPremium() != null && insPlyIncome.getSyPremium().compareTo(BigDecimal.ZERO) > 0 && insPlyIncome.getSyOtherCostsProportion() != null && insPlyIncome.getSyOtherCostsProportion().compareTo(BigDecimal.ZERO) > 0) { // insPlyIncome.setSyOtherCostsPremium(this.getBigDecimal(insPlyIncome.getSyPremium(),insPlyIncome.getSyOtherCostsProportion())); // } // if (insPlyIncome.getNoPremium() != null && insPlyIncome.getNoPremium().compareTo(BigDecimal.ZERO) > 0 && insPlyIncome.getNoOtherCostsProportion() != null && insPlyIncome.getNoOtherCostsProportion().compareTo(BigDecimal.ZERO) > 0) { // insPlyIncome.setNoOtherCostsPremium(this.getBigDecimal(insPlyIncome.getNoPremium(),insPlyIncome.getNoOtherCostsProportion())); // } HashMap params = new HashMap<>(); params.put("agreeId",insPlyIncomeVo.getAgreeId()); PtlAgreement ptlAgreement = ptlAgreementService.selectAgreeId(params); if (ObjectUtils.isEmpty(ptlAgreement)) { return HttpResult.error("协议匹配不上"); } insPlyIncome.setAgreementId(ptlAgreement.getId()); insPlyIncome.setJqReceivableProportion(this.calculateTotal(insPlyIncome.getJqSuperviseCostsProportion(),insPlyIncome.getNoOtherCostsProportion(),null)); insPlyIncome.setSyReceivableProportion(this.calculateTotal(insPlyIncome.getSySuperviseCostsProportion(),insPlyIncome.getNoOtherCostsProportion(),null)); insPlyIncome.setNoReceivableProportion(this.calculateTotal(insPlyIncome.getNoSuperviseCostsProportion(),insPlyIncome.getNoOtherCostsProportion(),null)); insPlyIncome.setCreateTime(LocalDate.now()); insPlyIncome.setCommissionFeerate(this.calculateTotal(insPlyIncome.getJqSuperviseCostsProportion(),insPlyIncome.getSySuperviseCostsProportion(),insPlyIncome.getNoSuperviseCostsPremiums())); insPlyIncome.setCommissionFeevalue(this.calculateTotal(insPlyIncome.getJqSuperviseCostsPremiums(),insPlyIncome.getSySuperviseCostsPremiums(),insPlyIncome.getNoSuperviseCostsPremiums())); insPlyIncome.setOtherFeerate(this.calculateTotal(insPlyIncome.getJqOtherCostsProportion(),insPlyIncome.getSyOtherCostsProportion(),insPlyIncome.getNoOtherCostsProportion())); insPlyIncome.setOtherFeevalue(this.calculateTotal(insPlyIncome.getJqOtherCostsPremium(),insPlyIncome.getSyOtherCostsPremium(),insPlyIncome.getNoOtherCostsPremium())); insPlyIncome.setAllFeeValue(this.calculateTotal(insPlyIncome.getCommissionFeevalue(),insPlyIncome.getOtherFeevalue(),null)); insPlyIncome.setAgreementType("1"); insPlyIncome.setHandlingFeesStatus("0"); insPlyIncome.setCommissionFeevalue(insPlyIncomeVo.getCommissionFeevalue()); insPlyIncome.setOtherFeevalue(insPlyIncomeVo.getOtherFeevalue()); insPlyIncome.setIsNotCar("0"); insPlyIncome.setIsNotDocumentary("0"); insPlyIncome.setDocumentaryFeesStatus("0"); insPlyIncome.setAllFeeValue(insPlyIncome.getReceivableAmount()); if(StringUtils.isNotEmpty(insPlyIncomeVo.getSignDate())){ LocalDate signDate = LocalDate.parse(insPlyIncomeVo.getSignDate(), formatter); insPlyIncome.setSignDate(signDate.atStartOfDay()); } InsPlyIncomeLog insPlyIncomeLog = new InsPlyIncomeLog(); insPlyIncomeLog.setIncomeId(insPlyIncome.getId()); insPlyIncome.setId(null); BeanUtils.copyProperties(insPlyIncome,insPlyIncomeLog); insPlyIncomeLog.setOperationStatus("1"); insPlyIncomeLogService.saveLog(insPlyIncomeLog); //添加日志 baseMapper.insert(insPlyIncome); return HttpResult.ok(); } /*** * * @param insPlyIncomeVo * @return 返回私有 平台 应收 已收 未收 */ @Override public HttpResult> totalReceivables(InsPlyIncomeVo insPlyIncomeVo) { ArrayList> resultList = new ArrayList<>(); BigDecimal bxhandAmount = BigDecimal.ZERO; //保险手续费应收 BigDecimal receivedAmount = BigDecimal.ZERO; //保险手续费应收 HashMap ptParams = new HashMap<>(); ptParams.put("agreementType","1"); InsPlyIncome totalledAmount = baseMapper.ptTotalAmount(ptParams); //应收 未收 已收 ptParams.clear(); ptParams.put("commissionFeevalue",totalledAmount.getCommissionFeevalue()); ptParams.put("noInvoicCommissionFeevalue",totalledAmount.getNoInvoicCommissionFeevalue()); ptParams.put("readyCommissionFeevalue",totalledAmount.getReadyCommissionFeevalue()); resultList.add(ptParams); //手续费应收 HashMap privateParams= new HashMap<>(); privateParams.put("agreementType","2"); List bxHandList = baseMapper.queryNew(privateParams); for (InsPlyIncome bxhandItem : bxHandList){ bxhandAmount=bxhandAmount.add(bxhandItem.getAllFeeValue()); } privateParams.clear(); //已开票金额 = 开票未结算+ 开票已结算 privateParams.put("settlementStatus", "2"); // 结算 List invoicInsPlyIncomes = settlementDocumentaryFeesService.queryNew(privateParams); //金额总数 for (SettlementDocumentaryFeesEntity invoicInsPlyIncome : invoicInsPlyIncomes) { receivedAmount =receivedAmount.add(invoicInsPlyIncome.getSettlementAmount()); } BigDecimal subtract = bxhandAmount.subtract(receivedAmount); privateParams.clear(); privateParams.put("commissionFeevalue",bxhandAmount); privateParams.put("noInvoicCommissionFeevalue",receivedAmount); privateParams.put("readyCommissionFeevalue",subtract); resultList.add(privateParams); return HttpResult.ok(); } /** * 根据签单日期月份分组 * @param insPlyIncomeVo * @return 平台 私有 应收 已收 */ @Override public HttpResult>> monthTotalReceivables(InsPlyIncomeVo insPlyIncomeVo) { HashMap params = new HashMap<>(); params.put("agreementType", insPlyIncomeVo.getAgreementType()); if ("1".equals(insPlyIncomeVo.getAgreementType())) { //平台 params.put("year", insPlyIncomeVo.getYear()); List> ptResultList = baseMapper.ptSumGroupByMonth(params); params.put("handlingFeesStatus", "1"); List> ptSettleResultList = baseMapper.ptSumGroupByMonth(params); Map ptMap = new HashMap<>(); // 假设commissionFeevalue是BigDecimal类型 for (HashMap ptSettleResultListItem : ptSettleResultList) { String month = (String) ptSettleResultListItem.get("month"); if (month == null) { // 处理month为null的情况 continue; } BigDecimal commissionFeevalue = (BigDecimal) ptSettleResultListItem.get("commissionFeevalue"); if (commissionFeevalue == null) { // 处理commissionFeevalue为null的情况 continue; } ptMap.put(month, commissionFeevalue); } for (HashMap ptResultListItem : ptResultList) { BigDecimal bigDecimal1 = ptMap.get(ptResultListItem.get("year")); ptResultListItem.put("readyCommissionFeevalue", bigDecimal1); BigDecimal commissionFeevalue = BigDecimal.valueOf(Long.valueOf(ptResultListItem.get("commissionFeevalue").toString())); BigDecimal subtract = commissionFeevalue.subtract(bigDecimal1); ptResultListItem.put("noInvoicCommissionFeevalue", subtract); } return HttpResult.ok(ptResultList); } else if ("2".equals(insPlyIncomeVo.getAgreementType())) { params.put("year", insPlyIncomeVo.getYear()); List> bxResultList = baseMapper.ptSumGroupByMonth(params); params.clear(); params.put("settlementStatus", "2"); List> bxReadyCommissionFeevalue = settlementDocumentaryFeesService.bxSumGroupByMonth(params); Map bxMap = new HashMap<>(); // 假设commissionFeevalue是BigDecimal类型 for (HashMap bxSettleResultListItem : bxReadyCommissionFeevalue) { String month = (String) bxSettleResultListItem.get("month"); if (month == null) { // 处理month为null的情况 continue; } BigDecimal commissionFeevalue = (BigDecimal) bxSettleResultListItem.get("commissionFeevalue"); if (commissionFeevalue == null) { // 处理commissionFeevalue为null的情况 continue; } bxMap.put(month, commissionFeevalue); } for (HashMap bxResultListItem : bxResultList) { BigDecimal bigDecimal1 = bxMap.get(bxResultListItem.get("year")); bxResultListItem.put("readyCommissionFeevalue", bigDecimal1); BigDecimal commissionFeevalue = BigDecimal.valueOf(Long.valueOf(bxResultListItem.get("commissionFeevalue").toString())); BigDecimal subtract = commissionFeevalue.subtract(bigDecimal1); bxResultListItem.put("noInvoicCommissionFeevalue", subtract); } return HttpResult.ok(bxReadyCommissionFeevalue); } return HttpResult.ok(); } }