From 94616b4a0824edd8645a4b34ad013200384ac949 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Thu, 23 Nov 2023 15:03:45 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E7=BA=BF=E7=8F=AD=E6=AC=A1?= =?UTF-8?q?=E5=88=86=E6=97=B6=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/jx/IJxTimeSegmentStatisticsService.java | 4 +- .../base/jx/JxTimeSegmentStatisticsService.java | 119 ++++++++++++--------- .../jx/JxTimeSegmentStatisticsExcelService.java | 45 +++++--- 3 files changed, 102 insertions(+), 66 deletions(-) diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/jx/IJxTimeSegmentStatisticsService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/jx/IJxTimeSegmentStatisticsService.java index 7fc8601..75a8658 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/jx/IJxTimeSegmentStatisticsService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/jx/IJxTimeSegmentStatisticsService.java @@ -61,9 +61,9 @@ public interface IJxTimeSegmentStatisticsService { MesTimeSegmentStatistics checkTimeCompareToDataList(List timeSegmentStatisticsList, MesTimeSegmentStatistics timeSegmentStatistics); /** - * 计算开始结束时间间隔分钟 + * 验证开始结束时间间隔分钟 */ - String getTimeLength(String startTime, String endTime, String today); + Boolean checkTimeLengthIsValid(MesTimeSegmentStatistics timeSegmentStatistics, String today); /** * 拼接代码 diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/jx/JxTimeSegmentStatisticsService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/jx/JxTimeSegmentStatisticsService.java index 76e73c5..01040eb 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/jx/JxTimeSegmentStatisticsService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/jx/JxTimeSegmentStatisticsService.java @@ -51,7 +51,6 @@ public class JxTimeSegmentStatisticsService implements IJxTimeSegmentStatisticsS public void insertTimeSegmentStatistics(MesTimeSegmentStatistics timeSegmentStatistics){ List timeSegmentStatisticsList = getTimeSegmentStatisticsList(timeSegmentStatistics.getOrganizeCode(), timeSegmentStatistics.getWorkCenterCode(), timeSegmentStatistics.getShiftCode()); checkTimeIsValid(timeSegmentStatisticsList, timeSegmentStatistics); - timeSegmentStatistics.setTimeLength(getTimeLength(timeSegmentStatistics.getStartTime(), timeSegmentStatistics.getEndTime(), TimeTool.getToday())); timeSegmentStatistics.setTimeSegmentCode(getTimeSegmentCode(timeSegmentStatistics)); timeSegmentStatistics.setSystemSyncStatus(MesExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); ConvertBean.serviceModelInitialize(timeSegmentStatistics, timeSegmentStatistics.getCreateUser()); @@ -75,44 +74,23 @@ public class JxTimeSegmentStatisticsService implements IJxTimeSegmentStatisticsS timeSegmentStatisticsDb.setShiftCode(timeSegmentStatistics.getShiftCode()); timeSegmentStatisticsDb.setStartTime(timeSegmentStatistics.getStartTime()); timeSegmentStatisticsDb.setEndTime(timeSegmentStatistics.getEndTime()); - timeSegmentStatisticsDb.setTimeLength(getTimeLength(timeSegmentStatisticsDb.getStartTime(), timeSegmentStatisticsDb.getEndTime(), TimeTool.getToday())); + timeSegmentStatisticsDb.setTimeLength(timeSegmentStatistics.getTimeLength()); timeSegmentStatisticsDb.setTimeSegmentCode(getTimeSegmentCode(timeSegmentStatisticsDb)); timeSegmentStatisticsDb.setSystemSyncStatus(MesExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); ConvertBean.serviceModelUpdate(timeSegmentStatisticsDb, timeSegmentStatistics.getModifyUser()); timeSegmentStatisticsRepository.save(timeSegmentStatisticsDb); } - private void checkTimeIsValid(List timeSegmentStatisticsList, MesTimeSegmentStatistics timeSegmentStatistics) { - if (!checkTimeFormat(timeSegmentStatistics.getStartTime())) - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("开始时间[%s]格式错误,请检查时间格式[%s]!", timeSegmentStatistics.getStartTime(), MesExtConstWords.TIME_TRUNCATE_SECOND_FORMAT) - .build(); - if (!checkTimeFormat(timeSegmentStatistics.getEndTime())) - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("结束时间[%s]格式错误,请检查时间格式[%s]!", timeSegmentStatistics.getEndTime(), MesExtConstWords.TIME_TRUNCATE_SECOND_FORMAT) - .build(); - if (!checkTimeStartBeforeEnd(timeSegmentStatistics.getStartTime(), timeSegmentStatistics.getEndTime())) - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("开始时间[%s]必须小于结束时间[%s]!", timeSegmentStatistics.getStartTime(), timeSegmentStatistics.getEndTime()) - .build(); - String startTime = timeSegmentStatistics.getStartTime(); - String endTime = timeSegmentStatistics.getEndTime(); - timeSegmentStatistics.setStartTime(startTime + MesExtConstWords.APPEND_SECONDS); - timeSegmentStatistics.setEndTime(endTime + MesExtConstWords.APPEND_SECONDS); - MesTimeSegmentStatistics item = checkTimeCompareToDataList(timeSegmentStatisticsList, timeSegmentStatistics); - if (null != item) - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("开始时间[%s]结束时间[%s]与已维护的生产线[%s]班次代码[%s]配置的开始时间[%s]结束时间[%s]存在时间重叠!", - startTime, endTime, item.getWorkCenterCode(), item.getShiftCode(), item.getStartTime(), item.getEndTime()) - .build(); + @Override + public Boolean checkTimeLengthIsValid(MesTimeSegmentStatistics timeSegmentStatistics, String today) { + Integer timeLengthMax = getTimeLength(timeSegmentStatistics.getStartTime(), timeSegmentStatistics.getEndTime(), today); + try { + if (!StringUtils.isEmpty(timeSegmentStatistics.getTimeLength()) && Integer.valueOf(timeSegmentStatistics.getTimeLength()).compareTo(timeLengthMax) > 0) return false; + } catch (NumberFormatException e) { + return false; + } + if (StringUtils.isEmpty(timeSegmentStatistics.getTimeLength())) timeSegmentStatistics.setTimeLength(timeLengthMax.toString()); + return true; } @Override @@ -133,19 +111,6 @@ public class JxTimeSegmentStatisticsService implements IJxTimeSegmentStatisticsS } @Override - public String getTimeLength(String startTime, String endTime, String today) { - try { - return String.valueOf(TimeTool.getSecoundsBetweenTime(1, getTimeAppendToday(today, startTime), getTimeAppendToday(today, endTime))); - } catch (ParseException e) { - return null; - } - } - - private String getTimeAppendToday(String today, String time) { - return new StringJoiner(MesExtConstWords.ONE_SPACE).add(today).add(time).toString(); - } - - @Override public String getTimeSegmentCode(MesTimeSegmentStatistics timeSegmentStatistics) { return new StringJoiner(MesExtConstWords.COLON).add(timeSegmentStatistics.getWorkCenterCode()).add(timeSegmentStatistics.getShiftCode()).add(timeSegmentStatistics.getStartTime().substring(0, 5)).toString().replaceAll(MesExtConstWords.COLON, MesExtConstWords.EMPTY); } @@ -159,6 +124,13 @@ public class JxTimeSegmentStatisticsService implements IJxTimeSegmentStatisticsS @Override public void deleteByIds(Long[] ids, String userName) { updateStatusByIds(ids, userName, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), false); } + @Override + public List getTimeSegmentStatisticsList(String organizeCode, String workCenterCode, String shiftCode) { + return timeSegmentStatisticsRepository.findByProperty( + new String[]{MesExtConstWords.ORGANIZE_CODE, MesExtConstWords.IS_DELETED, MesExtConstWords.IS_VALID, MesExtConstWords.WORK_CENTER_CODE, MesExtConstWords.SHIFT_CODE}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workCenterCode, shiftCode}); + } + private void updateStatusByIds(Long[] ids, String userName, int status, Boolean flag) { for (Long id : ids) { MesTimeSegmentStatistics timeSegmentStatistics = timeSegmentStatisticsRepository.getById(id); @@ -173,11 +145,56 @@ public class JxTimeSegmentStatisticsService implements IJxTimeSegmentStatisticsS } } - @Override - public List getTimeSegmentStatisticsList(String organizeCode, String workCenterCode, String shiftCode) { - return timeSegmentStatisticsRepository.findByProperty( - new String[]{MesExtConstWords.ORGANIZE_CODE, MesExtConstWords.IS_DELETED, MesExtConstWords.IS_VALID, MesExtConstWords.WORK_CENTER_CODE, MesExtConstWords.SHIFT_CODE}, - new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workCenterCode, shiftCode}); + private void checkTimeIsValid(List timeSegmentStatisticsList, MesTimeSegmentStatistics timeSegmentStatistics) { + if (!checkTimeFormat(timeSegmentStatistics.getStartTime())) + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("开始时间[%s]格式错误,请检查时间格式[%s]!", timeSegmentStatistics.getStartTime(), MesExtConstWords.TIME_TRUNCATE_SECOND_FORMAT) + .build(); + if (!checkTimeFormat(timeSegmentStatistics.getEndTime())) + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("结束时间[%s]格式错误,请检查时间格式[%s]!", timeSegmentStatistics.getEndTime(), MesExtConstWords.TIME_TRUNCATE_SECOND_FORMAT) + .build(); + if (!checkTimeStartBeforeEnd(timeSegmentStatistics.getStartTime(), timeSegmentStatistics.getEndTime())) + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("开始时间[%s]必须小于结束时间[%s]!", timeSegmentStatistics.getStartTime(), timeSegmentStatistics.getEndTime()) + .build(); + + String startTime = timeSegmentStatistics.getStartTime(); + String endTime = timeSegmentStatistics.getEndTime(); + timeSegmentStatistics.setStartTime(startTime + MesExtConstWords.APPEND_SECONDS); + timeSegmentStatistics.setEndTime(endTime + MesExtConstWords.APPEND_SECONDS); + MesTimeSegmentStatistics item = checkTimeCompareToDataList(timeSegmentStatisticsList, timeSegmentStatistics); + if (null != item) + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("开始时间[%s]结束时间[%s]与已维护的生产线[%s]班次代码[%s]配置的开始时间[%s]结束时间[%s]存在时间重叠!", + startTime, endTime, item.getWorkCenterCode(), item.getShiftCode(), item.getStartTime(), item.getEndTime()) + .build(); + if (!checkTimeLengthIsValid(timeSegmentStatistics, TimeTool.getToday())) + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) + .setErrorDetail("实际工作时间长度[%s]不能大于开始时间[%s]与结束时间[%s]的分钟差!", timeSegmentStatistics.getTimeLength(), timeSegmentStatistics.getStartTime(), timeSegmentStatistics.getEndTime()) + .build(); + } + + private Integer getTimeLength(String startTime, String endTime, String today) { + try { + return TimeTool.getSecoundsBetweenTime(2, getTimeAppendToday(today, startTime), getTimeAppendToday(today, endTime)); + } catch (ParseException e) { + return 0; + } + } + + private String getTimeAppendToday(String today, String time) { + return new StringJoiner(MesExtConstWords.ONE_SPACE).add(today).add(time).toString(); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/jx/JxTimeSegmentStatisticsExcelService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/jx/JxTimeSegmentStatisticsExcelService.java index bca196d..c83409b 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/jx/JxTimeSegmentStatisticsExcelService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/excel/jx/JxTimeSegmentStatisticsExcelService.java @@ -10,6 +10,7 @@ import cn.estsh.i3plus.ext.mes.pojo.repository.MesTimeSegmentStatisticsRepositor import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.ext.mes.pojo.util.MesExtEnumUtil; import cn.estsh.i3plus.mes.apiservice.util.MesCommonUtil; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.mes.repository.MesWorkCenterRepository; @@ -104,6 +105,8 @@ public class JxTimeSegmentStatisticsExcelService implements IExcelImportExtServi workCenterCodeEntityMap = null; } + String today = TimeTool.getToday(); + //从excel表的第5行数据开始导入,getFirstRowNum是从0行开始读取 for (int i = (sheetAt.getFirstRowNum() + 4); i < totalNumberOfRows; i ++) { Row row = sheetAt.getRow(i); @@ -145,6 +148,12 @@ public class JxTimeSegmentStatisticsExcelService implements IExcelImportExtServi } catch (Exception e) { } + String timeLength = null; + try { + timeLength = new DataFormatter().formatCellValue(row.getCell(4, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK)); + } catch (Exception e) { + } + if (CollectionUtils.isEmpty(workCenterCodeEntityMap) || !workCenterCodeEntityMap.containsKey(workCenterCode)) { errorNum ++; cellNum += "A;"; @@ -184,17 +193,35 @@ public class JxTimeSegmentStatisticsExcelService implements IExcelImportExtServi errorInfo += "第C+D列数据错误,开始时间必须小于结束时间;"; } + if (!StringUtils.isEmpty(timeLength)) { + try { + Integer.valueOf(timeLength); + } catch (NumberFormatException e) { + e.printStackTrace(); + } + } if (errorNum == 0) { - String key = new StringJoiner(MesExtConstWords.AND).add(workCenterCode).add(shiftCode).toString(); + MesTimeSegmentStatistics timeSegmentStatistics = new MesTimeSegmentStatistics(); + timeSegmentStatistics.setStartTime(startTime + MesExtConstWords.APPEND_SECONDS); + timeSegmentStatistics.setEndTime(endTime + MesExtConstWords.APPEND_SECONDS); + timeSegmentStatistics.setTimeLength(timeLength); + + Boolean boo = timeSegmentStatisticsService.checkTimeLengthIsValid(timeSegmentStatistics, today); + if (!boo) { + errorNum ++; + cellNum += "E;"; + errorInfo += "第E列数据错误,不能大于开始时间与结束时间的分钟差;"; + } + if (!boo) break; + timeSegmentStatistics.setOrganizeCode(organizeCode); timeSegmentStatistics.setWorkCenterCode(workCenterCode); timeSegmentStatistics.setShiftCode(shiftCode); - timeSegmentStatistics.setStartTime(startTime + MesExtConstWords.APPEND_SECONDS); - timeSegmentStatistics.setEndTime(endTime + MesExtConstWords.APPEND_SECONDS); timeSegmentStatistics.setOrderByParam(String.valueOf(rowNum)); + String key = new StringJoiner(MesExtConstWords.AND).add(workCenterCode).add(shiftCode).toString(); MesTimeSegmentStatistics item = timeSegmentStatisticsService.checkTimeCompareToDataList(CollectionUtils.isEmpty(dataDbMap) ? null : dataDbMap.get(key), timeSegmentStatistics); if (null != item) { errorNum ++; @@ -248,18 +275,10 @@ public class JxTimeSegmentStatisticsExcelService implements IExcelImportExtServi if (null != excelImportResultExtModel) { List excelList = excelImportResultExtModel.getExcelList(); if (!CollectionUtils.isEmpty(excelList)) { - String time = TimeTool.getNowTime(true); - String today = time.substring(0, 10); for (MesTimeSegmentStatistics timeSegmentStatistics : excelList) { - timeSegmentStatistics.setTimeLength(timeSegmentStatisticsService.getTimeLength(timeSegmentStatistics.getStartTime(), timeSegmentStatistics.getEndTime(), today)); - timeSegmentStatistics.setWorkCenterCode(timeSegmentStatisticsService.getTimeSegmentCode(timeSegmentStatistics)); - timeSegmentStatistics.setCreateDatetime(time); - timeSegmentStatistics.setModifyDatetime(time); - timeSegmentStatistics.setCreateUser(userName); - timeSegmentStatistics.setModifyUser(userName); - timeSegmentStatistics.setIsValid(CommonEnumUtil.IS_VAILD.VAILD.getValue()); - timeSegmentStatistics.setIsDeleted(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + timeSegmentStatistics.setTimeSegmentCode(timeSegmentStatisticsService.getTimeSegmentCode(timeSegmentStatistics)); timeSegmentStatistics.setSystemSyncStatus(MesExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue()); + ConvertBean.serviceModelInitialize(timeSegmentStatistics, userName); timeSegmentStatisticsRepository.insert(timeSegmentStatistics); } }