From dad8adbd21efae2e28892000800537fd6f00a144 Mon Sep 17 00:00:00 2001 From: fengyuan_yang <1976974459@qq.com> Date: Tue, 28 Jul 2026 10:37:42 +0800 Subject: [PATCH] =?UTF-8?q?2026-07-28=20=E5=BC=82=E5=B8=B8=E8=A7=84?= =?UTF-8?q?=E5=88=99=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/ScheduleServiceImpl.java | 74 +++++++++++++++++++ .../SysSceneExceptionRuleConditionEntity.java | 4 + .../SysSceneExceptionRuleServiceImpl.java | 23 ++++++ .../sys/SysSceneExceptionRuleMapper.xml | 7 +- 4 files changed, 106 insertions(+), 2 deletions(-) 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 b8dc1cd..0362b28 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 @@ -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 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> childMap = new LinkedHashMap<>(); List 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 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 metricMap) { if (condition == null || !StringUtils.hasText(condition.getRelationField()) || !StringUtils.hasText(condition.getCompareSymbol()) || condition.getConditionParam() == null) { diff --git a/src/main/java/com/gaotao/modules/sys/entity/SysSceneExceptionRuleConditionEntity.java b/src/main/java/com/gaotao/modules/sys/entity/SysSceneExceptionRuleConditionEntity.java index 0b08ba1..c4d9ce7 100644 --- a/src/main/java/com/gaotao/modules/sys/entity/SysSceneExceptionRuleConditionEntity.java +++ b/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") diff --git a/src/main/java/com/gaotao/modules/sys/service/impl/SysSceneExceptionRuleServiceImpl.java b/src/main/java/com/gaotao/modules/sys/service/impl/SysSceneExceptionRuleServiceImpl.java index 7ade2b1..93976be 100644 --- a/src/main/java/com/gaotao/modules/sys/service/impl/SysSceneExceptionRuleServiceImpl.java +++ b/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 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("_"); diff --git a/src/main/resources/mapper/sys/SysSceneExceptionRuleMapper.xml b/src/main/resources/mapper/sys/SysSceneExceptionRuleMapper.xml index f1d5582..0b521e1 100644 --- a/src/main/resources/mapper/sys/SysSceneExceptionRuleMapper.xml +++ b/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()) @@ -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}