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.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ydtech.core.page.BasePageVO; import com.ydtech.core.page.PageResult; import com.ydtech.exception.SystemException; import com.ydtech.modules.admin.model.SysUser; import com.ydtech.modules.esm.model.EsmInsCompany; import com.ydtech.modules.esm.service.EsmInsCompanyService; import com.ydtech.modules.inv.dao.InvChannelsExternalBillsDetailsMapper; import com.ydtech.modules.inv.model.InvChannelsExternalBillsDetails; import com.ydtech.modules.inv.model.InvExternalBills; import com.ydtech.modules.inv.model.InvInsExternalBillsDetails; import com.ydtech.modules.inv.model.dto.InvInsChannelExcelDto; import com.ydtech.modules.inv.model.vo.req.InvChannelExternalBillsDetailsReqVO; import com.ydtech.modules.inv.model.vo.res.InvBaseChannelMatchInsResVO; import com.ydtech.modules.inv.model.vo.res.InvChannelMatchInsResVO; import com.ydtech.modules.inv.model.vo.res.InvCompanyResVO; import com.ydtech.modules.inv.service.InvChannelsExternalBillsDetailsService; import com.ydtech.modules.inv.service.InvExternalBillsService; import com.ydtech.utils.StringUtils; import com.ydtech.utils.excel.ExcelUtils2; 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; @Service public class InvChannelsExternalBillsDetailsServiceImpl extends ServiceImpl implements InvChannelsExternalBillsDetailsService { @Resource InvExternalBillsService invExternalBillsService; @Resource private EsmInsCompanyService esmInsCompanyService; @Override public PageResult gainChannelMatchIns(InvChannelExternalBillsDetailsReqVO reqVo) { //获取总数量 int total = super.baseMapper.gainChannelMatchInsCount(reqVo); // //计算mysql分页起索引 // int firstIndex = reqVo.getPageNum()==1?0:(reqVo.getPageNum()-1) * reqVo.getPageSize() +1; // //计算mysql分页总页数 // int totalPages = total % reqVo.getPageSize() == 0?total / reqVo.getPageSize():total / reqVo.getPageSize() +1; // PageResult pr = new PageResult(); // pr.setPageNum(reqVo.getPageNum()); // pr.setPageSize(reqVo.getPageSize()); // pr.setTotalSize(total); // pr.setTotalPages(totalPages); //请求替换分页开始索引 reqVo.setPageNum(PageResult.buildPageLimitStart(reqVo)); List resVOList = super.baseMapper.gainChannelMatchIns(reqVo); return PageResult.buildPageResult(reqVo, total, resVOList); } @Override public boolean deleteByBatchNum(String batchNum) { LambdaQueryWrapper lqw = new LambdaQueryWrapper(); lqw.eq(InvChannelsExternalBillsDetails::getBatchNum, batchNum); return remove(lqw); } @Override public InvExternalBills importData(MultipartFile file, InvExternalBills iieb) { String errorMsg = ""; List list = null; try { List dtoList = ExcelUtils2.importExcel(file, InvInsChannelExcelDto.class, 0, 1, 1); dtoList = dtoList.stream().filter(l -> l.getPlateNum() != null).collect(Collectors.toList()); if(null == dtoList || dtoList.size() < 1){ errorMsg = "导入失败!匹配数据 0 条"; } Map m = new HashMap(); dtoList.stream().forEach(a ->{ InvChannelsExternalBillsDetails icebd = new InvChannelsExternalBillsDetails(); if (m.containsKey(a.getPlateNum())) { icebd = m.get(a.getPlateNum()); } else { BeanUtil.copyProperties(a, icebd); //对应保险公司 EsmInsCompany insCompany = esmInsCompanyService.findInsCompanyByName(a.getInsCompany()); if(null == insCompany)throw new SystemException("保险公司:" + a.getInsCompany() + "不匹配"); icebd.setInsCompanyId(insCompany.getId()); icebd.setInsCompany(insCompany.getName()); icebd.setMliftaCost(a.getMliftaCost()); icebd.setStatus("1"); } m.put(a.getPlateNum(), icebd); }); //获取车牌号list List listKey = m.keySet().stream().collect(Collectors.toList()); //获取车牌号重复的list 渠道 List longs = gainPlateNumRepetitionList(listKey); if(longs.size() > 0){ errorMsg = "车牌号已经存在:"+longs; // throw new SystemException("车牌号已经存在:"+longs); }else{ list = new ArrayList<>(m.values()); } } catch (IOException e) { errorMsg = "导入失败!" + e.getMessage(); } if (StringUtils.isNotEmpty(errorMsg)) { iieb.setImportStatus("0"); iieb.setErrorMsg(errorMsg); } else { BigDecimal totalMlifta = BigDecimal.ZERO; BigDecimal totalVavt = BigDecimal.ZERO; BigDecimal totalCip = BigDecimal.ZERO; for (int i = 0; i < list.size(); i++) { list.get(i).setBatchNum(iieb.getId()); totalMlifta = totalMlifta.add(list.get(i).getMlifta()); } boolean boo = saveBatch(list); iieb.setInventoryQuantity(list.size()); iieb = InvExternalBills.buildImportInvExternalBills(iieb, boo, totalMlifta, totalVavt, totalCip); } return iieb; // invExternalBillsService.updateById(iieb); } @Override public void pay(List ids, SysUser user) { //更新批次号状态 LambdaUpdateWrapper luw = new LambdaUpdateWrapper<>(); luw.set(InvChannelsExternalBillsDetails::getStatus,"2"); luw.set(InvChannelsExternalBillsDetails::getPayOperatorId,user.getId()); luw.set(InvChannelsExternalBillsDetails::getPayOperator,user.getName()); luw.in(InvChannelsExternalBillsDetails::getId,ids); update(luw); } /** * 获取车牌号重复的list 渠道 * * @author: lig * @date: 2023年07月07日 0007 */ private List gainPlateNumRepetitionList(List listKey){ LambdaQueryWrapper lqw = new LambdaQueryWrapper(); lqw.select(InvChannelsExternalBillsDetails::getPlateNum); lqw.in(InvChannelsExternalBillsDetails::getPlateNum,listKey); //查询获取对象具体字段的集合 List longs = listObjs(lqw, new Function() { @Override public String apply(Object id) { return id.toString(); } }); return longs; } }