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