From 0fc7f00553649eb30e403f17cbcbd1b9cbbd9658 Mon Sep 17 00:00:00 2001
From: whycxzp <perryhsu@163.com>
Date: 星期四, 01 九月 2022 10:47:44 +0800
Subject: [PATCH] 产品bom新增更新

---
 src/main/java/com/whyc/service/ProductService.java |  199 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 197 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/whyc/service/ProductService.java b/src/main/java/com/whyc/service/ProductService.java
index 8d58e34..276d3bd 100644
--- a/src/main/java/com/whyc/service/ProductService.java
+++ b/src/main/java/com/whyc/service/ProductService.java
@@ -17,6 +17,7 @@
 import org.apache.poi.ss.usermodel.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.FileCopyUtils;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.*;
@@ -25,6 +26,7 @@
 import java.util.Date;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 public class ProductService {
@@ -37,6 +39,14 @@
     @Autowired
     private MaterialProductHistoryService mphService;
 
+    @Autowired
+    private ProductBomService pbService;
+
+    @Autowired
+    private ProductBomHistoryService pbhService;
+
+    @Autowired
+    private MaterialService mService;
 
     //鏌ヨ鍑烘墍鏈夌殑浜у搧淇℃伅(鍒嗛〉鍔犳ā绯婃煡璇�<浜у搧鐨勭紪鐮侊紝鍨嬪彿锛屽悕瀛楋紝瀹氬埗琛ㄧ紪鍙�>
     public Response getAllProduct(String parentCode, String parentName, String parentModel, String customCode, int pageCurr, int pageSize) {
@@ -276,6 +286,9 @@
     public Response add(Product product) {
         String parentCode = product.getParentCode();
         String customCode = product.getCustomCode();
+        String parentModel = product.getParentModel();
+        List<ProductBom> bomList = product.getBomList();
+        String fileUrl = product.getFileUrl();
         //鏌ヨ浜у搧鏈�鏂扮殑鐗堟湰鍙�
         ProductHistory latestProduct = phService.getLatestVersion(parentCode, customCode);
         ProductHistory enabledProduct = phService.getEnabledByParentCodeAndCustomCode(parentCode, customCode);
@@ -302,9 +315,191 @@
         }
 
         //灏嗕骇鍝佹枃浠跺鍒惰嚦姝e紡璺緞
+        //鏂囦欢杞Щ,鏈窡瀛愪欢鎸傞挬鐨勬墍鏈夊浘绾稿浘鐗囪浆绉诲埌浜у搧鐗堟湰涓�:doc_file/product/{浜у搧鍨嬪彿}/standard鎴栬�厈customCode}}/{version}/
+        //璺熷瓙浠舵寕閽╃殑杞Щ鍒板瓙浠跺浘绾镐笅:doc_file/material/
+        File file = new File(fileUrl);
+        List<String> fileUrlList = new LinkedList<>();
+        List<String> dwgUrlList = null;
+        List<String> picUrlList = null;
+        //瀛樹簬鐗╂枡涓�,bom鍐呮湁瀵瑰簲
+        List<String> materialUrlList = new LinkedList<>();
+        //瀛樹簬浜у搧涓�,bom鍐呮病瀵瑰簲
+        List<String> productUrlList = new LinkedList<>();
 
-        //鐗╂枡琛ㄤ腑涓嶅瓨鍦ㄧ殑,鍒欐坊鍔犲埌鐗╂枡琛ㄤ腑鍘�(鍖呭惈product杩欎釜鐗╂枡)
+        //List<Material> materialDwgUrlNameList = new LinkedList<>();
 
-        return null;
+        fileUrlList = FileUtil.getStaticFilePath(file,fileUrlList);
+        //鍥剧焊dwg 瀛愪欢/浜у搧
+        dwgUrlList = fileUrlList.stream().filter(url->url.contains(".dwg")).collect(Collectors.toList());
+        picUrlList = fileUrlList.stream().filter(url->url.contains(".png") || url.contains(".jpeg")).collect(Collectors.toList());
+
+        dwgUrlList.forEach(dwgUrl->{
+            boolean existFlag = false;
+            for (ProductBom bom :bomList){
+                String filename = dwgUrl.substring(dwgUrl.lastIndexOf(File.separator) + 1, dwgUrl.length() - 4);
+                String fileFullName = dwgUrl.substring(dwgUrl.lastIndexOf(File.separator) + 1);
+                if(bom.getSubModel().toUpperCase().equals(filename.toUpperCase())){
+                    materialUrlList.add(dwgUrl);
+                    existFlag = true;
+
+
+                    bom.setDwgUrl("doc_file" + File.separator + "material"
+                            + File.separator + fileFullName);
+                    break;
+                }
+            }
+            if(!existFlag) {
+                productUrlList.add(dwgUrl);
+            }
+        });
+
+        //涓�瀹氭槸鏈夊搴旂墿鏂欑殑,浠巄om鍐呭墺绂荤殑
+        picUrlList.forEach(picUrl->{
+            for (ProductBom bom :bomList){
+                String filename = picUrl.substring(picUrl.lastIndexOf(File.separator) + 1,picUrl.lastIndexOf("."));
+                String fileFullName = picUrl.substring(picUrl.lastIndexOf(File.separator) + 1);
+                if(bom.getSubModel().toUpperCase().equals(filename.toUpperCase())){
+                    bom.setPictureUrl("doc_file" + File.separator + "material"
+                            + File.separator + fileFullName);
+                    break;
+                }
+            }
+        });
+
+        //杞Щ璺緞
+        String projectDir = CommonUtil.getProjectDir();
+        //doc_file/product/{浜у搧鍨嬪彿}/standard鎴栬�厈customCode}}/{version}/
+        //璺熷瓙浠舵寕閽╃殑杞Щ鍒板瓙浠跺浘绾镐笅:doc_file/material/
+        String customCodeString = null;
+        if(customCode!=null && !customCode.equals("")) {
+            customCodeString = customCode;
+        }else{
+            customCodeString = "standard";
+        }
+        String productDir = projectDir + File.separator + "doc_file" + File.separator + "product" + File.separator + parentModel
+                + File.separator + customCodeString + File.separator +nextVersion;
+        String materialDir = projectDir + File.separator + "doc_file" + File.separator + "material";
+        File productDirFile = new File(productDir);
+        File materialFile = new File(materialDir);
+        if(!productDirFile.exists()){
+            productDirFile.mkdirs();
+        }
+        if(!materialFile.exists()){
+            materialFile.mkdirs();
+        }
+        productUrlList.forEach(productUrl->{
+            String dwgName = productUrl.substring(productUrl.lastIndexOf(File.separator) + 1, productUrl.length() - 4);
+
+            try {
+                FileCopyUtils.copy(new File(productUrl),new File(productDir+File.separator+dwgName+".dwg"));
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        });
+
+        materialUrlList.forEach(materialUrl->{
+            String dwgName = materialUrl.substring(materialUrl.lastIndexOf(File.separator) + 1, materialUrl.length() - 4);
+            try {
+                FileCopyUtils.copy(new File(materialUrl),new File(materialDir+File.separator+dwgName+".dwg"));
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        });
+
+        picUrlList.forEach(picUrl->{
+            String picFullName = picUrl.substring(picUrl.lastIndexOf(File.separator) + 1);
+            try {
+                FileCopyUtils.copy(new File(picUrl),new File(materialDir+File.separator+picFullName));
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        });
+        //鏇存柊product/product_bom/product_history/product_bom_history
+        // -> product
+        product.setCreateTime(new Date());
+        product.setVersion(nextVersion);
+        deleteAndInsert(product);
+        // -> product_history
+        ProductHistory productHistory = new ProductHistory();
+        productHistory.setParentCode(product.getParentCode());
+        productHistory.setParentName(product.getParentName());
+        productHistory.setParentModel(product.getParentModel());
+        productHistory.setNotes(product.getNotes());
+        productHistory.setCustomCode(product.getCustomCode());
+        productHistory.setCreateTime(product.getCreateTime());
+        productHistory.setVersion(product.getVersion());
+        productHistory.setEnabled(1);
+        phService.insertAndUpdateEnabled(productHistory);
+        // -> product_bom
+        bomList.forEach(bom->{
+            bom.setCreateDate(new Date());
+        });
+        pbService.insertBatch(bomList);
+        // -> product_bom_history
+        List<ProductBomHistory> bomHistoryList = new LinkedList<>();
+        bomList.forEach(bom->{
+            ProductBomHistory bomHistory = new ProductBomHistory();
+            bomHistory.setProductId(productHistory.getId());
+            bomHistory.setSubCode(bom.getSubCode());
+            bomHistory.setCreateDate(new Date());
+
+            bomHistoryList.add(bomHistory);
+        });
+        pbhService.insertBatch(bomHistoryList);
+
+        //鐗╂枡琛ㄤ腑涓嶅瓨鍦ㄧ殑(渚濇嵁:鐗╂枡缂栫爜+鐗╂枡鍨嬪彿),鍒欐坊鍔犲埌鐗╂枡琛ㄤ腑鍘�(鍖呭惈product杩欎釜鐗╂枡)
+        List<Material> materialExistList = mService.getListByCodeAndModelList2(bomList);
+        List<String> subCodeList = materialExistList.stream().map(Material::getSubCode).collect(Collectors.toList());
+        List<Material> materialList = new LinkedList<>();
+        bomList.forEach(bom->{
+            if(!subCodeList.contains(bom.getSubCode())){
+                Material material = new Material();
+                material.setCategory(bom.getCategory());
+                material.setCreateDate(bom.getCreateDate());
+                material.setDwgUrl(bom.getDwgUrl());
+                material.setFileUrl(bom.getFileUrl());
+                material.setMaterial(bom.getMaterial());
+                material.setNotes(bom.getNotes());
+                material.setPictureUrl(bom.getPictureUrl());
+                material.setProducer(bom.getProducer());
+                material.setQuantity(bom.getQuantity());
+                // TODO 鏄惁瑕佹洿鏂板悓鐗╂枡缂栫爜鐨勮�佺墿鏂欑姸鎬佷负0?
+                material.setStatus(1);
+                material.setSubCode(bom.getSubCode());
+                material.setSubModel(bom.getSubModel());
+                material.setSubName(bom.getSubName());
+                material.setSurfaceDetail(bom.getSurfaceDetail());
+                material.setThickness(bom.getThickness());
+                material.setType(bom.getType());
+                material.setUnit(bom.getUnit());
+
+                materialList.add(material);
+            }
+        });
+        //姣嶆枡鏄惁瀛樺湪
+        Material materialDB = mService.getByCodeAndModel(product.getParentCode(),product.getParentModel());
+        if(materialDB==null) {
+            Material material = new Material();
+            material.setSubCode(product.getParentCode());
+            material.setSubName(product.getParentName());
+            material.setSubModel(product.getParentModel());
+
+            materialList.add(material);
+        }
+        mService.insertBatch(materialList);
+        return new Response().setII(1,"鏂板瀹屾垚");
+    }
+
+    private void deleteAndInsert(Product product) {
+        Product productDB = getByProductCodeAndCustomCode(product.getParentCode(), product.getCustomCode());
+        mapper.deleteById(productDB.getId());
+        pbService.deleteByProductId(productDB.getId());
+        mapper.insert(product);
+    }
+
+    private Product getByProductCodeAndCustomCode(String parentCode, String customCode) {
+        QueryWrapper<Product> query = Wrappers.query();
+        query.eq("parent_code",parentCode).eq("custom_code",customCode).last(" limit 1");
+        return mapper.selectOne(query);
     }
 }

--
Gitblit v1.9.1