whycxzp
2023-06-08 de0b002f235ead8eaf8032f6b96e6eb6a92d6ee2
物料规范调整及校验输出
3个文件已修改
71 ■■■■ 已修改文件
src/main/java/com/whyc/constant/MaterialNamingStandard.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/controller/MaterialController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/MaterialService.java 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/constant/MaterialNamingStandard.java
@@ -6,10 +6,10 @@
 * 物料命名规范正则
 */
public enum MaterialNamingStandard {
    RES_0311_0312("电阻","封装形式-电阻类型,例如:贴片电阻-通用","[\\u4E00-\\u9FA5]*电阻-[\\u4E00-\\u9FA5]*","电阻值±精度_功率_温度系数_封装形式(贴片),例如:1K±1%_1/8W_±100ppm_R0805","[0-9]+[a-zA-Z]+±[0-9]+%_[0-9]+[/0-9]*[A-Z]_±[0-9]+[a-z]+[_a-zA-Z0-9]*"),
    CAPACITOR_TP_0301("贴片电容","封装形式-电容类型,例如:贴片电容-陶瓷","[\\u4E00-\\u9FA5]*电容-[\\u4E00-\\u9FA5]*","容值±误差_电压 材质_封装,例如:10nF±10%_50V X7R_C0805","[0-9]+[a-zA-Z]+±[0-9]+%_[0-9]+[a-zA-Z]*[vV][\\s]+[a-zA-Z0-9]+_[_a-zA-Z0-9]*"),
    CAPACITOR_CJ_0301_0302("插件电容-无极","封装形式-电容类型,例如:插件电容-CBB","[\\u4E00-\\u9FA5]*电容-[\\u4E00-\\u9FA5]*","容值/电压±误差_材质_脚距*宽度(mm),例如:10nF/1000V±10%_CBB_7.62*5.08","[0-9]+[a-zA-Z]+/[0-9]+[a-zA-Z]*[vV]±[0-9]+%_[a-zA-Z0-9]+_[0-9]*.*[0-9]*\\*[0-9]*.*[0-9]*"),
    CAPACITOR_DJ_0301_0302("插件电容-电解","封装形式-电容类型,例如:插件电容-电解","[\\u4E00-\\u9FA5]*电容-[\\u4E00-\\u9FA5]*","容值/电压±误差_温度℃_系列-封装(数值x数值)_寿命,例如:1000uF/63V±20%_105℃_CD294BW-35x50_2000H","[0-9]+[a-zA-Z]+/[0-9]+[a-zA-Z]*[vV]±[0-9]+%_[0-9]+℃_[a-zA-Z0-9]+-[0-9]+x[0-9]+_[0-9]+H"),
    RES_0311_0312("电阻","封装形式-电阻类型,例如:贴片电阻-通用","[\\u4E00-\\u9FA5]*电阻-[\\u4E00-\\u9FA5]*","电阻值±精度_功率_温度系数_封装形式(贴片),例如:1K±1%_1/8W_±100ppm_R0805",num()+"[a-zA-Z]+±[0-9.]+%_[0-9]+[/0-9]*[A-Z]_±[0-9]+[a-z]+[_a-zA-Z0-9.\\-\\_]*"),
    CAPACITOR_TP_0301("贴片电容","封装形式-电容类型,例如:贴片电容-陶瓷","[\\u4E00-\\u9FA5]*电容-[\\u4E00-\\u9FA5]*","容值±误差_电压 材质_封装,例如:10nF±10%_50V X7R_C0805","[0-9]+[a-zA-Z]+±[0-9.]+%_[0-9]+[a-zA-Z]*[vV][\\s]+[a-zA-Z0-9]+_[_a-zA-Z0-9.\\-\\_]*"),
    CAPACITOR_CJ_0301_0302("插件电容-无极","封装形式-电容类型,例如:插件电容-CBB","[\\u4E00-\\u9FA5]*电容-[\\u4E00-\\u9FA5]*","容值/电压±误差_材质_脚距*宽度(mm),例如:10nF/1000V±10%_CBB_7.62*5.08","[0-9]+[a-zA-Z]+/[0-9]+[a-zA-Z]*[vV]±[0-9.]+%_[a-zA-Z0-9]+_[0-9]*.*[0-9]*\\*[0-9]*.*[0-9]*"),
    CAPACITOR_DJ_0301_0302("插件电容-电解","封装形式-电容类型,例如:插件电容-电解","[\\u4E00-\\u9FA5]*电容-[\\u4E00-\\u9FA5]*","容值/电压±误差_温度℃_系列-封装(数值x数值)_寿命,例如:1000uF/63V±20%_105℃_CD294BW-35x50_2000H","[0-9]+[a-zA-Z]+/[0-9]+[a-zA-Z]*[vV]±[0-9.]+%_[0-9]+℃_[a-zA-Z0-9]+-[0-9]+x[0-9]+_[0-9]+H"),
    DIODE_WY_0321_0322("二极管-稳压","封装形式-二极管类型,例如:插件二极管-稳压","[\\u4E00-\\u9FA5]*二极管-稳压","型号编码_电压功率_封装形式,例如:1N4742_12V1W_DO-41",all()+"_"+num()+lettersLowCase0()+"V"+num()+lettersLowCase0()+"W_"+allWithSymbol1()),
    DIODE_FWY_0321_0322("二极管-非稳压","封装形式-二极管类型,例如:插件二极管-整流","[\\u4E00-\\u9FA5]*二极管-[\\u4E00-\\u9FA5]+","型号编码_电流电压_封装形式,例如:1N4007_1A1000V_DO-41",all()+"_"+num()+lettersLowCase0()+"A"+num()+lettersLowCase0()+"V_"+allWithZhCN()),
    DIODE_TP_0321("贴片-发光二极管","封装形式-二极管类型,例如:贴片-发光二极管","贴片-发光二极管","LED_材质_颜色_封装,例如:LED_Gap_NG_0603","LED_"+letters()+"_"+lettersUpCase()+"_"+allWithZhCN()),
src/main/java/com/whyc/controller/MaterialController.java
@@ -11,6 +11,7 @@
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
@@ -97,4 +98,11 @@
        Material material = ActionUtil.getGson().fromJson(materialStr, Material.class);
        return service.updatePicOrDwg(file,material);
    }
    @PostMapping("checkNaming")
    @ApiOperation("命名规范校验")
    public void checkNaming( HttpServletResponse response,@RequestParam MultipartFile file) throws IOException, InvalidFormatException {
        service.checkNaming(file.getInputStream(),response);
    }
}
src/main/java/com/whyc/service/MaterialService.java
@@ -5,6 +5,7 @@
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;
@@ -24,15 +25,9 @@
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
@@ -537,4 +532,48 @@
    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);
    }
}