zss
2023-11-07 3c34085a21511610477f555cebf3f6fa42272402
产品结构导入数据
已修改8个文件
已删除1个文件
327 ■■■■ 文件已修改
mes-basic/src/main/java/com/chinaztt/mes/basic/mapper/ParamMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mes-basic/src/main/java/com/chinaztt/mes/basic/service/impl/ParamServiceImpl.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mes-basic/src/main/resources/mapper/ParamMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mes-technology/src/main/java/com/chinaztt/mes/technology/controller/StructureController.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mes-technology/src/main/java/com/chinaztt/mes/technology/excel/StructureData.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mes-technology/src/main/java/com/chinaztt/mes/technology/excel/StructureUploadExtListener.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mes-technology/src/main/java/com/chinaztt/mes/technology/excel/StructureUploadListener.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mes-technology/src/main/java/com/chinaztt/mes/technology/service/impl/StructureServiceImpl.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mes-web/src/main/resources/bootstrap.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
mes-basic/src/main/java/com/chinaztt/mes/basic/mapper/ParamMapper.java
@@ -86,4 +86,6 @@
     * @return
     */
    List<ParamDTO> getLastParamById(@org.apache.ibatis.annotations.Param("paramDTO") ParamDTO paramDTO);
    List<String> getNos(String code);
}
mes-basic/src/main/java/com/chinaztt/mes/basic/service/impl/ParamServiceImpl.java
@@ -17,9 +17,6 @@
package com.chinaztt.mes.basic.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -33,9 +30,6 @@
import com.chinaztt.mes.basic.mapper.ParamMapper;
import com.chinaztt.mes.basic.service.ParamService;
import com.chinaztt.mes.basic.util.DictUtils;
import com.chinaztt.mes.common.util.easyexcel.CustemHandler;
import com.chinaztt.mes.common.util.easyexcel.EasyExcelUtils;
import com.chinaztt.mes.common.util.easyexcel.template.ParamTemplate;
import com.chinaztt.ztt.admin.api.entity.SysDictItem;
import com.chinaztt.ztt.common.core.util.R;
import lombok.AllArgsConstructor;
@@ -43,8 +37,8 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.stream.Collectors;
@@ -163,4 +157,16 @@
        }
    }
    private String codeMake() {
        // å›ºå®šå­—符串  GX + å¹´æœˆæ—¥ + 01
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
        String yrar = formatter.format(LocalDateTime.now());
        String code = "GX" + yrar;
        List<String> parameterItem = baseMapper.getNos(code);
        if (CollectionUtil.isEmpty(parameterItem)) {
            code = code + "01";
        }
        return code;
    }
}
mes-basic/src/main/resources/mapper/ParamMapper.xml
@@ -117,4 +117,10 @@
        WHERE A."id" = #{paramDTO.technologyOperationTemplateId}
        ORDER BY B.sort
    </select>
    <select id="getNos" resultType="java.lang.String">
        SELECT parameter_item
        FROM basic_param
        WHERE code=#{code}
    </select>
