|  |  |  | 
|---|
|  |  |  | package com.vincent.rsf.server.manager.service.impl; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import cn.afterturn.easypoi.excel.ExcelImportUtil; | 
|---|
|  |  |  | import cn.afterturn.easypoi.excel.entity.result.ExcelImportResult; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 
|---|
|  |  |  | import com.vincent.rsf.framework.common.R; | 
|---|
|  |  |  | import com.vincent.rsf.framework.exception.CoolException; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.enums.OrderSourceType; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.enums.OrderType; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.enums.OrderWorkType; | 
|---|
|  |  |  | import com.vincent.rsf.server.common.utils.ExcelUtil; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.entity.Companys; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.entity.Matnr; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.entity.Purchase; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.entity.excel.PurchaseTemplate; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.enums.CompanysType; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.mapper.PurchaseItemMapper; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.entity.PurchaseItem; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.service.CompanysService; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.service.MatnrService; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.service.PurchaseItemService; | 
|---|
|  |  |  | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | 
|---|
|  |  |  | import com.vincent.rsf.server.manager.service.PurchaseService; | 
|---|
|  |  |  | import com.vincent.rsf.server.system.constant.SerialRuleCode; | 
|---|
|  |  |  | import com.vincent.rsf.server.system.utils.SerialRuleUtils; | 
|---|
|  |  |  | import org.apache.commons.lang3.StringUtils; | 
|---|
|  |  |  | import org.springframework.beans.BeanUtils; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.stereotype.Service; | 
|---|
|  |  |  | import org.springframework.transaction.annotation.Transactional; | 
|---|
|  |  |  | import org.springframework.web.multipart.MultipartFile; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.text.SimpleDateFormat; | 
|---|
|  |  |  | import java.util.*; | 
|---|
|  |  |  | import java.util.stream.Collectors; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Service("purchaseItemService") | 
|---|
|  |  |  | public class PurchaseItemServiceImpl extends ServiceImpl<PurchaseItemMapper, PurchaseItem> implements PurchaseItemService { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private PurchaseService purchaseService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private MatnrService matnrService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private CompanysService companysService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * @author Ryan | 
|---|
|  |  |  | * @date 2025/5/6 | 
|---|
|  |  |  | * @description: PO单导入功能 | 
|---|
|  |  |  | * @version 1.0 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | @Transactional(rollbackFor = Exception.class) | 
|---|
|  |  |  | public R excelImport(MultipartFile file, Long loginUserId) throws Exception { | 
|---|
|  |  |  | ExcelImportResult result = ExcelImportUtil.importExcelMore(file.getInputStream(), PurchaseTemplate.class, ExcelUtil.getDefaultImportParams()); | 
|---|
|  |  |  | if (result.getList().isEmpty()) { | 
|---|
|  |  |  | throw new CoolException("物料导入失败!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (result.getList().isEmpty()) { | 
|---|
|  |  |  | throw new CoolException("表格内容不能为空!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<PurchaseTemplate> resultList = result.getList(); | 
|---|
|  |  |  | Map<String, List<PurchaseTemplate>> listMap = resultList.stream().collect(Collectors.groupingBy(PurchaseTemplate::getPoCode)); | 
|---|
|  |  |  | for (String key : listMap.keySet()) { | 
|---|
|  |  |  | List<PurchaseTemplate> list = listMap.get(key); | 
|---|
|  |  |  | Purchase serviceOne = purchaseService.getOne(new LambdaQueryWrapper<Purchase>().eq(Purchase::getCode, key)); | 
|---|
|  |  |  | if (!Objects.isNull(serviceOne)) { | 
|---|
|  |  |  | //                return R.error(serviceOne.getCode() +  "单据已存在!!"); | 
|---|
|  |  |  | throw new CoolException(serviceOne.getCode() +  "单据已存在!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | PurchaseTemplate template = list.stream().findFirst().get(); | 
|---|
|  |  |  | Purchase purchase = new Purchase(); | 
|---|
|  |  |  | SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); | 
|---|
|  |  |  | Date date = dateFormat.parse(template.getArrTime()); | 
|---|
|  |  |  | BeanUtils.copyProperties(template, purchase); | 
|---|
|  |  |  | purchase.setCode(template.getPoCode()); | 
|---|
|  |  |  | if (StringUtils.isBlank(template.getPoCode())) { | 
|---|
|  |  |  | String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_ORDER_PO_CODE, purchase); | 
|---|
|  |  |  | purchase.setCode(ruleCode); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | purchase.setType(OrderType.getTypeVal(template.getType())) | 
|---|
|  |  |  | .setWkType(OrderWorkType.getWorkType(template.getWkType())) | 
|---|
|  |  |  | .setSource(OrderSourceType.ORDER_SOURCE_TYPE_EXCEL.desc) | 
|---|
|  |  |  | .setPreArr(date) | 
|---|
|  |  |  | .setCreateBy(loginUserId) | 
|---|
|  |  |  | .setUpdateBy(loginUserId); | 
|---|
|  |  |  | if (!purchaseService.save(purchase)) { | 
|---|
|  |  |  | throw new CoolException("主单保存失败!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<PurchaseItem> items = new ArrayList<>(); | 
|---|
|  |  |  | for (PurchaseTemplate purchaseTemplate : list) { | 
|---|
|  |  |  | PurchaseItem item = new PurchaseItem(); | 
|---|
|  |  |  | if (StringUtils.isBlank(purchaseTemplate.getMatnrCode())) { | 
|---|
|  |  |  | throw new CoolException(purchaseTemplate.getPoCode() + ":物料编码不能为空!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Matnr matnr = matnrService.getOne(new LambdaQueryWrapper<Matnr>().eq(Matnr::getCode, purchaseTemplate.getMatnrCode())); | 
|---|
|  |  |  | if (Objects.isNull(matnr)) { | 
|---|
|  |  |  | throw new CoolException(purchaseTemplate.getMatnrCode() + "物料不存在!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | item.setMatnrName(matnr.getName()) | 
|---|
|  |  |  | .setMatnrCode(matnr.getCode()) | 
|---|
|  |  |  | .setPlatItemId(purchaseTemplate.getPlatItemId()) | 
|---|
|  |  |  | .setAnfme(purchaseTemplate.getAnfme()) | 
|---|
|  |  |  | .setPurchaseId(purchase.getId()) | 
|---|
|  |  |  | .setUnit(matnr.getUnit()) | 
|---|
|  |  |  | .setNromQty(matnr.getNromNum()) | 
|---|
|  |  |  | .setSplrBatch(purchaseTemplate.getSplrBatch()) | 
|---|
|  |  |  | .setCreateBy(loginUserId) | 
|---|
|  |  |  | .setUpdateBy(loginUserId); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (StringUtils.isNotBlank(purchaseTemplate.getSplrCode())) { | 
|---|
|  |  |  | Companys companys = companysService.getOne(new LambdaQueryWrapper<Companys>() | 
|---|
|  |  |  | .eq(Companys::getType, CompanysType.COMPANYS_TYPE_SUPPLIER.val) | 
|---|
|  |  |  | .eq(Companys::getCode, purchaseTemplate.getSplrCode())); | 
|---|
|  |  |  | if (!Objects.isNull(companys)) { | 
|---|
|  |  |  | item.setSplrCode(companys.getCode()).setSplrName(companys.getName()); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | throw new CoolException("供应商:" + template.getSplrName() + "不存在!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | throw new CoolException("供应商不能为空!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!this.save(item)) { | 
|---|
|  |  |  | throw new CoolException("单据明细保存失败!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | items.add(item); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | double anfmes = items.stream().mapToDouble(PurchaseItem::getAnfme).sum(); | 
|---|
|  |  |  | purchase.setAnfme(anfmes); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!purchaseService.updateById(purchase)) { | 
|---|
|  |  |  | throw new CoolException("主单数量修改失败!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return R.ok("导入成功!!"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|