From dc60b3451a2984722c01a5991e5b904b8bd44f0d Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期三, 07 五月 2025 21:30:33 +0800
Subject: [PATCH] 组绑解绑

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/PurchaseItemServiceImpl.java |  106 +++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 102 insertions(+), 4 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 15131db..29370c0 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
@@ -2,23 +2,49 @@
 
 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.excel.AsnOrderTemplate;
+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.io.IOException;
-import java.util.HashMap;
+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
@@ -27,6 +53,7 @@
      * @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()) {
@@ -35,9 +62,80 @@
         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, 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())
+                        .setUnit(matnr.getUnit())
+                        .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();
+            purchase.setAnfme(anfmes);
 
-        return null;
+           if (!purchaseService.updateById(purchase)) {
+               throw new CoolException("涓诲崟鏁伴噺淇敼澶辫触锛侊紒");
+           }
+        }
+        return R.ok("瀵煎叆鎴愬姛锛侊紒");
     }
 }

--
Gitblit v1.9.1