</mapper>
mes-technology/src/main/java/com/chinaztt/mes/technology/controller/StructureController.java
@@ -68,29 +68,9 @@
     */
    @PostMapping("/uploadExt")
    public R uploadExt(@RequestParam("file") MultipartFile file) {
        //ExcelReader excelReader = null;
        //try {
        //    ExcelReaderBuilder excelReaderBuilder = EasyExcel.read(file.getInputStream());
        //    excelReader = excelReaderBuilder.build();
        //    List<ReadSheet> sheets = excelReader.excelExecutor().sheetList();
        //    List<ReadSheet> readSheetList = new ArrayList<>();
        //    for (ReadSheet sheet : sheets) {
        //        ReadSheet readSheet = EasyExcel.readSheet(sheet.getSheetName()).registerReadListener(new StructureUploadExtListener(structureService)).build();
        //        readSheetList.add(readSheet);
        //    }
        //    excelReader.read(readSheetList);
        //} catch (IOException e) {
        //    e.printStackTrace();
        //    return R.failed(e.getMessage());
        //} finally {
        //    if (excelReader != null) {
        //        // è¿™é‡Œåƒä¸‡åˆ«å¿˜è®°å…³é—­ï¼Œè¯»çš„æ—¶å€™ä¼šåˆ›å»ºä¸´æ—¶æ–‡ä»¶ï¼Œåˆ°æ—¶ç£ç›˜ä¼šå´©çš„
        //        excelReader.finish();
        //    }
        //}
        ExcelReader excelReader = null;
        try {
            excelReader = EasyExcel.read(file.getInputStream(), StructureData.class, new StructureUploadListener(structureService, dictUtils)).build();
            excelReader = EasyExcel.read(file.getInputStream(), StructureData.class, new StructureUploadListener(structureService)).build();
            ReadSheet readSheet = EasyExcel.readSheet(0).build();
            ReadSheet readSheet2 = EasyExcel.readSheet(1).build();
            excelReader.read(readSheet,readSheet2);
@@ -110,27 +90,27 @@
     * ç«–着导入
     *
     * @param file
     * @return
     */
    @PostMapping("/upload")
    public R simpleRead(@RequestParam("file") MultipartFile file) {
        ExcelReader excelReader = null;
        try {
            excelReader = EasyExcel.read(file.getInputStream(), StructureData.class, new StructureUploadListener(structureService, dictUtils)).build();
            ReadSheet readSheet = EasyExcel.readSheet(0).build();
            ReadSheet readSheet2 = EasyExcel.readSheet(1).build();
            excelReader.read(readSheet,readSheet2);
        } catch (IOException e) {
            e.printStackTrace();
            return R.failed(e.getMessage());
        } finally {
            if (excelReader != null) {
                // è¿™é‡Œåƒä¸‡åˆ«å¿˜è®°å…³é—­ï¼Œè¯»çš„æ—¶å€™ä¼šåˆ›å»ºä¸´æ—¶æ–‡ä»¶ï¼Œåˆ°æ—¶ç£ç›˜ä¼šå´©çš„
                excelReader.finish();
            }
        }
        return R.ok();
    }
//     * @return
//     */
//    @PostMapping("/upload")
//    public R simpleRead(@RequestParam("file") MultipartFile file) {
//        ExcelReader excelReader = null;
//        try {
//            excelReader = EasyExcel.read(file.getInputStream(), StructureData.class, new StructureUploadListener(structureService)).build();
//            ReadSheet readSheet = EasyExcel.readSheet(0).build();
//            ReadSheet readSheet2 = EasyExcel.readSheet(1).build();
//            excelReader.read(readSheet,readSheet2);
//        } catch (IOException e) {
//            e.printStackTrace();
//            return R.failed(e.getMessage());
//        } finally {
//            if (excelReader != null) {
//                // è¿™é‡Œåƒä¸‡åˆ«å¿˜è®°å…³é—­ï¼Œè¯»çš„æ—¶å€™ä¼šåˆ›å»ºä¸´æ—¶æ–‡ä»¶ï¼Œåˆ°æ—¶ç£ç›˜ä¼šå´©çš„
//                excelReader.finish();
//            }
//        }
//        return R.ok();
//    }
    /**
     * æ ¹æ®é›¶ä»¶å·æŸ¥è¯¢é»˜è®¤BOM
mes-technology/src/main/java/com/chinaztt/mes/technology/excel/StructureData.java
@@ -25,6 +25,9 @@
    @ExcelProperty(value = "子件名称(可多填)")
    private String sonPartName;
    @ExcelProperty(value = "消耗工序")
    private String operationName;
    @ExcelProperty(value = "模具编号")
    private String sharpenerNo;
@@ -55,45 +58,7 @@
    @ExcelProperty(value = "包装信息")
    private String packingInfo;
    @ExcelProperty(value = "父件")
    private String fatherPartNo;
    @ExcelProperty(value = "系统描述")
    private String remark;
    @ExcelProperty(value = "版本")
    private String fatherVersion;
    @ExcelProperty(value = "结构类型")
    private String structureType;
    @ExcelProperty(value = "替代")
    private String alternativeNo;
    @ExcelProperty(value = "替代描述")
    private String alternativeDesc;
    @ExcelProperty(value = "行项号")
    private String lineItemNo;
    @ExcelProperty(value = "子件")
    private String childPartNo;
    @ExcelProperty(value = "子件版本")
    private String childVersion;
    @ExcelProperty(value = "子件描述")
    private String childRemark;
    @ExcelProperty(value = "单位数量")
    private String qpa;
    @ExcelProperty(value = "单位")
    private String unit;
    @ExcelProperty(value = "盘数")
    private String diskNum;
    @ExcelProperty(value = "消耗工序")
    private String operationName;
}
mes-technology/src/main/java/com/chinaztt/mes/technology/excel/StructureUploadExtListener.java
ÎļþÒÑɾ³ý
mes-technology/src/main/java/com/chinaztt/mes/technology/excel/StructureUploadListener.java
@@ -21,16 +21,14 @@
     * å‡è®¾è¿™ä¸ªæ˜¯ä¸€ä¸ªDAO,当然有业务逻辑这个也可以是一个service。当然如果不用存储这个对象没用。
     */
    private StructureService structureService;
    private DictUtils dictUtils;
    /**
     * å¦‚果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来
     *
     * @param structureService
     */
    public StructureUploadListener(StructureService structureService,DictUtils dictUtils) {
    public StructureUploadListener(StructureService structureService) {
        this.structureService = structureService;
        this.dictUtils = dictUtils;
    }
    /**
@@ -41,23 +39,6 @@
     */
    @Override
    public void invoke(StructureData data, AnalysisContext context) {
        Map<String, String> dicbomtype = dictUtils.getDicKey("bom_type_db");
        if (StringUtils.isEmpty(data.getAlternativeNo())) {
            data.setAlternativeNo("*");
        }
        //if (StringUtils.isEmpty(data.getChildPartNo()) || StringUtils.isEmpty(data.getChildVersion()) || StringUtils.isEmpty(data.getFatherPartNo()) || StringUtils.isEmpty(data.getFatherVersion())) {
        //    throw new RuntimeException("缺少零件数据编号或者版本");
        //}
        //if (StringUtils.isEmpty(data.getQpa())) {
        //    throw new RuntimeException("缺少数量");
        //}
        //if (StringUtils.isEmpty(data.getLineItemNo())) {
        //    throw new RuntimeException("缺少行项号");
        //}
        //if (StringUtils.isEmpty(data.getOperationName())) {
        //    throw new RuntimeException("缺少工序");
        //}
        data.setStructureType(StringUtils.isEmpty(data.getStructureType()) ? "M" : dicbomtype.get(data.getStructureType()));
        list.add(data);
        // è¾¾åˆ°BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
        if (list.size() >= BATCH_COUNT) {
mes-technology/src/main/java/com/chinaztt/mes/technology/service/impl/StructureServiceImpl.java
@@ -48,6 +48,7 @@
import com.chinaztt.ztt.common.core.util.R;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
@@ -257,58 +258,41 @@
    @Override
    public void importExcel(List<StructureData> list) {
        list.forEach(System.out::println);
        System.out.println("================================");
        return;
        //if (CollectionUtil.isEmpty(list)) {
        //    return;
        //}
        //List<String> uinck = new ArrayList<>();
        //for (StructureData data : list) {
        //    Part part = partMapper.selectOne(Wrappers.<Part>lambdaQuery().eq(Part::getPartNo, data.getFatherPartNo()).eq(Part::getEngChgLevel, data.getFatherVersion()));
        //    if (part == null) {
        //        throw new RuntimeException("零件号:" + data.getFatherPartNo() + "不存在");
        //    }
        //    Structure structure = baseMapper.selectOne(Wrappers.<Structure>lambdaQuery()
        //            .eq(Structure::getPartId, part.getId())
        //            .eq(Structure::getBomTypeDb, data.getStructureType())
        //            .eq(Structure::getAlternativeNo, data.getAlternativeNo()));
        //    if (structure == null) {
        //        structure = new Structure();
        //        structure.setPartId(part.getId());
        //        structure.setVersion(data.getFatherVersion());
        //        structure.setAlternativeDesc(data.getAlternativeDesc());
        //        structure.setActive(true);
        //        structure.setBomTypeDb(data.getStructureType());
        //        structure.setIfsSync(false);
        //        structure.setAlternativeNo(data.getAlternativeNo());
        //        baseMapper.insert(structure);
        //    }
        //    if (uinck.contains(structure.getId() + "_" + data.getLineItemNo())) {
        //        throw new RuntimeException("零件号:" + part.getPartNo() + "行项号重复");
        //    }
        //    Part childPart = partMapper.selectOne(Wrappers.<Part>lambdaQuery().eq(Part::getPartNo, data.getChildPartNo()).eq(Part::getEngChgLevel, data.getChildVersion()));
        //    if (childPart == null) {
        //        throw new RuntimeException("零件号:" + data.getChildPartNo() + "不存在");
        //    }
        //    StructureComponent component = new StructureComponent();
        //    component.setStructureId(structure.getId());
        //    component.setPartId(childPart.getId());
        //    component.setPlanningMethod(childPart.getPlanningMethod());
        //    component.setQpa(new BigDecimal(data.getQpa()));
        //    component.setLineItemNo(Integer.valueOf(data.getLineItemNo()));
        //    component.setDiscNum(StringUtils.isEmpty(data.getDiskNum()) ? null : new Long(data.getDiskNum()));
        //    //查询工序 å¦‚果有多个获取第一个
        //    List<Operation> operationList = operationMapper.selectList(Wrappers.<Operation>lambdaQuery()
        //            .eq(Operation::getName, data.getOperationName())
        //            .eq(Operation::getActive, true).orderByAsc(Operation::getId));
        //    if (CollectionUtil.isEmpty(operationList)) {
        //        throw new RuntimeException("工序" + data.getOperationName() + "不存在");
        //    }
        //    component.setOperationId(operationList.get(0).getId());
        //    structureComponentMapper.insert(component);
        //    uinck.add(structure.getId() + "_" + data.getLineItemNo());
        //}
        if (CollectionUtil.isEmpty(list)) {
            return;
        }
        for (StructureData data : list) {
            List<Part> parts = partMapper.selectList(Wrappers.<Part>lambdaQuery().eq(Part::getPartNo, data.getPartNo()));
            Part part = parts.get(0);
            if (part == null) {
                throw new RuntimeException("零件号:" + data.getPartNo() + "不存在");
            }
            Structure structure = baseMapper.selectOne(Wrappers.<Structure>lambdaQuery().eq(Structure::getPartId, part.getId()));
            if (structure == null) {
                structure = new Structure();
                BeanUtils.copyProperties(data, structure);
                structure.setPartId(part.getId());
                structure.setActive(true);
                structure.setBomTypeDb("M");
                structure.setIfsSync(false);
                structure.setAlternativeNo("*");
                baseMapper.insert(structure);
            }
            List<Part> childParts = partMapper.selectList(Wrappers.<Part>lambdaQuery().eq(Part::getPartNo, data.getSonPartNo()));
            Part childPart = childParts.get(0);
            if (childPart == null) {
                throw new RuntimeException("零件号:" + data.getSonPartNo() + "不存在");
            }
            List<Operation> operations = operationMapper.selectList(Wrappers.<Operation>lambdaQuery().eq(Operation::getName, data.getOperationName()));
            Operation operation = operations.get(0);
            StructureComponent component = new StructureComponent();
            component.setStructureId(structure.getId());
            component.setPartId(childPart.getId());
            component.setPlanningMethod(childPart.getPlanningMethod());
            component.setQpa(new BigDecimal(1));// todo: äº§å“ç»“构导入数量,还缺一个行号
            component.setOperationId(operation.getId());
            structureComponentMapper.insert(component);
        }
    }
    @Override
mes-web/src/main/resources/bootstrap.yml
@@ -8,7 +8,7 @@
      #      password: postgres123
      password: root2022
      #      å°„频开发数据库
      url: jdbc:postgresql://127.0.0.1:5432/postgres
      url: jdbc:postgresql://106.13.194.57:9015/postgres
  application:
    name: ztt-mes
  cloud: