src/main/java/com/whyc/service/MaterialService.java
@@ -5,10 +5,12 @@
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.MaterialHistory;
import com.whyc.pojo.ProductBom;
import com.whyc.util.DateUtil;
import com.whyc.util.*;
@@ -24,21 +26,19 @@
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.ArrayList;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
@Service
public class MaterialService {
    @Autowired(required = false)
    private MaterialMapper mapper;
    @Autowired
    private MaterialHistoryService mhService;
    //查询所有的散装件信息加设置了替换关系的子件信息
    /*public Response getAllMaterial(String category,String subCode,String subName,String subModel,int pageCurr,int pageSize) {
        PageHelper.startPage(pageCurr,pageSize);
@@ -80,6 +80,27 @@
    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;
        // 需要统计附件状态 存在未锁定的附件:1 无附件或者附件全部锁定: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();//获取该文件夹下的所有文件以及目录的名字
                        if(fileNames.length==m.getAttachLocks().size()){
                            flag=0;
                        }else{
                            flag=1;
                        }
                    }
                }
                m.setAttachFlag(flag);
            }
        }
        PageInfo pageInfo=new PageInfo(list);
        return new Response().setII(1,list.size()>0,pageInfo,"查询所有物料(分页,模糊查询)");
    }
@@ -274,15 +295,15 @@
                        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;
                            case 6:{material.setMaterial(cellValue);}break;
                            case 7:{material.setThickness(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 9:{material.setSurfaceDetail(cellValue);}break;
                            //case 10:{material.setNotes(cellValue);}break;
                            case 11:{
                                //图片从1开始,0是yc logo
                                PictureData pictureData = allPictures.get(l - 7);
@@ -308,6 +329,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查询返回附件文件夹下所有的文件列表
@@ -434,6 +468,56 @@
        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 dirPathDB = "doc_file" + File.separator + "material" + File.separator + material.getSubCode() + "-" + material.getSubModel();
        String dirPath = CommonUtil.getRootFile() + "material" + File.separator + material.getSubCode() + "-" + material.getSubModel();
        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);
        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);
        //路径不存在,说明是首次上传,设置物料对应的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, "上传完成");
    }
    public Response dwgCompare(int materialId, int materialId2) throws IOException {
        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletResponse response = servletRequestAttributes.getResponse();
@@ -457,7 +541,7 @@
        }
        ByteArrayOutputStream stream = ImageDiff.compareImages(absoluteDwgPngPath, absoluteDwgPngPath2);
        return new Response().setII(1,true, Base64.encodeBase64(stream.toByteArray()),null);
        return new Response().setII(1,true, Base64.encodeBase64String(stream.toByteArray()),null);
        //String fileName = "name.png";
        //OutputStream toClient = null;
        //try {
@@ -477,4 +561,62 @@
        //
        //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();
        //取第一个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);
    }
}