From bf2494369121b1eb4b021141388dfb6745c66e68 Mon Sep 17 00:00:00 2001 From: gongbaoxiong <751575283@qq.com> Date: Mon, 17 Nov 2025 14:25:51 +0800 Subject: [PATCH] =?UTF-8?q?opt:=E7=8E=B0=E5=9C=BA=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E7=9A=84=E4=B8=80=E4=BA=9B=E5=A4=84=E7=90=86=E4=B8=8E=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/nl/common/enums/StatusEnum.java | 2 +- .../StIvtBsrealstorattrController.java | 12 +- .../impl/diy/DepthPriorityHandler.java | 12 +- .../impl/diy/InventoryRuleHandler.java | 4 +- .../dispatch/TaskDispatchService.java | 22 +- .../service/impl/SchBasePointServiceImpl.java | 6 +- .../controller/SchBaseTaskController.java | 26 ++ .../task/handler/impl/MoveStorageTask.java | 21 +- .../task/service/ISchBaseTaskService.java | 6 +- .../service/dao/mapper/SchBaseTaskMapper.java | 2 +- .../dao/mapper/xml/SchBaseTaskMapper.xml | 4 + .../service/impl/SchBaseTaskServiceImpl.java | 64 +++- .../cockpit/service/CockpitService.java | 7 + .../cockpit/service/IcockpitTempService.java | 20 ++ .../cockpit/service/dao/CockpitTemp.java | 59 ++++ .../cockpit/service/dao/CockpitTempDto.java | 41 +++ .../service/impl/CockpitServiceImpl.java | 330 +++++++++++++++++- .../service/impl/CockpitTempServiceImpl.java | 22 ++ .../cockpit/service/mapper/CockpitMapper.xml | 3 +- .../service/mapper/CockpitTempMapper.java | 15 + .../service/mapper/CockpitTempMapper.xml | 6 + .../service/CheckStorageService.java | 10 +- .../move/service/MovingService.java | 93 ++--- .../controller/StIvtStructattrController.java | 29 +- .../dao/mapper/xml/StIvtStructattrMapper.xml | 3 + .../struct/service/dto/StructattrQuery.java | 1 + .../impl/StIvtStructattrServiceImpl.java | 107 ++++-- .../task/SyncCockpitScheduleService.java | 39 +++ .../task/SyncErpBillsScheduleService.java | 7 +- wms_pro/qd/src/views/system/timing/index.vue | 27 +- .../views/wms/dispatch_manage/task/index.vue | 23 +- .../views/wms/dispatch_manage/task/index2.vue | 14 +- .../wms/dispatch_manage/task/schBaseTask.js | 17 +- .../storIvtInfo/StructAttrDialog.vue | 8 + 34 files changed, 902 insertions(+), 160 deletions(-) create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/IcockpitTempService.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/dao/CockpitTemp.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/dao/CockpitTempDto.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/impl/CockpitTempServiceImpl.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/mapper/CockpitTempMapper.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/mapper/CockpitTempMapper.xml create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/quartz/task/SyncCockpitScheduleService.java diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java index 764ec832..af380582 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java @@ -71,7 +71,7 @@ public enum StatusEnum { /** * 点位锁类型 */ - LOCK(ForkMap.of("无锁", "00", null, "入库锁", "10", null, "入库盘点锁", "16", null, "出库锁", "20", null, "盘点出库锁", "26", null, "移库锁", "50", null, "异常锁定", "60", null, "空出锁", "70", null,"暂停锁", "98", null,"临时锁", "99", null)), + LOCK(ForkMap.of("无锁", "00", null, "入库锁", "10", null, "入库盘点锁", "16", null, "出库锁", "20", null, "盘点出库锁", "26", null, "移库锁", "50", null, "异常锁定", "60", null, "空出锁", "70", null,"禁分配锁", "98", null,"技改锁", "99", null)), STRATEGY_TYPE(ForkMap.of("入库", "1", null, "出库", "2", null, "出入库", "3", null)), diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/bsrealstorattr/controller/StIvtBsrealstorattrController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/bsrealstorattr/controller/StIvtBsrealstorattrController.java index d24011b4..0d872c85 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/bsrealstorattr/controller/StIvtBsrealstorattrController.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/bsrealstorattr/controller/StIvtBsrealstorattrController.java @@ -86,7 +86,7 @@ public class StIvtBsrealstorattrController { } /** - * 库位初始化 + * 仓库库位数据初始化 */ @PostMapping("/batchSaveAttr") @SaIgnore @@ -101,20 +101,20 @@ public class StIvtBsrealstorattrController { ArrayList list = new ArrayList<>(); for (int x = 1; x <= 排; x++) { for (int y = 1; y <= 列; y++) { - for (int z = 1; z <= 层; z++) { + for (int z = 5; z <= 层; z++) { StIvtStructattr attr = new StIvtStructattr(); attr.setId(IdUtil.getStringId()); attr.setSect_code(sect_code); attr.setStor_code(stor_code); - String nx = (x < 10) ? "0" + x : "" + x; - String ny = (y < 10) ? "0" + y : "" + y; - String nz = (z < 10) ? "0" + z : "" + z; + String nx = "" + x; + String ny = "" + y; + String nz = "" + z; attr.setStruct_code(pre+nx+"-"+ny+"-"+nz); attr.setStruct_name(x+"排"+y+"列"+z+"层"); attr.setCreate_id("1"); attr.setRow_num(x); attr.setCol_num(y); - attr.setBlock_num(2); + attr.setBlock_num(5); attr.setLayer_num(z); attr.setCreate_time(now); attr.setCreate_name("Admin"); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/DepthPriorityHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/DepthPriorityHandler.java index 3f0d1455..25b9abb7 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/DepthPriorityHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/DepthPriorityHandler.java @@ -143,12 +143,14 @@ public class DepthPriorityHandler extends Decisioner t.getTask_type().equals(StatusEnum.IOBILL_TYPE_OUT.code("生产入库"))||t.getTask_type().equals(StatusEnum.IOBILL_TYPE_IN.code("拣选回库"))) - .collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(taskList)) { - log.error("深位优先策略:获取深货位有货且浅货位无货仓位:载具号:" + param.getString("vehicle_code") + "获取仓位失败,该策略对应库位已不足30个!"); - return Collections.emptyList(); + taskList=taskList.stream() + .filter(t -> t.getTask_type().equals(StatusEnum.IOBILL_TYPE_IN.code("生产入库"))||t.getTask_type().equals(StatusEnum.IOBILL_TYPE_IN.code("拣选回库"))) + .collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(taskList)) { + log.error("深位优先策略:获取深货位有货且浅货位无货仓位:载具号:" + param.getString("vehicle_code") + "获取仓位失败,该策略对应库位已不足30个!"); + return Collections.emptyList(); + } } } log.info("深位优先策略:载具号:" + param.getString("vehicle_code") + "分配结果: 深货位有货且浅货位无货仓位,无需移库,分配仓位:" + combinedResult.get(0).getStruct_code()); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/InventoryRuleHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/InventoryRuleHandler.java index 384f3337..19d3a585 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/InventoryRuleHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/decisioner/impl/diy/InventoryRuleHandler.java @@ -13,6 +13,7 @@ import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask; import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService; import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; @@ -41,8 +42,7 @@ public class InventoryRuleHandler extends Decisioner tasks = iSchBaseTaskService.list(new QueryWrapper() - .eq("is_send", true) - .eq("is_delete",false) - .lt("status", StatusEnum.FORM_STATUS.code("生成"))); - //...调度逻辑 - //下发 - } +// @Scheduled(cron = "0/30 * * * * ?") +// public void taskPublish(){ +// List tasks = iSchBaseTaskService.list(new QueryWrapper() +// .eq("is_send", true) +// .eq("is_delete",false) +// .lt("status", StatusEnum.FORM_STATUS.code("生成"))); +// //...调度逻辑 +// //下发 +// +// } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/point/service/impl/SchBasePointServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/point/service/impl/SchBasePointServiceImpl.java index df3fcec1..1c04df02 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/point/service/impl/SchBasePointServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/point/service/impl/SchBasePointServiceImpl.java @@ -31,6 +31,7 @@ import org.nl.wms.system_manage.service.user.ISysUserService; import org.nl.wms.system_manage.service.user.dao.SysUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -65,11 +66,12 @@ public class SchBasePointServiceImpl extends ServiceImpl(HttpStatus.OK); } + @PostMapping ("/cancelTask") + @Log("批量取消任务") + public ResponseEntity cancelTask(@RequestBody List list) { + iSchBaseTaskService.cancelTask(list); + return new ResponseEntity<>(HttpStatus.OK); + } + + + + + + + @PostMapping ("/delCtuIvt") @Log("清除CTU库库存") public ResponseEntity delCtuIvt() { iSchBaseTaskService.deleteCtuIvt(); return new ResponseEntity<>(HttpStatus.OK); } + + @PostMapping ("/updateLockIvt") + @Log("清空技改锁") + public ResponseEntity updateLockIvt() { + iSchBaseTaskService.updateLockIvt(StatusEnum.LOCK.code("技改锁")); + return new ResponseEntity<>(HttpStatus.OK); + } + + + + + @GetMapping("/taskMsgSchedule") public ResponseEntity taskMsgSchedule() { return new ResponseEntity<>(HttpStatus.OK); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/MoveStorageTask.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/MoveStorageTask.java index 4b85b1bd..d81ec415 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/MoveStorageTask.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/handler/impl/MoveStorageTask.java @@ -115,21 +115,22 @@ public class MoveStorageTask extends AbstractTask { iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code1(), schBaseTask.getVehicle_code(), schBaseTask.getTask_type(), null, Boolean.FALSE, schBaseTask.getPoint_code2()); iStIvtStructattrService.changeStruct(schBaseTask.getPoint_code2(), schBaseTask.getVehicle_code(), schBaseTask.getTask_type(), null, Boolean.TRUE, schBaseTask.getPoint_code2()); if ("99".equals(schBaseTask.getSource_form_id())) { - //移库完成后,起点作为临时锁,支持技改,不再入库,技改完成后需要解锁 + //移库完成后,起点作为技改锁,支持技改,不再入库,技改完成后需要解锁 iStIvtStructattrService.update( new UpdateWrapper() - .set("lock_type", StatusEnum.LOCK.code("临时锁")) + .set("lock_type", StatusEnum.LOCK.code("技改锁")) + .set("is_used",0) .eq("struct_code", schBaseTask.getPoint_code1()) ); - List taskList = taskService.list(new QueryWrapper().eq("source_form_id", "99").lt("status", StatusEnum.FORM_STATUS.code("完成"))); + // List taskList = taskService.list(new QueryWrapper().eq("source_form_id", "99").lt("status", StatusEnum.FORM_STATUS.code("完成"))); //移库任务完成,解锁需要维护不能分配的区域 - if (taskList.size() == 0) { - UpdateWrapper wrapper = new UpdateWrapper<>(); - wrapper.set("update_time", DateUtil.now()) - .set("lock_type", StatusEnum.LOCK.code("无锁")) - .eq("lock_type", StatusEnum.LOCK.code("暂停锁")); - iStIvtStructattrService.update(wrapper); - } + // if (taskList.size() == 0) { + // UpdateWrapper wrapper = new UpdateWrapper<>(); + // wrapper.set("update_time", DateUtil.now()) + // .set("lock_type", StatusEnum.LOCK.code("无锁")) + // .eq("lock_type", StatusEnum.LOCK.code("禁分配锁")); + // iStIvtStructattrService.update(wrapper); + // } } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/ISchBaseTaskService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/ISchBaseTaskService.java index 15a53109..fbd7c41e 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/ISchBaseTaskService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/ISchBaseTaskService.java @@ -58,12 +58,14 @@ public interface ISchBaseTaskService extends IService { void deleteAll(Set ids); - void taskSchedule(List list); + void taskSchedule(List list); + + void cancelTask(List list); @Transactional(rollbackFor = Exception.class) void deleteCtuIvt(); - + void updateLockIvt(String lock_type); /** * 任务操作 diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/SchBaseTaskMapper.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/SchBaseTaskMapper.java index 294fc6b0..87cc8d92 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/SchBaseTaskMapper.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/SchBaseTaskMapper.java @@ -33,7 +33,7 @@ public interface SchBaseTaskMapper extends BaseMapper { int updateVehiclemater(); int updateCStockIvt(); - + int updateFStockIvt(@Param("lock_type") String lock_type); diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/xml/SchBaseTaskMapper.xml b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/xml/SchBaseTaskMapper.xml index 5823b8b7..b7b57fcc 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/xml/SchBaseTaskMapper.xml +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/dao/mapper/xml/SchBaseTaskMapper.xml @@ -137,4 +137,8 @@ UPDATE `st_ivt_structattr` SET vehicle_code=null,lock_type='00' WHERE stor_code iN ('CStockId','HStockId') AND is_used ='1' + + update `st_ivt_structattr` set lock_type = '00' where lock_type = #{lock_type} + + diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/impl/SchBaseTaskServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/impl/SchBaseTaskServiceImpl.java index 4ae1548f..4ce4f0c1 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/impl/SchBaseTaskServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/dispatch_manage/task/service/impl/SchBaseTaskServiceImpl.java @@ -163,6 +163,12 @@ public class SchBaseTaskServiceImpl extends ServiceImpl list) { @@ -190,6 +196,19 @@ public class SchBaseTaskServiceImpl extends ServiceImpl list) { + if (ObjectUtils.isEmpty(list)) { + throw new BadRequestException("任务信息不存在"); + } + list.forEach(r -> { + JSONObject param = new JSONObject(); + param.put("task_code", r.getTask_code()); + param.put("status", StatusEnum.FORM_STATUS.code("取消")); + this.operation(param); + }); + } + @Override public void create(SchBaseTask entity) { @@ -398,26 +417,41 @@ public class SchBaseTaskServiceImpl extends ServiceImpl moveStruct = new AtomicReference<>(); + /** + * 1.判断对应浅位是否存在料箱 + * 2.如果有则判断是否存在出库任务 + * 3.如果没有则生成移库任务 + */ + + String blockPoint = StructUtil.getZdPoint(stIvtStructattr.getRow_num(), stIvtStructattr.getStruct_code()); + StIvtStructattr block = iStIvtStructattrService.getOne(new QueryWrapper() + .eq("struct_code", blockPoint) + .isNotNull("vehicle_code")); this.update(new UpdateWrapper() .set("status", StatusEnum.FORM_STATUS.code("生成")) - .set("remark", struct_code + "出库阻挡二次下发") + .set("remark", blockPoint + "出库阻挡二次下发") .set("update_time", DateUtil.now()) .eq("task_code", task.getTask_code())); - StIvtStructattr struct = iStIvtStructattrService.getOne(new QueryWrapper().eq("struct_code", struct_code)); - String vehicleCode = struct.getVehicle_code(); - RedissonUtils.lock(() -> { - System.out.println("---3--" + Thread.currentThread().getName()); - //出阻挡说明是同排跟任务一个类型载具 - Map process = SpringContextHolder.getBean(DecisionHandler.class).dispenseTransa(ListOf.of("limitStorage", "depthPriority", "alleyAve"), new JSONObject(MapOf.of("is_move", true, "stor_code", stIvtStructattr.getStor_code(), "vehicle_code", task.getVehicle_code(), "errorTask", "errorTask"))); - moveStruct.set(((Map) process.get("form_data")).get("end_struct_code")); - }, "1" + stIvtStructattr.getStor_code(), 5); - Map moveForm = MapOf.of("task_type", StatusEnum.IOBILL_TYPE_MOVE.code("异常位移库") - , "is_send", false - , "vehicle_code", StringUtils.isEmpty(vehicleCode) ? "YCZJ" + task.getTask_code() : vehicleCode, "form_data", new JSONObject(MapOf.of("start_struct_code", struct_code, "end_struct_code", moveStruct.get()))); - moveStorageTask.createTask(new JSONObject(moveForm)); + log.info("-----出库分配:深位查询浅位是否有货:{}", block != null); + if (block != null) { + int count =this.count(new QueryWrapper() + .eq("point_code1", block.getStruct_code()) + .lt("status", StatusEnum.FORM_STATUS.code("完成"))); + if (count == 0) { + AtomicReference moveStruct = new AtomicReference<>(); + RedissonUtils.lock(() -> { + System.out.println("---3--" + Thread.currentThread().getName()); + //出阻挡说明是同排跟任务一个类型载具 + Map process = SpringContextHolder.getBean(DecisionHandler.class).dispenseTransa(ListOf.of("limitStorage", "depthPriority", "alleyAve"), new JSONObject(MapOf.of("is_move", true, "stor_code", stIvtStructattr.getStor_code(), "vehicle_code", task.getVehicle_code(), "errorTask", "errorTask"))); + moveStruct.set(((Map) process.get("form_data")).get("end_struct_code")); + }, "1" + stIvtStructattr.getStor_code(), 5); + Map moveForm = MapOf.of("task_type", StatusEnum.IOBILL_TYPE_MOVE.code("异常位移库") + , "is_send", false + , "vehicle_code", StringUtils.isEmpty(block.getVehicle_code()) ? "YCZJ" + task.getTask_code() : block.getVehicle_code(), "form_data", new JSONObject(MapOf.of("start_struct_code", block.getStruct_code(), "end_struct_code", moveStruct.get()))); + moveStorageTask.createTask(new JSONObject(moveForm)); + } + } } - private JSONObject rzd(StIvtStructattr stIvtStructattr, SchBaseTask task) { String task_code = task.getTask_code(); MdPbVehicleMater vehicleCode = iMdPbVehicleMaterService diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/CockpitService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/CockpitService.java index 40395211..c3f76fde 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/CockpitService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/CockpitService.java @@ -28,6 +28,13 @@ public interface CockpitService { JSONObject synthesizeInfo(); + /** + * 货位数据缓存 + */ + JSONObject updateSynthesizeInfo(); + + + /** * 领料分析 */ diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/IcockpitTempService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/IcockpitTempService.java new file mode 100644 index 00000000..27182bff --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/IcockpitTempService.java @@ -0,0 +1,20 @@ +package org.nl.wms.pda_manage.cockpit.service; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.pda_manage.cockpit.service.dao.CockpitTemp; + + + +/** + * {@code @Description:} (CockpitTemp)服务接口层 + * {@code @Author:} gbx + * + * @since 2025-10-16 + */ +public interface IcockpitTempService extends IService { + + + + +} + + diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/dao/CockpitTemp.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/dao/CockpitTemp.java new file mode 100644 index 00000000..1e2897db --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/dao/CockpitTemp.java @@ -0,0 +1,59 @@ +package org.nl.wms.pda_manage.cockpit.service.dao; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + + +/** + * {@code @Description:} (CockpitTemp)实体类 + * {@code @Author:} gbx + * + * @since 2025-10-16 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("cockpit_temp") +public class CockpitTemp extends Model { + + private static final long serialVersionUID = -7739291296662381393L; + //@TableId(type = IdType.ASSIGN_ID) + + + /** + * 主键id + */ + @TableId(value = "id", type = IdType.NONE) + private Integer id; + + + /** + * + */ + private String code; + + + /** + * + */ + private String value; + + /** + * 获取主键值 + * + * @return 主键值 + */ + @Override + protected Serializable pkVal() { + return this.id; + } + +} + + + diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/dao/CockpitTempDto.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/dao/CockpitTempDto.java new file mode 100644 index 00000000..d13eb49e --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/dao/CockpitTempDto.java @@ -0,0 +1,41 @@ +package org.nl.wms.pda_manage.cockpit.service.dao; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + + +/** + * {@code @Description:} (CockpitTemp)数据传输类 + * {@code @Author:} gbx + * + * @since 2025-10-16 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class CockpitTempDto implements Serializable { + + /** + * 主键id + */ + private Integer id; + + + /** + * + */ + private String code; + + + /** + * + */ + private String name; + + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/impl/CockpitServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/impl/CockpitServiceImpl.java index 44382285..c7a3adda 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/impl/CockpitServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/impl/CockpitServiceImpl.java @@ -5,6 +5,7 @@ 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.update.LambdaUpdateWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.nl.common.TableDataInfo; @@ -14,6 +15,7 @@ import org.nl.wms.dispatch_manage.point.service.dao.SchBasePoint; import org.nl.wms.dispatch_manage.point.service.impl.SchBasePointServiceImpl; import org.nl.wms.external_system.dto.InteracteDto; import org.nl.wms.pda_manage.cockpit.service.CockpitService; +import org.nl.wms.pda_manage.cockpit.service.dao.CockpitTemp; import org.nl.wms.pda_manage.cockpit.service.dao.PointInfo; import org.nl.wms.pda_manage.cockpit.service.dao.TaskInfo; import org.nl.wms.pda_manage.cockpit.service.mapper.CockpitMapper; @@ -57,6 +59,10 @@ public class CockpitServiceImpl implements CockpitService { @Resource private SchBasePointServiceImpl schBasePointServiceImpl; + + @Resource + private CockpitTempServiceImpl cockpitTempServiceImpl; + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM-dd"); LocalDate today = LocalDate.now(); @@ -78,12 +84,290 @@ public class CockpitServiceImpl implements CockpitService { } + + /** * 货位综合分析 */ @Override public JSONObject synthesizeInfo() { JSONObject jsonObject = new JSONObject(); +// //货位使用 +// CompletableFuture>> task1 = CompletableFuture.supplyAsync(() -> { +// Integer total1 = 0; +// Integer used1 = 0; +// Integer free1 = 0; +// String percent1 = "0%"; +// Integer total2 = 0; +// Integer used2 = 0; +// Integer free2 = 0; +// String percent2 = "0%"; +// JSONObject item1 = new JSONObject(); +// JSONObject item3 = new JSONObject(); +// long startTime1 = System.currentTimeMillis(); +// //库存信息 +// List ivtList = cockpitMapper.queryStorage(); +// if (ObjectUtil.isNotEmpty(ivtList)) { +// //料箱库 +// List fstockList = ivtList.stream().filter(r -> "FStockId".equals(r.getStor_code())).collect(Collectors.toList()); +// if (ObjectUtil.isNotEmpty(fstockList)) { +// total1 = fstockList.size(); +// if (total1 > 0) { +// // 计算已使用的数量 +// long used = fstockList.stream().filter(r -> StringUtils.isNotEmpty(r.getVehicle_code())).count(); +// used1 = (int) used; +// free1 = total1 - used1; +// double percentage = (double) used1 / total1 * 100; +// BigDecimal bd = new BigDecimal(percentage).setScale(2, RoundingMode.HALF_UP); +// double roundedPercentage = bd.doubleValue(); +// percent1 = roundedPercentage + "%"; +// } +// } +// //托盘库 +// List fstockPalletList = ivtList.stream().filter(r -> "FStockPallet".equals(r.getStor_code())).collect(Collectors.toList()); +// if (ObjectUtil.isNotEmpty(fstockPalletList)) { +// total2 = fstockPalletList.size(); +// if (total2 > 0) { +// long used = fstockPalletList.stream().filter(r -> StringUtils.isNotEmpty(r.getVehicle_code())).count(); +// used2 = (int) used; +// free2 = total2 - used2; +// double percentage = (double) used2 / total2 * 100; +// BigDecimal bd = new BigDecimal(percentage).setScale(2, RoundingMode.HALF_UP); +// double roundedPercentage = bd.doubleValue(); +// percent2 = roundedPercentage + "%"; +// } +// } +// } +// item1.put("total", total1); +// item1.put("used", used1); +// item1.put("free", free1); +// item1.put("percent", percent1); +// item3.put("total", total2); +// item3.put("used", used2); +// item3.put("free", free2); +// item3.put("percent", percent2); +// jsonObject.put("lx_used", item1); +// jsonObject.put("tp_used", item3); +// log.info("获取货位使用信息耗时:{}", System.currentTimeMillis() - startTime1); +// return null; +// }, pool); +// task1.exceptionally((e) -> { +// log.error("获取货位使用信息异常:{}", e.getMessage(), e); +// return null; +// }); +// CompletableFuture>> task2 = CompletableFuture.supplyAsync(() -> { +// long startTime2 = System.currentTimeMillis(); +// Integer total1 = 0; +// Integer box1 = 0; +// String time1 = "0h"; +// Integer total2 = 0; +// Integer box2 = 0; +// String time2 = "0h"; +// Integer total3 = 0; +// Integer box3 = 0; +// String time3 = "0h"; +// Integer total4 = 0; +// Integer box4 = 0; +// String time4 = "0h"; +// JSONArray item2 = new JSONArray(); +// JSONArray item4 = new JSONArray(); +// JSONObject obj1 = new JSONObject(); +// JSONObject obj2 = new JSONObject(); +// JSONObject obj3 = new JSONObject(); +// JSONObject obj4 = new JSONObject(); +// obj1.put("total", total1); +// obj1.put("box", box1); +// obj1.put("time", time1); +// obj2.put("total", total2); +// obj2.put("box", box2); +// obj2.put("time", time2); +// obj3.put("total", total3); +// obj3.put("box", box3); +// obj3.put("time", time3); +// obj4.put("total", total4); +// obj4.put("box", box4); +// obj4.put("time", time4); +// List taskList1 = cockpitMapper.getTaskListByDays(0); +// List taskList = new ArrayList<>(taskList1.stream() +// .collect(Collectors.toMap( +// task -> task.getVehicle_code() + "_" + task.getCreate_time(), +// task -> task, +// (existing, replacement) -> existing +// )) +// .values()); +// if (ObjectUtil.isNotEmpty(taskList)) { +// //料箱库入库 +// List stockList1 = taskList.stream() +// .filter(r -> Integer.parseInt(r.getTask_type()) <= 12 && "FStockId".equals(r.getStor_code())) +// .collect(Collectors.toList()); +// if (ObjectUtil.isNotEmpty(stockList1)) { +// obj1 = getElapsedTime(obj1, stockList1, true); +// } +// //料箱库出库 +// List stockList2 = taskList.stream() +// .filter(r -> (Integer.parseInt(r.getTask_type()) >= 20 && Integer.parseInt(r.getTask_type()) <= 25) && "FStockId".equals(r.getStor_code()) && Integer.parseInt(r.getTask_type()) != 23) +// .collect(Collectors.toList()); +// if (ObjectUtil.isNotEmpty(stockList2)) { +// obj2 = getElapsedTime(obj2, stockList2, false); +// List stockList22 = taskList.stream() +// .filter(r -> "2114".equals(r.getPoint_code2()) || "1101".equals(r.getPoint_code1())) +// .collect(Collectors.toList()); +// int box = stockList22.stream().filter(r -> StringUtils.isNotBlank(r.getUpdate_time())) +// .mapToInt(taskInfo -> taskInfo.getVehicle_code().split(",").length) +// .sum(); +// if (Double.parseDouble(obj2.getString("time").trim().replace("h", "")) > 1) { +// //根据箱数计算 +// if (box < 100) { +// obj2.put("time", 1 + "h"); +// } else { +// BigDecimal baseBox = BigDecimal.valueOf(100); +// BigDecimal baseHours = BigDecimal.valueOf(1.1); +// BigDecimal roundedTotalHours = BigDecimal.valueOf(box) +// .divide(baseBox, 10, RoundingMode.HALF_UP) +// .multiply(baseHours) +// .setScale(1, RoundingMode.HALF_UP); +// obj2.put("time", roundedTotalHours + "h"); +// } +// } +// obj2.put("box", box); +// } +// //托盘库入库 +// List stockList3 = taskList.stream().filter(r -> (Integer.parseInt(r.getTask_type()) <= 14||Integer.parseInt(r.getTask_type()) == 30)&&r.getVehicle_code().contains("T")).collect(Collectors.toList()); +// if (ObjectUtil.isNotEmpty(stockList3)) { +// obj3 = getElapsedTime(obj3, stockList3, true); +// } +// //托盘库出库 +// List stockList4 = taskList.stream() +// .filter(r -> +// ((Integer.parseInt(r.getTask_type()) >= 20 && Integer.parseInt(r.getTask_type()) <= 22) +// || Integer.parseInt(r.getTask_type()) == 40) +// && r.getVehicle_code().contains("T") +// ) +// .collect(Collectors.toList()); +// if (ObjectUtil.isNotEmpty(stockList4)) { +// obj4 = getElapsedTime(obj4, stockList4, true); +// } +// } +// item2.add(obj1); +// item2.add(obj2); +// item4.add(obj3); +// item4.add(obj4); +// jsonObject.put("lx_task", item2); +// jsonObject.put("tp_task", item4); +// log.info("获取今日出入库任务信息耗时:{}", System.currentTimeMillis() - startTime2); +// return null; +// }, pool); +// task2.exceptionally((e) -> +// { +// log.error("获取今日出入库任务信息异常:{}", e.getMessage(), e); +// return null; +// }); +// CompletableFuture>> task3 = CompletableFuture.supplyAsync(() -> { +// long startTime3 = System.currentTimeMillis(); +// JSONArray jsonArray1 = new JSONArray(); +// JSONArray jsonArray2 = new JSONArray(); +// //前5名 +// JSONObject obj0 = new JSONObject(); +// //其他 +// JSONObject obj1 = new JSONObject(); +// JSONObject obj2 = new JSONObject(); +// JSONObject obj3 = new JSONObject(); +// List materList = cockpitMapper.getMaterInfos(); +// if (ObjectUtil.isNotEmpty(materList)) { +// List fstockList = materList.stream().filter(r -> "FStockId".equals(r.getProduct_area())).collect(Collectors.toList()); +// List fstockPalletList = materList.stream().filter(r -> "FStockPallet".equals(r.getProduct_area())).collect(Collectors.toList()); +// if (ObjectUtil.isNotEmpty(fstockList)) { +// getMaterialAnalysis(jsonArray1, obj0, obj1, fstockList); +// } else { +// obj0.put("total", "0"); +// jsonArray1.add(obj0); +// } +// if (ObjectUtil.isNotEmpty(fstockPalletList)) { +// getMaterialAnalysis(jsonArray2, obj2, obj3, fstockPalletList); +// } else { +// obj1.put("total", "0"); +// jsonArray2.add(obj1); +// } +// } else { +// obj0.put("total", "0"); +// obj1.put("total", "0"); +// jsonArray1.add(obj0); +// jsonArray2.add(obj1); +// } +// jsonObject.put("lx_inventory", jsonArray1); +// jsonObject.put("tp_inventory", jsonArray2); +// log.info("获取实时物料库存信息耗时:{}", System.currentTimeMillis() - startTime3); +// return null; +// }, pool); +// task3.exceptionally((e) -> +// { +// log.error("获取实时物料库存信息异常:{}", e.getMessage(), e); +// return null; +// }); +// CompletableFuture>> task4 = CompletableFuture.supplyAsync(() -> { +// long startTime4 = System.currentTimeMillis(); +// List> lx_in_default = new ArrayList<>(); +// List> lx_out_default = new ArrayList<>(); +// List> tp_in_default = new ArrayList<>(); +// List> tp_out_default = new ArrayList<>(); +// List result1 = cockpitMapper.getTaskCountsByDays(); +// List result = new ArrayList<>(result1.stream() +// .collect(Collectors.toMap( +// task -> task.getVehicle_code() + "_" + task.getCreate_time(), +// task -> task, +// (existing, replacement) -> existing +// )) +// .values()); +// //料箱库入库 +// List stockList1 = result.stream() +// .filter(r -> Integer.parseInt(r.getTask_type()) <= 12 && "FStockId".equals(r.getStor_code())) +// .collect(Collectors.toList()); +// //料箱库出库 +// List stockList2 = result.stream() +// .filter(r -> Integer.parseInt(r.getTask_type()) >= 20 && Integer.parseInt(r.getTask_type()) <= 22 && "FStockId".equals(r.getStor_code())) +// .collect(Collectors.toList()); +// //托盘库入库 +// List stockList3 = result.stream().filter(r -> (Integer.parseInt(r.getTask_type()) <= 14 || Integer.parseInt(r.getTask_type()) == 30) && r.getVehicle_code().contains("T")).collect(Collectors.toList()); +// //托盘库出库 +// List stockList4 = result.stream() +// .filter(r -> +// ((Integer.parseInt(r.getTask_type()) >= 20 && Integer.parseInt(r.getTask_type()) <= 22) +// || Integer.parseInt(r.getTask_type()) == 40) +// && r.getVehicle_code().contains("T") +// ).collect(Collectors.toList()); +// //计算每天的数量 +// getWeekWorkStatistics(stockList1, lx_in_default, 7); +// getWeekWorkStatistics(stockList2, lx_out_default, 7); +// getWeekWorkStatistics(stockList3, tp_in_default, 7); +// getWeekWorkStatistics(stockList4, tp_out_default, 7); +// jsonObject.put("lx_in_week", lx_in_default); +// jsonObject.put("lx_out_week", lx_out_default); +// jsonObject.put("tp_in_week", tp_in_default); +// jsonObject.put("tp_out_week", tp_out_default); +// log.info("获取7天出入库趋势信息耗时:{}", System.currentTimeMillis() - startTime4); +// return null; +// }, pool); +// task4.exceptionally((e) -> +// { +// log.error("获取7天出入库趋势信息异常:{}", e.getMessage(), e); +// return null; +// }); +// CompletableFuture allQuery = CompletableFuture.allOf(task1, task2, task3, task4); +// CompletableFuture future = allQuery.thenApply((result) -> jsonObject).exceptionally((e) -> { +// log.error("获取综合信息异常:{}", e.getMessage(), e); +// return null; +// }); +// future.join(); + CockpitTemp data = cockpitTempServiceImpl.getOne(new LambdaUpdateWrapper().eq(CockpitTemp::getCode, "all")); + jsonObject = JSON.parseObject(data.getValue()); + return jsonObject; + } + + + @Override + public JSONObject updateSynthesizeInfo() { + JSONObject jsonObject1 = new JSONObject(); + JSONObject jsonObject = new JSONObject(); //货位使用 CompletableFuture>> task1 = CompletableFuture.supplyAsync(() -> { Integer total1 = 0; @@ -94,6 +378,10 @@ public class CockpitServiceImpl implements CockpitService { Integer used2 = 0; Integer free2 = 0; String percent2 = "0%"; + Integer total3 = 0; + Integer used3 = 0; + Integer free3 = 0; + String percent3 = "0%"; JSONObject item1 = new JSONObject(); JSONObject item3 = new JSONObject(); long startTime1 = System.currentTimeMillis(); @@ -129,7 +417,33 @@ public class CockpitServiceImpl implements CockpitService { percent2 = roundedPercentage + "%"; } } + //ctu + List ctuList = ivtList.stream().filter(r -> "CStockId".equals(r.getStor_code())).collect(Collectors.toList()); + if (ObjectUtil.isNotEmpty(ctuList)) { + total3 = ctuList.size(); + if (total3 > 0) { + long used = ctuList.stream().filter(r -> StringUtils.isNotEmpty(r.getVehicle_code())).count(); + used3 = (int) used; + free3 = total3 - used3; + double percentage = (double) used3 / total3 * 100; + BigDecimal bd = new BigDecimal(percentage).setScale(2, RoundingMode.HALF_UP); + double roundedPercentage = bd.doubleValue(); + percent3 = roundedPercentage + "%"; + } + } } + jsonObject1.put("lx_total", total1); + jsonObject1.put("lx_used", used1); + jsonObject1.put("lx_free", free1); + jsonObject1.put("lx_percent", percent1); + jsonObject1.put("tp_total", total2); + jsonObject1.put("tp_used", used2); + jsonObject1.put("tp_free", free2); + jsonObject1.put("tp_percent", percent2); + jsonObject1.put("ctu_total", total3); + jsonObject1.put("ctu_used", used3); + jsonObject1.put("ctu_free", free3); + jsonObject1.put("ctu_percent", percent3); item1.put("total", total1); item1.put("used", used1); item1.put("free", free1); @@ -224,7 +538,7 @@ public class CockpitServiceImpl implements CockpitService { obj2.put("box", box); } //托盘库入库 - List stockList3 = taskList.stream().filter(r -> (Integer.parseInt(r.getTask_type()) <= 14||Integer.parseInt(r.getTask_type()) == 30)&&r.getVehicle_code().contains("T")).collect(Collectors.toList()); + List stockList3 = taskList.stream().filter(r -> (Integer.parseInt(r.getTask_type()) <= 14 || Integer.parseInt(r.getTask_type()) == 30) && r.getVehicle_code().contains("T")).collect(Collectors.toList()); if (ObjectUtil.isNotEmpty(stockList3)) { obj3 = getElapsedTime(obj3, stockList3, true); } @@ -345,12 +659,24 @@ public class CockpitServiceImpl implements CockpitService { return null; }); CompletableFuture allQuery = CompletableFuture.allOf(task1, task2, task3, task4); + //CompletableFuture allQuery = CompletableFuture.allOf(task1, task4); CompletableFuture future = allQuery.thenApply((result) -> jsonObject).exceptionally((e) -> { log.error("获取综合信息异常:{}", e.getMessage(), e); return null; }); future.join(); - return jsonObject; + jsonObject1.forEach((key, value) -> { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(CockpitTemp::getCode, key); + updateWrapper.set(CockpitTemp::getValue, value); + cockpitTempServiceImpl.update(updateWrapper); + }); + String json = jsonObject.toJSONString(); + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(CockpitTemp::getCode, "all"); + updateWrapper.set(CockpitTemp::getValue, json); + cockpitTempServiceImpl.update(updateWrapper); + return null; } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/impl/CockpitTempServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/impl/CockpitTempServiceImpl.java new file mode 100644 index 00000000..aba2c8f6 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/impl/CockpitTempServiceImpl.java @@ -0,0 +1,22 @@ +package org.nl.wms.pda_manage.cockpit.service.impl; +import org.nl.wms.pda_manage.cockpit.service.dao.CockpitTemp; +import org.nl.wms.pda_manage.cockpit.service.mapper.CockpitTempMapper; +import org.nl.wms.pda_manage.cockpit.service.IcockpitTempService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * {@code @Description:} (CockpitTemp)服务实现层 + * {@code @Author:} gbx + * + * @since 2025-10-16 + */ +@Service("cockpitTempService") +public class CockpitTempServiceImpl extends ServiceImpl implements IcockpitTempService { + + + + + +} + diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/mapper/CockpitMapper.xml b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/mapper/CockpitMapper.xml index 78680276..f3674af5 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/mapper/CockpitMapper.xml +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/cockpit/service/mapper/CockpitMapper.xml @@ -8,8 +8,7 @@ FROM st_ivt_structattr WHERE - stor_code IN ('FStockId','FStockPallet') - AND is_used = '1' + is_used = '1'