whyclxw
4 天以前 bfa320956f20988fe671b0c4d25aa82fe766a98d
src/main/java/com/whyc/service/ProductBomApprovingService.java
@@ -1,37 +1,33 @@
package com.whyc.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.whyc.dto.FileUrlDTO;
import com.whyc.dto.Response;
import com.whyc.mapper.ProductBomApprovingMapper;
import com.whyc.pojo.DocUser;
import com.whyc.pojo.ProductBomApproving;
import com.whyc.pojo.WorksheetMain;
import com.whyc.util.*;
import io.swagger.models.auth.In;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.*;
import org.springframework.stereotype.Component;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.xml.crypto.Data;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class ProductBomApprovingService {
    @Resource
    private ProductBomApprovingMapper mapper;
    @Autowired
    private WorksheetMainService mainService;
    public List<ProductBomApproving> excelParse(InputStream inputStream) throws IOException, InvalidFormatException {
        List<ProductBomApproving> list = new LinkedList<>();
@@ -112,6 +108,7 @@
    public Response zipParse(MultipartFile file) throws IOException, InvalidFormatException {
        List<ProductBomApproving> list = new LinkedList<>();
        List<ProductBomApproving> bomList = new LinkedList<>();
        Response response = new Response();
        //检查是否为zip
        boolean isZip = Zip4jUtil.checkZipFileParam(file);
@@ -125,9 +122,13 @@
        long timeStamp = System.currentTimeMillis();
        String filePath = rootFile + File.separator + "product_approving" + File.separator + user.getName() + File.separator + dateFormat+ File.separator + timeStamp;
        File parentFile = new File(filePath);
        File zipFile = new File(filePath+File.separator+file.getOriginalFilename());
        if(!zipFile.exists()){
        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);
        //解压文件夹
@@ -136,11 +137,95 @@
        System.out.println(filePath);
        List<String> fileList = new ArrayList<>();
        //图纸筛选
        List<FileUrlDTO> dwgExistsList = getDwgList(fileList);
        fileList = FileUtil.getStaticFilePath(parentFile,fileList);
        List<FileUrlDTO> dwgExistsList = getDwgList(fileList);
        for (int i = 0; i < fileList.size(); i++) {
            String fileTempUrl = fileList.get(i);
            if(fileTempUrl.contains(".xls")){
            //查询需上传的bom数据
            if(fileTempUrl.contains(".xls") && fileTempUrl.contains("(BOM)")){
                Workbook workbook = null;
                InputStream inputStream = new FileInputStream(new File(fileTempUrl));
                workbook = WorkbookFactory.create(inputStream);
                inputStream.close();
                List<? extends PictureData> allPictures = workbook.getAllPictures();
                //取第一个sheet表
                Sheet sheet = workbook.getSheetAt(0);
                int lastRowNum = sheet.getLastRowNum();
                //取第三行,并以第三行开始
                Row row2 = sheet.getRow(1);
                short lastCellNum = row2.getLastCellNum();
                for (int k = 2; k < lastRowNum+1; k++) {
                    ProductBomApproving bomApproving = new ProductBomApproving();
                    for (int j = 0; j < lastCellNum; j++) {
                        Row row = sheet.getRow(k);
                        Cell cell = row.getCell(j);
                        String cellValue = null;
                        Double cellValueInt = 0d;
                        if(j == 9 ||j== 0){
                            cellValueInt = cell.getNumericCellValue();
                        }else if(j!=15){
                            cellValue = cell.getStringCellValue();
                        }
                        switch (j){
                            case 0:{bomApproving.setId(cellValueInt.intValue());}break;
                            case 1:{bomApproving.setParentCode(cellValue);}break;
                            case 2:{bomApproving.setParentName(cellValue);}break;
                            case 3:{bomApproving.setParentModel(cellValue);}break;
                            case 4:{bomApproving.setCategory(cellValue);}break;
                            case 5:{bomApproving.setSubCode(cellValue); }break;
                            case 6:{bomApproving.setSubName(cellValue);}break;
                            case 7:{
                                bomApproving.setSubModel(cellValue);
                                //判断图纸查看是否存在
                                bomApproving.setDwgExist(0);
                                String dwgFileName = cellValue+".dwg";
                                for (int n = 0; n < dwgExistsList.size(); n++) {
                                    FileUrlDTO fileUrlDTO = dwgExistsList.get(n);
                                    if(dwgFileName.toUpperCase().equals(fileUrlDTO.getFileName().toUpperCase())){
                                        //存在
                                        bomApproving.setDwgExist(1);
                                        bomApproving.setDwgUrl(fileUrlDTO.getHttpFileUrl());
                                        break;
                                    }
                                }
                            }break;
                            case 8:{bomApproving.setUnit(cellValue);}break;
                            case 9:{bomApproving.setQuantity(cellValueInt.intValue());}break;
                            case 10:{bomApproving.setProducer(cellValue);}break;
                            case 11:{bomApproving.setMaterial(cellValue);}break;
                            case 12:{bomApproving.setThickness(cellValue);}break;
                            case 13:{bomApproving.setSurfaceDetail(cellValue);}break;
                            case 14:{bomApproving.setNotes(cellValue);}break;
                            case 15:{
                                //图片,从0开始,到图片size为止
                                int m = k-2;
                                if(m<allPictures.size()){
                                    PictureData pictureData = allPictures.get(m);
                                    //图片存储 product_approving/username/2022-07/
                                    String approvingPath = rootFile + File.separator + "product_approving" + File.separator + user.getName() + File.separator + dateFormat+ File.separator + timeStamp;
                                    File provingFile = new File(approvingPath);
                                    if(!provingFile.exists()){
                                        provingFile.mkdirs();
                                    }
                                    String suffix = pictureData.suggestFileExtension();
                                    String picturePath = approvingPath + File.separator + bomApproving.getSubModel() + "." + suffix;
                                    String picturePathFront = "doc_file" + File.separator + "product_approving" + File.separator + user.getName() + File.separator + dateFormat + File.separator + timeStamp + File.separator + bomApproving.getSubModel() + "." + suffix;
                                    byte[] data = pictureData.getData();
                                    FileOutputStream fileOutputStream = null;
                                    File pictureFile = new File(picturePath);
                                    fileOutputStream = new FileOutputStream(pictureFile);
                                    fileOutputStream.write(data);
                                    bomApproving.setPictureUrl(picturePathFront);
                                }
                            }break;
                        }
                    }
                    bomList.add(bomApproving);
                }
            }
            /*//这个是子表数据,用做对比校验
            else if(fileTempUrl.contains(".xls")){
                File fileTemp = new File(fileTempUrl);
                Workbook workbook = null;
                workbook = WorkbookFactory.create(fileTemp);
@@ -162,8 +247,10 @@
                for (int l = 9; l < lastRowNum-1; l++) {
                    ProductBomApproving bomApproving = new ProductBomApproving();
                    bomApproving.setParentModel(productModel);
                    bomApproving.setParentVersion(productVersion);
                    //lxw注释
                    //bomApproving.setParentVersion(productVersion);
                    bomApproving.setType(type);
                    bomApproving.setExcelName(fileTempUrl.substring(fileTempUrl.lastIndexOf(File.separator)+1));
                    for (int m = 2; m < lastCellNum; m++) {
                        row = sheet.getRow(l);
@@ -237,9 +324,59 @@
                    }
                    list.add(bomApproving);
                }
            }
            }*/
        }
        return response.setII(1,true,list,"解析完成");
        /*String parentModel = list.get(0).getParentModel();
        for (int i = 0; i < list.size(); i++) {
            if(!parentModel.equals(list.get(i).getParentModel())){
                return new Response().set(1,false,"拒绝解析,一次审批包含不同的产品修改");
            }
        }*/
        //通过包名,查询工单流程审批标题
        //String nextTitle = mainService.getNextTitle(originalFilename);
        /*//子表,逐条对比bom表,子料编码/子料型号/子料数量
        for (ProductBomApproving sub:list){
            String subCode = sub.getSubCode();
            String subModel = sub.getSubModel();
            Integer quantity = sub.getQuantity();
            String excelName = sub.getExcelName();
            boolean exists = false;
            for (ProductBomApproving reference:bomList){
                if(subCode.equals(reference.getSubCode())){
                    exists = true;
                    if(subModel.equals(reference.getSubModel())){
                        if(quantity.intValue() == reference.getQuantity()){
                            break;
                        }else{
                            return response.set(1,false,excelName+"中货品编码:"+subCode+"对应的数量:"+quantity+"在bom表中不正确");
                        }
                    }else{
                        return response.set(1,false,excelName+"中货品编码:"+subCode+"对应的规格型号:"+subModel+"在bom表中不正确");
                    }
                }
            }
            if(!exists){
                return response.set(1,false,excelName+"中货品编码:"+subCode+"在bom表中不存在");
            }
        }*/
        /*//处理名称重复的子件
        List<ProductBomApproving> newBomList = new LinkedList<>();
        Map<String, List<ProductBomApproving>> subNameMap = bomList.stream().collect(Collectors.groupingBy(ProductBomApproving::getSubName));
        subNameMap.forEach((subName,approvingList)->{
            if(approvingList.size()>1){
                for (int i = 0; i < approvingList.size(); i++) {
                    ProductBomApproving bomApproving = approvingList.get(i);
                    bomApproving.setSubName(subName+(i+1));
                    newBomList.add(bomApproving);
                }
            }else{
                newBomList.addAll(approvingList);
            }
        });*/
        List<ProductBomApproving> collect = bomList.stream().sorted(Comparator.comparing(ProductBomApproving::getId)).collect(Collectors.toList());
        String nextTitle = originalFilename.substring(0,originalFilename.lastIndexOf("."));
        return response.setIII(1,true,collect,nextTitle,filePath);
    }
    private List<FileUrlDTO> getDwgList(List<String> fileList) {
@@ -255,14 +392,45 @@
        return list;
    }
    /**
     *
     * @param dwgUrl 预览dwg图纸文件,后追加预览word文档
     * @return
     * @throws IOException
     */
    public Response dwgReview(String dwgUrl) throws IOException {
        String fileSuffix = dwgUrl.substring(dwgUrl.lastIndexOf(".") + 1);
        //绝对路径xxx/doc_file
        String rootFile = CommonUtil.getRootFile();
        String dwgSubFilePath = dwgUrl.substring(dwgUrl.indexOf("doc_file")+8);
        String dwgSubFileDirPath = dwgSubFilePath.substring(0,dwgSubFilePath.lastIndexOf(File.separator));
        File dwgFile = new File(rootFile + dwgSubFilePath);
        String pdfFileName = DwgToPdfUtil.dwg2Pdf(dwgFile);
        String pdfUrl = "";
        if(fileSuffix.equals("dwg")) {
            pdfUrl = dwgFile.getParent() + File.separator + dwgFile.getName().substring(0, dwgFile.getName().lastIndexOf(".")) + "-dwg.pdf";
        }else if(fileSuffix.contains("doc")){
            pdfUrl = dwgFile.getParent() + File.separator + dwgFile.getName().substring(0, dwgFile.getName().lastIndexOf(".")) + "-doc.pdf";
        }
        File pdfFile = new File(pdfUrl);
        String pdfFileName = null;
        if(!pdfFile.exists()) {
            if(fileSuffix.equals("dwg")) {
                //pdfFileName = DwgToPdfUtil.dwg2Pdf(dwgFile);
                DwgToPdfUtil.dwg2Pdf(dwgFile);
            }else if(fileSuffix.contains("doc")){
                Word2PdfAsposeUtil.doc2pdf(dwgFile.getAbsolutePath(),pdfUrl);
            }
        }/*else{
            pdfFileName = pdfFile.getName();
        }*/
        pdfFileName = pdfFile.getName();
        return new Response().set(1,"doc_file"+dwgSubFileDirPath+File.separator+pdfFileName);
    }
    public List<ProductBomApproving> getList(Integer productApprovingId) {
        QueryWrapper<ProductBomApproving> query = Wrappers.query();
        query.eq("product_approving_id",productApprovingId);
        return mapper.selectList(query);
    }
}