Browse Source

2026-07-20

异常规则配置
master
fengyuan_yang 2 weeks ago
parent
commit
89b9b54cd1
  1. 21
      src/main/java/com/gaotao/modules/schedule/entity/ScheduleTodoMessageEntity.java
  2. 62
      src/main/java/com/gaotao/modules/schedule/service/impl/ScheduleServiceImpl.java
  3. 16
      src/main/resources/mapper/schedule/ScheduleTodoMessageMapper.xml

21
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
*/

62
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<String, Object> 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())) {

16
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}
)
</insert>
@ -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

Loading…
Cancel
Save