InvChannelsExternalBillsDetailsServiceImpl.java 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. package com.ydtech.modules.inv.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  5. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  6. import com.ydtech.core.page.BasePageVO;
  7. import com.ydtech.core.page.PageResult;
  8. import com.ydtech.exception.SystemException;
  9. import com.ydtech.modules.admin.model.SysUser;
  10. import com.ydtech.modules.esm.model.EsmInsCompany;
  11. import com.ydtech.modules.esm.service.EsmInsCompanyService;
  12. import com.ydtech.modules.inv.dao.InvChannelsExternalBillsDetailsMapper;
  13. import com.ydtech.modules.inv.model.InvChannelsExternalBillsDetails;
  14. import com.ydtech.modules.inv.model.InvExternalBills;
  15. import com.ydtech.modules.inv.model.InvInsExternalBillsDetails;
  16. import com.ydtech.modules.inv.model.dto.InvInsChannelExcelDto;
  17. import com.ydtech.modules.inv.model.vo.req.InvChannelExternalBillsDetailsReqVO;
  18. import com.ydtech.modules.inv.model.vo.res.InvBaseChannelMatchInsResVO;
  19. import com.ydtech.modules.inv.model.vo.res.InvChannelMatchInsResVO;
  20. import com.ydtech.modules.inv.model.vo.res.InvCompanyResVO;
  21. import com.ydtech.modules.inv.service.InvChannelsExternalBillsDetailsService;
  22. import com.ydtech.modules.inv.service.InvExternalBillsService;
  23. import com.ydtech.utils.StringUtils;
  24. import com.ydtech.utils.excel.ExcelUtils2;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.stereotype.Service;
  27. import org.springframework.web.multipart.MultipartFile;
  28. import javax.annotation.Resource;
  29. import java.io.IOException;
  30. import java.math.BigDecimal;
  31. import java.util.ArrayList;
  32. import java.util.HashMap;
  33. import java.util.List;
  34. import java.util.Map;
  35. import java.util.function.Function;
  36. import java.util.stream.Collectors;
  37. @Service
  38. public class InvChannelsExternalBillsDetailsServiceImpl extends ServiceImpl<InvChannelsExternalBillsDetailsMapper, InvChannelsExternalBillsDetails>
  39. implements InvChannelsExternalBillsDetailsService {
  40. @Resource
  41. InvExternalBillsService invExternalBillsService;
  42. @Resource
  43. private EsmInsCompanyService esmInsCompanyService;
  44. @Override
  45. public PageResult<InvBaseChannelMatchInsResVO> gainChannelMatchIns(InvChannelExternalBillsDetailsReqVO reqVo) {
  46. //获取总数量
  47. int total = super.baseMapper.gainChannelMatchInsCount(reqVo);
  48. // //计算mysql分页起索引
  49. // int firstIndex = reqVo.getPageNum()==1?0:(reqVo.getPageNum()-1) * reqVo.getPageSize() +1;
  50. // //计算mysql分页总页数
  51. // int totalPages = total % reqVo.getPageSize() == 0?total / reqVo.getPageSize():total / reqVo.getPageSize() +1;
  52. // PageResult pr = new PageResult();
  53. // pr.setPageNum(reqVo.getPageNum());
  54. // pr.setPageSize(reqVo.getPageSize());
  55. // pr.setTotalSize(total);
  56. // pr.setTotalPages(totalPages);
  57. //请求替换分页开始索引
  58. reqVo.setPageNum(PageResult.buildPageLimitStart(reqVo));
  59. List<InvBaseChannelMatchInsResVO> resVOList = super.baseMapper.gainChannelMatchIns(reqVo);
  60. return PageResult.buildPageResult(reqVo, total, resVOList);
  61. }
  62. @Override
  63. public boolean deleteByBatchNum(String batchNum) {
  64. LambdaQueryWrapper<InvChannelsExternalBillsDetails> lqw = new LambdaQueryWrapper();
  65. lqw.eq(InvChannelsExternalBillsDetails::getBatchNum, batchNum);
  66. return remove(lqw);
  67. }
  68. @Override
  69. public InvExternalBills importData(MultipartFile file, InvExternalBills iieb) {
  70. String errorMsg = "";
  71. List<InvChannelsExternalBillsDetails> list = null;
  72. try {
  73. List<InvInsChannelExcelDto> dtoList = ExcelUtils2.importExcel(file, InvInsChannelExcelDto.class, 0, 1, 1);
  74. dtoList = dtoList.stream().filter(l -> l.getPlateNum() != null).collect(Collectors.toList());
  75. if(null == dtoList || dtoList.size() < 1){
  76. errorMsg = "导入失败!匹配数据 0 条";
  77. }
  78. Map<String, InvChannelsExternalBillsDetails> m = new HashMap();
  79. dtoList.stream().forEach(a ->{
  80. InvChannelsExternalBillsDetails icebd = new InvChannelsExternalBillsDetails();
  81. if (m.containsKey(a.getPlateNum())) {
  82. icebd = m.get(a.getPlateNum());
  83. } else {
  84. BeanUtil.copyProperties(a, icebd);
  85. //对应保险公司
  86. EsmInsCompany insCompany = esmInsCompanyService.findInsCompanyByName(a.getInsCompany());
  87. if(null == insCompany)throw new SystemException("保险公司:" + a.getInsCompany() + "不匹配");
  88. icebd.setInsCompanyId(insCompany.getId());
  89. icebd.setInsCompany(insCompany.getName());
  90. icebd.setMliftaCost(a.getMliftaCost());
  91. icebd.setStatus("1");
  92. }
  93. m.put(a.getPlateNum(), icebd);
  94. });
  95. //获取车牌号list
  96. List<String> listKey = m.keySet().stream().collect(Collectors.toList());
  97. //获取车牌号重复的list 渠道
  98. List<String> longs = gainPlateNumRepetitionList(listKey);
  99. if(longs.size() > 0){
  100. errorMsg = "车牌号已经存在:"+longs;
  101. // throw new SystemException("车牌号已经存在:"+longs);
  102. }else{
  103. list = new ArrayList<>(m.values());
  104. }
  105. } catch (IOException e) {
  106. errorMsg = "导入失败!" + e.getMessage();
  107. }
  108. if (StringUtils.isNotEmpty(errorMsg)) {
  109. iieb.setImportStatus("0");
  110. iieb.setErrorMsg(errorMsg);
  111. } else {
  112. BigDecimal totalMlifta = BigDecimal.ZERO;
  113. BigDecimal totalVavt = BigDecimal.ZERO;
  114. BigDecimal totalCip = BigDecimal.ZERO;
  115. for (int i = 0; i < list.size(); i++) {
  116. list.get(i).setBatchNum(iieb.getId());
  117. totalMlifta = totalMlifta.add(list.get(i).getMlifta());
  118. }
  119. boolean boo = saveBatch(list);
  120. iieb.setInventoryQuantity(list.size());
  121. iieb = InvExternalBills.buildImportInvExternalBills(iieb, boo, totalMlifta, totalVavt, totalCip);
  122. }
  123. return iieb;
  124. // invExternalBillsService.updateById(iieb);
  125. }
  126. @Override
  127. public void pay(List<String> ids, SysUser user) {
  128. //更新批次号状态
  129. LambdaUpdateWrapper<InvChannelsExternalBillsDetails> luw = new LambdaUpdateWrapper<>();
  130. luw.set(InvChannelsExternalBillsDetails::getStatus,"2");
  131. luw.set(InvChannelsExternalBillsDetails::getPayOperatorId,user.getId());
  132. luw.set(InvChannelsExternalBillsDetails::getPayOperator,user.getName());
  133. luw.in(InvChannelsExternalBillsDetails::getId,ids);
  134. update(luw);
  135. }
  136. /**
  137. * 获取车牌号重复的list 渠道
  138. *
  139. * @author: lig
  140. * @date: 2023年07月07日 0007
  141. */
  142. private List<String> gainPlateNumRepetitionList(List<String> listKey){
  143. LambdaQueryWrapper<InvChannelsExternalBillsDetails> lqw = new LambdaQueryWrapper();
  144. lqw.select(InvChannelsExternalBillsDetails::getPlateNum);
  145. lqw.in(InvChannelsExternalBillsDetails::getPlateNum,listKey);
  146. //查询获取对象具体字段的集合
  147. List<String> longs = listObjs(lqw, new Function<Object, String>() {
  148. @Override
  149. public String apply(Object id) {
  150. return id.toString();
  151. }
  152. });
  153. return longs;
  154. }
  155. }