package com.ydtech.modules.inv.service.impl; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ydtech.exception.SystemException; import com.ydtech.modules.inv.dao.InvInsExternalBillsDetailsMapper; import com.ydtech.modules.inv.model.InvExternalBills; import com.ydtech.modules.inv.model.InvInsExternalBillsDetails; import com.ydtech.modules.inv.model.dto.InvInsChinaCoalExcelDto; import com.ydtech.modules.inv.model.dto.InvInsImportDto; import com.ydtech.modules.inv.model.dto.InvInsSimpleSysExcelDto; import com.ydtech.modules.inv.model.dto.InvInsStandardExcelDto; import com.ydtech.modules.inv.service.InvExternalBillsService; import com.ydtech.modules.inv.service.InvInsExternalBillsDetailsService; import com.ydtech.modules.protocol.entity.po.PtlAgreementProductCosts; import com.ydtech.modules.protocol.service.PtlAgreementProductCostsService; import com.ydtech.utils.BigDecimalUtils; import com.ydtech.utils.StringUtils; import com.ydtech.utils.excel.ExcelUtils2; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.IOException; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; /** * @author Administrator * @description 针对表【inv_ins_external_bills_details(财务 - 保险公司 - 外部票据 - 详情)】的数据库操作Service实现 * @createDate 2023-06-06 11:08:53 */ @Service public class InvInsExternalBillsDetailsServiceImpl extends ServiceImpl implements InvInsExternalBillsDetailsService { @Resource InvExternalBillsService invExternalBillsService; @Resource PtlAgreementProductCostsService ptlAgreementProductCostsService; @Override public boolean deleteByBatchNum(String batchNum) { LambdaQueryWrapper lqw = new LambdaQueryWrapper(); lqw.eq(InvInsExternalBillsDetails::getBatchNum, batchNum); return remove(lqw); } @Override public InvExternalBills importData(InvInsImportDto importDto, MultipartFile file, InvExternalBills iieb) throws Exception { List list = buildImportExcel(importDto, file, iieb); iieb = InvExternalBills.buildImportInvExternalBills(iieb, list); boolean boo = saveBatch(list); if (!boo) { iieb.setImportStatus("0"); iieb.setErrorMsg("保存数据出错"); } return iieb; } /** * 构造导入excel数据 * * @author: lig * @date: 2023年07月06日 0006 */ private List buildImportExcel(InvInsImportDto importDto, MultipartFile file, InvExternalBills iieb) throws Exception { List list; Map m = new HashMap(); List standardList = ExcelUtils2.importExcel(file, InvInsStandardExcelDto.class, 0, 1, 1); standardList.stream().forEach(a -> { List filedList = new ArrayList<>(); filedList.add(a.getInsuranceCompanyUser()); //获取费用 List costList = ptlAgreementProductCostsService.selectByCompanyId(iieb.getInsCompanyId(),filedList); Map costMap = new HashMap(); costList.stream().forEach(cost ->{ costMap.put(cost.getProductName(),cost.getCostsProportion()); }); InvInsExternalBillsDetails iiebd = new InvInsExternalBillsDetails(); if (m.containsKey(a.getPlateNum())) { iiebd = m.get(a.getPlateNum()); } else { BeanUtil.copyProperties(a, iiebd); } //产品匹配 添加费用 if(costMap.containsKey(a.getProductName())){ if(a.getProductName().equals("单交")){ iiebd.setMliftaCost(new BigDecimal(costMap.get(a.getProductName()))); } } buildStandardDtoParam(a, iiebd); m.put(a.getPlateNum(), iiebd); }); // //标准模板 // if (importDto.isStandard()) { // List standardList = ExcelUtils2.importExcel(file, InvInsStandardExcelDto.class, 0, 1, 1); // standardList.stream().forEach(a -> { // // // List filedList = new ArrayList<>(); // filedList.add(a.getInsuranceCompanyUser()); // //获取费用 // List costList = ptlAgreementProductCostsService.selectByCompanyId(iieb.getInsCompanyId(),filedList); // Map costMap = new HashMap(); // costList.stream().forEach(cost ->{ // costMap.put(cost.getProductName(),cost.getCostsProportion()); // }); // // InvInsExternalBillsDetails iiebd = new InvInsExternalBillsDetails(); // if (m.containsKey(a.getPlateNum())) { // iiebd = m.get(a.getPlateNum()); // // } else { // BeanUtil.copyProperties(a, iiebd); // } // // // //产品匹配 添加费用 // if(costMap.containsKey(a.getProductName())){ // if(a.getProductName().equals("单交")){ // iiebd.setMliftaCost(new BigDecimal(costMap.get(a.getProductName()))); // } // // } // // buildStandardDtoParam(a, iiebd); // m.put(a.getPlateNum(), iiebd); // }); // // } else if (iieb.getInsCompanyId().equals("000019")) { // //中煤 // List zmlist = ExcelUtils2.importExcel(file, InvInsChinaCoalExcelDto.class, 0, 1, 1); // zmlist.stream().forEach(a -> { // // InvInsExternalBillsDetails iiebd = new InvInsExternalBillsDetails(); // if (m.containsKey(a.getPlateNum())) { // iiebd = m.get(a.getPlateNum()); // // } else { // BeanUtil.copyProperties(a, iiebd); // } // buildChinaCoalDtoParam(a, iiebd); // m.put(a.getPlateNum(), iiebd); // }); // // } else { // //万家模板 // List wjlist = ExcelUtils2.importExcel(file, InvInsSimpleSysExcelDto.class, 0, 1, 1); // wjlist.stream().forEach(b -> { // // InvInsExternalBillsDetails iiebd = new InvInsExternalBillsDetails(); // if (m.containsKey(b.getPlateNum())) { // iiebd = m.get(b.getPlateNum()); // // } else { // BeanUtil.copyProperties(b, iiebd); // } // // buildSimpleSysDtoParam(b, iiebd); // // // m.put(b.getPlateNum(), iiebd); // // // }); // } //判断车牌号是否存在 保司 List listKey = m.keySet().stream().collect(Collectors.toList()); LambdaQueryWrapper lqw = new LambdaQueryWrapper(); lqw.select(InvInsExternalBillsDetails::getPlateNum); lqw.in(InvInsExternalBillsDetails::getPlateNum, listKey); //查询获取对象具体字段的集合 List longs = listObjs(lqw, new Function() { @Override public String apply(Object id) { return id.toString(); } }); List plateNumRepetitionList = list(lqw); if (plateNumRepetitionList.size() > 0 && plateNumRepetitionList.size() < 5) { throw new SystemException("车牌号已经存在:" + longs); } else if (plateNumRepetitionList.size() > 5) { throw new SystemException("大量车牌号已经存在"); } list = new ArrayList<>(m.values()); return list; } /** * 构造 中煤 dto参数 * * @author: lig * @date: 2023年07月10日 0010 */ void buildChinaCoalDtoParam(InvInsChinaCoalExcelDto dto, InvInsExternalBillsDetails iiebd) { iiebd.setStatus("0"); if (dto.getInsKindName().equals("机动车交通事故责任强制保险")) { iiebd.setMlifta(dto.getPremium()); iiebd.setVavt(dto.getVavt()); } else { //商业保费 iiebd.setCip(dto.getPremium()); //三者保额 iiebd.setTpi(dto.getTpi()); //三者保费 iiebd.setTpiCost(dto.getTpiPremium()); } } /** * 构造 简易系统(万家) dto参数 * * @author: lig * @date: 2023年07月10日 0010 */ void buildSimpleSysDtoParam(InvInsSimpleSysExcelDto simpleSysDto, InvInsExternalBillsDetails iiebd) { iiebd.setStatus("0"); if (StringUtils.isNotEmpty(simpleSysDto.getInsKindName()) && simpleSysDto.getInsKindName().equals("交强险")) { iiebd.setMlifta(simpleSysDto.getPremium()); iiebd.setVavt(simpleSysDto.getVavt()); } else { //商业保费 iiebd.setCip(simpleSysDto.getPremium()); // //三者保额 // iiebd.setTpi(simpleSysDto.getTpi()); // //三者保费 // iiebd.setTpiCost(simpleSysDto.getTpiPremium()); } } /** * 构造 标准模板 dto参数 * * @author: lig * @date: 2023-07-10 */ void buildStandardDtoParam(InvInsStandardExcelDto simpleSysDto, InvInsExternalBillsDetails iiebd) { iiebd.setInsHabit(simpleSysDto.getProductName()); iiebd.setStatus("0"); } }