Browse Source

2026-07-28

异常规则配置
master
fengyuan_yang 1 week ago
parent
commit
dad8adbd21
  1. 74
      src/main/java/com/gaotao/modules/schedule/service/impl/ScheduleServiceImpl.java
  2. 4
      src/main/java/com/gaotao/modules/sys/entity/SysSceneExceptionRuleConditionEntity.java
  3. 23
      src/main/java/com/gaotao/modules/sys/service/impl/SysSceneExceptionRuleServiceImpl.java
  4. 7
      src/main/resources/mapper/sys/SysSceneExceptionRuleMapper.xml

74
src/main/java/com/gaotao/modules/schedule/service/impl/ScheduleServiceImpl.java

@ -3746,6 +3746,16 @@ public class ScheduleServiceImpl implements ScheduleService {
return resultMap;
}
String currentWorkCenterNo = normalizeWorkCenterNo(inData.getWorkCenterNo());
if (!StringUtils.hasText(currentWorkCenterNo)) {
currentWorkCenterNo = resolveSplitRuleWorkCenterNo(inData);
inData.setWorkCenterNo(currentWorkCenterNo);
}
if (!StringUtils.hasText(currentWorkCenterNo)) {
// 无法确定当前工单加工中心时不触发异常规则
return resultMap;
}
List<SplitRollMetricContext> metricContextList = buildSplitRollMetricContexts(inData);
for (SysSceneExceptionRuleEntity rule : ruleList) {
SysSceneExceptionRuleConditionEntity query = new SysSceneExceptionRuleConditionEntity();
@ -3756,6 +3766,9 @@ public class ScheduleServiceImpl implements ScheduleService {
if (CollectionUtils.isEmpty(conditionList)) {
continue;
}
if (!containsWorkCenterForRule(conditionList, currentWorkCenterNo)) {
continue;
}
Map<String, List<SysSceneExceptionRuleConditionEntity>> childMap = new LinkedHashMap<>();
List<SysSceneExceptionRuleConditionEntity> rootList = new ArrayList<>();
@ -3779,6 +3792,12 @@ public class ScheduleServiceImpl implements ScheduleService {
continue;
}
for (SysSceneExceptionRuleConditionEntity child : childList) {
String triggerWorkCenter = StringUtils.hasText(child.getTriggerWorkCenter())
? child.getTriggerWorkCenter()
: root.getTriggerWorkCenter();
if (!matchesTriggerWorkCenter(triggerWorkCenter, currentWorkCenterNo)) {
continue;
}
if (!isConditionMatched(child, metricMap)) {
continue;
}
@ -4148,6 +4167,61 @@ public class ScheduleServiceImpl implements ScheduleService {
return metricMap;
}
private String normalizeWorkCenterNo(String workCenterNo) {
if (!StringUtils.hasText(workCenterNo)) {
return "";
}
return workCenterNo.trim();
}
private String resolveSplitRuleWorkCenterNo(SearchScheduleData inData) {
if (inData == null || !StringUtils.hasText(inData.getSeqNo())) {
return "";
}
try {
ScheduleData scheduleData = scheduleMapper.getScheduleDataBySeqNo(inData.getSeqNo());
if (scheduleData == null) {
return "";
}
return normalizeWorkCenterNo(scheduleData.getWorkCenterNo());
} catch (Exception ex) {
logger.warn("查询创建分卷规则校验加工中心失败,seqNo={}", inData.getSeqNo(), ex);
return "";
}
}
private boolean containsWorkCenterForRule(List<SysSceneExceptionRuleConditionEntity> conditionList, String workCenterNo) {
if (CollectionUtils.isEmpty(conditionList) || !StringUtils.hasText(workCenterNo)) {
return false;
}
for (SysSceneExceptionRuleConditionEntity condition : conditionList) {
if (condition == null) {
continue;
}
if (matchesTriggerWorkCenter(condition.getTriggerWorkCenter(), workCenterNo)) {
return true;
}
}
return false;
}
private boolean matchesTriggerWorkCenter(String triggerWorkCenter, String workCenterNo) {
if (!StringUtils.hasText(triggerWorkCenter) || !StringUtils.hasText(workCenterNo)) {
return false;
}
String targetWorkCenter = normalizeWorkCenterNo(workCenterNo);
String[] workCenterArr = triggerWorkCenter.split("[,;,;]");
for (String workCenter : workCenterArr) {
if (!StringUtils.hasText(workCenter)) {
continue;
}
if (targetWorkCenter.equalsIgnoreCase(workCenter.trim())) {
return true;
}
}
return false;
}
private boolean isConditionMatched(SysSceneExceptionRuleConditionEntity condition, Map<String, BigDecimal> metricMap) {
if (condition == null || !StringUtils.hasText(condition.getRelationField())
|| !StringUtils.hasText(condition.getCompareSymbol()) || condition.getConditionParam() == null) {

4
src/main/java/com/gaotao/modules/sys/entity/SysSceneExceptionRuleConditionEntity.java

@ -37,6 +37,10 @@ public class SysSceneExceptionRuleConditionEntity extends QueryPage {
* 异常代码 / 异常单
*/
private String triggerEvent;
/**
* 触发工序加工中心多个用分号分隔
*/
private String triggerWorkCenter;
private String createBy;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")

23
src/main/java/com/gaotao/modules/sys/service/impl/SysSceneExceptionRuleServiceImpl.java

@ -184,6 +184,10 @@ public class SysSceneExceptionRuleServiceImpl implements SysSceneExceptionRuleSe
if (StringUtils.isBlank(data.getForceType())) {
throw new RuntimeException("是否强制不能为空");
}
data.setTriggerWorkCenter(normalizeTriggerWorkCenter(data.getTriggerWorkCenter()));
if (StringUtils.isBlank(data.getTriggerWorkCenter())) {
throw new RuntimeException("触发工序不能为空");
}
boolean isRootCondition = StringUtils.isBlank(data.getParentConditionNo());
if (isRootCondition) {
data.setTriggerEvent("");
@ -223,6 +227,25 @@ public class SysSceneExceptionRuleServiceImpl implements SysSceneExceptionRuleSe
}
}
private String normalizeTriggerWorkCenter(String triggerWorkCenter) {
if (StringUtils.isBlank(triggerWorkCenter)) {
return "";
}
String[] splitArr = triggerWorkCenter.split("[,;,;]");
List<String> workCenterList = new ArrayList<>();
for (String item : splitArr) {
if (StringUtils.isBlank(item)) {
continue;
}
String trimmed = item.trim();
if (StringUtils.isBlank(trimmed) || workCenterList.contains(trimmed)) {
continue;
}
workCenterList.add(trimmed);
}
return String.join(";", workCenterList);
}
private void fillSiteAndBu(SysSceneExceptionRuleEntity data) {
if (StringUtils.isNotBlank(data.getBu()) && data.getBu().contains("_")) {
String[] arr = data.getBu().split("_");

7
src/main/resources/mapper/sys/SysSceneExceptionRuleMapper.xml

@ -109,6 +109,7 @@
c.responsibility_dept,
ISNULL(sr.role_name, c.responsibility_dept) AS responsibility_dept_name,
c.trigger_event,
c.trigger_work_center,
c.create_by,
c.create_date,
c.update_by,
@ -141,6 +142,7 @@
c.responsibility_dept,
ISNULL(sr.role_name, c.responsibility_dept) AS responsibility_dept_name,
c.trigger_event,
c.trigger_work_center,
c.create_by,
c.create_date,
c.update_by,
@ -167,11 +169,11 @@
INSERT INTO sys_scene_exception_rule_condition
(site, bu_no, rule_code, condition_no, parent_condition_no, relation_field, compare_symbol,
condition_param, force_type, warning_level, animation_effect, responsibility_dept, trigger_event,
create_by, create_date, update_by, update_date)
trigger_work_center, create_by, create_date, update_by, update_date)
VALUES
(#{site}, #{buNo}, #{ruleCode}, #{conditionNo}, #{parentConditionNo}, #{relationField}, #{compareSymbol},
#{conditionParam}, #{forceType}, #{warningLevel}, #{animationEffect}, #{responsibilityDept}, #{triggerEvent},
#{createBy}, GETDATE(), #{updateBy}, GETDATE())
#{triggerWorkCenter}, #{createBy}, GETDATE(), #{updateBy}, GETDATE())
</insert>
<update id="updateCondition">
@ -186,6 +188,7 @@
animation_effect = #{animationEffect},
responsibility_dept = #{responsibilityDept},
trigger_event = #{triggerEvent},
trigger_work_center = #{triggerWorkCenter},
update_by = #{updateBy},
update_date = GETDATE()
WHERE site = #{site}

Loading…
Cancel
Save