From cf9a5039e6db9d1d5963e3fe1a37d00169ec2ef7 Mon Sep 17 00:00:00 2001
From: whyclxw <810412026@qq.com>
Date: 星期三, 25 六月 2025 11:18:22 +0800
Subject: [PATCH] 验收报告修改

---
 src/main/java/com/whyc/service/MaterialService.java |  746 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 738 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/whyc/service/MaterialService.java b/src/main/java/com/whyc/service/MaterialService.java
index 995a350..30bc030 100644
--- a/src/main/java/com/whyc/service/MaterialService.java
+++ b/src/main/java/com/whyc/service/MaterialService.java
@@ -1,20 +1,51 @@
 package com.whyc.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.whyc.dto.FileDirPath;
+import com.whyc.dto.MailDTO;
+import com.whyc.dto.MaterialCheckDTO;
 import com.whyc.dto.Response;
 import com.whyc.mapper.MaterialMapper;
-import com.whyc.pojo.Material;
+import com.whyc.pojo.*;
+import com.whyc.util.DateUtil;
+import com.whyc.util.*;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.ss.usermodel.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.FileCopyUtils;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import org.springframework.web.multipart.MultipartFile;
 
-import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class MaterialService {
     @Autowired(required = false)
     private MaterialMapper mapper;
+
+    @Autowired
+    private MaterialHistoryService mhService;
+
+    @Autowired
+    private AttachLockService attachLockService;
+
+    @Autowired
+    private MailService mailService;
+
+    @Autowired
+    private MailUserService mailUserService;
+
     //鏌ヨ鎵�鏈夌殑鏁h浠朵俊鎭姞璁剧疆浜嗘浛鎹㈠叧绯荤殑瀛愪欢淇℃伅
     /*public Response getAllMaterial(String category,String subCode,String subName,String subModel,int pageCurr,int pageSize) {
         PageHelper.startPage(pageCurr,pageSize);
@@ -23,12 +54,12 @@
         List<Material> list=mapper.selectList(wrapper);*//*
         List<Material> list=mapper.getAllMaterial(category,subCode,subName,subModel);
         PageInfo pageInfo=new PageInfo(list);
-        return new Response().setII(1,list.size()>0?true:false,pageInfo,"杩斿洖鎵�鏈夌殑鏁h浠�");
+        return new Response().setII(1,list.size()>0,pageInfo,"杩斿洖鎵�鏈夌殑鏁h浠�");
     }*/
     //鏌ヨ鎵�鏈夌殑鏁h浠朵俊鎭笉鍒嗛〉
     /*public Response getMaterialWithoutSub(String parentModel, String subName,int version) {
         List<Material> list=mapper.getMaterialWithoutSub(parentModel,subName,version);
-        return new Response().setII(1,list.size()>0?true:false,list,"杩斿洖瀛愪欢娌℃湁娣诲姞杩囪仈绯荤殑鏁h浠�");
+        return new Response().setII(1,list.size()>0,list,"杩斿洖瀛愪欢娌℃湁娣诲姞杩囪仈绯荤殑鏁h浠�");
     }*/
     //鍒犻櫎鏁h浠讹紙灏嗘暎瑁呬欢鏍囪瘑涓轰笉鍙敤锛�
     /*public Response deleteMaterial(int id) {
@@ -36,7 +67,7 @@
         wrapper.set("status",0);
         wrapper.eq("id",id);
         int bl=mapper.update(null,wrapper);
-        return new Response().setII(1,bl>0?true:false,bl,"灏嗘暎瑁呬欢鏍囪瘑涓轰笉鍙敤");
+        return new Response().setII(1,bl>0,bl,"灏嗘暎瑁呬欢鏍囪瘑涓轰笉鍙敤");
     }*/
 
     public List<Material> getList() {
@@ -54,10 +85,37 @@
 
     //鏌ヨ鎵�鏈夌墿鏂�(鍒嗛〉锛屾ā绯婃煡璇�)
     public Response getMaterialLimit(String subCode, String subName, String subModel, int pageCurr, int pageSize) {
-       PageHelper.startPage(pageCurr,pageSize);
+        PageHelper.startPage(pageCurr,pageSize);
         List<Material> list=mapper.getMaterialLimit(subCode,subName,subModel);
+        String fileDirName = FileDirPath.getFileDirName();
+        int flag=0;
+        // 杩斿洖鏄惁瀛樺湪闄勪欢
+        if(list!=null&&list.size()>0){
+            for (Material m:list) {
+                if(m.getFileUrl()!=null&&!m.getFileUrl().isEmpty()){
+                    File file = new File(fileDirName+File.separator+m.getFileUrl());
+                    if(!file.exists()) {
+                        flag=0;
+                    }else{
+                        String[] fileNames = file.list();//鑾峰彇璇ユ枃浠跺す涓嬬殑鎵�鏈夋枃浠朵互鍙婄洰褰曠殑鍚嶅瓧
+                        List attachFileList=new ArrayList();
+                        if(fileNames.length>0){
+                            flag=1;
+                            for (int i=0;i<fileNames.length;i++){
+                                if(!fileNames[i].contains("-dwg.pdf")&&!fileNames[i].contains("-doc.pdf"))
+                                    attachFileList.add(fileNames[i]);
+                            }
+                        }else{
+                            flag=0;
+                        }
+                        m.setAttachFileList(attachFileList);
+                    }
+                }
+                m.setHasAttachFlag(flag);
+            }
+        }
         PageInfo pageInfo=new PageInfo(list);
-        return new Response().setII(1,list.size()>0?true:false,pageInfo,"鏌ヨ鎵�鏈夌墿鏂�(鍒嗛〉锛屾ā绯婃煡璇�)");
+        return new Response().setII(1,list.size()>0,pageInfo,"鏌ヨ鎵�鏈夌墿鏂�(鍒嗛〉锛屾ā绯婃煡璇�)");
     }
     //寤虹珛鍏宠仈鏃舵煡璇㈡墍鏈夌殑鐗╂枡锛堜笉鍒嗛〉锛�
     public Response getAllMaterialNoLimit() {
@@ -65,6 +123,678 @@
         wrapper.ne("status",0);
         wrapper.orderByAsc("id");
         List<Material> list=mapper.selectList(wrapper);
-        return new Response().setII(1,list.size()>0?true:false,list,"鏌ヨ鎵�鏈夌墿鏂�(涓嶅垎椤�)");
+        return new Response().setII(1,list.size()>0,list,"鏌ヨ鎵�鏈夌墿鏂�(涓嶅垎椤�)");
+    }
+
+    public List<String> getListByCodeList(List<String> codeList) {
+        return mapper.getListByCodeList(codeList);
+    }
+
+    public void updateDwgUrl(List<Material> materialDwgUrlNameList) {
+        mapper.updateDwgUrl(materialDwgUrlNameList);
+    }
+
+    @Transactional
+    public Response add(List<Material> materialList) {
+        String fileUrl = materialList.get(0).getFileUrl();
+        //鏍¢獙鐗╂枡鍚堢悊鎬�,闈炵┖鏍¢獙:鐗╂枡鍚嶇О/鐗╂枡缂栧彿/鐗╂枡鍨嬪彿
+        for (int i = 0; i < materialList.size(); i++) {
+            Material material = materialList.get(i);
+            if(material.getSubCode()==null ||material.getSubCode().equals("")
+            || material.getSubName()==null ||material.getSubName().equals("")
+            || material.getSubModel()==null ||material.getSubModel().equals("")){
+                return new Response().set(1,false,"鎷掔粷鏂板,鐗╂枡鍚嶇О/鐗╂枡缂栧彿/鐗╂枡鍨嬪彿瀛樺湪绌哄��");
+            }
+        }
+        //妫�楠岀墿鏂欓噸澶嶆��,宸插瓨鍦ㄧ殑鐗╂枡,鎷掔粷閲嶅鎻愪氦,鍒ゆ柇渚濇嵁:鐗╂枡缂栫爜+鐗╂枡鍨嬪彿
+        List<Material> existList = getListByCodeAndModelList(materialList);
+        if(existList!=null && existList.size()!=0){
+            return new Response().setII(1,false,existList,"鎷掔粷鏂板,鐗╂枡閲嶅鎻愪氦");
+        }
+
+        //鑾峰彇璺緞涓嬬殑鎵�鏈夋枃浠�
+        List<String> fileUrlList = new LinkedList<>();
+        List<String> dwgUrlList = null;
+        List<String> picUrlList = null;
+        List<String> materialUrlList = new LinkedList<>();
+
+        fileUrlList = FileUtil.getStaticFilePath(new File(fileUrl),fileUrlList);
+        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());
+        //鍥剧焊鐨剈rl棰勮
+        dwgUrlList.forEach(dwgUrl-> {
+            materialList.forEach(material -> {
+                String filename = dwgUrl.substring(dwgUrl.lastIndexOf(File.separator) + 1, dwgUrl.length() - 4);
+                String fileFullName = dwgUrl.substring(dwgUrl.lastIndexOf(File.separator) + 1);
+                if (material.getSubModel().toUpperCase().equals(filename.toUpperCase())) {
+                    materialUrlList.add(dwgUrl);
+
+                    material.setDwgUrl("doc_file" + File.separator + "material"
+                            + File.separator + fileFullName);
+                }
+            });
+        });
+        //鍥剧墖鐨剈rl棰勮
+        //涓�瀹氭槸鏈夊搴旂墿鏂欑殑,浠巈xcel鍐呭墺绂荤殑
+        picUrlList.forEach(picUrl->{
+            for (Material material : materialList){
+                String filename = picUrl.substring(picUrl.lastIndexOf(File.separator) + 1,picUrl.lastIndexOf("."));
+                String fileFullName = picUrl.substring(picUrl.lastIndexOf(File.separator) + 1);
+                if(material.getSubModel().toUpperCase().equals(filename.toUpperCase())){
+                    material.setPictureUrl("doc_file" + File.separator + "material"
+                            + File.separator + fileFullName);
+                    break;
+                }
+            }
+        });
+        //鍥剧焊鏂囦欢杞Щ鍒版寮忔枃浠跺す
+        String projectDir = CommonUtil.getProjectDir();
+        String materialDir = projectDir + File.separator + "doc_file" + File.separator + "material";
+        File materialFile = new File(materialDir);
+        if(!materialFile.exists()){
+            materialFile.mkdirs();
+        }
+        materialUrlList.forEach(materialUrl->{
+            String dwgFullName = materialUrl.substring(materialUrl.lastIndexOf(File.separator) + 1);
+            try {
+                FileCopyUtils.copy(new File(materialUrl),new File(materialDir + File.separator + dwgFullName));
+            } 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();
+            }
+        });
+
+        //鏂板,鍚屾椂瀵逛簬鐗╂枡缂栫爜鐩稿悓,鐗╂枡鍨嬪彿涓嶅悓鐨�,绂佺敤鏃х墿鏂欑姸鎬�
+        mapper.disableStatus(materialList);
+        materialList.forEach(material -> {
+            material.setStatus(1);
+            material.setFileUrl(null);
+        });
+        mapper.insertBatchSomeColumn(materialList);
+        /*0120寮�澶寸殑鐗╂枡涓婁紶鍚庯紝绯荤粺鑷姩鍙戦偖浠跺搴斾汉鍛橈細鍚存禋銆侀檲鍗撱�佺唺瀹舵澃銆侀挶闀滃厓銆佹柤濂�
+          0108銆�0109寮�澶寸殑鐗╂枡涓婁紶鍚庯紝绯荤粺鑷姩鍙戦偖浠跺搴斾汉鍛橈細鍠昏壋銆佽鎴愩�佺唺蹇楀钩銆佸彾鑳滆摑 */
+        List<String> materialCodeList = materialList.stream().map(Material::getSubCode).collect(Collectors.toList());
+        //浠巑aterialList涓煡鎵� subCode浠�0120寮�澶寸殑鎵�鏈夌墿鏂欓泦鍚�
+        List<Material> materialCodeList0120 = materialList.stream().filter(material -> material.getSubCode().startsWith("0120")).collect(Collectors.toList());
+        //浠巑aterialList涓煡鎵� subCode浠�0108鎴�0109寮�澶寸殑鎵�鏈夌墿鏂欓泦鍚�
+        List<Material> materialCodeList0809 = materialList.stream().filter(material -> material.getSubCode().startsWith("0108") || material.getSubCode().startsWith("0109")).collect(Collectors.toList());
+
+        //濡傛灉瀛樺湪,鍒欏垱寤洪偖浠跺璞�
+        if(materialCodeList0120.size()>0 || materialCodeList0809.size()>0) {
+            DocUser user = ActionUtil.getUser();
+            MailDTO mailDTO = new MailDTO();
+            String now = DateUtil.YYYY_MM_DD_HH_MM_SS.format(new Date());
+            mailDTO.setTitle("銆愮墿鏂欎笂浼犳彁閱掋��");
+            if(materialCodeList0120.size()>0){
+                String subCodeJoin = materialCodeList0120.stream().map(Material::getSubCode).collect(Collectors.joining(","));
+                String subNameJoin = materialCodeList0120.stream().map(Material::getSubName).collect(Collectors.joining(","));
+                String subModelJoin = materialCodeList0120.stream().map(Material::getSubModel).collect(Collectors.joining(","));
+
+                List<MailUser> mailUserList = mailUserService.getMailUserList(5);
+                mailDTO.setMailList(mailUserList.stream().map(MailUser::getMail).collect(Collectors.toList()));
+                mailDTO.setContent(user.getName() + "鍦ㄦ枃妗g鐞嗗钩鍙�"+now+"涓婁紶浜�0120寮�澶寸殑鐗╂枡,璇︾粏淇℃伅濡備笅:\n鐗╂枡缂栫爜:"+subCodeJoin+"\n鐗╂枡鍚嶇О:"+subNameJoin+"\n瑙勬牸鍨嬪彿:"+subModelJoin);
+                mailService.sendMail(mailDTO);
+            }
+            if (materialCodeList0809.size()>0) {
+                String subCodeJoin = materialCodeList0809.stream().map(Material::getSubCode).collect(Collectors.joining(","));
+                String subNameJoin = materialCodeList0809.stream().map(Material::getSubName).collect(Collectors.joining(","));
+                String subModelJoin = materialCodeList0809.stream().map(Material::getSubModel).collect(Collectors.joining(","));
+
+                List<MailUser> mailUserList = mailUserService.getMailUserList(6);
+                mailDTO.setMailList(mailUserList.stream().map(MailUser::getMail).collect(Collectors.toList()));
+                mailDTO.setContent(user.getName() + "鍦ㄦ枃妗g鐞嗗钩鍙�"+now+"涓婁紶浜�0108鎴�0109寮�澶寸殑鐗╂枡,璇︾粏淇℃伅濡備笅:\n鐗╂枡缂栫爜:"+subCodeJoin+"\n鐗╂枡鍚嶇О:"+subNameJoin+"\n瑙勬牸鍨嬪彿:"+subModelJoin);
+                mailService.sendMail(mailDTO);
+            }
+        }
+        return new Response().set(1,true,"鏂板瀹屾垚");
+    }
+
+    private List<Material> getListByCodeAndModelList(List<Material> materialList) {
+        return mapper.getListByCodeAndModelList(materialList);
+    }
+
+    public List<Material> getListByCodeAndModelList2(List<ProductBom> bomList) {
+        return mapper.getListByCodeAndModelList2(bomList);
+    }
+
+    public List<Material> getListByCodeAndModelList3(List<ProductBom> bomList) {
+        return mapper.getListByCodeAndModelList3(bomList);
+    }
+
+    /**
+     *
+     * @param subCode 鐗╂枡缂栫爜
+     * @param subModel 鐗╂枡鍨嬪彿
+     * @param equalSubModel 鏄惁绛変簬鐗╂枡鍨嬪彿,鐢ㄤ簬绛変簬鐗╂枡鍨嬪彿 鎴栬�� 鎺掗櫎鐗╂枡鍨嬪彿骞朵笖瀛樺湪闄勪欢
+     * @return
+     */
+    public Material getByCodeAndModel(String subCode, String subModel, boolean equalSubModel) {
+        QueryWrapper<Material> query = Wrappers.query();
+        query.eq("sub_code",subCode);
+        if(equalSubModel) {
+            query.eq("sub_model", subModel);
+        }else{
+            query.ne("sub_model", subModel);
+            query.isNotNull("file_url");
+        }
+        query.orderByDesc("id");
+        query.last(" limit 1");
+        return mapper.selectOne(query);
+    }
+
+    public Response zipParse(MultipartFile file) throws IOException, InvalidFormatException {
+        List<Material> list = new LinkedList<>();
+        Response response = new Response();
+        //妫�鏌ユ槸鍚︿负zip
+        boolean isZip = Zip4jUtil.checkZipFileParam(file);
+        if(!isZip){
+            return response.set(1,false,"涓婁紶鐨勬枃浠舵牸寮忎笉鏄痾ip");
+        }
+        //zip瀛樺偍璺緞:doc_file/material_submit/${username}/{dateFormat}/${timeStamp}
+        String rootFile = CommonUtil.getRootFile();
+        DocUser user = ActionUtil.getUser();
+        String dateFormat = new SimpleDateFormat("YYYY-MM").format(new Date());
+        long timeStamp = System.currentTimeMillis();
+        String filePath = rootFile + File.separator + "material_submit" + File.separator + user.getName() + File.separator + dateFormat+ File.separator + timeStamp;
+        File parentFile = new File(filePath);
+        String originalFilename = file.getOriginalFilename();
+        File zipFile = new File(filePath+File.separator+ originalFilename);
+        /*if(!zipFile.exists()){
+            zipFile.mkdirs();
+        }*/
+        if (!parentFile.exists()) {
+            parentFile.mkdirs();
+        }
+        file.transferTo(zipFile);
+        //瑙e帇鏂囦欢澶�
+        Zip4jUtil.unPackZip(zipFile,null,filePath);
+        //閬嶅巻瑙e帇鍚庣殑鏂囦欢澶硅矾寰�,瑙f瀽excel
+        System.out.println(filePath);
+        List<String> fileList = new ArrayList<>();
+        fileList = FileUtil.getStaticFilePath(parentFile,fileList);
+        for (int i = 0; i < fileList.size(); i++) {
+            String fileTempUrl = fileList.get(i);
+            //鏌ヨ鍒皒ls鏁版嵁
+            if(fileTempUrl.contains(".xls")){
+                File fileTemp = new File(fileTempUrl);
+                Workbook workbook = null;
+                workbook = WorkbookFactory.create(fileTemp);
+                List<? extends PictureData> allPictures = workbook.getAllPictures();
+                //鍙栫涓�涓猻heet琛�
+                Sheet sheet = workbook.getSheetAt(0);
+                int lastRowNum = sheet.getLastRowNum();
+                //鍙栫涓夎,骞朵互绗笁琛屽紑濮�
+                Row rowTemp = sheet.getRow(1);
+                short lastCellNum = rowTemp.getLastCellNum();
+                //鍏堝崟鐙幏鍙栦骇鍝佸瀷鍙峰拰鐗堟湰鍙�/鍒嗙被
+                Row row = sheet.getRow(1);
+                String type = row.getCell(1).getStringCellValue();
+
+                Row row2 = sheet.getRow(2);
+                String productModel = row2.getCell(5).getStringCellValue();
+                Row row3 = sheet.getRow(3);
+                String productVersion = row3.getCell(5).getStringCellValue();
+                for (int l = 8; l < lastRowNum-1; l++) {
+                    Cell cellTemp = sheet.getRow(l).getCell(1);
+                    cellTemp.setCellType(Cell.CELL_TYPE_STRING);
+                    if(cellTemp.getStringCellValue().equals("")){
+                        break;
+                    }
+                    Material material = new Material();
+                    material.setCreateDate(new Date());
+
+                    for (int m = 2; m < lastCellNum; m++) {
+                        row = sheet.getRow(l);
+                        Cell cell = row.getCell(m);
+                        String cellValue = null;
+                        int cellValueInt = 0;
+                        Double cellValueDouble = null;
+                        if(m == 3 || m==7){
+                            //cellValueDouble = cell.getNumericCellValue();
+                            //DecimalFormat decimalFormat = new DecimalFormat("0");
+                            //cellValue = decimalFormat.format(cellValueDouble);
+                            cell.setCellType(Cell.CELL_TYPE_STRING);
+                        }
+                        cellValue = cell.getStringCellValue();
+
+                        switch (m){
+                            //case 2:{material.setCategory(cellValue);}break;
+                            case 3:{material.setSubCode(cellValue);}break;
+                            case 4:{material.setSubName(cellValue);}break;
+                            case 5:{material.setSubModel(cellValue);}break;
+                            //case 6:{material.setMaterial(cellValue);}break;
+                            //case 7:{material.setThickness(cellValue);}break;
+                            //case 8:{material.setProducer(cellValue);}break;
+                            //case 9:{material.setSurfaceDetail(cellValue);}break;
+                            //case 10:{material.setNotes(cellValue);}break;
+                            case 11:{
+                                //鍥剧墖浠�1寮�濮�,0鏄痽c logo
+                                PictureData pictureData = allPictures.get(l - 7);
+                                String suffix = pictureData.suggestFileExtension();
+                                String picturePath = filePath + File.separator + material.getSubModel() + "." + suffix;
+                                String picturePathFront = "doc_file" + File.separator + "material_submit" + File.separator + user.getName() + File.separator + dateFormat + File.separator + timeStamp + File.separator + material.getSubModel() + "." + suffix;
+                                byte[] data = pictureData.getData();
+                                FileOutputStream fileOutputStream = null;
+                                File pictureFile = new File(picturePath);
+                                fileOutputStream = new FileOutputStream(pictureFile);
+                                fileOutputStream.write(data);
+
+                                material.setPictureUrl(picturePathFront);
+                            }break;
+                        }
+                    }
+                    list.add(material);
+                }
+            }
+        }
+        for (Material material : list) {
+            if(material.getSubName()==null ||material.getSubName().equals("")){
+                return response.set(1,false,"鎷掔粷瑙f瀽,excel鏂囦欢涓褰曞寘鍚悕绉颁负绌虹殑璁板綍");
+            }
+        }
+        //杩藉姞鐗╂枡瑙勮寖鏍¢獙 鏆傛椂鍘婚櫎鏍¢獙
+        /*List<MaterialCheckDTO> checkList = list.stream().map(material -> {
+            MaterialCheckDTO dto = new MaterialCheckDTO();
+            dto.setNum(material.getId());
+            dto.setSubCode(material.getSubCode());
+            dto.setSubName(material.getSubName());
+            dto.setSubModel(material.getSubModel());
+            return dto;
+        }).collect(Collectors.toList());
+        List<MaterialCheckDTO> irregularList = CommonUtil.checkFormat(checkList);
+        if(irregularList.size()>0){
+            return new Response().setII(1,false,irregularList,"鍚嶇О鎴栧瀷鍙峰懡鍚嶄笉瑙勮寖");
+        }*/
+        return response.setII(1,true,list,filePath);
+    }
+    //鏍规嵁鐗╂枡id鏌ヨ杩斿洖闄勪欢鏂囦欢澶逛笅鎵�鏈夌殑鏂囦欢鍒楄〃
+    public Response getAttachByMaterialId(int materialId) {
+        String fileDirName = FileDirPath.getFileDirName();
+        Material material=mapper.getAttachByMaterialId(materialId);
+        boolean flag=false;
+        List list=new ArrayList();
+        if(material.getFileUrl()!=null&&!material.getFileUrl().isEmpty()){
+            File file = new File(fileDirName+File.separator+material.getFileUrl());
+            if(!file.exists()) {
+                flag=false;
+            }else{
+               String[] fileNames = file.list();//鑾峰彇璇ユ枃浠跺す涓嬬殑鎵�鏈夋枃浠朵互鍙婄洰褰曠殑鍚嶅瓧
+                if(fileNames.length>0){
+                    flag=true;
+                    for (int i=0;i<fileNames.length;i++){
+                        if(!fileNames[i].contains("-dwg.pdf")&&!fileNames[i].contains("-doc.pdf"))
+                           list.add(material.getFileUrl()+File.separator+fileNames[i]);
+                    }
+                }
+
+            }
+        }
+        return new Response().setII(1,flag,list,"鏂囦欢鍒楄〃杩斿洖");
+    }
+    //鏍规嵁鐗╂枡鍨嬪彿锛�'-','_'涔嬪墠鐨勯儴鍒嗭級鏌ヨ鐗╂枡鐨勫巻鍙茬増鏈�
+    public Response getMaterialVersion(String subModel) {
+        List list=mapper.getMaterialVersion(subModel);
+        return new Response().setII(1,list.size()>0,list,"鐗╂枡鍘嗗彶鐗堟湰鏁版嵁杩斿洖");
+    }
+    //鏍规嵁鐗╂枡id鏌ヨ鐗╂枡淇℃伅
+    public Response getMaterialById(int materialId) {
+        Material material=mapper.getMaterialById(materialId);
+        String fileDirName = FileDirPath.getFileDirName();
+        List list=new ArrayList();
+        if(material.getFileUrl()!=null&&!material.getFileUrl().isEmpty()){
+            File file = new File(fileDirName+File.separator+material.getFileUrl());
+            if(file.exists()) {
+                String[] fileNames = file.list();//鑾峰彇璇ユ枃浠跺す涓嬬殑鎵�鏈夋枃浠朵互鍙婄洰褰曠殑鍚嶅瓧
+                if(fileNames.length>0){
+                    for (int i=0;i<fileNames.length;i++){
+                        if(!fileNames[i].contains("-dwg.pdf")&&!fileNames[i].contains("-doc.pdf"))
+                            list.add(material.getFileUrl()+File.separator+fileNames[i]);
+                    }
+                }
+
+            }
+        }
+        return new Response().setIII(1,material!=null,material,list,"鐗╂枡鍘嗗彶鐗堟湰鏁版嵁杩斿洖");
+    }
+
+    /**
+     * @param multipartFileList 琚拷鍔犵殑闄勪欢,zip闆嗗悎
+     * @param material
+     * @return 杩斿洖琚拷鍔犳枃浠剁殑鏂囦欢澶硅矾寰�
+     */
+    @Transactional
+    public Response addAttachment(List<MultipartFile> multipartFileList, Material material) throws IOException {
+        List<String> currentFileList = new LinkedList<>();
+        List<String> uploadingFileList = new LinkedList<>();
+        String subCode = material.getSubCode();
+        String subModel = material.getSubModel();
+        subModel = MaterialSpecialCharUtil.transfer(subModel);
+        String dirPathDB = "doc_file" + File.separator + "material" + File.separator + material.getId() + "-"+ subCode + "-" + subModel;
+        String dirPath = CommonUtil.getRootFile() + "material" + File.separator + material.getId() + "-"+ subCode + "-" + subModel;
+        File dirFile = new File(dirPath);
+
+        Date now = new Date();
+        //long timestamp = now.getTime();
+        String formattedTimestamp = DateUtil.YYYY_MM_DD_HH_MM_SS_UNION.format(now);
+        String formattedNow = DateUtil.YYYY_MM_DD_HH_MM_SS.format(now);
+
+        boolean dirFileExist = true;
+        if(!dirFile.exists()){
+            dirFile.mkdirs();
+            dirFileExist = false;
+        }
+        StringBuilder fileNameJoin = new StringBuilder();
+        for (int i = 0; i < multipartFileList.size(); i++) {
+            MultipartFile multipartFile = multipartFileList.get(i);
+            String originalFilename = multipartFile.getOriginalFilename();
+            fileNameJoin.append(originalFilename).append(",");
+            File zipFile = new File(dirPath + File.separator + originalFilename.substring(0,originalFilename.lastIndexOf(".")) + "_" + formattedTimestamp + originalFilename.substring(originalFilename.lastIndexOf(".")));
+            multipartFile.transferTo(zipFile);
+        }
+        //fileNameJoin鍘婚櫎鏈�鍚庝竴涓厓绱�
+        fileNameJoin.deleteCharAt(fileNameJoin.length()-1);
+        /*//瑙e帇鏂囦欢澶�,鍒犻櫎鍘焭ip鏂囦欢
+        String unPackageDir = dirPath + File.separator + timestamp;
+        Zip4jUtil.unPackZip(zipFile, null, unPackageDir);
+        File unPackageFile = new File(unPackageDir);
+        File[] unPackageFileList = unPackageFile.listFiles();
+        zipFile.delete();
+        for (int i = 0; i < unPackageFileList.length; i++) {
+            File tempFile = unPackageFileList[i];
+            if(tempFile.isDirectory()){
+                FileUtil.deleteFile(unPackageFile);
+                if(!dirFileExist){
+                    FileUtil.deleteFile(dirFile);
+                }
+                return new Response().set(1,false,"鎷掔粷涓婁紶:涓婁紶鐨勫帇缂╁寘瀛樺湪鏂囦欢澶�");
+            }
+        }*/
+
+        if(!dirFileExist){
+            //璺緞涓嶅瓨鍦�,璇存槑鏄娆′笂浼�,璁剧疆鐗╂枡瀵瑰簲鐨刦ileUrl
+            Material temp = new Material();
+            temp.setId(material.getId());
+            temp.setFileUrl(dirPathDB);
+            mapper.updateById(temp);
+        }/*else{
+            //鏌ヨ璺緞涓嬬幇鏈夌殑鎵�鏈夋枃浠�
+            String[] fileArr = dirFile.list();
+            currentFileList = Arrays.asList(fileArr);
+        }*/
+
+        /*//鏌ヨ鏂颁笂浼犵殑鏂囦欢璺緞
+        String[] unPackageFileArr = unPackageFile.list();
+        uploadingFileList = Arrays.asList(unPackageFileArr);
+        for (String uploadingFile : uploadingFileList){
+            if(currentFileList.contains(uploadingFile)){
+                new File(unPackageDir + File.separator + uploadingFile)
+                        .renameTo(new File(unPackageDir + File.separator  + uploadingFile.substring(0,uploadingFile.lastIndexOf(".")) + "_" + formattedTimestamp + uploadingFile.substring(uploadingFile.lastIndexOf("."))));
+            }
+        }
+        //涓婁紶鐨勬枃浠跺す杞Щ鍒版寮忚矾寰�
+        org.aspectj.util.FileUtil.copyDir(unPackageFile,dirFile);
+        FileUtil.deleteFile(unPackageFile);*/
+        /*0120寮�澶寸殑鐗╂枡涓婁紶鍚庯紝绯荤粺鑷姩鍙戦偖浠跺搴斾汉鍛橈細鍚存禋銆侀檲鍗撱�佺唺瀹舵澃銆侀挶闀滃厓銆佹柤濂�
+          0108銆�0109寮�澶寸殑鐗╂枡涓婁紶鍚庯紝绯荤粺鑷姩鍙戦偖浠跺搴斾汉鍛橈細鍠昏壋銆佽鎴愩�佺唺蹇楀钩銆佸彾鑳滆摑 */
+        MailDTO mailDTO = new MailDTO();
+        DocUser user = ActionUtil.getUser();
+        Material materialById = mapper.getMaterialById(material.getId());
+        mailDTO.setTitle("銆愰檮浠舵洿鏂版彁閱掋��");
+        if(subCode.startsWith("0120")){
+            List<MailUser> mailUserList = mailUserService.getMailUserList(5);
+            mailDTO.setMailList(mailUserList.stream().map(MailUser::getMail).collect(Collectors.toList()));
+            mailDTO.setContent(user.getName()+"鍦ㄦ枃妗g鐞嗗钩鍙�"+formattedNow+"涓婁紶浜嗛檮浠�,璇︾粏淇℃伅濡備笅:\n鐗╂枡缂栫爜:"+subCode+"\n鐗╂枡鍚嶇О:"+materialById.getSubName()+"\n鐗╂枡鍨嬪彿:"+subModel+"\n闄勪欢鍚嶇О:"+fileNameJoin.toString());
+            mailService.sendMail(mailDTO);
+        }else if (subCode.startsWith("0108")|| subCode.startsWith("0109")){
+            List<MailUser> mailUserList = mailUserService.getMailUserList(6);
+            mailDTO.setMailList(mailUserList.stream().map(MailUser::getMail).collect(Collectors.toList()));
+            mailDTO.setContent(user.getName()+"鍦ㄦ枃妗g鐞嗗钩鍙�"+formattedNow+"涓婁紶浜嗛檮浠�,璇︾粏淇℃伅濡備笅:\n鐗╂枡缂栫爜:"+subCode+"\n鐗╂枡鍚嶇О:"+materialById.getSubName()+"\n鐗╂枡鍨嬪彿:"+subModel+"\n闄勪欢鍚嶇О:"+fileNameJoin.toString());
+            mailService.sendMail(mailDTO);
+        }
+        return new Response().set(1,true,"涓婁紶瀹屾垚");
+    }
+
+    /**
+     * 杞Щ 琚鍒剁殑闄勪欢,鍒版柊鐨勭墿鏂�
+     * @param materialDB .fileUrl 琚鍒剁殑闄勪欢璺緞,渚嬪:doc_file\material\8468-0109000512-SHIDA-2455-OLD-ZX_A01
+     * @param material 鏂扮殑鐗╂枡
+     * @return 杩斿洖琚拷鍔犳枃浠剁殑鏂囦欢澶硅矾寰�
+     */
+    @Transactional
+    public Response transferCopiedAttachment(Material materialDB, Material material) throws IOException {
+        String fileUrlDir = materialDB.getFileUrl();
+        String subModel = material.getSubModel();
+        subModel = MaterialSpecialCharUtil.transfer(subModel);
+        String dirPathDB = "doc_file" + File.separator + "material" + File.separator + material.getId() + "-"+ material.getSubCode() + "-" + subModel;
+        String dirPath = CommonUtil.getRootFile() + "material" + File.separator + material.getId() + "-"+ material.getSubCode() + "-" + subModel;
+        File dirFile = new File(dirPath);
+
+        if(!dirFile.exists()){
+
+            dirFile.mkdirs();
+        }
+        FileUtil.copyDirectory(new File(CommonUtil.getProjectDir() + File.separator + fileUrlDir),dirFile);
+
+        //璁剧疆鐗╂枡瀵瑰簲鐨刦ileUrl鍙婄墿鏂欑姸鎬�
+        Material temp = new Material();
+        temp.setId(material.getId());
+        temp.setFileUrl(dirPathDB);
+        mapper.updateById(temp);
+
+        attachLockService.getAndInsert(materialDB.getId(),material.getId());
+
+
+        return new Response().set(1,true,"涓婁紶瀹屾垚");
+    }
+
+    /**
+     * @param multipartFile 鏇存柊鐨勫浘绾告垨鍥剧墖
+     * @param material
+     */
+    @Transactional
+    public Response updatePicOrDwg(MultipartFile multipartFile, Material material) throws IOException {
+        List<String> currentFileList = new LinkedList<>();
+        List<String> uploadingFileList = new LinkedList<>();
+        String subCode = material.getSubCode();
+        String subModel = material.getSubModel();
+        subModel = MaterialSpecialCharUtil.transfer(subModel);
+        String dirPathDB = "doc_file" + File.separator + "material" + File.separator + subCode + "-" + subModel;
+        String dirPath = CommonUtil.getRootFile() + "material" + File.separator + subCode + "-" + subModel;
+        File dirFile = new File(dirPath);
+
+        Date now = new Date();
+        //long timestamp = now.getTime();
+        String formattedTimestamp = DateUtil.YYYY_MM_DD_HH_MM_SS_UNION.format(now);
+        String formattedNow = DateUtil.YYYY_MM_DD_HH_MM_SS.format(now);
+
+        if (!dirFile.exists()) {
+            dirFile.mkdirs();
+        }
+
+        String originalFilename = multipartFile.getOriginalFilename();
+        String fileSuffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
+        String fileFullName = File.separator + originalFilename.substring(0, originalFilename.lastIndexOf(".")) + "_" + formattedTimestamp + originalFilename.substring(originalFilename.lastIndexOf("."));
+        File zipFile = new File(dirPath + fileFullName);
+        multipartFile.transferTo(zipFile);
+
+        //璺緞涓嶅瓨鍦�,璇存槑鏄娆′笂浼�,璁剧疆鐗╂枡瀵瑰簲鐨刦ileUrl
+        //鍚屾椂鍦ㄧ墿鏂欏巻鍙查噷闈㈡坊鍔犺褰�
+        Material temp = new Material();
+        MaterialHistory mh = new MaterialHistory();
+
+        temp.setId(material.getId());
+        mh.setProductId(-1);
+        mh.setMaterialId(material.getId());
+        int userId = ActionUtil.getUser().getId().intValue();
+        mh.setUpUserId(userId);
+        mh.setCreateTime(now);
+        if(fileSuffix.equals("dwg")){
+            temp.setDwgUrl(dirPathDB + fileFullName);
+            mh.setDwgUrl(dirPathDB + fileFullName);
+        }else {
+            temp.setPictureUrl(dirPathDB + fileFullName);
+            mh.setPictureUrl(dirPathDB + fileFullName);
+        }
+        mapper.updateById(temp);
+        mhService.insert(mh);
+
+        /*0120寮�澶寸殑鐗╂枡涓婁紶鍚庯紝绯荤粺鑷姩鍙戦偖浠跺搴斾汉鍛橈細鍚存禋銆侀檲鍗撱�佺唺瀹舵澃銆侀挶闀滃厓銆佹柤濂�
+          0108銆�0109寮�澶寸殑鐗╂枡涓婁紶鍚庯紝绯荤粺鑷姩鍙戦偖浠跺搴斾汉鍛橈細鍠昏壋銆佽鎴愩�佺唺蹇楀钩銆佸彾鑳滆摑 */
+        Material materialById = mapper.getMaterialById(material.getId());
+        MailDTO mailDTO = new MailDTO();
+        DocUser user = ActionUtil.getUser();
+        mailDTO.setTitle("銆愬浘绾稿浘鐗囨洿鏂版彁閱掋��");
+        if(subCode.startsWith("0120")){
+            List<MailUser> mailUserList = mailUserService.getMailUserList(5);
+            mailDTO.setMailList(mailUserList.stream().map(MailUser::getMail).collect(Collectors.toList()));
+            mailDTO.setContent(user.getName()+"鍦ㄦ枃妗g鐞嗗钩鍙�"+formattedNow+"涓婁紶浜嗗浘绾告垨鍥剧墖,璇︾粏淇℃伅濡備笅:\n鐗╂枡缂栫爜:"+subCode+"\n鐗╂枡鍚嶇О:"+materialById.getSubName()+"\n鐗╂枡鍨嬪彿:"+subModel+"\n鍥剧焊鍥剧墖鍚嶇О:"+originalFilename);
+            mailService.sendMail(mailDTO);
+        }else if (subCode.startsWith("0108")|| subCode.startsWith("0109")){
+            List<MailUser> mailUserList = mailUserService.getMailUserList(6);
+            mailDTO.setMailList(mailUserList.stream().map(MailUser::getMail).collect(Collectors.toList()));
+            mailDTO.setContent(user.getName()+"鍦ㄦ枃妗g鐞嗗钩鍙�"+formattedNow+"涓婁紶浜嗗浘绾告垨鍥剧墖,璇︾粏淇℃伅濡備笅:\n鐗╂枡缂栫爜:"+subCode+"\n鐗╂枡鍚嶇О:"+materialById.getSubName()+"\n鐗╂枡鍨嬪彿:"+subModel+"\n鍥剧焊鍥剧墖鍚嶇О:"+originalFilename);
+            mailService.sendMail(mailDTO);
+        }
+        return new Response().set(1, true, "涓婁紶瀹屾垚");
+    }
+    public Response dwgCompare(int materialId, int materialId2) throws IOException {
+        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        HttpServletResponse response = servletRequestAttributes.getResponse();
+
+        //鑾峰彇鍚勮嚜鐗╂枡鐨勫浘绾�
+        String dwgUrl = mapper.selectById(materialId).getDwgUrl();
+        String dwgUrl2 = mapper.selectById(materialId2).getDwgUrl();
+        if(dwgUrl == null || dwgUrl2 == null){
+            return new Response().set(1,false,"鏃犳硶瀵规瘮,鎵�閫夌墿鏂欒嚦灏戞湁1涓笉瀛樺湪鍥剧焊");
+        }
+        String dwgFileStr = CommonUtil.getProjectDir() + File.separator + dwgUrl;
+        String dwgFileStr2 = CommonUtil.getProjectDir() + File.separator + dwgUrl2;
+
+        String absoluteDwgPngPath = dwgFileStr.substring(0,dwgFileStr.lastIndexOf("."))+"-dwg.png";
+        String absoluteDwgPngPath2 = dwgFileStr2.substring(0,dwgFileStr2.lastIndexOf("."))+"-dwg.png";
+        if(!new File(absoluteDwgPngPath).exists()){
+            DwgToPngUtil.dwg2png(new File(dwgFileStr));
+        }
+        if(!new File(absoluteDwgPngPath2).exists()) {
+            DwgToPngUtil.dwg2png(new File(dwgFileStr2));
+        }
+
+        ByteArrayOutputStream stream = ImageDiff.compareImages(absoluteDwgPngPath, absoluteDwgPngPath2);
+        return new Response().setII(1,true, Base64.encodeBase64String(stream.toByteArray()),null);
+        //String fileName = "name.png";
+        //OutputStream toClient = null;
+        //try {
+        //    response.setContentType("application/octet-stream");
+        //    response.setHeader("Content-Disposition","attachment;filename=" + fileName);
+        //    response.addHeader("Pragma", "no-cache");
+        //    response.addHeader("Cache-Control", "no-cache");
+        //    toClient = response.getOutputStream();
+        //    stream.writeTo(toClient);
+        //    //toClient.write(stream.toByteArray());
+        //    toClient.flush();
+        //    toClient.close();
+        //} catch (IOException e) {
+        //    e.printStackTrace();
+        //}
+        //
+        //
+        //return null;
+    }
+
+    public void updateDwgUrlAndPicUrl(List<Material> materialUpdateList) {
+        mapper.updateDwgUrlAndPicUrl(materialUpdateList);
+    }
+
+    public List<Material> getSameSubCodeAndModel(List<ProductBom> bomList) {
+        return mapper.getSameSubCodeAndModel(bomList);
+    }
+
+    public void checkNaming(InputStream inputStream, HttpServletResponse response) throws IOException, InvalidFormatException {
+        List<MaterialCheckDTO> checkList = new LinkedList<>();
+        Workbook workbook = null;
+        workbook = WorkbookFactory.create(inputStream);
+        inputStream.close();
+        //鍙栫涓�涓猻heet琛�
+        Sheet sheet = workbook.getSheetAt(0);
+        int lastRowNum = sheet.getLastRowNum();
+        for (int i = 1; i <= lastRowNum; i++) {
+            System.out.println(i);
+            //浠庣浜岃寮�濮�
+            Row row = sheet.getRow(i);
+            Cell cell = row.getCell(0);
+            cell.setCellType(CellType.STRING);
+            String code = cell.getStringCellValue();
+            String name = row.getCell(1).getStringCellValue();
+            Cell cell2 = row.getCell(2);
+            cell2.setCellType(CellType.STRING);
+            String model = cell2.getStringCellValue();
+
+            MaterialCheckDTO dto = new MaterialCheckDTO();
+            dto.setNum(i);
+            dto.setSubName(name);
+            dto.setSubCode(code);
+            dto.setSubModel(model);
+            checkList.add(dto);
+        }
+        List<MaterialCheckDTO> materialCheckDTOS = CommonUtil.checkFormat(checkList);
+        int size = materialCheckDTOS.size();
+        //ECR缂栧彿,鐢宠鏃ユ湡,鐢宠浜�,鍙樻洿鎻忚堪,鍙樻洿鏂欏彿,鍙樻洿鍨嬪彿,鍙樻洿鎵�灞炲瀷鍙�,澶勭悊鏂瑰紡,鍒涘缓鏃堕棿
+        String[] title = new String[]{"搴忓彿","鐗╂枡缂栫爜","鐗╂枡鍚嶇О","瑙勬牸鍨嬪彿","涓嶈鑼冨師鍥�"};
+        String[][] values = new String[size][]; //size琛�
+        for (int i = 0; i < size; i++) {
+            values[i] = new String[5];
+            MaterialCheckDTO dto = materialCheckDTOS.get(i);
+            values[i][0] = dto.getNum().toString();
+            values[i][1] = dto.getSubCode();
+            values[i][2] = dto.getSubName();
+            values[i][3] = dto.getSubModel();
+            values[i][4] = dto.getIrregularDesc();
+        }
+        ExcelUtil.exportExcel("娓呭崟","鐗╂枡",title,values,null,response);
+    }
+
+    public Material getLastByCode(String code) {
+        QueryWrapper<Material> query = Wrappers.query();
+        query.eq("sub_code",code).orderByDesc("id").last(" limit 1");
+        return mapper.selectOne(query);
+    }
+    //鐗╂枡鎺ㄩ�佸脊绐椾娇鐢�
+    public Response getMaterialDialog(String subCode, String subName, String subModel) {
+        List<Material> list=mapper.getMaterialLimit(subCode,subName,subModel);
+        String fileDirName = FileDirPath.getFileDirName();
+        int flag=0;
+        Material m=new Material();
+        // 杩斿洖鏄惁瀛樺湪闄勪欢
+        if(list!=null&&list.size()>0){
+                m=list.get(list.size()-1);
+                if(m.getFileUrl()!=null&&!m.getFileUrl().isEmpty()){
+                    File file = new File(fileDirName+File.separator+m.getFileUrl());
+                    if(!file.exists()) {
+                        flag=0;
+                    }else{
+                        String[] fileNames = file.list();//鑾峰彇璇ユ枃浠跺す涓嬬殑鎵�鏈夋枃浠朵互鍙婄洰褰曠殑鍚嶅瓧
+                        List attachFileList=new ArrayList();
+                        if(fileNames.length>0){
+                            flag=1;
+                            for (int i=0;i<fileNames.length;i++){
+                                if(!fileNames[i].contains("-dwg.pdf")&&!fileNames[i].contains("-doc.pdf"))
+                                    attachFileList.add(fileNames[i]);
+                            }
+                        }else{
+                            flag=0;
+                        }
+                        m.setAttachFileList(attachFileList);
+                    }
+                }
+                m.setHasAttachFlag(flag);
+            }
+        return new Response().setII(1,m!=null,m,"鐗╂枡鎺ㄩ�佸脊绐椾娇鐢�");
     }
 }

--
Gitblit v1.9.1