From 6892a1af9b745b577cd86d019e7be754f3c94832 Mon Sep 17 00:00:00 2001 From: yxw Date: Thu, 2 Nov 2023 11:04:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E4=BD=8D=E4=BF=A1=E6=81=AF=E4=BA=8C?= =?UTF-8?q?=E5=BC=80=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../excel/SxEquipmentCheckExcelService.java | 60 +++-- .../excel/jx/WorkCellExtExcelService.java | 300 +++++++++++++++++++++ .../ext/mes/pojo/bean/MesEquipmentCheckDetail.java | 4 + .../i3plus/ext/mes/pojo/util/MesExtEnumUtil.java | 3 +- 4 files changed, 340 insertions(+), 27 deletions(-) create mode 100644 modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/jx/WorkCellExtExcelService.java diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/SxEquipmentCheckExcelService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/SxEquipmentCheckExcelService.java index c10e191..db1b1cb 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/SxEquipmentCheckExcelService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/SxEquipmentCheckExcelService.java @@ -158,46 +158,53 @@ public class SxEquipmentCheckExcelService implements IExcelImportExtService { equNo = row.getCell(2, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); } catch (Exception e) { } + //设备管理号 + String equManageNo = null; + try { + row.getCell(3).setCellType(CellType.STRING); + equNo = row.getCell(3, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + } catch (Exception e) { + } //设备名称 String equName = null; try { - row.getCell(3).setCellType(CellType.STRING); - equName = row.getCell(3, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + row.getCell(4).setCellType(CellType.STRING); + equName = row.getCell(4, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); } catch (Exception e) { } //项目内容 String projectContent = null; try { - row.getCell(4).setCellType(CellType.STRING); - projectContent = row.getCell(4, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + row.getCell(5).setCellType(CellType.STRING); + projectContent = row.getCell(5, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); } catch (Exception e) { } //点检方法 String checkMethod = null; try { - row.getCell(5).setCellType(CellType.STRING); - checkMethod = row.getCell(5, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + row.getCell(6).setCellType(CellType.STRING); + checkMethod = row.getCell(6, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); } catch (Exception e) { } //类型 String checkType = null; try { - row.getCell(6).setCellType(CellType.STRING); - checkType = row.getCell(6, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + row.getCell(7).setCellType(CellType.STRING); + checkType = row.getCell(7, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); } catch (Exception e) { } //上限值 String upLimits = null; try { - row.getCell(7).setCellType(CellType.STRING); - upLimits = row.getCell(7, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + row.getCell(8).setCellType(CellType.STRING); + upLimits = row.getCell(8, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); } catch (Exception e) { } //下限值 String downLimits = null; try { - row.getCell(8).setCellType(CellType.STRING); - downLimits = row.getCell(8, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + row.getCell(9).setCellType(CellType.STRING); + downLimits = row.getCell(9, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); } catch (Exception e) { } @@ -235,33 +242,33 @@ public class SxEquipmentCheckExcelService implements IExcelImportExtService { //校验项目内容 if (StringUtils.isEmpty(projectContent)) { errorNum ++; - cellNum += "E;"; - errorInfo += "第E列数据必填;"; + cellNum += "F;"; + errorInfo += "第F列数据必填;"; } else { if (projectContent.length() > 255) { errorNum++; - cellNum += "E;"; - errorInfo += "第E列数据长度不能超过255个字符;"; + cellNum += "F;"; + errorInfo += "第F列数据长度不能超过255个字符;"; } } //校验点击方法 if (StringUtils.isEmpty(checkMethod)) { errorNum ++; - cellNum += "F;"; - errorInfo += "第F列数据必填;"; + cellNum += "G;"; + errorInfo += "第G列数据必填;"; } //校验点击方法 if (StringUtils.isEmpty(checkType)) { errorNum ++; - cellNum += "G;"; - errorInfo += "第G列数据必填;"; + cellNum += "H;"; + errorInfo += "第H列数据必填;"; } else { if (StringUtils.isEmpty(MesExtEnumUtil.MES_EQUIPMENT_CHECK_TYPE.valueOfDescription(checkType))) { errorNum ++; - cellNum += "G;"; - errorInfo += "第G列数据无效;"; + cellNum += "H;"; + errorInfo += "第H列数据无效;"; } } @@ -272,13 +279,13 @@ public class SxEquipmentCheckExcelService implements IExcelImportExtService { //校验 工作中心代码+工位代码+设备代码+项目内容+点检方法+类型 是否已经存在数据库 if (StringUtils.isEmpty(errorInfo) && !CollectionUtils.isEmpty(equipmentCheckMap) && equipmentCheckMap.containsKey(key)) { errorNum ++; - cellNum += "A+B+C+E+F+G;"; - errorInfo += "第A+B+C+E+F+G列数据已经存在于数据库;"; + cellNum += "A+B+C+F+G+H;"; + errorInfo += "第A+B+C+F+G+H列数据已经存在于数据库;"; } } else { errorNum ++; - cellNum += "A+B+C+E+F+G;"; - errorInfo += "第A+B+C+E+F+G列数据跟第" + existMap.get(key) + "行的第A+B+C+E+F+G列数据重复;"; + cellNum += "A+B+C+F+G+H;"; + errorInfo += "第A+B+C+F+G+H列数据跟第" + existMap.get(key) + "行的第A+B+C+F+G+H列数据重复;"; } DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(AuthUtil.getOrganizeCode()); @@ -345,6 +352,7 @@ public class SxEquipmentCheckExcelService implements IExcelImportExtService { equipmentCheck.setWorkCellCode(workCellCode); equipmentCheck.setWorkCellName(workCellName); equipmentCheck.setEquNo(equNo); + equipmentCheck.setEquManageNo(equManageNo); equipmentCheck.setEquName(equName); equipmentCheck.setProjectContent(projectContent); equipmentCheck.setCheckMethod(checkMethod); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/jx/WorkCellExtExcelService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/jx/WorkCellExtExcelService.java new file mode 100644 index 0000000..806cf05 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/jx/WorkCellExtExcelService.java @@ -0,0 +1,300 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.excel.jx; + +import cn.estsh.i3plus.mes.api.iservice.busi.IExcelImportService; +import cn.estsh.i3plus.mes.apiservice.serviceimpl.busi.CommonService; +import cn.estsh.i3plus.mes.apiservice.util.MesCommonUtil; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.util.MesConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; +import cn.estsh.i3plus.pojo.mes.model.ExcelImportErrorModel; +import cn.estsh.i3plus.pojo.mes.model.ExcelImportResultModel; +import cn.estsh.i3plus.pojo.mes.repository.MesWorkCellRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesWorkCenterRepository; +import org.apache.poi.ss.usermodel.CellType; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @Description : 工位导入,支持编辑 + * @Reference : + * @Author : wangjie + * @CreateDate : 2019-04-23 + * @Modify: + **/ +@Service +public class WorkCellExtExcelService implements IExcelImportService { + + @Autowired + private MesWorkCenterRepository workCenterRepository; + + @Autowired + private MesWorkCellRepository workCellRepository; + + @Autowired + private CommonService commonService; + + /** + * 工位导入 + * @param workbook + * @param organizeCode + * @param userName + * @return + */ + @Override + public ExcelImportResultModel insertDataByExcel(Workbook workbook, String organizeCode, String userName) { + //读取表格 + ExcelImportResultModel excelImportResultModel = this.sheetExtractMesWorkCell(workbook.getSheetAt(0), organizeCode, userName); + //数据入库 + this.insertExcelMesWorkCell(excelImportResultModel); + return excelImportResultModel; + } + + /** + * 工位导入-读取表格 + * @param sheetAt + * @param organizeCode + * @param userName + * @return + */ + private ExcelImportResultModel sheetExtractMesWorkCell(Sheet sheetAt, String organizeCode, String userName) { + //从0行开始读取 + int totalNumberOfRows = sheetAt.getLastRowNum() + 1; + + //MesWorkCell集合 + List workCellList = new ArrayList<>(); + + //成功数量 + Integer successRowNum = 0; + //失败数量 + Integer failRowNum = 0; + //错误的行号 + String errorRows = ""; + + //错误行信息集合 + List excelImportErrorModels = new ArrayList<>(); + + //用于EXCEL表中的工位代码唯一校验,key:workCenterCode&workCellCode,value:row + Map workCenterCodeAndWorkCellCodeMap = new HashMap<>(); + + //查询工位表 + List workCells = workCellRepository.findByProperty(new String[]{MesConstWords.ORGANIZE_CODE, MesConstWords.IS_DELETED}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()}); + Map> workCellMap = workCells.stream().filter(workCell -> null != workCell) + .collect(Collectors.groupingBy(workCell -> (workCell.getWorkCenterCode() + "&" + workCell.getWorkCellCode()))); + + // 查询生产线表 + Map workCenterCodeEntityMap; + try { + workCenterCodeEntityMap = MesCommonUtil.getCodeEntityMap(workCenterRepository, "workCenterCode", organizeCode, "生产线表"); + } catch (Exception e) { + workCenterCodeEntityMap = null; + } + + //从excel表的第5行数据开始导入,getFirstRowNum是从0行开始读取 + for (int i = (sheetAt.getFirstRowNum() + 4); i < totalNumberOfRows; i ++) { + Row row = sheetAt.getRow(i); + //空行跳过 + if (null == row) { + continue; + } + //获取总列数 + Short lastCellNum = row.getLastCellNum(); + if (lastCellNum > 0) { + + int rowNum = i + 1; //当前行号 + int errorNum = 0; //错误数量 + String cellNum = ""; //错误列号 + String errorInfo = ""; //错误信息 + + //工位代码 + try { + //第一列必须有值,否则跳过 + row.getCell(0).setCellType(CellType.STRING); + } catch (Exception e) { + continue; + } + String workCellCode = row.getCell(0, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + //工位名称 + String workCellName = null; + try { + row.getCell(1).setCellType(CellType.STRING); + workCellName = row.getCell(1, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + } catch (Exception e) { + } + //生产线代码 + String workCenterCode = null; + try { + row.getCell(2).setCellType(CellType.STRING); + workCenterCode = row.getCell(2, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + } catch (Exception e) { + } + //工位类型 + String workCellType = null; + try { + row.getCell(3).setCellType(CellType.STRING); + workCellType = row.getCell(3, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + } catch (Exception e) { + } + //工位等级 + String gradeName = null; + try { + row.getCell(4).setCellType(CellType.STRING); + gradeName = row.getCell(4, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + } catch (Exception e) { + } + //序号 + String seq = null; + try { + row.getCell(5).setCellType(CellType.STRING); + seq = row.getCell(5, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim(); + } catch (Exception e) { + } + //区域代码 + String areaCode = null; + + boolean isExist = false; + //校验 工位代码+生产线 不重复 + if (!workCenterCodeAndWorkCellCodeMap.containsKey(workCenterCode + "&" + workCellCode)) { + workCenterCodeAndWorkCellCodeMap.put(workCenterCode + "&" + workCellCode, String.valueOf(rowNum)); + //校验 工位代码+生产线 是否已经存在数据库 + if (!StringUtils.isEmpty(workCenterCode) && !StringUtils.isEmpty(workCellCode) && !CollectionUtils.isEmpty(workCellMap) + && workCellMap.containsKey(workCenterCode + "&" + workCellCode)) { + isExist = true; + } + } else { + errorNum ++; + cellNum += "AC;"; + errorInfo += "第A+C列数据跟第" + workCenterCodeAndWorkCellCodeMap.get(workCenterCode + "&" + workCellCode) + "行的第A+C列数据重复;"; + } + //校验工位名称 + if (StringUtils.isEmpty(workCellName)) { + errorNum ++; + cellNum += "B;"; + errorInfo += "第B列数据必填;"; + } + //校验生产线代码 + if (StringUtils.isEmpty(workCenterCode)) { + errorNum ++; + cellNum += "C;"; + errorInfo += "第C列数据必填;"; + } else { + if (CollectionUtils.isEmpty(workCenterCodeEntityMap) || + (!CollectionUtils.isEmpty(workCenterCodeEntityMap) && !workCenterCodeEntityMap.containsKey(workCenterCode))) { + errorNum ++; + cellNum += "C;"; + errorInfo += "第C列数据无效;"; + } else { + MesWorkCenter workCenter = (MesWorkCenter) workCenterCodeEntityMap.get(workCenterCode); + if (null != workCenter) { + areaCode = workCenter.getAreaCode(); + } + } + } + //校验工位类型 + if (StringUtils.isEmpty(workCellType)) { + errorNum ++; + cellNum += "D;"; + errorInfo += "第D列数据必填;"; + } else if (!StringUtils.isEmpty(workCellType) && StringUtils.isEmpty(MesEnumUtil.MES_WORK_CELL_TYPE.descriptionOfValue(workCellType))) { + errorNum ++; + cellNum += "D;"; + errorInfo += "第D列数据无效;"; + } + + //校验工位等级 + Integer grade = null; + if (!StringUtils.isEmpty(gradeName)) { + + grade = MesEnumUtil.WORK_CELL_GRADE.descriptionOfValue(gradeName); + + if (grade == null) { + errorNum ++; + cellNum += "E;"; + errorInfo += "第E列数据无效;"; + } + + } + + //校验序号 + if (StringUtils.isEmpty(seq)) { + errorNum ++; + cellNum += "F;"; + errorInfo += "第F列数据必填;"; + } else { + try { + Integer.valueOf(seq); + } catch (NumberFormatException e) { + errorNum ++; + cellNum += "F;"; + errorInfo += "第F列数据无效;"; + } + } + + //没有错误的时候,封装MesWorkCell + if (errorNum == 0) { + + MesWorkCell workCell; + if(isExist){ + workCell = workCellMap.get(workCenterCode + "&" + workCellCode).get(0); + ConvertBean.serviceModelUpdate(workCell,userName); + }else{ + workCell = new MesWorkCell(); + ConvertBean.serviceModelInitialize(workCell, userName); + } + workCell.setWorkCellCode(workCellCode); + workCell.setWorkCellName(workCellName); + workCell.setWorkCenterCode(workCenterCode); + workCell.setAreaCode(areaCode); + workCell.setWorkCellType(MesEnumUtil.MES_WORK_CELL_TYPE.descriptionOfValue(workCellType)); + workCell.setGrade(grade); + workCell.setSeq(Integer.valueOf(seq)); + workCell.setOrganizeCode(organizeCode); + + workCellList.add(workCell); + + successRowNum ++; + } else { + //封装错误行信息ExcelImportErrorModel + excelImportErrorModels = commonService.getExcelImportErrorModels(excelImportErrorModels, rowNum, errorNum, cellNum, errorInfo); + + errorRows += rowNum + ";"; + failRowNum ++; + } + } + } + + //校验EXCEL数据 + commonService.checkExcelData(failRowNum, successRowNum, errorRows); + + //封装返回结果 + ExcelImportResultModel excelImportResultModel = commonService.getExcelImportResultModel(failRowNum, successRowNum, excelImportErrorModels, errorRows); + excelImportResultModel.setExcelList((failRowNum > 0) ? null : workCellList); + return excelImportResultModel; + } + + /** + * 工位导入-数据入库 + * @param excelImportResultModel + */ + private void insertExcelMesWorkCell(ExcelImportResultModel excelImportResultModel) { + //导入数据 + if (null != excelImportResultModel) { + List excelList = excelImportResultModel.getExcelList(); + if (!CollectionUtils.isEmpty(excelList)) workCellRepository.saveAll(excelList); + } + } +} diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/bean/MesEquipmentCheckDetail.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/bean/MesEquipmentCheckDetail.java index a6f0d6b..12bdf6b 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/bean/MesEquipmentCheckDetail.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/bean/MesEquipmentCheckDetail.java @@ -60,6 +60,10 @@ public class MesEquipmentCheckDetail extends BaseBean implements Serializable { @ApiParam("设备编号") private String equNo; + @Column(name = "EQU_MANAGE_NO") + @ApiParam("设备管理号") + private String equManageNo; + @Column(name = "EQU_NAME") @ApiParam("设备名称") private String equName; diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtEnumUtil.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtEnumUtil.java index ceb12da..34bae09 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtEnumUtil.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtEnumUtil.java @@ -82,7 +82,8 @@ public class MesExtEnumUtil { MES_CAREER_CATEGORY_WORK_CENTER_CORRELATION_CFG(900, "sxCareerAndCategoryAndWorkCenterCfgExcelService", "综合能率目标导入"), MES_PROCESS_TORQUE_MANAGE(910, "torqueManageExcelService", "扭矩管理项目导入"), MES_MANAGE_CODE(920, "manageCodeExcelService", "管理码信息导入"), - MES_ZJ_REWORK_ORDER_BIND_UNBIND_SN(930, "sxReworkOrderBindZjSnExcelService", "组件返工条码绑定导入"); + MES_ZJ_REWORK_ORDER_BIND_UNBIND_SN(930, "sxReworkOrderBindZjSnExcelService", "组件返工条码绑定导入"), + MES_WORK_CELL_EXT(940, "workCellExtExcelService", "工位信息导入"); private int value; private String service;