diff --git a/src/main/java/com/gaotao/modules/schedule/entity/ScheduleTodoMessageEntity.java b/src/main/java/com/gaotao/modules/schedule/entity/ScheduleTodoMessageEntity.java index 91a5fa9..17b1ed6 100644 --- a/src/main/java/com/gaotao/modules/schedule/entity/ScheduleTodoMessageEntity.java +++ b/src/main/java/com/gaotao/modules/schedule/entity/ScheduleTodoMessageEntity.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.io.Serializable; +import java.math.BigDecimal; import java.util.Date; /** @@ -89,6 +90,26 @@ public class ScheduleTodoMessageEntity implements Serializable { */ private String lockFlag; + /** + * 预警等级(轻微/一般/严重) + */ + private String warningLevel; + + /** + * 触发规则的卷序号(从1开始) + */ + private Integer matchedRollIndex; + + /** + * 触发规则卷的不良率(百分比值) + */ + private BigDecimal matchedDefectRate; + + /** + * 触发规则卷的总数 + */ + private BigDecimal matchedTotalQty; + /** * 责任部门编码(roleId) */ diff --git a/src/main/java/com/gaotao/modules/schedule/service/impl/ScheduleServiceImpl.java b/src/main/java/com/gaotao/modules/schedule/service/impl/ScheduleServiceImpl.java index 82a7438..59845e2 100644 --- a/src/main/java/com/gaotao/modules/schedule/service/impl/ScheduleServiceImpl.java +++ b/src/main/java/com/gaotao/modules/schedule/service/impl/ScheduleServiceImpl.java @@ -3588,6 +3588,11 @@ public class ScheduleServiceImpl implements ScheduleService { ScheduleTodoMessageEntity pendingLockTodo = getLatestPendingLockTodo(inData); if (pendingLockTodo != null) { resultMap.put("todoInfoCode", pendingLockTodo.getInfoCode()); + resultMap.put("warningLevel", pendingLockTodo.getWarningLevel()); + resultMap.put("lockedTime", formatDateTime(pendingLockTodo.getCreatedTime())); + resultMap.put("matchedRollIndex", pendingLockTodo.getMatchedRollIndex()); + resultMap.put("matchedDefectRate", pendingLockTodo.getMatchedDefectRate()); + resultMap.put("matchedTotalQty", pendingLockTodo.getMatchedTotalQty()); if (FLAG_N.equalsIgnoreCase(pendingLockTodo.getAuditFlag())) { resultMap.put("matched", true); resultMap.put("action", ACTION_LOCK_PAGE); @@ -3649,8 +3654,8 @@ public class ScheduleServiceImpl implements ScheduleService { continue; } fillSplitRuleMatchResult(resultMap, rule, child); - resultMap.put("matchedRollIndex", metricContext.rollIndex); - saveSplitRuleMatchedData(inData, String.valueOf(resultMap.get("action")), child); + fillSplitRuleMetricData(resultMap, metricContext); + saveSplitRuleMatchedData(inData, String.valueOf(resultMap.get("action")), child, metricContext); return resultMap; } } @@ -3678,6 +3683,11 @@ public class ScheduleServiceImpl implements ScheduleService { } resultMap.put("todoInfoCode", pendingLockTodo.getInfoCode()); + resultMap.put("warningLevel", pendingLockTodo.getWarningLevel()); + resultMap.put("lockedTime", formatDateTime(pendingLockTodo.getCreatedTime())); + resultMap.put("matchedRollIndex", pendingLockTodo.getMatchedRollIndex()); + resultMap.put("matchedDefectRate", pendingLockTodo.getMatchedDefectRate()); + resultMap.put("matchedTotalQty", pendingLockTodo.getMatchedTotalQty()); if (FLAG_N.equalsIgnoreCase(pendingLockTodo.getAuditFlag())) { resultMap.put("locked", true); resultMap.put("lockPage", FLAG_Y); @@ -4069,6 +4079,7 @@ public class ScheduleServiceImpl implements ScheduleService { resultMap.put("conditionNo", condition.getConditionNo()); resultMap.put("triggerEvent", triggerEvent); resultMap.put("forceType", forceType); + resultMap.put("warningLevel", condition.getWarningLevel()); resultMap.put("responsibilityDept", condition.getResponsibilityDept()); if ("异常代码".equals(triggerEvent)) { @@ -4098,11 +4109,17 @@ public class ScheduleServiceImpl implements ScheduleService { private void saveSplitRuleMatchedData(SearchScheduleData inData, String action, - SysSceneExceptionRuleConditionEntity matchedCondition) { + SysSceneExceptionRuleConditionEntity matchedCondition, + SplitRollMetricContext metricContext) { String responsibilityDept = matchedCondition == null ? "" : StringUtils.trimWhitespace(matchedCondition.getResponsibilityDept()); + String warningLevel = matchedCondition == null ? "" : StringUtils.trimWhitespace(matchedCondition.getWarningLevel()); + Integer matchedRollIndex = metricContext == null ? null : metricContext.rollIndex; + BigDecimal matchedDefectRate = getMetricValue(metricContext, "不良率"); + BigDecimal matchedTotalQty = getMetricValue(metricContext, "总数"); if (ACTION_LOCK_PAGE.equals(action)) { saveSplitRuleCacheData(inData); - saveSplitRuleTodoMessage(inData, true, false, false, responsibilityDept); + saveSplitRuleTodoMessage(inData, true, false, false, responsibilityDept, warningLevel, + matchedRollIndex, matchedDefectRate, matchedTotalQty); return; } if (ACTION_OPEN_DEFECT.equals(action) || ACTION_OPEN_DOWNTIME.equals(action)) { @@ -4111,7 +4128,8 @@ public class ScheduleServiceImpl implements ScheduleService { // 异常截卷流程等同“产量报告 + 换班结转”,提示类规则也需要缓存当前数据 saveSplitRuleCacheData(inData); } - saveSplitRuleTodoMessage(inData, false, true, true, responsibilityDept); + saveSplitRuleTodoMessage(inData, false, true, true, responsibilityDept, warningLevel, + matchedRollIndex, matchedDefectRate, matchedTotalQty); } } @@ -4166,7 +4184,11 @@ public class ScheduleServiceImpl implements ScheduleService { boolean lockRequired, boolean operated, boolean audited, - String responsibilityDept) { + String responsibilityDept, + String warningLevel, + Integer matchedRollIndex, + BigDecimal matchedDefectRate, + BigDecimal matchedTotalQty) { if (inData == null || !StringUtils.hasText(inData.getSite()) || !StringUtils.hasText(inData.getBuNo()) || !StringUtils.hasText(inData.getOrderNo()) || !StringUtils.hasText(inData.getSeqNo())) { return; @@ -4205,10 +4227,38 @@ public class ScheduleServiceImpl implements ScheduleService { entity.setReportTime(now); entity.setReportBy(operator); } + entity.setWarningLevel(StringUtils.hasText(warningLevel) ? truncate(warningLevel, 20) : null); + entity.setMatchedRollIndex(matchedRollIndex); + entity.setMatchedDefectRate(matchedDefectRate); + entity.setMatchedTotalQty(matchedTotalQty); entity.setResponsibilityDept(StringUtils.hasText(responsibilityDept) ? responsibilityDept : null); scheduleTodoMessageMapper.insertTodoMessage(entity); } + private void fillSplitRuleMetricData(Map resultMap, SplitRollMetricContext metricContext) { + if (metricContext == null) { + return; + } + resultMap.put("matchedRollIndex", metricContext.rollIndex); + resultMap.put("matchedDefectRate", getMetricValue(metricContext, "不良率")); + resultMap.put("matchedTotalQty", getMetricValue(metricContext, "总数")); + resultMap.put("lockedTime", DateUtil.getStringDate(new Date(), "yyyy-MM-dd HH:mm:ss")); + } + + private BigDecimal getMetricValue(SplitRollMetricContext metricContext, String metricKey) { + if (metricContext == null || metricContext.metricMap == null || !StringUtils.hasText(metricKey)) { + return null; + } + return metricContext.metricMap.get(metricKey); + } + + private String formatDateTime(Date date) { + if (date == null) { + return null; + } + return DateUtil.getStringDate(date, "yyyy-MM-dd HH:mm:ss"); + } + private ScheduleTodoMessageEntity getLatestPendingLockTodo(SearchScheduleData inData) { if (inData == null || !StringUtils.hasText(inData.getSite()) || !StringUtils.hasText(inData.getBuNo()) || !StringUtils.hasText(inData.getOrderNo()) || !StringUtils.hasText(inData.getSeqNo())) { diff --git a/src/main/resources/mapper/schedule/ScheduleTodoMessageMapper.xml b/src/main/resources/mapper/schedule/ScheduleTodoMessageMapper.xml index 18b0b9d..39c54d8 100644 --- a/src/main/resources/mapper/schedule/ScheduleTodoMessageMapper.xml +++ b/src/main/resources/mapper/schedule/ScheduleTodoMessageMapper.xml @@ -19,6 +19,10 @@ report_time, report_by, lock_flag, + warning_level, + matched_roll_index, + matched_defect_rate, + matched_total_qty, responsibility_dept ) VALUES ( #{site}, @@ -36,6 +40,10 @@ #{reportTime,jdbcType=TIMESTAMP}, #{reportBy,jdbcType=VARCHAR}, #{lockFlag}, + #{warningLevel,jdbcType=VARCHAR}, + #{matchedRollIndex,jdbcType=INTEGER}, + #{matchedDefectRate,jdbcType=DECIMAL}, + #{matchedTotalQty,jdbcType=DECIMAL}, #{responsibilityDept} ) @@ -57,6 +65,10 @@ report_time AS reportTime, report_by AS reportBy, lock_flag AS lockFlag, + warning_level AS warningLevel, + matched_roll_index AS matchedRollIndex, + matched_defect_rate AS matchedDefectRate, + matched_total_qty AS matchedTotalQty, responsibility_dept AS responsibilityDept FROM schedule_todo_message WHERE site = #{site} @@ -192,6 +204,10 @@ stm.report_time AS reportTime, stm.report_by AS reportBy, stm.lock_flag AS lockFlag, + stm.warning_level AS warningLevel, + stm.matched_roll_index AS matchedRollIndex, + stm.matched_defect_rate AS matchedDefectRate, + stm.matched_total_qty AS matchedTotalQty, stm.responsibility_dept AS responsibilityDept, ISNULL(sr.role_name, stm.responsibility_dept) AS responsibilityDeptName FROM schedule_todo_message stm