From f5b4f189e460480a96acf3d1864344d8d5d92695 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期三, 07 五月 2025 10:18:57 +0800 Subject: [PATCH] PO单模板优化 ASN单模板优化 --- rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/PurchaseItemServiceImpl.java | 125 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 125 insertions(+), 0 deletions(-) diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/PurchaseItemServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/PurchaseItemServiceImpl.java index 6b36072..552b351 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/PurchaseItemServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/PurchaseItemServiceImpl.java @@ -1,12 +1,137 @@ 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.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(); + 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) + .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, template.getMatnrCode())); + if (Objects.isNull(matnr)) { + throw new CoolException(template.getMatnrCode() + "鐗╂枡涓嶅瓨鍦紒锛�"); + } + item.setMatnrName(matnr.getName()) + .setMatnrCode(matnr.getCode()) + .setPlatItemId(template.getPlatItemId()) + .setAnfme(template.getAnfme()) + .setPurchaseId(purchase.getId()) + .setNromQty(matnr.getNromNum()) + .setSplrBatch(template.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, template.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(); + double qty = items.stream().mapToDouble(PurchaseItem::getQty).sum(); + purchase.setAnfme(anfmes).setQty(qty); + + if (!purchaseService.updateById(purchase)) { + throw new CoolException("涓诲崟鏁伴噺淇敼澶辫触锛侊紒"); + } + } + return R.ok("瀵煎叆鎴愬姛锛侊紒"); + } } -- Gitblit v1.9.1