whycxzp
2024-01-03 66db1d15cf5d4b51a346a42b66f0505bd7f31ce0
src/main/java/com/whyc/service/MaterialService.java
@@ -1,16 +1,14 @@
package com.whyc.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
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.MaterialCheckDTO;
import com.whyc.dto.Response;
import com.whyc.mapper.MaterialMapper;
import com.whyc.pojo.DocUser;
import com.whyc.pojo.Material;
import com.whyc.pojo.ProductBom;
import com.whyc.pojo.*;
import com.whyc.util.DateUtil;
import com.whyc.util.*;
import org.apache.commons.codec.binary.Base64;
@@ -25,10 +23,7 @@
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@@ -37,6 +32,13 @@
public class MaterialService {
    @Autowired(required = false)
    private MaterialMapper mapper;
    @Autowired
    private MaterialHistoryService mhService;
    @Autowired
    private AttachLockService attachLockService;
    //查询所有的散装件信息加设置了替换关系的子件信息
    /*public Response getAllMaterial(String category,String subCode,String subName,String subModel,int pageCurr,int pageSize) {
        PageHelper.startPage(pageCurr,pageSize);
@@ -78,6 +80,33 @@
    public Response getMaterialLimit(String subCode, String subName, String subModel, int pageCurr, int 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,pageInfo,"查询所有物料(分页,模糊查询)");
    }
@@ -193,9 +222,24 @@
        return mapper.getListByCodeAndModelList2(bomList);
    }
    public Material getByCodeAndModel(String subCode, String subModel) {
    /**
     *
     * @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).eq("sub_model",subModel).last(" limit 1");
        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);
    }
@@ -272,7 +316,7 @@
                        cellValue = cell.getStringCellValue();
                        switch (m){
                            case 2:{material.setCategory(cellValue);}break;
                            //case 2:{material.setCategory(cellValue);}break;
                            case 3:{material.setSubCode(cellValue);}break;
                            case 4:{material.setSubName(cellValue);}break;
                            case 5:{material.setSubModel(cellValue);}break;
@@ -306,6 +350,19 @@
                return response.set(1,false,"拒绝解析,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查询返回附件文件夹下所有的文件列表
@@ -368,8 +425,10 @@
        List<String> currentFileList = new LinkedList<>();
        List<String> uploadingFileList = new LinkedList<>();
        String dirPathDB = "doc_file" + File.separator + "material" + File.separator + material.getId() + "-"+ material.getSubCode() + "-" + material.getSubModel();
        String dirPath = CommonUtil.getRootFile() + "material" + File.separator + material.getId() + "-"+ material.getSubCode() + "-" + material.getSubModel();
        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);
        Date now = new Date();
@@ -433,6 +492,39 @@
    }
    /**
     * 转移 被复制的附件,到新的物料
     * @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);
        //设置物料对应的fileUrl及物料状态
        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
     */
@@ -440,9 +532,10 @@
    public Response updatePicOrDwg(MultipartFile multipartFile, Material material) throws IOException {
        List<String> currentFileList = new LinkedList<>();
        List<String> uploadingFileList = new LinkedList<>();
        String dirPathDB = "doc_file" + File.separator + "material" + File.separator + material.getId() + "-" + material.getSubCode() + "-" + material.getSubModel();
        String dirPath = CommonUtil.getRootFile() + "material" + File.separator + material.getId() + "-" + material.getSubCode() + "-" + material.getSubModel();
        String subModel = material.getSubModel();
        subModel = MaterialSpecialCharUtil.transfer(subModel);
        String dirPathDB = "doc_file" + File.separator + "material" + File.separator + material.getSubCode() + "-" + subModel;
        String dirPath = CommonUtil.getRootFile() + "material" + File.separator + material.getSubCode() + "-" + subModel;
        File dirFile = new File(dirPath);
        Date now = new Date();
@@ -460,14 +553,25 @@
        multipartFile.transferTo(zipFile);
        //路径不存在,说明是首次上传,设置物料对应的fileUrl
        //同时在物料历史里面添加记录
        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);
        return new Response().set(1, true, "上传完成");
    }
@@ -523,28 +627,85 @@
        return mapper.getSameSubCodeAndModel(bomList);
    }
    public void updateFillCategory(String sign) {
        if(sign.equals("perryhsu")){ //允许操作
            //联查产品物料历史表,获取物料对应的类别
            List<Material> materialList = mapper.getCategory();
            List<Material> materialWithOneCategoryList = new LinkedList<>();
            Map<Integer, List<Material>> materialIdMap = materialList.stream().collect(Collectors.groupingBy(Material::getId));
            Set<Integer> materialIdSet = materialIdMap.keySet();
            for (Integer materialId : materialIdSet) {
                List<Material> temp = materialIdMap.get(materialId);
                if(temp.size()==1){
                    materialWithOneCategoryList.add(temp.get(0));
                }else{
                    System.err.println("物料id:"+materialId+"对应"+temp.size()+"个类别"+temp.get(0).getCategory()+"/"+temp.get(1).getCategory());
                }
            }
            //将类别回填到物料表
            for (int i = 0; i < materialWithOneCategoryList.size(); i++) {
                Material material = materialWithOneCategoryList.get(i);
                UpdateWrapper<Material> update = Wrappers.update();
                update.set("category",material.getCategory()).eq("id",material.getId());
                mapper.update(null,update);
            }
    public void checkNaming(InputStream inputStream, HttpServletResponse response) throws IOException, InvalidFormatException {
        List<MaterialCheckDTO> checkList = new LinkedList<>();
        Workbook workbook = null;
        workbook = WorkbookFactory.create(inputStream);
        inputStream.close();
        //取第一个sheet表
        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,"物料推送弹窗使用");
    }
}