From d53c34e999bed9cb93f8757aed161a4b590d64d1 Mon Sep 17 00:00:00 2001
From: whycxzp <perryhsu@163.com>
Date: 星期六, 09 九月 2023 15:06:30 +0800
Subject: [PATCH] 产品bom新增,添加两个字段-厂家规格和替料

---
 src/main/java/com/whyc/service/ProductService.java |  132 +++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 125 insertions(+), 7 deletions(-)

diff --git a/src/main/java/com/whyc/service/ProductService.java b/src/main/java/com/whyc/service/ProductService.java
index 6b813f1..5c3b5cc 100644
--- a/src/main/java/com/whyc/service/ProductService.java
+++ b/src/main/java/com/whyc/service/ProductService.java
@@ -26,6 +26,7 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Function;
 import java.util.function.Predicate;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 @Service
@@ -224,12 +225,23 @@
                 int lastRowNum = sheet.getLastRowNum();
                 //鍙栫涓夎,骞朵互绗笁琛屽紑濮�
                 Row row2 = sheet.getRow(1);
+                //鐜板湪瑙勫畾涓�17鍒�
                 short lastCellNum = row2.getLastCellNum();
+                if(lastCellNum !=18){
+                    return response.set(1, false, "涓婁紶鏂囦欢鐨刡om娓呭崟鍒楁暟涓嶅");
+                }
                 for (int k = 2; k < lastRowNum + 1; k++) {
                     if(k==2){
                         product.setParentCode(sheet.getRow(2).getCell(1).getStringCellValue());
                         product.setParentName(sheet.getRow(2).getCell(2).getStringCellValue());
-                        product.setParentModel(sheet.getRow(2).getCell(3).getStringCellValue());
+                        String parentModel = sheet.getRow(2).getCell(3).getStringCellValue();
+                        String regexStr = "[\\/*?\"|:<>\\\\ \t]";
+                        boolean matches = Pattern.compile(regexStr).matcher(parentModel).find();
+                        if(!matches) {
+                            product.setParentModel(parentModel);
+                        }else{
+                            return response.set(1,false,"姣嶆枡鍨嬪彿鍖呭惈闈炴硶瀛楃:\\/*?\"|:<>鎴栫┖鏍�");
+                        }
                     }
                     ProductBom bom = new ProductBom();
                     for (int j = 0; j < lastCellNum; j++) {
@@ -237,9 +249,9 @@
                         Cell cell = row.getCell(j);
                         String cellValue = null;
                         Double cellValueInt = 0d;
-                        if (j == 9 || j == 0) {
+                        if (j == 9 || j == 0) { //1鍜�10鍒椾负鏁板��
                             cellValueInt = cell.getNumericCellValue();
-                        } else if (j != 15) {
+                        } else if (j != 16) { //16鍒椾负鍥剧墖
                             cellValue = cell.getStringCellValue();
                         }
                         if(cellValue!=null) {
@@ -291,22 +303,26 @@
                             }
                             break;
                             case 11: {
-                                bom.setMaterial(cellValue);
+                                bom.setProducerSpecification(cellValue);
                             }
                             break;
                             case 12: {
-                                bom.setThickness(cellValue);
+                                bom.setMaterial(cellValue);
                             }
                             break;
                             case 13: {
-                                bom.setSurfaceDetail(cellValue);
+                                bom.setThickness(cellValue);
                             }
                             break;
                             case 14: {
-                                bom.setNotes(cellValue);
+                                bom.setSurfaceDetail(cellValue);
                             }
                             break;
                             case 15: {
+                                bom.setNotes(cellValue);
+                            }
+                            break;
+                            case 16: {
                                 /* 寮冪敤,涓嶉�傜敤浜� 鍥剧墖涓嶆寜椤哄簭鎽嗘斁鎯呭喌
                                 //鍥剧墖,浠�0寮�濮�,鍒板浘鐗噑ize涓烘
                                 int m = k - 2;
@@ -348,6 +364,16 @@
                                     fileOutputStream.write(data);
 
                                     bom.setPictureUrl(picturePathFront);
+                                }
+                            }
+                            break;
+                            case 17: {
+                                if(cellValue!=null && !cellValue.trim().equals("")) {
+                                    if(cellValue.contains(",") || cellValue.contains("锛�")){
+                                        bom.setRelatedMaterialCodes(cellValue);
+                                    }else{
+                                        return response.set(1, false, "涓婁紶鏂囦欢鐨刡om娓呭崟鍐呮浛鏂欐牸寮忎笉瀵�");
+                                    }
                                 }
                             }
                             break;
@@ -514,6 +540,95 @@
             }
         }
 
+        //鏌ヨ鏄惁bomList涓湁鏇挎枡
+        // 鏈夌殑璇�,妫�鏌ュ叧鑱旇〃涓槸鍚﹀凡瀛樺湪鎴栨湰鐗堟湰宸茬敓鏁�
+        List<MaterialProductHistory> newAddedList = new LinkedList<>();
+        List<MaterialProductHistory> versionUpdateList = new LinkedList<>();
+
+        List<MaterialProductHistory> mpListInDB = mphService.getListByParentCodeAndCustomCodeAndSubMaterialIdAndVersion(parentCode,customCode,bomList,currentVersion);
+        List<String> subMaterialListInDB = mpListInDB.stream().map(mp->mp.getSubMaterial().getSubCode()+"_"+mp.getSubMaterial().getSubModel()).collect(Collectors.toList());
+        bomList.forEach(bom->{
+            if(bom.getRelatedMaterialCodes()!=null) {
+                String relatedMaterialCodes = bom.getRelatedMaterialCodes().trim();
+                if (!relatedMaterialCodes.equals("")) {
+                    if (subMaterialListInDB.contains(bom.getSubCode()+"_"+bom.getSubModel())) { //褰撳墠鐗╂枡鏈夋浛浠f枡
+                        String[] relatedList;
+                        if (relatedMaterialCodes.contains(",")) {
+                            relatedList = relatedMaterialCodes.split(",");
+                        } else {
+                            relatedList = relatedMaterialCodes.split("锛�");
+                        }
+                        for (String related : relatedList) {
+                            bom.setRelatedMaterialCodes(related);
+                            boolean exists = false;
+                            for (MaterialProductHistory mp : mpListInDB) {
+                                //鐗╂枡鐩稿悓,鏇夸唬鏂欑浉鍚�
+                                if ((mp.getSubMaterial().getSubCode()+"_"+mp.getSubMaterial().getSubModel()).equals(bom.getSubCode()+"_"+bom.getSubModel())
+                                        && mp.getRelatedSubMaterial().getSubCode().equals(related)) {
+                                    //鍙彲鑳藉瓨鍦�0 鍜� 1 鐨勬儏鍐�,鍥犱负鏌ヨ鐨勬槸 >=涓婁釜鐗堟湰
+                                    if (nextVersion - mp.getEVersion() == 0) { //宸插瓨鍦�,鏃犻渶娣诲姞
+                                        //break;
+                                    } else if (nextVersion - mp.getEVersion() == 1) {  //鏇存柊鍒板綋鍓嶇増鏈�
+                                        mp.setEVersion(nextVersion);
+                                        versionUpdateList.add(mp);
+                                    }
+                                    exists = true;
+                                }
+                            }
+                            if(!exists) { //涓嶅瓨鍦ㄧ浉閭诲強鐩稿悓鐨勮褰曠増鏈�,鏂板
+                                MaterialProductHistory newTemp = new MaterialProductHistory();
+                                newTemp.setParentCode(parentCode);
+                                newTemp.setCustomCode(customCode);
+                                newTemp.setSubCode(bom.getSubCode());
+                                Material material = mService.getByCodeAndModel(bom.getSubCode(), bom.getSubModel());
+                                newTemp.setSubMaterialId(material.getId());
+                                newTemp.setSVersion(nextVersion);
+                                newTemp.setEVersion(nextVersion);
+                                newTemp.setQuantity(bom.getQuantity());
+                                //2323-09-08 涓庢潹绾㈠叞寰俊纭<灏辨寜鐓ф垜涓婁紶娓呭崟鐨勬椂闂达紝绯荤粺閲屾渶鏂扮殑鏄暐鍨嬪彿锛屽氨鍙栦粈涔堝瀷鍙�>
+                                Material relatedMaterial = mService.getLastByCode(related);
+                                newTemp.setMaterialId(relatedMaterial.getId());
+                                newTemp.setCreateTime(date);
+                                newAddedList.add(newTemp);
+                            }
+                        }
+                    }
+                    else{
+                        String[] relatedList;
+                        if (relatedMaterialCodes.contains(",")) {
+                            relatedList = relatedMaterialCodes.split(",");
+                        } else {
+                            relatedList = relatedMaterialCodes.split("锛�");
+                        }
+                        for (String related : relatedList) {
+                            MaterialProductHistory newTemp = new MaterialProductHistory();
+                            newTemp.setParentCode(parentCode);
+                            newTemp.setCustomCode(customCode);
+                            newTemp.setSubCode(bom.getSubCode());
+                            Material material = mService.getByCodeAndModel(bom.getSubCode(), bom.getSubModel());
+                            newTemp.setSubMaterialId(material.getId());
+                            newTemp.setSVersion(nextVersion);
+                            newTemp.setEVersion(nextVersion);
+                            newTemp.setQuantity(bom.getQuantity());
+                            //2323-09-08 涓庢潹绾㈠叞寰俊纭<灏辨寜鐓ф垜涓婁紶娓呭崟鐨勬椂闂达紝绯荤粺閲屾渶鏂扮殑鏄暐鍨嬪彿锛屽氨鍙栦粈涔堝瀷鍙�>
+                            Material relatedMaterial = mService.getLastByCode(related);
+                            newTemp.setMaterialId(relatedMaterial.getId());
+                            newTemp.setCreateTime(date);
+                            newAddedList.add(newTemp);
+                        }
+                    }
+                }
+            }
+        });
+        //鎵ц鏇存柊
+        if(newAddedList.size()!=0) {
+            mphService.insertBatch(newAddedList);
+        }
+        if(versionUpdateList.size()!=0) {
+            mphService.updateVersionBatch(versionUpdateList);
+        }
+
+
         //灏嗕骇鍝佹枃浠跺鍒惰嚦姝e紡璺緞
         //鏂囦欢杞Щ,鏈窡瀛愪欢鎸傞挬鐨勬墍鏈夊浘绾稿浘鐗囪浆绉诲埌浜у搧鐗堟湰涓�:doc_file/product/{浜у搧鍨嬪彿}/standard鎴栬�厈customCode}}/{version}/
         //璺熷瓙浠舵寕閽╃殑杞Щ鍒板瓙浠跺浘绾镐笅:doc_file/material/
@@ -561,6 +676,7 @@
                 bomHistory.setMaterial(bom.getMaterial());
                 bomHistory.setNotes(bom.getNotes());
                 bomHistory.setProducer(bom.getProducer());
+                bomHistory.setProducerSpecification(bom.getProducerSpecification());
                 bomHistory.setSurfaceDetail(bom.getSurfaceDetail());
                 bomHistory.setThickness(bom.getThickness());
                 bomHistory.setSubSVersion(1);
@@ -795,6 +911,7 @@
                 bom.setMaterial(bomMaterial.getMaterial());
                 bom.setNotes(bomMaterial.getNotes());
                 bom.setProducer(bomMaterial.getProducer());
+                bom.setProducerSpecification(bomMaterial.getProducerSpecification());
                 bom.setSurfaceDetail(bomMaterial.getSurfaceDetail());
                 bom.setThickness(bomMaterial.getThickness());
                 bom.setSubVersion(1);
@@ -814,6 +931,7 @@
                 bomHistory.setMaterial(bomMaterial.getMaterial());
                 bomHistory.setNotes(bomMaterial.getNotes());
                 bomHistory.setProducer(bomMaterial.getProducer());
+                bomHistory.setProducerSpecification(bomMaterial.getProducerSpecification());
                 bomHistory.setSurfaceDetail(bomMaterial.getSurfaceDetail());
                 bomHistory.setThickness(bomMaterial.getThickness());
                 bomHistory.setSubSVersion(1);

--
Gitblit v1.9.1