From c5c3e50b607d85ac81165b56a20025ee71b00a71 Mon Sep 17 00:00:00 2001 From: zhouz <> Date: Tue, 21 Oct 2025 11:13:34 +0800 Subject: [PATCH 01/10] =?UTF-8?q?fix:=E4=BF=AE=E6=94=B9=E5=85=A5=E7=83=98?= =?UTF-8?q?=E7=AE=B1=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/iostorInv/util/impl/InBoxManageServiceImpl.java | 2 +- .../main/java/org/nl/wms/pda/mps/rest/BakingController.java | 3 ++- .../main/java/org/nl/wms/pda/mps/wql/PDA_OVENINANDOUT_01.wql | 5 ++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBoxManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBoxManageServiceImpl.java index b848cc138..63d983679 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBoxManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/InBoxManageServiceImpl.java @@ -717,7 +717,7 @@ public class InBoxManageServiceImpl implements InBoxManageService { JSONObject jsonAttr = new JSONObject(); - RLock lock = redissonClient.getLock("getEmptyBox-----"+block_num); + RLock lock = redissonClient.getLock("getEmptyBox"); boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); try { if (tryLock) { diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/BakingController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/BakingController.java index 5309aa739..d308bb8e4 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/BakingController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/rest/BakingController.java @@ -1,5 +1,6 @@ package org.nl.wms.pda.mps.rest; +import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -25,7 +26,7 @@ public class BakingController { @PostMapping("/ovenInAndOut") @Log("烘箱出入") - +@SaIgnore public ResponseEntity queryRawFoil(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(bakingService.ovenInAndOut(whereJson), HttpStatus.OK); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/wql/PDA_OVENINANDOUT_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/wql/PDA_OVENINANDOUT_01.wql index d54e16d12..a0c253c9c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/wql/PDA_OVENINANDOUT_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/wql/PDA_OVENINANDOUT_01.wql @@ -85,7 +85,7 @@ IFNULL(po.material_code,'') = '' ENDOPTION OPTION 输入.mater_flag = "1" - IFNULL(po.material_code,'') = '' + IFNULL(po.material_code,'') = '' ENDOPTION UNION SELECT @@ -308,6 +308,9 @@ ENDOPTION OPTION 输入.point_type <> "" p.point_type = 输入.point_type + ENDOPTION + OPTION 输入.cant_location <> "" + p.point_location not in 输入.cant_location ENDOPTION AND p.point_type = '4' AND p.point_status = '1' From a8726ede44e5a0296b7f31befcadb6a9e8550600 Mon Sep 17 00:00:00 2001 From: zhouz <> Date: Wed, 22 Oct 2025 15:17:36 +0800 Subject: [PATCH 02/10] =?UTF-8?q?fix:=E5=87=BA=E7=A9=BA=E6=9C=A8=E7=AE=B1?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E5=AE=9A=E6=97=B6=E5=99=A8=E4=B8=8B=E5=8F=91?= =?UTF-8?q?=EF=BC=9B=E6=96=B0=E5=A2=9E=E8=BD=BD=E5=85=B7=E8=A7=A3=E7=BB=91?= =?UTF-8?q?=E6=9C=A8=E7=AE=B1=E6=89=8B=E6=8C=81=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ProductOutTwoController.java | 7 ++ .../pda/service/ProductOutTwoService.java | 2 + .../impl/ProductOutTwoServiceImpl.java | 72 +++++++++++++++++++ .../org/nl/b_lms/sch/tasks/TwoOutBoxTask.java | 5 -- 4 files changed, 81 insertions(+), 5 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/ProductOutTwoController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/ProductOutTwoController.java index fc1407bf0..e25d67879 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/ProductOutTwoController.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/controller/ProductOutTwoController.java @@ -97,5 +97,12 @@ public class ProductOutTwoController { return new ResponseEntity<>(productOutTwoService.outExcepionPointPass(whereJson), HttpStatus.OK); } + @PostMapping("/vehicleUnbind") + @Log("空托盘解绑") + @SaIgnore + public ResponseEntity vehicleUnbind(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(productOutTwoService.vehicleUnbind(whereJson), HttpStatus.OK); + } + } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/ProductOutTwoService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/ProductOutTwoService.java index 72e240aee..3963672d4 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/ProductOutTwoService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/ProductOutTwoService.java @@ -92,4 +92,6 @@ public interface ProductOutTwoService { JSONObject boxOut(JSONObject whereJson); JSONObject outExcepionPointPass(JSONObject whereJson); + + JSONObject vehicleUnbind(JSONObject whereJson); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/impl/ProductOutTwoServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/impl/ProductOutTwoServiceImpl.java index 18bf5bfad..f36c4e341 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/impl/ProductOutTwoServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pda/service/impl/ProductOutTwoServiceImpl.java @@ -1,14 +1,20 @@ package org.nl.b_lms.pda.service.impl; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.druid.util.StringUtils; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.extern.slf4j.Slf4j; import org.nl.b_lms.pda.service.ProductOutTwoService; import org.nl.b_lms.pdm.info.dao.PdmBiOrderbominfo; import org.nl.b_lms.pdm.info.service.IPdmBiOrderbominfoService; +import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation; +import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.nl.b_lms.sch.task.service.IschBaseTaskService; import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService; import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxlashboundService; import org.nl.b_lms.storage_manage.database.service.dao.BstIvtBoxlashbound; @@ -52,6 +58,12 @@ public class ProductOutTwoServiceImpl implements ProductOutTwoService { @Autowired private OutBoxManageService outBoxManageService; + @Autowired + private IpdmBiSubpackagerelationService ipdmBiSubpackagerelationService; + + @Autowired + private IschBaseTaskService ischBaseTaskService; + @Override public JSONObject ivtQuery(JSONObject whereJson) { @@ -238,4 +250,64 @@ public class ProductOutTwoServiceImpl implements ProductOutTwoService { result.put("message", "成功放行!"); return result; } + + @Override + public JSONObject vehicleUnbind(JSONObject whereJson) { + String vehicle_code = whereJson.getString("vehicle_code"); + + if (ObjectUtil.isEmpty(vehicle_code)) { + throw new BadRequestException("托盘号不能为空!"); + } + + WQLObject vehicle_ext = WQLObject.getWQLObject("md_pb_storagevehicleext"); + + JSONObject vehicle_info = vehicle_ext.query("storagevehicle_code = '" + vehicle_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(vehicle_info)) { + throw new BadRequestException("未查询到载具【" + vehicle_code + "】对应的绑定关系"); + } + + String box_no = vehicle_info.getString("pcsn"); + if (StringUtils.isEmpty(box_no)) { + throw new BadRequestException("载具【" + vehicle_code + "】上未绑定木箱!"); + } + + List list = ipdmBiSubpackagerelationService.list(new LambdaQueryWrapper().eq(PdmBiSubpackagerelation::getPackage_box_sn, box_no)); + if (ObjectUtil.isNotEmpty(list)) { + boolean anyMatch = list.stream().anyMatch(sub -> sub.getStatus().equals("1") || sub.getStatus().equals("2")); + if (anyMatch) { + throw new BadRequestException("载具上木箱【" + box_no + "】的包装关系为包装或者入库状态!"); + } + } + + String collect = list.stream().map(sub -> sub.getContainer_name()).collect(Collectors.joining("','")); + + JSONArray ivt_arr = WQLObject.getWQLObject("st_ivt_structivt").query("pcsn IN ('" + collect + "')").getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(ivt_arr)) { + throw new BadRequestException("载具【" + vehicle_code + "】上绑定的木箱【" + box_no + "】存在库存,不能进行解绑!"); + } + + int hasTask = ischBaseTaskService.count(new QueryWrapper() + .eq("is_delete", "0") + .eq("vehicle_code2", vehicle_code) + .lt("task_status", TaskStatusEnum.FINISHED.getCode())); + + if (hasTask > 0) { + throw new BadRequestException("该托盘【" + vehicle_code + "】存在正在执行中的任务,不能进行解绑!"); + } + + int hasTask2 = ischBaseTaskService.count(new QueryWrapper() + .eq("is_delete", "0") + .eq("vehicle_code", box_no) + .lt("task_status", TaskStatusEnum.FINISHED.getCode())); + + if (hasTask2 > 0) { + throw new BadRequestException("该木箱【" + box_no + "】存在正在执行中的任务,不能进行解绑!"); + } + + vehicle_info.put("pcsn", ""); + vehicle_ext.update(vehicle_info); + JSONObject result = new JSONObject(); + result.put("message", "操作成功!"); + return result; + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutBoxTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutBoxTask.java index 47d6f8faa..3565f8bc1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutBoxTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutBoxTask.java @@ -179,11 +179,6 @@ public class TwoOutBoxTask extends AbstractAcsTask { packageInfo.put("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("空载具")); packageInfo.put("container_name", jsonTask.getString("vehicle_code")); packageinfoivt.update(packageInfo); - RedissonUtils.lock(c -> { - if (status.equals(TaskStatusEnum.FINISHED.getCode())) { - immediateNotifyAcs(null); - } - }, "zjInBound", 20, this); } // 取消 if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { From 82444f02bfb1f2db1ff240c8bca8ca6f1ace64bb Mon Sep 17 00:00:00 2001 From: zhouz <> Date: Wed, 22 Oct 2025 16:25:16 +0800 Subject: [PATCH 03/10] **Add AutoIssueOutEmptyTask for automated empty task handling in first floor area** --- .../auto/AutoIssueOutEmptyTask.java | 166 ++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoIssueOutEmptyTask.java diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoIssueOutEmptyTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoIssueOutEmptyTask.java new file mode 100644 index 000000000..89d910cb2 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoIssueOutEmptyTask.java @@ -0,0 +1,166 @@ +package org.nl.b_lms.sch.tasks.first_floor_area.auto; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; +import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.nl.b_lms.sch.task.service.IschBaseTaskService; +import org.nl.b_lms.sch.tasks.TwoOutBoxTask; +import org.nl.b_lms.sch.tasks.first_floor_area.ShiftingTask; +import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBoxManageService; +import org.nl.common.enums.PackageInfoIvtEnum; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.sch.AcsTaskDto; +import org.nl.wms.sch.AcsUtil; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; + +import static org.nl.wms.util.TaskUtil.getRoutePlanCode; + + +@Slf4j +@Component +@RequiredArgsConstructor +public class AutoIssueOutEmptyTask { + + private final String TASK_CLASS = TwoOutBoxTask.class.getName(); + + @Autowired + private OutBoxManageService outBoxManageService; + + @Autowired + private IschBaseTaskService ischBaseTaskService; + + //自动执行等待的桁架任务 + public void run() { + try { + this.execute(); + } catch (Exception ex) { + log.error(ex.getMessage()); + } + } + + /** + * Executes a task that processes ACS (Automation Control System) tasks. + * + * This method checks the number of active tasks and ensures the limit is not exceeded. + * If tasks are eligible for further processing, it retrieves task data from the + * database, evaluates conditions based on their attributes, and issues new tasks + * to the ACS system. The method also handles specific locking and task dependency + * scenarios, ensuring that all conditions for task issuance are met. + * + * Key logic includes: + * - Querying database tables to fetch and analyze task details. + * - Ensuring task limits are respected to prevent excessive task submissions. + * - Checking and managing task statuses and related storage attributes, such as + * lock states and box specifications. + * - Notifying the ACS system with the correctly formatted task data. + * - Handling errors and updating task remarks in case of exceptions or conflicting conditions. + * + * This method operates with various modules such as task management, box handling services, + * and ACS system notification utilities. + */ + @SneakyThrows + public void execute() { + /* + * 下发给ACS时需要特殊处理 + */ + // 判断当前有多少个正在执行中的任务 + int num = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + TASK_CLASS + "' and task_status IN ('05','06') and is_delete ='0'") + .getResultJSONArray(0).size(); + // 如果缓存了4个箱子则不下发任务 + if (num >= 2) { + return; + } + + JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + TASK_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0' order by create_time").getResultJSONArray(0); + for (int i = 0; i < arr.size(); i++) { + if (num >= 2) { + break; + } + ArrayList resultList = new ArrayList<>(); + JSONObject json = arr.getJSONObject(i); + WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr"); + JSONObject attr = attrTab.query("struct_code = '" + json.getString("point_code1") + "'").uniqueResult(0); + + if (attr.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("深"))) { + JSONObject 浅Attr = attrTab + .query("zdepth = '1' and row_num = '" + attr.getString("row_num") + "' and col_num = '" + attr.getString("col_num") + "' and layer_num = '" + attr.getString("layer_num") + "'") + .uniqueResult(0); + if (ObjectUtil.isEmpty(浅Attr.getString("storagevehicle_code"))) { + if (!浅Attr.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { + json.put("remark", "当前仓位对应的浅货位【" + 浅Attr.getString("struct_code") + "被锁定无法下发任务!】"); + WQLObject.getWQLObject("SCH_BASE_Task").update(json); + continue; + } + } else { + try { + if (浅Attr.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { + // 判断浅货位木箱和深货位木箱是否相同规格 + outBoxManageService.createBoxMove(浅Attr); + } else if (浅Attr.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("验箱出库锁"))) { + List list = ischBaseTaskService.list(new QueryWrapper() + .eq("is_delete", "0") + .eq("point_code1", 浅Attr.getString("struct_code")) + .lt("task_status", TaskStatusEnum.FINISHED.getCode())); + if (!CollectionUtils.isEmpty(list)) { + json.put("remark", "当前仓位对应的浅货位【" + 浅Attr.getString("struct_code") + "有正在执行中的任务,任务完成后才能下发!】"); + WQLObject.getWQLObject("SCH_BASE_Task").update(json); + continue; + } else { + outBoxManageService.createBoxMove(浅Attr); + } + } else { + continue; + } + }catch (Exception e){ + json.put("remark", e.getMessage()); + WQLObject.getWQLObject("SCH_BASE_Task").update(json); + continue; + } + } + } + char dtl_type = json.getString("task_type").charAt(json.getString("task_type").length() - 1); + AcsTaskDto dto = AcsTaskDto.builder() + .ext_task_id(json.getString("task_id")) + .task_code(json.getString("task_code")) + .route_plan_code(getRoutePlanCode(json.getString("point_code1"))) + .task_type(json.getString("acs_task_type")) + .start_device_code(json.getString("point_code1")) + .next_device_code(json.getString("point_code2")) + .vehicle_code(json.getString("vehicle_code2")) + .vehicle_code2(json.getString("vehicle_code")) + .interaction_json(json.getJSONObject("request_param")) + .priority(json.getString("priority")) + .class_type(json.getString("task_type")) + .dtl_type(String.valueOf(dtl_type)) + .product_area(IOSEnum.PRODUCT_AREA.code("BLK")) + .remark(json.getString("remark")) + .build(); + resultList.add(dto); + JSONArray list = JSONArray.parseArray(JSON.toJSONString(resultList)); + AcsUtil.notifyAcs("api/wms/task", list); + num += 1; + } + + } +} From 118a5cecc5ae8ea0989c56fe7dd231fa35259b0a Mon Sep 17 00:00:00 2001 From: zhouz <> Date: Mon, 27 Oct 2025 15:46:48 +0800 Subject: [PATCH 04/10] =?UTF-8?q?fix:=E5=87=BA=E7=A9=BA=E6=9C=A8=E7=AE=B1?= =?UTF-8?q?=E6=B5=85=E8=B4=A7=E4=BD=8D=E6=9C=89=E9=AA=8C=E7=AE=B1=E9=94=81?= =?UTF-8?q?=E4=B9=9F=E4=B8=8D=E8=BF=9B=E8=A1=8C=E5=87=BA=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PdmBiSubpackagerelationServiceImpl.java | 1 - .../org/nl/b_lms/sch/tasks/TwoOutBoxTask.java | 14 +----- .../auto/AutoIssueOutEmptyTask.java | 46 ++----------------- 3 files changed, 5 insertions(+), 56 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java index 76e4ce6fe..d533d4dd4 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/subpackagerelation/service/impl/PdmBiSubpackagerelationServiceImpl.java @@ -491,7 +491,6 @@ public class PdmBiSubpackagerelationServiceImpl extends ServiceImpl list = ischBaseTaskService.list(new QueryWrapper() - .eq("is_delete", "0") - .eq("point_code1", 浅Attr.getString("struct_code")) - .lt("task_status", TaskStatusEnum.FINISHED.getCode())); - if (!CollectionUtils.isEmpty(list)) { - json.put("remark", "当前仓位对应的浅货位【" + 浅Attr.getString("struct_code") + "有正在执行中的任务,任务完成后才能下发!】"); - WQLObject.getWQLObject("SCH_BASE_Task").update(json); - continue; - } else { - outBoxManageService.createBoxMove(浅Attr); - } } else { + json.put("remark", "当前仓位对应的浅货位【" + 浅Attr.getString("struct_code") + "被锁定!】"); + WQLObject.getWQLObject("SCH_BASE_Task").update(json); continue; } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoIssueOutEmptyTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoIssueOutEmptyTask.java index 89d910cb2..085e02f4d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoIssueOutEmptyTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoIssueOutEmptyTask.java @@ -4,35 +4,25 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; -import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.nl.b_lms.sch.task.service.IschBaseTaskService; import org.nl.b_lms.sch.tasks.TwoOutBoxTask; -import org.nl.b_lms.sch.tasks.first_floor_area.ShiftingTask; import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBoxManageService; -import org.nl.common.enums.PackageInfoIvtEnum; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.wms.sch.AcsTaskDto; import org.nl.wms.sch.AcsUtil; import org.nl.wms.sch.manage.TaskStatusEnum; -import org.redisson.api.RLock; -import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.TimeUnit; import static org.nl.wms.util.TaskUtil.getRoutePlanCode; @@ -59,26 +49,6 @@ public class AutoIssueOutEmptyTask { } } - /** - * Executes a task that processes ACS (Automation Control System) tasks. - * - * This method checks the number of active tasks and ensures the limit is not exceeded. - * If tasks are eligible for further processing, it retrieves task data from the - * database, evaluates conditions based on their attributes, and issues new tasks - * to the ACS system. The method also handles specific locking and task dependency - * scenarios, ensuring that all conditions for task issuance are met. - * - * Key logic includes: - * - Querying database tables to fetch and analyze task details. - * - Ensuring task limits are respected to prevent excessive task submissions. - * - Checking and managing task statuses and related storage attributes, such as - * lock states and box specifications. - * - Notifying the ACS system with the correctly formatted task data. - * - Handling errors and updating task remarks in case of exceptions or conflicting conditions. - * - * This method operates with various modules such as task management, box handling services, - * and ACS system notification utilities. - */ @SneakyThrows public void execute() { /* @@ -117,22 +87,12 @@ public class AutoIssueOutEmptyTask { if (浅Attr.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("未锁定"))) { // 判断浅货位木箱和深货位木箱是否相同规格 outBoxManageService.createBoxMove(浅Attr); - } else if (浅Attr.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("验箱出库锁"))) { - List list = ischBaseTaskService.list(new QueryWrapper() - .eq("is_delete", "0") - .eq("point_code1", 浅Attr.getString("struct_code")) - .lt("task_status", TaskStatusEnum.FINISHED.getCode())); - if (!CollectionUtils.isEmpty(list)) { - json.put("remark", "当前仓位对应的浅货位【" + 浅Attr.getString("struct_code") + "有正在执行中的任务,任务完成后才能下发!】"); - WQLObject.getWQLObject("SCH_BASE_Task").update(json); - continue; - } else { - outBoxManageService.createBoxMove(浅Attr); - } } else { + json.put("remark", "当前仓位对应的浅货位【" + 浅Attr.getString("struct_code") + "有正在执行中的任务,任务完成后才能下发!】"); + WQLObject.getWQLObject("SCH_BASE_Task").update(json); continue; } - }catch (Exception e){ + } catch (Exception e) { json.put("remark", e.getMessage()); WQLObject.getWQLObject("SCH_BASE_Task").update(json); continue; From 252ffda13ab63f26667bfdf4c069be53870a047b Mon Sep 17 00:00:00 2001 From: zhouz <> Date: Thu, 30 Oct 2025 10:47:02 +0800 Subject: [PATCH 05/10] =?UTF-8?q?fix:=E7=A9=BA=E6=8C=87=E9=92=88=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../database/controller/MdpbSameBoxController.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/controller/MdpbSameBoxController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/controller/MdpbSameBoxController.java index be30e0a7e..c3928fccb 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/controller/MdpbSameBoxController.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/database/controller/MdpbSameBoxController.java @@ -2,6 +2,7 @@ package org.nl.b_lms.storage_manage.database.controller; import cn.dev33.satoken.annotation.SaIgnore; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -10,6 +11,7 @@ import org.nl.b_lms.storage_manage.database.service.IMdpbBoxtypeService; import org.nl.b_lms.storage_manage.database.service.IMdpbSameBoxService; import org.nl.b_lms.storage_manage.database.service.dao.MdpbBoxtype; import org.nl.b_lms.storage_manage.database.service.dao.MdpbSameBox; +import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.logging.annotation.Log; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -46,6 +48,9 @@ public class MdpbSameBoxController { List list = mdpbSameBoxService.list(new LambdaQueryWrapper().eq(MdpbSameBox::getBox_code, whereJson.getString("box_code"))); MdpbSameBox mdpbSameBox = new MdpbSameBox(); MdpbBoxtype boxtype = mdpbBoxtypeService.getOne(new LambdaQueryWrapper().eq(MdpbBoxtype::getBox_type, whereJson.getString("box_code"))); + if (ObjectUtil.isEmpty(boxtype)) { + throw new BadRequestException("库内未查询到木箱编码为【"+whereJson.getString("box_code")+"】的信息!"); + } mdpbSameBox.setSame_box_code(boxtype.getBox_type()); mdpbSameBox.setSame_box_name(boxtype.getBox_name()); From b27f120a920b03741b8d89a2b5caf625ab982334 Mon Sep 17 00:00:00 2001 From: zhouz <> Date: Mon, 3 Nov 2025 11:02:25 +0800 Subject: [PATCH 06/10] =?UTF-8?q?fix:=E4=BB=BB=E5=8A=A1=E7=A9=BA=E6=8C=87?= =?UTF-8?q?=E9=92=88=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nl/wms/pda/mps/service/impl/RawFoilServiceImpl.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/RawFoilServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/RawFoilServiceImpl.java index cfd75bbe3..1d2285908 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/RawFoilServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/RawFoilServiceImpl.java @@ -555,6 +555,10 @@ public class RawFoilServiceImpl implements RawFoilService { String container_name = jsonRaw.getString("container_name"); JSONObject task_jo = WQLObject.getWQLObject("SCH_BASE_Task").query("material_code = '" + container_name + "' and task_status <> '07' AND is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(task_jo)) { + throw new BadRequestException("当前母卷AGV搬运任务不存在或已被强制完成!"); + } + // 查询生箔点位库存表 JSONObject jsonSb = stIvtSbpointivtService.query("ext_code = '" + jsonRaw.getString("resource_name") + "'").uniqueResult(0); if (ObjectUtil.isEmpty(jsonSb)) { @@ -602,6 +606,10 @@ public class RawFoilServiceImpl implements RawFoilService { String container_name = jsonRaw.getString("container_name"); JSONObject task_jo = WQLObject.getWQLObject("SCH_BASE_Task").query("material_code = '" + container_name + "' and task_status <> '07' AND is_delete = '0'").uniqueResult(0); + if (ObjectUtil.isEmpty(task_jo)) { + throw new BadRequestException("当前母卷AGV搬运任务不存在或已被强制完成!"); + } + // 查询生箔点位库存表 JSONObject jsonSb = WQLObject.getWQLObject("st_ivt_sbpointivt").query("ext_code = '" + jsonRaw.getString("resource_name") + "'").uniqueResult(0); if (ObjectUtil.isEmpty(jsonSb)) { From 37b87529a738e900f2f2bd556268a0a54d882263 Mon Sep 17 00:00:00 2001 From: zhouz <> Date: Tue, 4 Nov 2025 10:25:10 +0800 Subject: [PATCH 07/10] =?UTF-8?q?fix:=E4=B8=8E=E4=B8=80=E6=9C=9F=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/nl/b_lms/sch/tasks/TwoOutExceptionalTask.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutExceptionalTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutExceptionalTask.java index c8cccf4a3..9d987bca8 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutExceptionalTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutExceptionalTask.java @@ -100,7 +100,7 @@ public class TwoOutExceptionalTask extends AbstractAcsTask { // 判断任务是否被标记 if (jsonTask.getString("is_auto_issue").equals(IOSEnum.IS_SEND.code("否"))) { // 创建出库任务 - JSONObject jsonDis = disTab.query("iostorinv_id = '" + jsonTask.getString("table_fk") + "' and struct_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0); + JSONObject jsonDis = disTab.query("iostorinv_id = '" + jsonTask.getString("car_no") + "' and struct_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0); JSONObject jsonPoint = pointTab.query("region_id = '" + RegionTypeEnum.TWO_OUT01.getId() + "' and is_delete = '0' and is_used = '1'").uniqueResult(0); From d8af9d1b65359de7f3b65a345702dd49dc9788ca Mon Sep 17 00:00:00 2001 From: zhouz <> Date: Wed, 5 Nov 2025 11:03:46 +0800 Subject: [PATCH 08/10] =?UTF-8?q?fix:=E5=87=BA=E7=A9=BA=E6=9C=A8=E7=AE=B1?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../first_floor_area/auto/AutoIssueOutEmptyTask.java | 8 -------- .../iostorInv/util/impl/OutBoxManageServiceImpl.java | 1 - .../src/main/java/org/nl/wms/sch/ComPareUtil.java | 9 +++++---- 3 files changed, 5 insertions(+), 13 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoIssueOutEmptyTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoIssueOutEmptyTask.java index 085e02f4d..95e394541 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoIssueOutEmptyTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/auto/AutoIssueOutEmptyTask.java @@ -4,13 +4,9 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections4.CollectionUtils; -import org.nl.b_lms.sch.task.dao.SchBaseTask; -import org.nl.b_lms.sch.task.service.IschBaseTaskService; import org.nl.b_lms.sch.tasks.TwoOutBoxTask; import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBoxManageService; @@ -22,7 +18,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.ArrayList; -import java.util.List; import static org.nl.wms.util.TaskUtil.getRoutePlanCode; @@ -37,9 +32,6 @@ public class AutoIssueOutEmptyTask { @Autowired private OutBoxManageService outBoxManageService; - @Autowired - private IschBaseTaskService ischBaseTaskService; - //自动执行等待的桁架任务 public void run() { try { diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBoxManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBoxManageServiceImpl.java index 3409bdf8d..712a50441 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBoxManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBoxManageServiceImpl.java @@ -128,7 +128,6 @@ public class OutBoxManageServiceImpl implements OutBoxManageService { request_param.put("containerType", jsonAttr.getString("storagevehicle_type")); jsonTaskParam.put("request_param", request_param.toString()); twoOutBoxTask.createTask(jsonTaskParam); - twoOutBoxTask.immediateNotifyAcs(null); // 锁定起点 jsonAttr.put("lock_type", IOSEnum.LOCK_TYPE.code("验箱出库锁")); attrTab.update(jsonAttr); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/ComPareUtil.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/ComPareUtil.java index 0f5516224..ce6d283e5 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/ComPareUtil.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/ComPareUtil.java @@ -61,15 +61,16 @@ public class ComPareUtil { } //查询子卷入库配置 IPdmBiContainerinboundService iPdmBiContainerinboundService = SpringContextHolder.getBean(IPdmBiContainerinboundService.class); - PdmBiContainerinbound pdmBiContainerinbound = iPdmBiContainerinboundService.getOne(new QueryWrapper() - .eq("box", sub.getPackage_box_sn())); + PdmBiContainerinbound pdmBiContainerinbound = iPdmBiContainerinboundService.list(new QueryWrapper() + .eq("box", sub.getPackage_box_sn()) + .orderByDesc("id")).get(0); JSONObject json = new JSONObject(); json.put("compaer_result", compaer_result); json.put("box_no", sub.getPackage_box_sn()); json.put("box_weight", sub.getBox_weight().intValue()); json.put("current_weight", new BigDecimal(current_weight).intValue()); - json.put("containers", list.stream().map(a->a.getContainer_name()).collect(Collectors.toList())); - json.put("inbound", (pdmBiContainerinbound != null ? pdmBiContainerinbound.getInbound():false)); + json.put("containers", list.stream().map(a -> a.getContainer_name()).collect(Collectors.toList())); + json.put("inbound", (pdmBiContainerinbound != null ? pdmBiContainerinbound.getInbound() : false)); return json; } } From 831f253412be79e8871bd5d93fe537dfaa9d685c Mon Sep 17 00:00:00 2001 From: zhouz <> Date: Fri, 7 Nov 2025 09:48:40 +0800 Subject: [PATCH 09/10] =?UTF-8?q?fix:=E6=96=B0=E5=A2=9ESSE=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E4=BB=BB=E5=8A=A1=EF=BC=8C=E5=8F=8AAOP=E6=B3=A8?= =?UTF-8?q?=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../screen/contorller/FaultController.java | 29 ++++++++ .../contorller/ScreenTaskController.java | 29 ++++++++ .../org/nl/b_lms/pdm/screen/model/Fault.java | 35 ++++++++++ .../nl/b_lms/pdm/screen/model/ScreenTask.java | 53 ++++++++++++++ .../b_lms/pdm/screen/see/SseBroadcaster.java | 69 +++++++++++++++++++ .../pdm/screen/see/aop/PushSseSnapshot.java | 22 ++++++ .../see/aop/TaskUpdateBroadcastAspect.java | 67 ++++++++++++++++++ .../screen/see/controller/SseController.java | 37 ++++++++++ .../b_lms/pdm/screen/store/InMemoryStore.java | 27 ++++++++ .../first_floor_area/DjqToKzjhcwTask.java | 2 + .../util/impl/OutBoxManageServiceImpl.java | 2 +- 11 files changed, 371 insertions(+), 1 deletion(-) create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/contorller/FaultController.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/contorller/ScreenTaskController.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/model/Fault.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/model/ScreenTask.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/see/SseBroadcaster.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/see/aop/PushSseSnapshot.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/see/aop/TaskUpdateBroadcastAspect.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/see/controller/SseController.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/store/InMemoryStore.java diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/contorller/FaultController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/contorller/FaultController.java new file mode 100644 index 000000000..ac7c42503 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/contorller/FaultController.java @@ -0,0 +1,29 @@ +package org.nl.b_lms.pdm.screen.contorller; + +import cn.dev33.satoken.annotation.SaIgnore; +import org.nl.b_lms.pdm.screen.store.InMemoryStore; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping(path = "/api/faults", produces = MediaType.APPLICATION_JSON_VALUE) +public class FaultController { + private final InMemoryStore store; + + public FaultController(InMemoryStore store) { + this.store = store; + } + + @GetMapping + @SaIgnore + public List getFaults(@RequestParam(required = false) Integer limit) { + return store.findFaults(); + } +} + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/contorller/ScreenTaskController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/contorller/ScreenTaskController.java new file mode 100644 index 000000000..42176c5e1 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/contorller/ScreenTaskController.java @@ -0,0 +1,29 @@ +package org.nl.b_lms.pdm.screen.contorller; + + +import cn.dev33.satoken.annotation.SaIgnore; +import org.nl.b_lms.pdm.screen.store.InMemoryStore; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping(path = "/api/tasks", produces = MediaType.APPLICATION_JSON_VALUE) +public class ScreenTaskController { + private final InMemoryStore store; + + public ScreenTaskController(InMemoryStore store) { this.store = store; } + + @GetMapping + @SaIgnore + public List getTasks() { + List tasks = store.findTasks(); + return tasks; + } + +} + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/model/Fault.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/model/Fault.java new file mode 100644 index 000000000..ece8e37df --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/model/Fault.java @@ -0,0 +1,35 @@ +package org.nl.b_lms.pdm.screen.model; + +public class Fault { + private Long id; + + private String deviceId; + + private String deviceType; + + private String faultContent; + + private Long occurTs; + private String severity; // info/warn/error + + public Fault() {} + + public Fault(Long id, String deviceId, String deviceType, String faultContent, Long occurTs, String severity) { + this.id = id; this.deviceId = deviceId; this.deviceType = deviceType; this.faultContent = faultContent; + this.occurTs = occurTs; this.severity = severity; + } + + public Long getId() { return id; } + public void setId(Long id) { this.id = id; } + public String getDeviceId() { return deviceId; } + public void setDeviceId(String deviceId) { this.deviceId = deviceId; } + public String getDeviceType() { return deviceType; } + public void setDeviceType(String deviceType) { this.deviceType = deviceType; } + public String getFaultContent() { return faultContent; } + public void setFaultContent(String faultContent) { this.faultContent = faultContent; } + public Long getOccurTs() { return occurTs; } + public void setOccurTs(Long occurTs) { this.occurTs = occurTs; } + public String getSeverity() { return severity; } + public void setSeverity(String severity) { this.severity = severity; } +} + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/model/ScreenTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/model/ScreenTask.java new file mode 100644 index 000000000..25d587262 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/model/ScreenTask.java @@ -0,0 +1,53 @@ +package org.nl.b_lms.pdm.screen.model; + + +public class ScreenTask { + private Long id; + + private String name; + + private String type; // AGV搬运/堆垛机操作 + + private String status; // pending, running, completed, failed, paused + private String priority; // high/medium/low + private Integer progress; // 0-100 + private String startLocation; + private String endLocation; + private String creator; + + private Long createTs; // epoch millis + private String description; + + public ScreenTask() {} + + public ScreenTask(Long id, String name, String type, String status, String priority, Integer progress, + String startLocation, String endLocation, String creator, Long createTs, String description) { + this.id = id; this.name = name; this.type = type; this.status = status; this.priority = priority; + this.progress = progress; this.startLocation = startLocation; this.endLocation = endLocation; + this.creator = creator; this.createTs = createTs; this.description = description; + } + + public Long getId() { return id; } + public void setId(Long id) { this.id = id; } + public String getName() { return name; } + public void setName(String name) { this.name = name; } + public String getType() { return type; } + public void setType(String type) { this.type = type; } + public String getStatus() { return status; } + public void setStatus(String status) { this.status = status; } + public String getPriority() { return priority; } + public void setPriority(String priority) { this.priority = priority; } + public Integer getProgress() { return progress; } + public void setProgress(Integer progress) { this.progress = progress; } + public String getStartLocation() { return startLocation; } + public void setStartLocation(String startLocation) { this.startLocation = startLocation; } + public String getEndLocation() { return endLocation; } + public void setEndLocation(String endLocation) { this.endLocation = endLocation; } + public String getCreator() { return creator; } + public void setCreator(String creator) { this.creator = creator; } + public Long getCreateTs() { return createTs; } + public void setCreateTs(Long createTs) { this.createTs = createTs; } + public String getDescription() { return description; } + public void setDescription(String description) { this.description = description; } +} + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/see/SseBroadcaster.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/see/SseBroadcaster.java new file mode 100644 index 000000000..1bba82f96 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/see/SseBroadcaster.java @@ -0,0 +1,69 @@ +package org.nl.b_lms.pdm.screen.see; + +import org.nl.b_lms.pdm.screen.store.InMemoryStore; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; + +import java.io.IOException; +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + +@Component +public class SseBroadcaster { + private final InMemoryStore store; + private final CopyOnWriteArrayList taskEmitters = new CopyOnWriteArrayList<>(); + private final CopyOnWriteArrayList faultEmitters = new CopyOnWriteArrayList<>(); + + public SseBroadcaster(InMemoryStore store) { + this.store = store; + } + + public SseEmitter registerTasksEmitter() { + SseEmitter emitter = new SseEmitter(Long.MAX_VALUE); + taskEmitters.add(emitter); + emitter.onCompletion(() -> taskEmitters.remove(emitter)); + emitter.onTimeout(() -> taskEmitters.remove(emitter)); + return emitter; + } + + public SseEmitter registerFaultsEmitter() { + SseEmitter emitter = new SseEmitter(Long.MAX_VALUE); + faultEmitters.add(emitter); + emitter.onCompletion(() -> faultEmitters.remove(emitter)); + emitter.onTimeout(() -> faultEmitters.remove(emitter)); + return emitter; + } + + public void pushTasksSnapshot() { + List snapshot = store.findTasks(); + pushTasks(snapshot); + } + + public void pushFaultsSnapshot() { + List snapshot = store.findFaults(); + pushFaults(snapshot); + } + + public void pushTasks(List tasks) { + if (taskEmitters.isEmpty()) return; + for (SseEmitter emitter : taskEmitters) { + try { + emitter.send(SseEmitter.event().name("tasks").data(tasks)); + } catch (IOException e) { + emitter.completeWithError(e); + } + } + } + + public void pushFaults(List faults) { + if (faultEmitters.isEmpty()) return; + for (SseEmitter emitter : faultEmitters) { + try { + emitter.send(SseEmitter.event().name("faults").data(faults)); + } catch (IOException e) { + emitter.completeWithError(e); + } + } + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/see/aop/PushSseSnapshot.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/see/aop/PushSseSnapshot.java new file mode 100644 index 000000000..f5718eb4e --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/see/aop/PushSseSnapshot.java @@ -0,0 +1,22 @@ +package org.nl.b_lms.pdm.screen.see.aop; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * 在方法或类上标注该注解,被执行后推送最新 SSE 快照。 + * 可通过参数控制推送的通道(任务/故障)。 + */ +@Target({TYPE, METHOD}) +@Retention(RUNTIME) +@Documented +public @interface PushSseSnapshot { + boolean tasks() default true; + boolean faults() default true; +} + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/see/aop/TaskUpdateBroadcastAspect.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/see/aop/TaskUpdateBroadcastAspect.java new file mode 100644 index 000000000..4692a7fdc --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/see/aop/TaskUpdateBroadcastAspect.java @@ -0,0 +1,67 @@ +package org.nl.b_lms.pdm.screen.see.aop; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.nl.b_lms.pdm.screen.see.SseBroadcaster; +import org.springframework.stereotype.Component; +import org.springframework.transaction.support.TransactionSynchronization; +import org.springframework.transaction.support.TransactionSynchronizationManager; + +/** + * 注解驱动的 SSE 推送切面: + * - 方法或类标注 {@link PushSseSnapshot},在成功返回后推送最新快照; + * - 若处于事务中,则在事务提交后推送,确保前端拿到已提交的数据; + * - 否则立即推送。 + */ +@Aspect +@Component +public class TaskUpdateBroadcastAspect { + private final SseBroadcaster broadcaster; + + public TaskUpdateBroadcastAspect(SseBroadcaster broadcaster) { + this.broadcaster = broadcaster; + } + + // 方法级注解:执行成功后触发推送 + @AfterReturning(value = "@annotation(pushAnn)", argNames = "jp,pushAnn") + public void afterAnnotatedMethod(JoinPoint jp, PushSseSnapshot pushAnn) { + broadcastAfterCommitOrNow(pushAnn); + } + + // 类级注解:类中任意方法成功返回后触发推送 + @AfterReturning(value = "@within(org.nl.b_lms.pdm.screen.see.aop.PushSseSnapshot)") + public void afterAnnotatedClass(JoinPoint jp) { + // 若方法本身也标注了注解,则交由方法级 advice 处理,避免重复推送 + MethodSignature sig = (MethodSignature) jp.getSignature(); + if (sig.getMethod().isAnnotationPresent(PushSseSnapshot.class)) { + return; + } + PushSseSnapshot classAnn = jp.getTarget().getClass() + .getAnnotation(PushSseSnapshot.class); + if (classAnn != null) { + broadcastAfterCommitOrNow(classAnn); + } + } + + // 任一写操作成功后,推送最新快照(替代定时器) + private void broadcastAfterCommitOrNow(PushSseSnapshot ann) { + Runnable doPush = () -> { + if (ann.tasks()) { + broadcaster.pushTasksSnapshot(); + } + if (ann.faults()) { + try { broadcaster.pushFaultsSnapshot(); } catch (Throwable ignored) {} + } + }; + if (TransactionSynchronizationManager.isSynchronizationActive()) { + TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { + @Override + public void afterCommit() { doPush.run(); } + }); + } else { + doPush.run(); + } + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/see/controller/SseController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/see/controller/SseController.java new file mode 100644 index 000000000..e0a01c766 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/see/controller/SseController.java @@ -0,0 +1,37 @@ +package org.nl.b_lms.pdm.screen.see.controller; + +import cn.dev33.satoken.annotation.SaIgnore; +import org.nl.b_lms.pdm.screen.see.SseBroadcaster; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; + +@RestController +@RequestMapping("/sse") +@CrossOrigin +public class SseController { + private final SseBroadcaster broadcaster; + + public SseController(SseBroadcaster broadcaster) { this.broadcaster = broadcaster; } + + @GetMapping(value = "/tasks", produces = MediaType.TEXT_EVENT_STREAM_VALUE) + @SaIgnore + public SseEmitter streamTasks() { + SseEmitter emitter = broadcaster.registerTasksEmitter(); + // 首帧:推送最新快照 + broadcaster.pushTasksSnapshot(); + return emitter; + } + + @GetMapping(value = "/faults", produces = MediaType.TEXT_EVENT_STREAM_VALUE) + @SaIgnore + public SseEmitter streamFaults() { + SseEmitter emitter = broadcaster.registerFaultsEmitter(); + // 首帧:推送最新快照 + broadcaster.pushFaultsSnapshot(); + return emitter; + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/store/InMemoryStore.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/store/InMemoryStore.java new file mode 100644 index 000000000..a09922224 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/store/InMemoryStore.java @@ -0,0 +1,27 @@ +package org.nl.b_lms.pdm.screen.store; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.nl.b_lms.sch.task.service.IschBaseTaskService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class InMemoryStore { + + @Autowired + private IschBaseTaskService ischBaseTaskService; + public List findTasks() { + return ischBaseTaskService.list(new LambdaQueryWrapper() + .lt(SchBaseTask::getTask_status, "07")); + } + + + public List findFaults() { + return ischBaseTaskService.list(new LambdaQueryWrapper() + .lt(SchBaseTask::getTask_status, "07")); + } +} + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqToKzjhcwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqToKzjhcwTask.java index bcf3cf1b3..c9fac5241 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqToKzjhcwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqToKzjhcwTask.java @@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; +import org.nl.b_lms.pdm.screen.see.aop.PushSseSnapshot; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import org.nl.b_lms.sch.task.dao.SchBaseTask; @@ -105,6 +106,7 @@ public class DjqToKzjhcwTask extends AbstractAcsTask { @Override @Transactional(rollbackFor = Exception.class) + @PushSseSnapshot(faults = false) public void updateTaskStatus(JSONObject taskObj, String status) { String now = DateUtil.now(); SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBoxManageServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBoxManageServiceImpl.java index 712a50441..369245f58 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBoxManageServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBoxManageServiceImpl.java @@ -839,7 +839,7 @@ public class OutBoxManageServiceImpl implements OutBoxManageService { .findFirst().orElse(null); if (ObjectUtil.isEmpty(jsonExtMove)) { - throw new BadRequestException("此移库木箱【"+jsonExtMove.getString("storagevehicle_code")+"】没有绑定托盘,请核查"); + throw new BadRequestException("此移库木箱【"+item.getString("storagevehicle_code")+"】没有绑定托盘,请核查"); } }); From 0f4ed2f174018abc53507319d553ae30d8d99f43 Mon Sep 17 00:00:00 2001 From: zhouz <> Date: Mon, 10 Nov 2025 15:25:24 +0800 Subject: [PATCH 10/10] =?UTF-8?q?fix:=E4=BB=BB=E5=8A=A1=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=B3=A8=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../screen/contorller/FaultController.java | 3 +- .../b_lms/pdm/screen/see/SseBroadcaster.java | 5 +- .../see/aop/TaskUpdateBroadcastAspect.java | 27 +++++++--- .../b_lms/pdm/screen/store/InMemoryStore.java | 54 +++++++++++++++++-- .../org/nl/b_lms/sch/tasks/TwoOutBoxTask.java | 2 + .../sch/tasks/first_floor_area/DjqTask.java | 2 + .../first_floor_area/DjqToKzjhcwTask.java | 2 +- .../sch/tasks/first_floor_area/GzqTask.java | 3 ++ .../first_floor_area/GzqToKzjhcwTask.java | 2 + .../sch/tasks/first_floor_area/MzhcwTask.java | 2 + .../first_floor_area/SendDjqKzjTask.java | 2 + .../first_floor_area/SendGzqKzjTask.java | 2 + .../tasks/first_floor_area/ShiftingTask.java | 2 + .../tasks/first_floor_area/SsxDjwTask.java | 2 + .../sch/tasks/first_floor_area/ZxDjwTask.java | 2 + .../sch/tasks/first_floor_area/ZxqTask.java | 2 + 16 files changed, 99 insertions(+), 15 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/contorller/FaultController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/contorller/FaultController.java index ac7c42503..8b3f7c268 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/contorller/FaultController.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/contorller/FaultController.java @@ -1,6 +1,7 @@ package org.nl.b_lms.pdm.screen.contorller; import cn.dev33.satoken.annotation.SaIgnore; +import com.alibaba.fastjson.JSONArray; import org.nl.b_lms.pdm.screen.store.InMemoryStore; import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.springframework.http.MediaType; @@ -22,7 +23,7 @@ public class FaultController { @GetMapping @SaIgnore - public List getFaults(@RequestParam(required = false) Integer limit) { + public JSONArray getFaults(@RequestParam(required = false) Integer limit) { return store.findFaults(); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/see/SseBroadcaster.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/see/SseBroadcaster.java index 1bba82f96..801c47460 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/see/SseBroadcaster.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/see/SseBroadcaster.java @@ -1,5 +1,6 @@ package org.nl.b_lms.pdm.screen.see; +import com.alibaba.fastjson.JSONArray; import org.nl.b_lms.pdm.screen.store.InMemoryStore; import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.springframework.stereotype.Component; @@ -41,7 +42,7 @@ public class SseBroadcaster { } public void pushFaultsSnapshot() { - List snapshot = store.findFaults(); + JSONArray snapshot = store.findFaults(); pushFaults(snapshot); } @@ -56,7 +57,7 @@ public class SseBroadcaster { } } - public void pushFaults(List faults) { + public void pushFaults(JSONArray faults) { if (faultEmitters.isEmpty()) return; for (SseEmitter emitter : faultEmitters) { try { diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/see/aop/TaskUpdateBroadcastAspect.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/see/aop/TaskUpdateBroadcastAspect.java index 4692a7fdc..ccf95c83f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/see/aop/TaskUpdateBroadcastAspect.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/see/aop/TaskUpdateBroadcastAspect.java @@ -9,6 +9,8 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.support.TransactionSynchronization; import org.springframework.transaction.support.TransactionSynchronizationManager; +import java.util.concurrent.locks.ReentrantLock; + /** * 注解驱动的 SSE 推送切面: * - 方法或类标注 {@link PushSseSnapshot},在成功返回后推送最新快照; @@ -20,6 +22,9 @@ import org.springframework.transaction.support.TransactionSynchronizationManager public class TaskUpdateBroadcastAspect { private final SseBroadcaster broadcaster; + // 非阻塞并发保护:同一时刻仅允许一次推送执行,其他并发调用直接跳过 + private final ReentrantLock pushLock = new ReentrantLock(); + public TaskUpdateBroadcastAspect(SseBroadcaster broadcaster) { this.broadcaster = broadcaster; } @@ -47,21 +52,29 @@ public class TaskUpdateBroadcastAspect { // 任一写操作成功后,推送最新快照(替代定时器) private void broadcastAfterCommitOrNow(PushSseSnapshot ann) { - Runnable doPush = () -> { - if (ann.tasks()) { - broadcaster.pushTasksSnapshot(); + Runnable doPushGuarded = () -> { + // 非阻塞尝试获取锁:失败则直接跳过本次推送 + if (!pushLock.tryLock()) { + return; } - if (ann.faults()) { - try { broadcaster.pushFaultsSnapshot(); } catch (Throwable ignored) {} + try { + if (ann.tasks()) { + broadcaster.pushTasksSnapshot(); + } + if (ann.faults()) { + try { broadcaster.pushFaultsSnapshot(); } catch (Throwable ignored) {} + } + } finally { + pushLock.unlock(); } }; if (TransactionSynchronizationManager.isSynchronizationActive()) { TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { @Override - public void afterCommit() { doPush.run(); } + public void afterCommit() { doPushGuarded.run(); } }); } else { - doPush.run(); + doPushGuarded.run(); } } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/store/InMemoryStore.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/store/InMemoryStore.java index a09922224..bfdaaeda0 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/store/InMemoryStore.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm/screen/store/InMemoryStore.java @@ -1,27 +1,73 @@ package org.nl.b_lms.pdm.screen.store; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.extern.slf4j.Slf4j; import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.nl.b_lms.sch.task.service.IschBaseTaskService; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.ext.acs.service.impl.WmsToAcsServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; @Component +@Slf4j public class InMemoryStore { @Autowired private IschBaseTaskService ischBaseTaskService; + public List findTasks() { + List targetType = Arrays.asList( + "010702", "010703", "010704", "010706", "010710", "010712", "010714", "010715", + "010901", "010902", "010903", "010904", "010905", "010906", "010907", "010908", + "010909", "010910", "010911", "010912", "010913", "010914", "010915" + ); return ischBaseTaskService.list(new LambdaQueryWrapper() - .lt(SchBaseTask::getTask_status, "07")); + .eq(SchBaseTask::getIs_delete, false) + .in(SchBaseTask::getTask_type, targetType) + .lt(SchBaseTask::getTask_status, "07") + .select(SchBaseTask::getTask_code, + SchBaseTask::getTask_type, + SchBaseTask::getCreate_name, + SchBaseTask::getPoint_code1, + SchBaseTask::getPoint_code2, + SchBaseTask::getPoint_code3, + SchBaseTask::getPoint_code4, + SchBaseTask::getVehicle_code, + SchBaseTask::getTask_status, + SchBaseTask::getCreate_time + )); } - public List findFaults() { - return ischBaseTaskService.list(new LambdaQueryWrapper() - .lt(SchBaseTask::getTask_status, "07")); + public JSONArray findFaults() { + JSONArray blk_rows = WQLObject.getWQLObject("em_bi_monitordevice").query("product_area = 'BLK' AND is_crux = '1' AND region_code IN ('RK','NBJ','DDJ')").getResultJSONArray(0); + List blkList = new ArrayList<>(); + for (int i = 0; i < blk_rows.size(); i++) { + JSONObject row = blk_rows.getJSONObject(i); + blkList.add(row.getString("device_code")); + } + + + WmsToAcsServiceImpl bean = SpringContextHolder.getBean(WmsToAcsServiceImpl.class); + JSONObject result2; + try { + result2 = bean.getDeviceErrorInfo(blkList, "BLK"); + } catch (Exception e) { + result2 = new JSONObject(); + log.info(e.getMessage()); + } + // 调用acs接口获取设备 + JSONArray blk_data = result2.getJSONArray("data"); + return ObjectUtil.isEmpty(blk_data) ? blk_data : new JSONArray(); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutBoxTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutBoxTask.java index a8a6eeaab..44db2b6f5 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutBoxTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/TwoOutBoxTask.java @@ -1,6 +1,7 @@ package org.nl.b_lms.sch.tasks; import cn.hutool.core.date.DateUtil; +import org.nl.b_lms.pdm.screen.see.aop.PushSseSnapshot; import org.nl.common.utils.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -47,6 +48,7 @@ import static org.nl.wms.util.TaskUtil.getRoutePlanCode; */ @Service @Slf4j +@PushSseSnapshot public class TwoOutBoxTask extends AbstractAcsTask { /** diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqTask.java index 0b5bdcc31..c63989043 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqTask.java @@ -13,6 +13,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; +import org.nl.b_lms.pdm.screen.see.aop.PushSseSnapshot; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import org.nl.b_lms.sch.task.dao.SchBaseTask; @@ -46,6 +47,7 @@ import java.util.stream.Collectors; @Service() @RequiredArgsConstructor @Slf4j +@PushSseSnapshot(faults = false) public class DjqTask extends AbstractAcsTask { @Resource private IschBaseTaskService taskService; diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqToKzjhcwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqToKzjhcwTask.java index c9fac5241..52150968a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqToKzjhcwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/DjqToKzjhcwTask.java @@ -45,6 +45,7 @@ import java.util.stream.Collectors; @Service() @RequiredArgsConstructor @Slf4j +@PushSseSnapshot(faults = false) public class DjqToKzjhcwTask extends AbstractAcsTask { @@ -106,7 +107,6 @@ public class DjqToKzjhcwTask extends AbstractAcsTask { @Override @Transactional(rollbackFor = Exception.class) - @PushSseSnapshot(faults = false) public void updateTaskStatus(JSONObject taskObj, String status) { String now = DateUtil.now(); SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java index 3d20d80e8..2ce71ab1d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqTask.java @@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.pdm.screen.see.aop.PushSseSnapshot; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import org.nl.b_lms.sch.task.dao.SchBaseTask; @@ -40,6 +41,8 @@ import java.util.List; @Service() @RequiredArgsConstructor @Slf4j +@PushSseSnapshot(faults = false) + public class GzqTask extends AbstractAcsTask { private final String THIS_CLASS = GzqTask.class.getName(); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqToKzjhcwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqToKzjhcwTask.java index ce07874a1..eef8170f6 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqToKzjhcwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/GzqToKzjhcwTask.java @@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.pdm.screen.see.aop.PushSseSnapshot; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import org.nl.b_lms.sch.task.dao.SchBaseTask; @@ -40,6 +41,7 @@ import java.util.List; @Service() @RequiredArgsConstructor @Slf4j +@PushSseSnapshot(faults = false) public class GzqToKzjhcwTask extends AbstractAcsTask { diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java index 9fc8e2c1e..ade0cd17d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/MzhcwTask.java @@ -14,6 +14,7 @@ import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; +import org.nl.b_lms.pdm.screen.see.aop.PushSseSnapshot; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import org.nl.b_lms.sch.task.dao.SchBaseTask; @@ -50,6 +51,7 @@ import java.util.stream.Stream; @Service() @RequiredArgsConstructor @Slf4j +@PushSseSnapshot(faults = false) public class MzhcwTask extends AbstractAcsTask { private final String THIS_CLASS = MzhcwTask.class.getName(); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendDjqKzjTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendDjqKzjTask.java index db3f9ab13..c6b2aea33 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendDjqKzjTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendDjqKzjTask.java @@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.pdm.screen.see.aop.PushSseSnapshot; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import org.nl.b_lms.sch.task.dao.SchBaseTask; @@ -40,6 +41,7 @@ import java.util.List; @Service() @RequiredArgsConstructor @Slf4j +@PushSseSnapshot(faults = false) public class SendDjqKzjTask extends AbstractAcsTask { @Resource private IschBaseTaskService taskService; diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendGzqKzjTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendGzqKzjTask.java index 74d70dc04..3895f61fa 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendGzqKzjTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SendGzqKzjTask.java @@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.pdm.screen.see.aop.PushSseSnapshot; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import org.nl.b_lms.sch.task.dao.SchBaseTask; @@ -39,6 +40,7 @@ import java.util.List; @Service() @RequiredArgsConstructor @Slf4j +@PushSseSnapshot(faults = false) public class SendGzqKzjTask extends AbstractAcsTask { @Resource private IschBaseTaskService taskService; diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ShiftingTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ShiftingTask.java index 94287d084..716df8208 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ShiftingTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ShiftingTask.java @@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.pdm.screen.see.aop.PushSseSnapshot; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import org.nl.b_lms.sch.task.dao.SchBaseTask; @@ -39,6 +40,7 @@ import java.util.List; @Service() @RequiredArgsConstructor @Slf4j +@PushSseSnapshot(faults = false) public class ShiftingTask extends AbstractAcsTask { private final String THIS_CLASS = ShiftingTask.class.getName(); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java index debcbce77..54fb00b8b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/SsxDjwTask.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.nl.b_lms.pdm.screen.see.aop.PushSseSnapshot; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; import org.nl.b_lms.sch.point.service.IbstIvtPackageinfoivtService; import org.nl.b_lms.sch.task.dao.SchBaseTask; @@ -40,6 +41,7 @@ import java.util.List; @Service() @RequiredArgsConstructor @Slf4j +@PushSseSnapshot(faults = false) public class SsxDjwTask extends AbstractAcsTask { private final String THIS_CLASS = SsxDjwTask.class.getName(); diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java index 529e09628..7ff3f0b29 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxDjwTask.java @@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; +import org.nl.b_lms.pdm.screen.see.aop.PushSseSnapshot; import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation; import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; @@ -51,6 +52,7 @@ import java.util.concurrent.TimeUnit; */ @Service() @Slf4j +@PushSseSnapshot(faults = false) public class ZxDjwTask extends AbstractAcsTask { diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java index 42d6b86c1..3a6f6ba79 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/sch/tasks/first_floor_area/ZxqTask.java @@ -13,6 +13,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan; import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.mapper.PdmBiSlittingproductionplanMapper; +import org.nl.b_lms.pdm.screen.see.aop.PushSseSnapshot; import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation; import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService; import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt; @@ -49,6 +50,7 @@ import java.util.List; @Service() @RequiredArgsConstructor @Slf4j +@PushSseSnapshot(faults = false) public class ZxqTask extends AbstractAcsTask { @Resource