From 13dbaca2baf3a0feea491d2900f3236bc4ce0463 Mon Sep 17 00:00:00 2001 From: gengby <858962040@qq.com> Date: Tue, 23 May 2023 17:30:24 +0800 Subject: [PATCH 01/13] =?UTF-8?q?rev=20ndc=E6=89=A7=E8=A1=8C=E7=8A=B6?= =?UTF-8?q?=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auto/run/NDCSocketConnectionAutoRun.java | 47 +++++++++++++++++-- .../agv/ndctwo/AgvNdcTwoDeviceDriver.java | 33 ++++++++++++- .../HailiangAutoCacheLineDeviceDriver.java | 3 +- ...ailiangSpecialFullStationDeviceDriver.java | 3 ++ .../wms/service/impl/WmsToAcsServiceImpl.java | 11 ++++- .../service/InstructionService.java | 9 +++- .../service/impl/InstructionServiceImpl.java | 31 ++++++++++-- .../nl/acs/opc/DeviceOpcProtocolRunable.java | 4 +- .../lucene/common/LuceneIndexWriter.java | 24 +++++----- .../impl/LuceneExecuteLogServiceImpl.java | 2 +- .../modules/quartz/task/AutoCreateInst.java | 6 ++- 11 files changed, 141 insertions(+), 32 deletions(-) diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/auto/run/NDCSocketConnectionAutoRun.java b/wcs/nladmin-system/src/main/java/org/nl/acs/auto/run/NDCSocketConnectionAutoRun.java index 70824662..2ece320d 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/auto/run/NDCSocketConnectionAutoRun.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/auto/run/NDCSocketConnectionAutoRun.java @@ -12,6 +12,9 @@ import org.nl.acs.instruction.service.dto.Instruction; import org.nl.acs.instruction.service.impl.InstructionServiceImpl; import org.nl.acs.opc.Device; import org.nl.acs.opc.DeviceAppService; +import org.nl.acs.task.service.TaskService; +import org.nl.acs.task.service.dto.TaskDto; +import org.nl.acs.task.service.impl.TaskServiceImpl; import org.nl.modules.system.service.ParamService; import org.nl.modules.system.service.impl.ParamServiceImpl; import org.nl.modules.wql.util.SpringContextHolder; @@ -64,6 +67,7 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable { try { ParamService paramService = SpringContextHolder.getBean(ParamServiceImpl.class); InstructionService instructionService = SpringContextHolder.getBean(InstructionServiceImpl.class); + TaskService taskService = SpringContextHolder.getBean(TaskServiceImpl.class); NDCAgvService ndcAgvService = SpringContextHolder.getBean(NDCAgvServiceImpl.class); DeviceAppService deviceAppService = SpringContextHolder.getBean(DeviceAppService.class); ip = paramService.findByCode(AcsConfig.AGVURL).getValue(); @@ -117,12 +121,45 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable { AgvNdcTwoDeviceDriver agvNdcTwoDeviceDriver; if (phase == 0x01) { //开始任务/上报订单号 - for (Instruction inst : insts) { - inst.setInstruction_status("1"); - inst.setAgv_jobno(String.valueOf(index)); - instructionService.update(inst); + if (ObjectUtil.isNotEmpty(insts)) { + Boolean flag = false; + Instruction instruction = insts.get(0); + TaskDto taskDto = taskService.findByTaskCode(instruction.getTask_code()); + if (taskDto != null) { + List taskDtos = taskService.findByLinkNumFromCache(taskDto.getLink_num()); + if (taskDtos != null) { + if (taskDtos.size() == 1) { + for (Instruction inst : insts) { + inst.setInstruction_status("1"); + inst.setAgv_jobno(String.valueOf(index)); + instructionService.update(inst); + log.info("修改指令执行信息成功,指令号:{}", inst.getInstruction_code()); + flag = true; + } + } else if (taskDtos.size() == 2) { + for (int i = 0; i < insts.size(); i++) { + Instruction inst = insts.get(i); + inst.setInstruction_status("1"); + inst.setAgv_jobno(String.valueOf(index)); + instructionService.update(inst); + if (i == 1) { + flag = true; + } + log.info("修改指令执行信息成功,指令号:{}", inst.getInstruction_code()); + } +// for (Instruction inst : insts) { +// inst.setInstruction_status("1"); +// inst.setAgv_jobno(String.valueOf(index)); +// instructionService.update(inst); +// log.info("修改指令执行信息成功,指令号:{}", inst.getInstruction_code()); +// } + } + } + if (flag) { + data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); + } + } } - data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); } else if (phase == 0x1A) { //任务完毕(无车id及状态 // for (Instruction inst : insts) { diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndctwo/AgvNdcTwoDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndctwo/AgvNdcTwoDeviceDriver.java index 55f11721..2f48d5d8 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndctwo/AgvNdcTwoDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndctwo/AgvNdcTwoDeviceDriver.java @@ -138,10 +138,12 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //取满箱任务起点 一般是专机满料点和缓存线 if (StrUtil.equals(inst.getStart_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangSpecialFullStationDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangSpecialFullStationDeviceDriver = (HailiangSpecialFullStationDeviceDriver) device.getDeviceDriver(); hailiangSpecialFullStationDeviceDriver.set(phase, index, inst); } if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); } @@ -173,11 +175,13 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //取满箱任务起点 一般是专机满料点和缓存线 if (StrUtil.equals(inst.getStart_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangSpecialFullStationDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangSpecialFullStationDeviceDriver = (HailiangSpecialFullStationDeviceDriver) device.getDeviceDriver(); hailiangSpecialFullStationDeviceDriver.set(phase, index, inst); } //入缓存线任务的起点有专机满料位 出缓存的起点是缓存线 if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); } @@ -209,10 +213,12 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //双任务-取满箱任务起点2 一般是专机满料点和缓存线 if (StrUtil.equals(inst.getStart_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangSpecialFullStationDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangSpecialFullStationDeviceDriver = (HailiangSpecialFullStationDeviceDriver) device.getDeviceDriver(); hailiangSpecialFullStationDeviceDriver.set(phase, index, inst); } if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); } @@ -243,10 +249,12 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //双任务-取满箱任务起点2 一般是专机满料点和缓存线 if (StrUtil.equals(inst.getStart_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangSpecialFullStationDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangSpecialFullStationDeviceDriver = (HailiangSpecialFullStationDeviceDriver) device.getDeviceDriver(); hailiangSpecialFullStationDeviceDriver.set(phase, index, inst); } if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); } @@ -277,6 +285,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //只有满料位入到缓存线有到达送满框 if (StrUtil.equals(inst.getPut_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); break; @@ -311,11 +320,13 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //只有满料位到倒料位、清洗储料仓,及缓存线到倒料位、清洗储料仓有倒料点 倒料点都是倒料位、清洗储料仓 if (StrUtil.equals(inst.getPut_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangSpecialPourStationDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangSpecialPourStationDeviceDriver = (HailiangSpecialPourStationDeviceDriver) device.getDeviceDriver(); hailiangSpecialPourStationDeviceDriver.set(phase, index, inst); break; } if (device.getDeviceDriver() instanceof HailiangCleaningMachineStorageStationDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangCleaningMachineStorageStationDeviceDriver = (HailiangCleaningMachineStorageStationDeviceDriver) device.getDeviceDriver(); hailiangCleaningMachineStorageStationDeviceDriver.set(phase, index, inst); break; @@ -348,6 +359,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //送满框1 只有满料位到缓存线才有送满框1 if (StrUtil.equals(inst.getPut_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); break; @@ -380,11 +392,13 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //只有满料位、缓存线到倒料位、清洗储料仓才有倒料完毕1 if (StrUtil.equals(inst.getPut_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangSpecialPourStationDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangSpecialPourStationDeviceDriver = (HailiangSpecialPourStationDeviceDriver) device.getDeviceDriver(); hailiangSpecialPourStationDeviceDriver.set(phase, index, inst); break; } if (device.getDeviceDriver() instanceof HailiangCleaningMachineStorageStationDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangCleaningMachineStorageStationDeviceDriver = (HailiangCleaningMachineStorageStationDeviceDriver) device.getDeviceDriver(); hailiangCleaningMachineStorageStationDeviceDriver.set(phase, index, inst); break; @@ -416,6 +430,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //只有满料位到缓存线放满完成后才有到达取空框1 取空框是缓存线才有 if (StrUtil.equals(inst.getPut_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); break; @@ -447,11 +462,13 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //只有满料位到倒料位、清洗储料仓,及缓存线到倒料位、清洗储料仓有倒料点 倒料点都是倒料位、清洗储料仓 if (StrUtil.equals(inst.getPut_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangSpecialPourStationDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangSpecialPourStationDeviceDriver = (HailiangSpecialPourStationDeviceDriver) device.getDeviceDriver(); hailiangSpecialPourStationDeviceDriver.set(phase, index, inst); break; } if (device.getDeviceDriver() instanceof HailiangCleaningMachineStorageStationDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangCleaningMachineStorageStationDeviceDriver = (HailiangCleaningMachineStorageStationDeviceDriver) device.getDeviceDriver(); hailiangCleaningMachineStorageStationDeviceDriver.set(phase, index, inst); break; @@ -483,6 +500,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //只有满料位到缓存线入库才有取空框1完毕 if (StrUtil.equals(inst.getPut_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); break; @@ -514,6 +532,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //只有满料位到缓存线才有到达送满框2 if (StrUtil.equals(inst.getPut_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); break; @@ -545,6 +564,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //只有满料位到缓存线才有到送满框完毕 if (StrUtil.equals(inst.getPut_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); break; @@ -577,6 +597,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //只有满料位到缓存线才有到达取空框2 if (StrUtil.equals(inst.getPut_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); break; @@ -608,6 +629,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //只有满料位到缓存线才有到达取空框完毕2 if (StrUtil.equals(inst.getPut_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); break; @@ -640,11 +662,13 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //只有满料位到倒料位、清洗储料仓,及缓存线到倒料位、清洗储料仓有倒料点 倒料点都是倒料位、清洗储料仓 if (StrUtil.equals(inst.getPut_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangSpecialPourStationDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangSpecialPourStationDeviceDriver = (HailiangSpecialPourStationDeviceDriver) device.getDeviceDriver(); hailiangSpecialPourStationDeviceDriver.set(phase, index, inst); break; } if (device.getDeviceDriver() instanceof HailiangCleaningMachineStorageStationDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangCleaningMachineStorageStationDeviceDriver = (HailiangCleaningMachineStorageStationDeviceDriver) device.getDeviceDriver(); hailiangCleaningMachineStorageStationDeviceDriver.set(phase, index, inst); break; @@ -678,10 +702,12 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //所有任务都有到达送空框1 if (StrUtil.equals(inst.getNext_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangSpecialEmptyStationDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangSpecialEmptyStationDeviceDriver = (HailiangSpecialEmptyStationDeviceDriver) device.getDeviceDriver(); hailiangSpecialEmptyStationDeviceDriver.set(phase, index, inst); } if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); } @@ -714,10 +740,12 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //所有任务都有到送空框1完毕 if (StrUtil.equals(inst.getNext_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangSpecialEmptyStationDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangSpecialEmptyStationDeviceDriver = (HailiangSpecialEmptyStationDeviceDriver) device.getDeviceDriver(); hailiangSpecialEmptyStationDeviceDriver.set(phase, index, inst); } if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); } @@ -750,10 +778,12 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //所有双任务都有到达送空框2 if (StrUtil.equals(inst.getNext_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangSpecialEmptyStationDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangSpecialEmptyStationDeviceDriver = (HailiangSpecialEmptyStationDeviceDriver) device.getDeviceDriver(); hailiangSpecialEmptyStationDeviceDriver.set(phase, index, inst); } if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); } @@ -786,10 +816,12 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic //所有双任务都有送空框完毕2 if (StrUtil.equals(inst.getNext_device_code(), device_code)) { if (device.getDeviceDriver() instanceof HailiangSpecialEmptyStationDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangSpecialEmptyStationDeviceDriver = (HailiangSpecialEmptyStationDeviceDriver) device.getDeviceDriver(); hailiangSpecialEmptyStationDeviceDriver.set(phase, index, inst); } if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + log.info("开始设置phase值,设备号:{}", device_code); hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); hailiangAutoCacheLineDeviceDriver.set(phase, index, inst); } @@ -841,7 +873,6 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic } } data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); - logServer.deviceExecuteLog(this.device_code, "", "", "agvphase:" + phase + "反馈:" + data); } else if (phase == 0x71) { x = ikey; diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_auto_cache_line/HailiangAutoCacheLineDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_auto_cache_line/HailiangAutoCacheLineDeviceDriver.java index 592a44c9..5cf4b914 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_auto_cache_line/HailiangAutoCacheLineDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_auto_cache_line/HailiangAutoCacheLineDeviceDriver.java @@ -248,8 +248,7 @@ public class HailiangAutoCacheLineDeviceDriver extends AbstractOpcDeviceDriver i + "," + two_barcode1 + "," + two_barcode2 + "," + two_barcode3 + "," + two_barcode4 + "," + two_barcode5 + "," + two_barcode6 + "," + two_barcode7 + "," + two_barcode8 + "," + two_barcode9 + "," + two_barcode10 + "," + three_barcode1 + "," + three_barcode2 + "," + three_barcode3 + "," + three_barcode4 + "," + three_barcode5 - + "," + three_barcode6 + "," + three_barcode7 + "," + three_barcode8 + "," + three_barcode9 + "," + three_barcode10 - + "," + prepare_barcode + "," + prepare_barcode; + + "," + three_barcode6 + "," + three_barcode7 + "," + three_barcode8 + "," + three_barcode9 + "," + three_barcode10; if (!StrUtil.equals(material_spec, last_material_spec)) { logServer.deviceExecuteLog(this.device_code, "", "", "信号material_spec:" + last_material_spec + "->" + material_spec); diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_full_station/HailiangSpecialFullStationDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_full_station/HailiangSpecialFullStationDeviceDriver.java index 961b4625..d7e71fa9 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_full_station/HailiangSpecialFullStationDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_full_station/HailiangSpecialFullStationDeviceDriver.java @@ -153,6 +153,9 @@ public class HailiangSpecialFullStationDeviceDriver extends AbstractOpcDeviceDri logServer.deviceExecuteLog(this.device_code, "", "", "信号order:" + last_order + "->" + order); } + if (device_code.equals("A1_XY_50_8_M")) { + logServer.deviceExecuteLog(device_code, "", "", "进来了........"); + } } catch (Exception var17) { var17.printStackTrace(); logServer.deviceExecuteLog(this.device_code, "", "", "读取信号值时出现异常:" + var17 + ",inst == null :" + ObjectUtil.isEmpty(inst)); diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java b/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java index dfc68fc7..a14ada1e 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java @@ -569,8 +569,10 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); if (StrUtil.equals(type, StatusEnum.PAUSE_TYPE.getCode())) { hailiangAutoCacheLineDeviceDriver.writing("to_pause", "1"); + hailiangAutoCacheLineDeviceDriver.writing("to_pause_out_check", "1"); } else if (StrUtil.equals(type, StatusEnum.RESUME_TYPE.getCode())) { hailiangAutoCacheLineDeviceDriver.writing("to_pause", "0"); + hailiangAutoCacheLineDeviceDriver.writing("to_pause_out_check", "0"); } } JSONObject resultJson = new JSONObject(); @@ -683,8 +685,9 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { @Override public Map putAction(String jsonObject) throws Exception { + log.info("接收WMS下发动作信号,下发参数:{}", JSON.toJSONString(jsonObject)); JSONArray datas = JSONArray.parseArray(jsonObject); - log.info("putAction--------------:输入参数" + datas.toString()); + HailiangAutoCacheLineDeviceDriver hailiangAutoCacheLineDeviceDriver; for (int i = 0; i < datas.size(); i++) { JSONObject data = datas.getJSONObject(i); String device_code = data.getString("device_code"); @@ -694,12 +697,16 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { if (ObjectUtil.isEmpty(device)) { throw new Exception("未找到对应设备:" + device_code); } + if (device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) device.getDeviceDriver(); + hailiangAutoCacheLineDeviceDriver.writing(code, value); + } } JSONObject resultJson = new JSONObject(); resultJson.put("status", HttpStatus.OK); resultJson.put("message", "操作成功"); resultJson.put("data", new JSONObject()); - log.info("putAction--------------:输出参数" + resultJson.toString()); + log.info("接收WMS暂停或恢复缓存线,响应参数:{}", JSON.toJSONString(resultJson)); return resultJson; } diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/instruction/service/InstructionService.java b/wcs/nladmin-system/src/main/java/org/nl/acs/instruction/service/InstructionService.java index 3fd7790a..ebbb90a7 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/instruction/service/InstructionService.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/instruction/service/InstructionService.java @@ -331,7 +331,7 @@ public interface InstructionService { * @param to_task_type 缓存线任务类型 * @return */ - public Map issued(String inst_code, String to_priority_layer, String barcodeArr, String to_task_type,String to_open_check_barcode); + public Map issued(String inst_code, String to_priority_layer, String barcodeArr, String to_task_type, String to_open_check_barcode); /** * 自动创建指令时,根据任务信息创建指令对象 @@ -341,4 +341,11 @@ public interface InstructionService { * @return */ Instruction createInstDtoByTask(TaskDto taskDto, String link_no); + + /** + * 取消缓存线指令时清除agv上报信息 + * + * @param dto + */ + void removeCacheLinePhase(Instruction dto); } diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java b/wcs/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java index 79aad848..861f837a 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java @@ -893,7 +893,7 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu @Override - @Transactional + @Transactional(rollbackFor = Exception.class) public void cancel(String id) throws Exception { // flag= true时取消指令 boolean flag = false; @@ -958,11 +958,12 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu entity.setInstruction_status("3"); this.update(entity); + removeCacheLinePhase(entity); } } @Override - @Transactional + @Transactional(rollbackFor = Exception.class) public void cancelByLinkNum(String linkNum) { List insts = this.findByLinkNum(linkNum); if (insts != null) { @@ -978,7 +979,7 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu } @Override - @Transactional + @Transactional(rollbackFor = Exception.class) public void forceCancel(String id) throws Exception { // flag= true时取消指令 boolean flag = false; @@ -1020,7 +1021,7 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu } @Override - @Transactional + @Transactional(rollbackFor = Exception.class) public void forceCancelByLinkNum(String linkNum) throws Exception { List insts = this.findByLinkNum(linkNum); if (insts != null) { @@ -1036,6 +1037,7 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu } @Override + @Transactional(rollbackFor = Exception.class) public void cancelNoSendAgv(String id) throws Exception { // flag= true时取消指令 Instruction entity = this.findById(id); @@ -1415,4 +1417,25 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu instDto.setAgv_system_type(taskDto.getAgv_system_type()); return instDto; } + + @Override + public void removeCacheLinePhase(Instruction dto) { + if (dto != null) { + String start_point_code = dto.getStart_device_code(); + String next_point_code = dto.getNext_device_code(); + String put_point_code = dto.getPut_device_code(); + Device start_device = deviceAppService.findDeviceByCode(start_point_code); + Device next_device = deviceAppService.findDeviceByCode(next_point_code); + Device put_device = deviceAppService.findDeviceByCode(put_point_code); + HailiangAutoCacheLineDeviceDriver hailiangAutoCacheLineDeviceDriver; + if (put_device != null && put_device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) put_device.getDeviceDriver(); + hailiangAutoCacheLineDeviceDriver.set(0, 0, null); + } + if (start_device != null && next_device != null && start_device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver && next_device.getDeviceDriver() instanceof HailiangAutoCacheLineDeviceDriver) { + hailiangAutoCacheLineDeviceDriver = (HailiangAutoCacheLineDeviceDriver) start_device.getDeviceDriver(); + hailiangAutoCacheLineDeviceDriver.set(0, 0, null); + } + } + } } diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/opc/DeviceOpcProtocolRunable.java b/wcs/nladmin-system/src/main/java/org/nl/acs/opc/DeviceOpcProtocolRunable.java index 601d1cc9..b5df1079 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/opc/DeviceOpcProtocolRunable.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/opc/DeviceOpcProtocolRunable.java @@ -412,11 +412,11 @@ public class DeviceOpcProtocolRunable implements Runnable, DataCallback, ServerC Object obj = accessor_value.getValue(relate); sb.append("key:" + relate + "value:" + obj + ";"); } - lucene.deviceExecuteLog(new LuceneLogDto(itemDto.getOpc_server_code(), itemDto.getOpc_plc_code(), itemDto.getDevice_code(), itemDto.getItem_code().substring(itemDto.getItem_code().lastIndexOf(".")+1), String.valueOf(his), String.valueOf(value))); + //lucene.deviceExecuteLog(new LuceneLogDto(itemDto.getOpc_server_code(), itemDto.getOpc_plc_code(), itemDto.getDevice_code(), itemDto.getItem_code().substring(itemDto.getItem_code().lastIndexOf(".")+1), String.valueOf(his), String.valueOf(value))); } else { - lucene.deviceExecuteLog(new LuceneLogDto(itemDto.getOpc_server_code(), itemDto.getOpc_plc_code(), itemDto.getDevice_code(), itemDto.getItem_code().substring(itemDto.getItem_code().lastIndexOf(".")+1), String.valueOf(his), String.valueOf(value))); + // lucene.deviceExecuteLog(new LuceneLogDto(itemDto.getOpc_server_code(), itemDto.getOpc_plc_code(), itemDto.getDevice_code(), itemDto.getItem_code().substring(itemDto.getItem_code().lastIndexOf(".")+1), String.valueOf(his), String.valueOf(value))); } } diff --git a/wcs/nladmin-system/src/main/java/org/nl/modules/lucene/common/LuceneIndexWriter.java b/wcs/nladmin-system/src/main/java/org/nl/modules/lucene/common/LuceneIndexWriter.java index df7c4eb9..d4e89056 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/modules/lucene/common/LuceneIndexWriter.java +++ b/wcs/nladmin-system/src/main/java/org/nl/modules/lucene/common/LuceneIndexWriter.java @@ -16,7 +16,7 @@ import java.text.SimpleDateFormat; import java.util.Date; public class LuceneIndexWriter { - private static IndexWriter indexWriter; + private static volatile IndexWriter indexWriter; static { try { @@ -27,16 +27,16 @@ public class LuceneIndexWriter { e.printStackTrace(); } /**当当前线程结束时,自动关闭IndexWriter,使用Runtime对象*/ - Runtime.getRuntime().addShutdownHook(new Thread(){ - @Override - public void run() { - try { - closeIndexWriter(); - } catch (Exception e) { - e.printStackTrace(); - } - } - }); +// Runtime.getRuntime().addShutdownHook(new Thread(){ +// @Override +// public void run() { +// try { +// closeIndexWriter(); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// }); } /**在线程结束时,自动关闭IndexWriter*/ public static IndexWriter getIndexWriter() { @@ -47,7 +47,7 @@ public class LuceneIndexWriter { * @throws CorruptIndexException */ public static void closeIndexWriter() throws Exception { if(indexWriter != null) { - indexWriter.close(); +// indexWriter.close(); } } diff --git a/wcs/nladmin-system/src/main/java/org/nl/modules/lucene/service/impl/LuceneExecuteLogServiceImpl.java b/wcs/nladmin-system/src/main/java/org/nl/modules/lucene/service/impl/LuceneExecuteLogServiceImpl.java index f350977e..c1fd06cd 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/modules/lucene/service/impl/LuceneExecuteLogServiceImpl.java +++ b/wcs/nladmin-system/src/main/java/org/nl/modules/lucene/service/impl/LuceneExecuteLogServiceImpl.java @@ -81,7 +81,7 @@ public class LuceneExecuteLogServiceImpl implements LuceneExecuteLogService { long endTime = System.currentTimeMillis(); log.info("建立索引共耗时{}毫秒", endTime - startTime); indexWriter.commit(); - MDC.put("DEVICECODE", luceneLogDto.getDevice_code()); +// MDC.put("DEVICECODE", luceneLogDto.getDevice_code()); } catch (Exception e) { log.error(e.getMessage(), e); } diff --git a/wcs/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoCreateInst.java b/wcs/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoCreateInst.java index 50627abf..e587cd25 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoCreateInst.java +++ b/wcs/nladmin-system/src/main/java/org/nl/modules/quartz/task/AutoCreateInst.java @@ -1,5 +1,6 @@ package org.nl.modules.quartz.task; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; import org.nl.acs.acsEnum.AgvTypeEnum; @@ -47,6 +48,9 @@ public class AutoCreateInst { //查询所有诺宝AGV任务 List list = taskService.queryAll("task_status = '0' and agv_system_type = '1' "); + if (ObjectUtil.isEmpty(list)) { + return; + } //根据LINK_NUM分组任务 Map> link_num_tasks = Optional .ofNullable(list) @@ -77,7 +81,6 @@ public class AutoCreateInst { if (StrUtil.equals(taskDto.getIs_send(), StatusEnum.NO_SEND.getCode())) { continue; } - //生产指令关联编号 String link_no = CodeUtil.getNewCode("LINK_NO"); @@ -96,7 +99,6 @@ public class AutoCreateInst { taskService.update(taskDto); } else if (tasks.size() == TASK_SIZE_2) { - //生产指令关联编号 String link_no = CodeUtil.getNewCode("LINK_NO"); From 84ecbf0b830448ca43b19d95c7ae7f8d6467a4f3 Mon Sep 17 00:00:00 2001 From: liuxy Date: Wed, 24 May 2023 20:05:05 +0800 Subject: [PATCH 02/13] =?UTF-8?q?rev:=E5=BA=93=E5=AD=98=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=EF=BC=8C=E5=85=A5=E5=BA=93=E7=A1=AE=E8=AE=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../material/dao/MdMeMaterialbase.java | 3 + .../service/vehicle/dao/MdPbBucketrecord.java | 4 + .../impl/StIvtIostorinvCpServiceImpl.java | 119 +++++++---- .../StIvtIostorinvdisdtlCpServiceImpl.java | 32 ++- .../impl/StIvtIostorinvdtlCpServiceImpl.java | 3 + .../structIvt/IStIvtStructivtCpService.java | 16 ++ .../structIvt/dao/StIvtStructivtCp.java | 2 + .../impl/StIvtStructivtCpServiceImpl.java | 185 ++++++++++++++++++ .../productmanage/util/ChangeIvtUtil.java | 21 ++ mes/qd/src/views/wms/pub/StructDialog.vue | 20 +- .../product/productIn/AddDtl.vue | 2 +- .../product/productIn/DivDialog.vue | 34 +++- .../product/productIn/ViewDialog.vue | 4 +- .../product/productIn/index.vue | 4 +- 14 files changed, 385 insertions(+), 64 deletions(-) create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/util/ChangeIvtUtil.java diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/material/dao/MdMeMaterialbase.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/material/dao/MdMeMaterialbase.java index fa52e5f3..e98f1d4e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/material/dao/MdMeMaterialbase.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/material/dao/MdMeMaterialbase.java @@ -1,6 +1,8 @@ package org.nl.wms.masterdata_manage.service.material.dao; import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import java.util.Date; @@ -26,6 +28,7 @@ public class MdMeMaterialbase implements Serializable { /** * 物料标识 */ + @TableId private String material_id; /** diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/dao/MdPbBucketrecord.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/dao/MdPbBucketrecord.java index edee1353..a56b0198 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/dao/MdPbBucketrecord.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/vehicle/dao/MdPbBucketrecord.java @@ -3,8 +3,11 @@ package org.nl.wms.masterdata_manage.service.vehicle.dao; import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; + +import lombok.Builder; import lombok.Data; import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; /** *

@@ -15,6 +18,7 @@ import lombok.EqualsAndHashCode; * @since 2023-05-10 */ @Data +@Builder @EqualsAndHashCode(callSuper = false) @TableName("md_pb_bucketrecord") public class MdPbBucketrecord implements Serializable { diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java index 7d72874b..72586305 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java @@ -19,8 +19,10 @@ import org.nl.common.utils.IdUtil; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.system.util.CodeUtil; +import org.nl.wms.masterdata_manage.service.vehicle.IMdPbBucketrecordService; import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleextService; import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleinfoService; +import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbBucketrecord; import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleext; import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleinfo; import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtBsrealstorattrService; @@ -34,8 +36,6 @@ import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService; import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask; import org.nl.wms.storage_manage.CHANGE_BILL_TYPE_ENUM; import org.nl.wms.storage_manage.IOSEnum; -import org.nl.wms.storage_manage.basedata.service.record.dto.StIvtStructivtflowDto; -import org.nl.wms.storage_manage.basedata.service.record.service.IStIvtStructivtflowService; import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvCpService; import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvdisCpService; import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvdisdtlCpService; @@ -46,6 +46,8 @@ import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.StIvtIostor import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.StIvtIostorinvdtlCp; import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.mapper.StIvtIostorinvCpMapper; import org.nl.wms.storage_manage.productmanage.service.iostorInv.dto.IostorInvQuery; +import org.nl.wms.storage_manage.productmanage.service.structIvt.IStIvtStructivtCpService; +import org.nl.wms.storage_manage.productmanage.util.ChangeIvtUtil; import org.nl.wms.storage_manage.productmanage.util.DivRuleCpService; import org.nl.wms.storage_manage.productmanage.util.RuleUtil; import org.springframework.beans.factory.annotation.Autowired; @@ -94,20 +96,23 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl pageQuery = this.page(page.build(), query.build()); @@ -231,7 +236,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl disDtlList = iStIvtIostorinvdisdtlCpService.list( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdisdtlCp::getIostorinv_id, whereJson.getString("iostorinv_id")) + ); + + for (StIvtIostorinvdisdtlCp disDtlDao : disDtlList) { + // 更新箱记录表 + iMdPbBucketrecordService.update( + MdPbBucketrecord.builder() + .status("03") // TODO 暂时写死 + .instor_optid(Long.getLong(SecurityUtils.getCurrentUserId())) + .instor_optname(SecurityUtils.getCurrentNickName()) + .instor_time(DateUtil.now()) + .build(), + new QueryWrapper().lambda() + .eq(MdPbBucketrecord::getBucketunique, disDtlDao.getBucketunique()) + ); + } + + // 5.更新任务为完成、更新库存、解锁点位 List disDaoList = iostorinvdisCpService.list( new QueryWrapper().lambda() .eq(StIvtIostorinvdisCp::getIostorinv_id, whereJson.getString("iostorinv_id")) ); - Map> collect = disDaoList.stream() - .collect(Collectors.groupingBy(StIvtIostorinvdisCp::getTask_id)); - - for (String task_id : collect.keySet()) { + for (StIvtIostorinvdisCp dao : disDaoList) { // 1)更新任务为完成 - SchBaseTask taskDao = iSchBaseTaskService.getById(task_id); - // 已完成则不更新 - if (StrUtil.equals(taskDao.getTask_id(), TaskStatusEnum.FINISHED.getCode())) continue; + SchBaseTask taskDao = iSchBaseTaskService.getById(dao.getTask_id()); - taskDao.setTask_status(TaskStatusEnum.FINISHED.getCode()); - iSchBaseTaskService.updateById(taskDao); + if (ObjectUtil.isNotEmpty(taskDao)) { + // 更新有任务分配 + if (!StrUtil.equals(taskDao.getTask_id(), TaskStatusEnum.FINISHED.getCode())) { + taskDao.setTask_status(TaskStatusEnum.FINISHED.getCode()); + iSchBaseTaskService.updateById(taskDao); + } + } // 2)更新库存 - List disList = collect.get(task_id); - for (StIvtIostorinvdisCp dao : disList) { - // 根据托盘对应货位更新 - structivtflowService.recordStructivtFlow( - StIvtStructivtflowDto.builder() - .bill_code(mstDao.getBill_code()) - .change_type_scode(CHANGE_BILL_TYPE_ENUM.IOSTORINV_IN_SEND) - .bill_table("st_ivt_iostorinv_cp") - .material_id(dao.getMaterial_id()) - .pcsn(dao.getPcsn()) - .struct_code(dao.getStruct_code()) - .result_qty(dao.getReal_qty()) - .change_qty(dao.getReal_qty()) - .task_id(dao.getTask_id()) - .storagevehicle_code(dao.getStoragevehicle_code()) - .build() - ); - } + iStIvtStructivtCpService.UpdateIvt(ivtDataParam(dao,ChangeIvtUtil.SUBWAREHOUSING_ADDIVT_QTY)); + + // 3)解锁终点 + unLockNext(dao.getStruct_id(),dao.getStoragevehicle_code()); } } @@ -721,4 +738,34 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl list) { if (!CollectionUtils.isEmpty(list)){ @@ -67,13 +73,18 @@ public class StIvtIostorinvdisdtlCpServiceImpl extends ServiceImpl().lambda() + .eq(MdMeMaterialbase::getMaterial_code, item.getString("material_code")) + ); + StIvtIostorinvdisdtlCp disDtlDao = new StIvtIostorinvdisdtlCp() .setIostorinv_id(json.getString("iostorinv_id")) .setIostorinvdtl_id(json.getString("iostorinvdtl_id")) .setIostorinvdis_id(json.getString("iostorinvdis_id")) .setIostorinvdisdtl_id(IdUtil.getStringId()) .setSeq_no(new BigDecimal(1)) - .setMaterial_id(item.getString("material_id")) + .setMaterial_id(mataDao.getMaterial_id()) .setPcsn(item.getString("pcsn")) .setQuality_scode("00") // TODO 暂时写 .setIvt_level("01") // TODO 暂时写 @@ -88,16 +99,17 @@ public class StIvtIostorinvdisdtlCpServiceImpl extends ServiceImpl().eq("bucketunique", item.getString("bucketunique")) + MdPbBucketrecord.builder() + .storagevehicle_id(Long.getLong(vehicleDao.getStoragevehicle_id())) + .status("02") // TODO 暂时写死 + .storagevehicle_code(vehicleDao.getStoragevehicle_code()) + .makeup_optid(Long.getLong(SecurityUtils.getCurrentUserId())) + .makeup_optname(SecurityUtils.getCurrentNickName()) + .makeup_time(DateUtil.now()) + .build(), + new QueryWrapper() + .eq("bucketunique", item.getString("bucketunique")) ); }); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvdtlCpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvdtlCpServiceImpl.java index 42adae4b..fd967cce 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvdtlCpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvdtlCpServiceImpl.java @@ -1,5 +1,6 @@ package org.nl.wms.storage_manage.productmanage.service.iostorInv.impl; +import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -65,7 +66,9 @@ public class StIvtIostorinvdtlCpServiceImpl extends ServiceImpl { + /** + * 成品库存更新 + * @param json + * { + * struct_id:仓位标识 + * material_id:物料标识 + * pcsn:批次 + * quality_scode:品质类型 + * ivt_level:库存等级 + * change_qty:变动数量 + * change_type:变动类型 + * } + */ + void UpdateIvt(JSONObject json); + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/StIvtStructivtCp.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/StIvtStructivtCp.java index 71c89e21..fb3a2e03 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/StIvtStructivtCp.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/StIvtStructivtCp.java @@ -1,5 +1,6 @@ package org.nl.wms.storage_manage.productmanage.service.structIvt.dao; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; @@ -25,6 +26,7 @@ public class StIvtStructivtCp implements Serializable { /** * 库存记录标识 */ + @TableId private String stockrecord_id; /** diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/impl/StIvtStructivtCpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/impl/StIvtStructivtCpServiceImpl.java index 0c942fe7..284bfffb 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/impl/StIvtStructivtCpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/impl/StIvtStructivtCpServiceImpl.java @@ -1,10 +1,26 @@ package org.nl.wms.storage_manage.productmanage.service.structIvt.impl; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.common.utils.IdUtil; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.wms.masterdata_manage.service.material.IMdMeMaterialbaseService; +import org.nl.wms.masterdata_manage.service.material.dao.MdMeMaterialbase; +import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService; +import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr; import org.nl.wms.storage_manage.productmanage.service.structIvt.IStIvtStructivtCpService; import org.nl.wms.storage_manage.productmanage.service.structIvt.dao.StIvtStructivtCp; import org.nl.wms.storage_manage.productmanage.service.structIvt.dao.mapper.StIvtStructivtCpMapper; +import org.nl.wms.storage_manage.productmanage.util.ChangeIvtUtil; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; /** *

@@ -17,4 +33,173 @@ import org.springframework.stereotype.Service; @Service public class StIvtStructivtCpServiceImpl extends ServiceImpl implements IStIvtStructivtCpService { + @Autowired + protected IStIvtStructattrService iStIvtStructattrService; // 仓位属性服务 + + @Autowired + protected IMdMeMaterialbaseService iMdMeMaterialbaseService; // 物料服务 + + @Override + @Transactional(rollbackFor = Exception.class) + public void UpdateIvt(JSONObject json) { + // 校验数据 + checkParam(json); + + String change_type = json.getString("change_type"); // 变动类型 + + switch (change_type) { + case ChangeIvtUtil.ADDWAREHOUSING_QTY: + // 加待入 + addWrehousingQty(json); + break; + case ChangeIvtUtil.SUBWAREHOUSING_QTY: + // 减待入 + subWrehousingQty(json); + break; + case ChangeIvtUtil.SUBWAREHOUSING_ADDIVT_QTY: + // 减待入、加库存、加可用 + subWrehousingAddQty(json); + break; + default: + throw new BadRequestException("变动类型异常!"); + } + + + } + + /* + 加待入 + */ + private void addWrehousingQty(JSONObject json) { + + // 查询是否有库存 + StIvtStructivtCp ivtDao = this.getOne( + new QueryWrapper().lambda() + .eq(StIvtStructivtCp::getStruct_id, json.getString("struct_id")) + .eq(StIvtStructivtCp::getMaterial_id, json.getString("material_id")) + .eq(StIvtStructivtCp::getPcsn, json.getString("pcsn")) + ); + + if (ObjectUtil.isEmpty(ivtDao)) { + // 为空插入 + StIvtStructattr attrDao = iStIvtStructattrService.getById(json.getString("struct_id")); + + MdMeMaterialbase materDao = iMdMeMaterialbaseService.getById(json.getString("material_id")); + + StIvtStructivtCp dao = new StIvtStructivtCp(); + dao.setStockrecord_id(org.nl.common.utils.IdUtil.getStringId()); + dao.setStruct_id(attrDao.getStruct_id()); + dao.setStruct_code(attrDao.getStruct_code()); + dao.setStruct_name(attrDao.getStruct_name()); + dao.setMaterial_id(materDao.getMaterial_id()); + dao.setQuality_scode(json.getString("quality_scode")); + dao.setIvt_level(json.getString("ivt_level")); + dao.setIs_active(true); + dao.setPcsn(json.getString("pcsn")); + dao.setCanuse_qty(BigDecimal.valueOf(0)); + dao.setFrozen_qty(BigDecimal.valueOf(0)); + dao.setIvt_qty(BigDecimal.valueOf(0)); + dao.setWarehousing_qty(json.getBigDecimal("change_qty")); + dao.setQty_unit_id(materDao.getBase_unit_id()); + this.save(dao); + + } else { + // 更新待入数 + ivtDao.setWarehousing_qty(NumberUtil.add(ivtDao.getWarehousing_qty(),json.getDoubleValue("change_qty"))); + this.updateById(ivtDao); + } + } + + /* + 减待入 + */ + private void subWrehousingQty(JSONObject json) { + + // 查询是否有库存 + StIvtStructivtCp ivtDao = this.getOne( + new QueryWrapper().lambda() + .eq(StIvtStructivtCp::getStruct_id, json.getString("struct_id")) + .eq(StIvtStructivtCp::getMaterial_id, json.getString("material_id")) + .eq(StIvtStructivtCp::getPcsn, json.getString("pcsn")) + ); + + if (ObjectUtil.isEmpty(ivtDao)) { + // 为空报错 + throw new BadRequestException("库存不存在,请检查!"); + } else { + // 判断库存是否异常 + double change_qty = NumberUtil.sub(ivtDao.getWarehousing_qty(), json.getDoubleValue("change_qty")).doubleValue(); + + if (change_qty < 0) { + throw new BadRequestException("库存异常,请检查!"); + } else if (change_qty == 0 && ivtDao.getCanuse_qty().doubleValue() == 0 && + ivtDao.getFrozen_qty().doubleValue() == 0 && ivtDao.getIvt_qty().doubleValue() == 0) { + // 待入数、库存数、冻结数、可用数都为0时删除库存记录 + this.removeById(ivtDao.getStockrecord_id()); + } else { + ivtDao.setWarehousing_qty(BigDecimal.valueOf(change_qty)); + this.updateById(ivtDao); + } + } + } + + /* + 减待入、加库存、加可用 + */ + private void subWrehousingAddQty(JSONObject json) { + // 查询是否有库存 + StIvtStructivtCp ivtDao = this.getOne( + new QueryWrapper().lambda() + .eq(StIvtStructivtCp::getStruct_id, json.getString("struct_id")) + .eq(StIvtStructivtCp::getMaterial_id, json.getString("material_id")) + .eq(StIvtStructivtCp::getPcsn, json.getString("pcsn")) + ); + + if (ObjectUtil.isEmpty(ivtDao)) { + throw new BadRequestException("库存不存在,请检查!"); + } else { + double change_qty = NumberUtil.sub(ivtDao.getWarehousing_qty(), json.getDoubleValue("change_qty")).doubleValue(); + + // 判断待入数是否为负数 + if (change_qty < 0) throw new BadRequestException("库存异常,请检查!"); + // 减去待入 + ivtDao.setWarehousing_qty(BigDecimal.valueOf(change_qty)); + // 加库存 + BigDecimal ivt_qty = NumberUtil.add(ivtDao.getIvt_qty(), json.getDoubleValue("change_qty")); + // 加可用 + BigDecimal canuse_qty = NumberUtil.add(ivtDao.getCanuse_qty(), json.getDoubleValue("change_qty")); + + ivtDao.setCanuse_qty(canuse_qty); + ivtDao.setIvt_qty(ivt_qty); + ivtDao.setInstorage_time(DateUtil.now()); + this.updateById(ivtDao); + } + } + + /* + 校验数据 + */ + private void checkParam(JSONObject json) { + + if (ObjectUtil.isEmpty(json.getString("struct_id"))) + throw new BadRequestException("更新库存失败:仓位不能为空!"); + + if (ObjectUtil.isEmpty(json.getString("material_id"))) + throw new BadRequestException("更新库存失败:物料不能为空!"); + + if (ObjectUtil.isEmpty(json.getString("pcsn"))) + throw new BadRequestException("更新库存失败:批次不能为空!"); + + if (ObjectUtil.isEmpty(json.getString("quality_scode"))) + throw new BadRequestException("更新库存失败:品质类型不能为空!"); + + if (ObjectUtil.isEmpty(json.getString("ivt_level"))) + throw new BadRequestException("更新库存失败:库存等级不能为空!"); + + if (ObjectUtil.isEmpty(json.getString("change_qty"))) + throw new BadRequestException("更新库存失败:变动数量不能为空!"); + + if (ObjectUtil.isEmpty(json.getString("change_type"))) + throw new BadRequestException("更新库存失败:变动类型不能为空!"); + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/util/ChangeIvtUtil.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/util/ChangeIvtUtil.java new file mode 100644 index 00000000..1e196734 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/util/ChangeIvtUtil.java @@ -0,0 +1,21 @@ +package org.nl.wms.storage_manage.productmanage.util; + +public class ChangeIvtUtil { + + /* + * 加待入 + */ + public static final String ADDWAREHOUSING_QTY = "1"; + + /* + * 减待入 + */ + public static final String SUBWAREHOUSING_QTY = "2"; + + /* + * 减待入、加库存、加可用 + */ + public static final String SUBWAREHOUSING_ADDIVT_QTY = "3"; + +} + diff --git a/mes/qd/src/views/wms/pub/StructDialog.vue b/mes/qd/src/views/wms/pub/StructDialog.vue index 5ee7e394..e4164b9f 100644 --- a/mes/qd/src/views/wms/pub/StructDialog.vue +++ b/mes/qd/src/views/wms/pub/StructDialog.vue @@ -47,10 +47,10 @@ @select-all="onSelectAll" > - - - - + + + + @@ -66,20 +66,20 @@ import CRUD, { header, presenter } from '@crud/crud' import rrOperation from '@crud/RR.operation' import pagination from '@crud/Pagination' -import crudRegion from '@/views/wms/scheduler_manage/region/region' +import crudStructattr from '@/api/wms/basedata/st/structattr' export default { name: 'StructDialog', components: { rrOperation, pagination }, cruds() { return CRUD({ - title: '点位', + title: '仓位', optShow: {}, - url: 'api/region/getPointQuery', - idField: 'region_code', - sort: 'region_code,desc', + url: 'api/structattr', + idField: 'struct_code', + sort: 'struct_code,ASC', query: { search: '', is_lock: '1', lock_type: '', sect_id: '', stor_id: '' }, - crudMethod: { ...crudRegion } + crudMethod: { ...crudStructattr } }) }, mixins: [presenter(), header()], diff --git a/mes/qd/src/views/wms/storage_manage/product/productIn/AddDtl.vue b/mes/qd/src/views/wms/storage_manage/product/productIn/AddDtl.vue index 7ffabf69..78bb9632 100644 --- a/mes/qd/src/views/wms/storage_manage/product/productIn/AddDtl.vue +++ b/mes/qd/src/views/wms/storage_manage/product/productIn/AddDtl.vue @@ -104,7 +104,7 @@ export default { cruds() { return CRUD({ title: '用户', - url: '/api/in/rawAssist/getBillDtl', + url: '/api/mdPbBucketrecord', crudMethod: {}, optShow: { reset: true diff --git a/mes/qd/src/views/wms/storage_manage/product/productIn/DivDialog.vue b/mes/qd/src/views/wms/storage_manage/product/productIn/DivDialog.vue index 38604026..5063f875 100644 --- a/mes/qd/src/views/wms/storage_manage/product/productIn/DivDialog.vue +++ b/mes/qd/src/views/wms/storage_manage/product/productIn/DivDialog.vue @@ -208,6 +208,18 @@ + + + @@ -285,6 +297,14 @@ export default { } }, methods: { + disabledIos(row) { + debugger + if (row.iostorinvdis_id === undefined) { + return false + } else { + return true + } + }, open() { crudSectattr.getSect({ 'stor_id': this.storId }).then(res => { this.sects = res.content @@ -381,6 +401,9 @@ export default { this.form.tableMater.splice(-1, 0, item) } }, + deleteRow(index, rows) { + rows.splice(index, 1) + }, tableRowClassName({ row, rowIndex }) { row.index = rowIndex }, @@ -441,9 +464,14 @@ export default { return } crudProductIn.confirmvehicle(this.form).then(res => { - this.crud.notify('组盘成功!', CRUD.NOTIFICATION_TYPE.SUCCESS) - this.form.vehicle_code = '' - this.form.bucketunique = '' + crudProductIn.getIosInvDtl({ 'iostorinv_id': this.form.dtl_row.iostorinv_id }).then(res => { + this.form.vehicle_code = '' + this.form.bucketunique = '' + this.openParam = res + this.form.tableMater = [] + this.dis_row = null + this.crud.notify('组盘成功!', CRUD.NOTIFICATION_TYPE.SUCCESS) + }) }) }, diff --git a/mes/qd/src/views/wms/storage_manage/product/productIn/ViewDialog.vue b/mes/qd/src/views/wms/storage_manage/product/productIn/ViewDialog.vue index 95aaa188..f426a84b 100644 --- a/mes/qd/src/views/wms/storage_manage/product/productIn/ViewDialog.vue +++ b/mes/qd/src/views/wms/storage_manage/product/productIn/ViewDialog.vue @@ -235,13 +235,13 @@ export default { this.currentDis = current }, queryTableDtl() { - crudProductIn.getIODtl({ 'iostorinv_id': this.form.iostorinv_id }).then(res => { + crudProductIn.getIosInvDtl({ 'iostorinv_id': this.form.iostorinv_id }).then(res => { this.tableDtl = res }) }, queryTableDdis() { if (this.currentdtl !== null) { - crudProductIn.getDisTask({ 'iostorinvdtl_id': this.currentdtl.iostorinvdtl_id }).then(res => { + crudProductIn.getIosInvDis({ "iostorinvdtl_id": this.currentdtl.iostorinvdtl_id }).then(res => { this.tabledis = res }).catch(() => { this.tabledis = [] diff --git a/mes/qd/src/views/wms/storage_manage/product/productIn/index.vue b/mes/qd/src/views/wms/storage_manage/product/productIn/index.vue index 072d186d..9a8eda45 100644 --- a/mes/qd/src/views/wms/storage_manage/product/productIn/index.vue +++ b/mes/qd/src/views/wms/storage_manage/product/productIn/index.vue @@ -141,7 +141,7 @@ > 分配 - 作业任务 - + --> Date: Thu, 25 May 2023 10:32:38 +0800 Subject: [PATCH 03/13] =?UTF-8?q?rev:=E7=94=9F=E4=BA=A7=E8=B0=83=E5=BA=A6?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ext/acs/service/impl/AgvInstService.java | 36 ++--- .../pda/rest/CacheLineHandController.java | 5 +- .../impl/CacheLineHandServiceImpl.java | 1 - .../device/PdmBiDeviceController.java | 22 ++- .../PdmProduceWorkorderController.java | 9 ++ .../sch/tasks/SpeMachinery/SpeEmpTask.java | 130 +++++++--------- .../sch/tasks/SpeMachinery/SpeFullTask.java | 143 ++++++++---------- .../service/device/dao/PdmBiDevice.java | 5 + .../device/dao/mapper/PdmBiDeviceMapper.xml | 4 +- .../service/device/dto/DeviceQuery.java | 29 ++++ .../IPdmProduceWorkorderService.java | 4 +- .../IPdmProduceWorkorderrecordService.java | 5 + .../workorder/dao/PdmProduceWorkorder.java | 4 + .../PdmProduceWorkorderrecordMapper.java | 6 + .../xml/PdmProduceWorkorderrecordMapper.xml | 25 +++ .../service/workorder/dto/ReportQuery.java | 21 +++ .../impl/IPdmProduceWorkorderServiceImpl.java | 7 +- .../PdmProduceWorkorderrecordServiceImpl.java | 9 ++ .../scheduler/SchedulerController.java | 2 +- .../mapper/xml/SchCachelineVehicleMapper.xml | 2 +- .../service/point/ISchBasePointService.java | 7 + .../point/dao/mapper/SchBasePointMapper.java | 2 + .../point/dao/mapper/SchBasePointMapper.xml | 12 +- .../point/impl/SchBasePointServiceImpl.java | 14 ++ .../scheduler/ISchProcessRouteService.java | 5 +- .../impl/SchProcessRouteServiceImpl.java | 25 ++- .../labelConverter/impl/ParamConverter.java | 2 +- .../src/main/resources/scheduler.xml | 6 +- 28 files changed, 341 insertions(+), 201 deletions(-) create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/device/dto/DeviceQuery.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dto/ReportQuery.java diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AgvInstService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AgvInstService.java index 648b2e8b..5d663f2c 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AgvInstService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AgvInstService.java @@ -51,6 +51,8 @@ public class AgvInstService { private ISchBaseTaskService taskService; @Autowired private ISchCachelineVehicleService cachelineVehicleService; + @Autowired + private ISchCachelineVehicleService cachelineVe3hicleService; public static void main(String[] args) { String a= "A1_DC_15_6"; @@ -67,18 +69,19 @@ public class AgvInstService { public void fullMaster(JSONObject task){ String quantity = task.getString("material_qty"); //获取当前生产工序下一道工序 - Map workprodure = basePointService.findDeviceWorkprodure(task.getString("point_code")); + Map workprodure = basePointService.findDeviceWorkprodure(task.getString("point_code1")); FlowElement next = getFlowElement(task,workprodure).next(); - String nextPoint = null; - //判断缓存线是不是去深坑清洗:深坑区域15个点:判断空的物料坑位: - String cacheVehile = ""; - Map query = MapOf.of("workprocedure_id", workprodure.get("workprocedure_id") + + Map query = MapOf.of("workprocedure_id", basePointService.getWorkprodureByCode(next.getId()).get("workprocedure_id") , "qty", quantity); + //判断缓存线是不是去深坑清洗:深坑区域15个点:判断空的物料坑位: if (next.getName().equals("深坑清洗")){ query.put("material_id",task.getString("material_id")); } List> list = deviceService.workproceduceDevices(query); + String nextPoint = null; + String cacheVehile = ""; if (!CollectionUtils.isEmpty(list)){ nextPoint = list.get(0).get("point_code"); }else { @@ -129,7 +132,7 @@ public class AgvInstService { .eq("is_delete", "0") .eq("is_used", "1") ); - SchProcessRoute processRoute = schProcessRouteService.findByMaterialId(material_id,devicePoint.getRegion_code()); + SchProcessRoute processRoute = schProcessRouteService.findByMaterialId(devicePoint.getRegion_code()); if (processRoute == null){ throw new BadRequestException("当前没有配置对应工序调度线路:"+material_id+"/"+devicePoint.getRegion_code()); } @@ -146,25 +149,16 @@ public class AgvInstService { //3.agv根据对应载具列表行进扫码匹配:匹配到对应物料则创建点对点任务 public void empMatter(JSONObject task){ //参数 - String targetDevice = task.getString("point_code2"); - String material_id = task.getString("material_id"); - SchBasePoint devicePoint = basePointService.getOne(new QueryWrapper() - .eq("point_code", targetDevice) - .eq("is_delete", "0") - .eq("is_used", "1")); - JSONObject cacheLine = WQLObject.getWQLObject("SCH_cacheLine_region_relation").query("region_code = '"+devicePoint.getRegion_code()+"' and is_active = '"+StatusEnum.STATUS_TRUE.getCode()+"'").uniqueResult(0); - Assert.notNull(cacheLine, String.format("区域%s对应缓存线信息不存在", devicePoint.getRegion_code())); - //缓存线位置编码 :缺料请求获取缓存线满载具列表 - String startPoint = cacheLine.getString("cacheline_code"); - String cacheVehile = getCacheVehile(startPoint, material_id); + String startPoint = task.getString("cacheLine"); + String cacheVehile = getCacheVehile(startPoint, task.getString("material_id")); if (StringUtils.isBlank(cacheVehile)) { - throw new BadRequestException("缓存线:"+startPoint+"没有物料"+material_id+"对应可用载具"); + throw new BadRequestException("缓存线:"+startPoint+"没有物料"+task.getString("material_id")+"对应可用载具"); } //判断当前物料载具已经任务分配数量:如果>物料已经分配任务。说明满了,不允许再分配 - List allocateTask = taskService.list(new QueryWrapper().eq("point_code1", startPoint).eq("material_id", material_id).lt("task_status", StatusEnum.TASK_FINISH.getCode())); + List allocateTask = taskService.list(new QueryWrapper().eq("point_code1", startPoint).eq("material_id", task.getString("material_id")).lt("task_status", StatusEnum.TASK_FINISH.getCode())); if (allocateTask.size()>=cacheVehile.split(",").length){ - log.error("callMatter 缓存线:{}上含有物料:{}的载具分配完,任务id:{}",startPoint,material_id,allocateTask.stream().map(SchBaseTask::getTask_id).collect(Collectors.joining(","))); - throw new BadRequestException(String.format("缓存线%s上含物料%s的载具已分配完",startPoint,material_id)); + log.error("callMatter 缓存线:{}上含有物料:{}的载具分配完,任务id:{}",startPoint,task.getString("material_id"),allocateTask.stream().map(SchBaseTask::getTask_id).collect(Collectors.joining(","))); + throw new BadRequestException(String.format("缓存线%s上含物料%s的载具已分配完",startPoint,task.getString("material_id"))); } SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class); schBaseTask.setVehicle_code(cacheVehile); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/pda/rest/CacheLineHandController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/pda/rest/CacheLineHandController.java index 61ee34bf..0b83c159 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/pda/rest/CacheLineHandController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/pda/rest/CacheLineHandController.java @@ -8,6 +8,7 @@ import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.nl.common.TableDataInfo; import org.nl.common.anno.Log; import org.nl.common.utils.api.ResultCode; import org.nl.modules.common.exception.BizCoreException; @@ -246,7 +247,7 @@ public class CacheLineHandController { public ResponseEntity check(@RequestBody JSONObject param) { log.info("海亮缓存线手持服务 [盘点] 接口被请求, 请求参数-{}", param); cacheLineHandService.check(param); - return new ResponseEntity<>(HttpStatus.OK); + return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK); } @PostMapping("/checkEnd") @@ -255,7 +256,7 @@ public class CacheLineHandController { public ResponseEntity checkEnd(@RequestBody JSONObject param) { log.info("海亮缓存线手持服务 [盘点] 接口被请求, 请求参数-{}", param); cacheLineHandService.check(param); - return new ResponseEntity<>(HttpStatus.OK); + return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK); } @PostMapping("/agvInBoxExceptionQuery") diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/pda/service/impl/CacheLineHandServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/pda/service/impl/CacheLineHandServiceImpl.java index a8217424..60d4bfa6 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/pda/service/impl/CacheLineHandServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pda_manage/pda/service/impl/CacheLineHandServiceImpl.java @@ -671,7 +671,6 @@ public class CacheLineHandServiceImpl implements CacheLineHandService { //载具编码 String vehicle_code = param.getString("vehicle_code"); //缓存线位置编码 - String position_code = param.getString("position_code"); // 封装给acs的数据 JSONArray jsonArray = new JSONArray(); JSONObject jsonObject = new JSONObject(); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/device/PdmBiDeviceController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/device/PdmBiDeviceController.java index c9ca3d46..9d288bff 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/device/PdmBiDeviceController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/device/PdmBiDeviceController.java @@ -1,15 +1,20 @@ package org.nl.wms.product_manage.controller.device; +import cn.dev33.satoken.annotation.SaIgnore; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.common.TableDataInfo; import org.nl.common.anno.Log; +import org.nl.common.domain.query.PageQuery; import org.nl.common.utils.SecurityUtils; import org.nl.wms.product_manage.service.device.IPdmBiDeviceService; import org.nl.wms.product_manage.service.device.dao.PdmBiDevice; +import org.nl.wms.product_manage.service.device.dto.DeviceQuery; import org.nl.wms.product_manage.备份pdm.service.DeviceService; import org.nl.wms.product_manage.备份pdm.service.dto.DeviceDto; import org.springframework.beans.factory.annotation.Autowired; @@ -19,6 +24,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.util.List; import java.util.Map; /** @@ -38,9 +44,19 @@ public class PdmBiDeviceController { @GetMapping @Log("查询生产设备") @ApiOperation("查询生产设备") - //@PreAuthorize("@el.check('device:list')") - public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ - return new ResponseEntity<>(deviceService.queryAll(whereJson,page),HttpStatus.OK); + @SaIgnore + public ResponseEntity query(DeviceQuery query, PageQuery page){ + Page result = iDeviceService.page(page.build(PdmBiDevice.class), query.build()); + return new ResponseEntity<>(TableDataInfo.build(result),HttpStatus.OK); + } + + @GetMapping("/list") + @Log("查询生产设备列表") + @ApiOperation("查询生产设备列表") + @SaIgnore + public ResponseEntity queryList(DeviceQuery query){ + List> list = iDeviceService.listMaps(query.build().select("device_code", "device_name")); + return new ResponseEntity<>(TableDataInfo.build(list),HttpStatus.OK); } @PostMapping diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/workorder/PdmProduceWorkorderController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/workorder/PdmProduceWorkorderController.java index 2a25fcb6..161f45b8 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/workorder/PdmProduceWorkorderController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/controller/workorder/PdmProduceWorkorderController.java @@ -15,6 +15,7 @@ import org.nl.common.utils.SecurityUtils; import org.nl.wms.product_manage.service.device.IPdmBiDeviceService; import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService; import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder; +import org.nl.wms.product_manage.service.workorder.dto.ReportQuery; import org.nl.wms.product_manage.service.workorder.dto.WorkorderQuery; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -145,6 +146,14 @@ public class PdmProduceWorkorderController { return new ResponseEntity<>(HttpStatus.OK); } + @GetMapping("/reportQuery") + @Log("报工查询") + @ApiOperation("报工查询") + public ResponseEntity reportQuery(ReportQuery query) { + return new ResponseEntity<>(TableDataInfo.build(iPdmProduceWorkorderService.reportQuery(query)),HttpStatus.OK); + } + + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SpeMachinery/SpeEmpTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SpeMachinery/SpeEmpTask.java index 1a3ff0f1..2df27ebd 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SpeMachinery/SpeEmpTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SpeMachinery/SpeEmpTask.java @@ -8,6 +8,8 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.Nullable; import org.nl.common.enums.AcsTaskEnum; import org.nl.common.enums.InterfaceLogType; import org.nl.common.enums.StatusEnum; @@ -21,6 +23,12 @@ import org.nl.wms.product_manage.sch.manage.AbstractAcsTask; import org.nl.wms.product_manage.sch.manage.TaskStatusEnum; import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService; import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder; +import org.nl.wms.scheduler_manage.service.cacheline.ISchCachelineVehilematerialService; +import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehilematerial; +import org.nl.wms.scheduler_manage.service.point.ISchBasePointService; +import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint; +import org.nl.wms.scheduler_manage.service.scheduler.ISchProcessRouteService; +import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.impl.FlowElement; import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService; import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask; import org.springframework.beans.factory.annotation.Autowired; @@ -43,14 +51,20 @@ public class SpeEmpTask extends AbstractAcsTask { @Autowired private ISchBaseTaskService taskService; @Autowired - AgvInstService agvInstService; + private AgvInstService agvInstService; + @Autowired + private ISchBasePointService basePointService; + @Autowired + private ISchCachelineVehilematerialService cacheLineVechileService; + + @Autowired + private ISchProcessRouteService schProcessRouteService; + private final Map SpeHandles= new HashMap<>(); private static String OPT_NAME = "ACS回调# "; public SpeEmpTask() { - SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_MAC.name() ,new Spe2Spe()); - SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_CACHE.name() ,new Spe2Cache()); SpeHandles.put(AcsTaskEnum.TASK_CACHELINE_OUT.name() ,new Cache2Spe()); } @@ -73,27 +87,26 @@ public class SpeEmpTask extends AbstractAcsTask { @Transactional public String createTask(JSONObject param) { //{"workorder_code":230523019,"device_code":"A1_TW_15_6_D","type":"1"} - String point_code = param.getString("device_code"); - String quantity = param.getString("quantity"); - String type = param.getString("type"); + String cahceLine = getRouteXmlFlowByWorkprodure(param); + if (cahceLine == null) { return null; } PdmProduceWorkorder one = workorderService.getOne(new QueryWrapper() .eq("workorder_code", param.getString("workorder_code")) .lt("workorder_status", StatusEnum.TASK_FINISH.getCode())); Assert.notNull(one, String.format("下发工单%s不存在未完成工单", param.getString("workorder_code"))); List list = taskService.list(new QueryWrapper() - .eq("point_code2", point_code).lt("task_status", StatusEnum.TASK_FINISH.getCode()) + .eq("point_code2", param.getString("device_code")).lt("task_status", StatusEnum.TASK_FINISH.getCode()) ); if (!CollectionUtils.isEmpty(list)){ throw new BadRequestException(String.format("设备%s存在未完成任务", param.getString("device_code"))); } JSONObject form = new JSONObject(MapOf.of("start_point_code","", - "next_point_code",point_code,"return_point_code", "","vehicle_code", - "","product_area",one.getProduct_area(),"quantity", quantity,"type",type,"material_id", one.getMaterial_id())); + "next_point_code",param.getString("device_code"),"return_point_code", "","vehicle_code", + "","product_area",one.getProduct_area(),"quantity", param.getString("quantity"),"type",param.getString("type"),"material_id", one.getMaterial_id())); String taskId = IdUtil.getSnowflake(1, 1).nextId() + ""; JSONObject task = packageParam(form, taskId); taskService.save(task.toJavaObject(SchBaseTask.class)); - + task.put("cacheLine",cahceLine); try { pointConfirm(task); //下发 @@ -106,6 +119,35 @@ public class SpeEmpTask extends AbstractAcsTask { return taskId; } + @Nullable + private String getRouteXmlFlowByWorkprodure(JSONObject param) { + Map workprodure = basePointService.findDeviceWorkprodure(param.getString("device_code")); + SchBasePoint devicePoint = basePointService.getOne(new QueryWrapper() + .eq("point_code", param.getString("device_code")) + .eq("is_delete", "0") + .eq("is_used", "1") + ); + FlowElement flowElement = schProcessRouteService.checkWorkprodure(workprodure.get("workprocedure_code"), devicePoint.getRegion_code()); + if (flowElement == null){ + log.error("SpeEmpTask#createTask 没有对应路由线路{},{}",workprodure.get("workprocedure_code"),devicePoint.getRegion_code()); + throw new BadRequestException("缺料请求没有配置对应路由线路"+workprodure.get("workprocedure_code")+"——"+devicePoint.getRegion_code()); + } + FlowElement pre = flowElement.pre(); + if (pre == null || ObjectUtil.isEmpty(pre.getParams().get("cacheLine"))){ + log.error("SpeEmpTask#createTask 没有配置缓存线{},{}",workprodure.get("workprocedure_code"),devicePoint.getRegion_code()); + return null; + } + Object tmp_cahceLine = pre.getParams().get("cacheLine"); + String cahceLine = null; + if (tmp_cahceLine instanceof String){ + cahceLine = (String) tmp_cahceLine; + } + if (tmp_cahceLine instanceof Map){ + cahceLine = ((Map) tmp_cahceLine).get(workprodure.get("spec")); + } + return cahceLine; + } + private JSONObject packageParam(JSONObject form, String task_id) { JSONObject task = new JSONObject(); 参数封装:{ @@ -149,72 +191,6 @@ public class SpeEmpTask extends AbstractAcsTask { interface SpeStatusHandler{ void handle(JSONObject param,String status,JSONObject task); } - class Spe2Spe implements SpeStatusHandler{ - @Override - public void handle(JSONObject param, String sta,JSONObject task) { - AcsTaskEnum status = AcsTaskEnum.getType(sta,"status_"); - WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); - WQLObject pointTable = WQLObject.getWQLObject("SCH_BASE_Point"); - WQLObject deviceTable = WQLObject.getWQLObject("pdm_bi_device"); - - switch (status){ - case STATUS_START: - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); - break; - case STATUS_FINISH: - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); - //到专机:更新设备上料位物料数量 - String point_code2 = task.getString("point_code2"); - JSONObject pointInfo = pointTable.query("point_code = '" + point_code2 + "'").uniqueResult(0); - JSONObject device = deviceTable.query("device_code = '" + pointInfo.getString("device_code") + "'").uniqueResult(0); - task.getDouble("material_qty"); - double currentQty = device.getDouble("deviceinstor_qty") + task.getDouble("material_qty"); - deviceTable.update(MapOf.of("deviceinstor_qty", String.valueOf(currentQty)), "device_code = '" + pointInfo.getString("device_code") + "'"); - break; - case STATUS_CANNEL: - cancel(param.getString("task_id")); - break; - default: - log.error(OPT_NAME+"未定义任务状态:{}",sta); - throw new BadRequestException(OPT_NAME+"未定义任务状态:"+sta); - } - } - } - class Spe2Cache implements SpeStatusHandler{ - @Override - public void handle(JSONObject param, String sta,JSONObject task) { - AcsTaskEnum status = AcsTaskEnum.getType(sta,"status_"); - WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); - WQLObject cacheVehTable = WQLObject.getWQLObject("sch_cacheline_vehilematerial"); - String workprocedureCode = param.getString("workorder_code"); - String inboxtxm = param.getString("inboxtxm"); - String outboxtxm = param.getString("outboxtxm"); - switch (status){ - case STATUS_START: - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); - cacheVehTable.delete("vehicle_code = '" + outboxtxm + "'"); - break; - case STATUS_FINISH: - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); - cacheVehTable.insert(MapOf.of("quantity", task.getString("material_qty"), - "material_id", task.getString("material_id"), - "vehicle_code", inboxtxm, - "vehicle_status", StatusEnum.CACHE_VEL_FULL.getCode(), - //工单,工序? - "workorder_code", workprocedureCode, - "create_time", DateUtil.now(), - "update_time", DateUtil.now() - //物料规格,物料名称 从物料信息表关联查询 - )); - break; - case STATUS_CANNEL: - cancel(param.getString("task_id")); - break; - default: - throw new BadRequestException(OPT_NAME+"未定义任务状态:"+sta); - } - } - } class Cache2Spe implements SpeStatusHandler{ @Override public void handle(JSONObject param, String sta,JSONObject task) { @@ -223,12 +199,10 @@ public class SpeEmpTask extends AbstractAcsTask { WQLObject cacheVehTable = WQLObject.getWQLObject("sch_cacheline_vehilematerial"); WQLObject pointTable = WQLObject.getWQLObject("SCH_BASE_Point"); WQLObject deviceTable = WQLObject.getWQLObject("pdm_bi_device"); - String outboxtxm = param.getString("outboxtxm"); switch (status){ case STATUS_START: taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); - cacheVehTable.delete("vehicle_code = '" + outboxtxm + "'"); break; case STATUS_FINISH: taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SpeMachinery/SpeFullTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SpeMachinery/SpeFullTask.java index 5ddcdb9e..bb62bc4d 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SpeMachinery/SpeFullTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/sch/tasks/SpeMachinery/SpeFullTask.java @@ -2,15 +2,14 @@ package org.nl.wms.product_manage.sch.tasks.SpeMachinery; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import lombok.extern.slf4j.Slf4j; import org.nl.common.enums.AcsTaskEnum; import org.nl.common.enums.InterfaceLogType; import org.nl.common.enums.StatusEnum; +import org.nl.common.utils.IdUtil; import org.nl.common.utils.MapOf; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; @@ -22,6 +21,10 @@ import org.nl.wms.product_manage.sch.manage.AbstractAcsTask; import org.nl.wms.product_manage.sch.manage.TaskStatusEnum; import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService; import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder; +import org.nl.wms.scheduler_manage.service.cacheline.ISchCachelineVehilematerialService; +import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehilematerial; +import org.nl.wms.scheduler_manage.service.point.ISchBasePointService; +import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint; import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService; import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask; import org.springframework.beans.factory.annotation.Autowired; @@ -44,7 +47,11 @@ public class SpeFullTask extends AbstractAcsTask { @Autowired private ISchBaseTaskService taskService; @Autowired - AgvInstService agvInstService; + private ISchBasePointService pointService; + @Autowired + private ISchCachelineVehilematerialService cacheLineVechileService; + @Autowired + private AgvInstService agvInstService; private final Map SpeHandles= new HashMap<>(); private static String OPT_NAME = "ACS回调# "; @@ -53,16 +60,16 @@ public class SpeFullTask extends AbstractAcsTask { public SpeFullTask() { SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_MAC.name() ,new Spe2Spe()); SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_CACHE.name() ,new Spe2Cache()); - SpeHandles.put(AcsTaskEnum.TASK_CACHELINE_OUT.name() ,new Cache2Spe()); } @Override + @Transactional public void updateTaskStatus(JSONObject param,String status) { WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); log.info(InterfaceLogType.ACS_TO_LMS.getDesc()); // 指令执行中 - JSONObject task = taskTable.query("task_id = '" + param.getString("task_id") + "'").uniqueResult(0); - AcsTaskEnum taskType = AcsTaskEnum.getType(task.getString("task_type"),"TASK_"); + SchBaseTask task = taskService.getById(param.getString("task_id")); + AcsTaskEnum taskType = AcsTaskEnum.getType(task.getTask_type(),"TASK_"); try { SpeHandles.get(taskType.name()).handle(param,status,task); }catch (Exception ex){ @@ -74,7 +81,6 @@ public class SpeFullTask extends AbstractAcsTask { @Override @Transactional public String createTask(JSONObject param) { - //{"quantity":5,"workorder_code":230523019,"device_code":"A1_TW_15_6_M","type":"2"} String point_code = param.getString("device_code"); String quantity = param.getString("quantity"); String type = param.getString("type"); @@ -92,9 +98,9 @@ public class SpeFullTask extends AbstractAcsTask { JSONObject empPoint = WQL.getWO("sch_point").addParamMap(MapOf.of("flag", "2", "point_code", point_code, "point_type", StatusEnum.POINT_LOCATION_EMP.getCode())).process().uniqueResult(0); JSONObject form = new JSONObject(MapOf.of("start_point_code",point_code, "next_point_code","","return_point_code", empPoint.getString("point_code"),"vehicle_code", - "","product_area",order.getProduct_area(),"quantity", quantity,"type",type,"material_id", order.getProduct_area())); + "","product_area",order.getProduct_area(),"quantity", quantity,"type",type,"material_id", order.getMaterial_id())); - String taskId = IdUtil.getSnowflake(1, 1).nextId() + ""; + String taskId = IdUtil.getStringId(); JSONObject task = packageParam(form, taskId); taskService.save(task.toJavaObject(SchBaseTask.class)); try { @@ -149,29 +155,38 @@ public class SpeFullTask extends AbstractAcsTask { } interface SpeStatusHandler{ - void handle(JSONObject param,String status,JSONObject task); + void handle(JSONObject param,String status,SchBaseTask task); } class Spe2Spe implements SpeStatusHandler{ @Override - public void handle(JSONObject param, String sta,JSONObject task) { + public void handle(JSONObject param, String sta,SchBaseTask task) { AcsTaskEnum status = AcsTaskEnum.getType(sta,"status_"); - WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); - WQLObject pointTable = WQLObject.getWQLObject("SCH_BASE_Point"); - WQLObject deviceTable = WQLObject.getWQLObject("pdm_bi_device"); - switch (status){ case STATUS_START: - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); + taskService.update(new UpdateWrapper() + .set("task_status",StatusEnum.TASK_RUNNING.getCode()) + .set("update_name","acs") + .set("update_time",DateUtil.now()).eq("task_id",task.getTask_id())); + Map extParam = (Map)param.get("ext_param"); + if (extParam.get("put_finish") != null){ + pointService.update(new UpdateWrapper() + .set("vehicle_code",task.getVehicle_code2()) + .eq("point_code",task.getPoint_code3())); + } + if (extParam.get("take_finish") != null){ + pointService.update(new UpdateWrapper() + .set("vehicle_code","") + .eq("point_code",task.getPoint_code3())); + pointService.update(new UpdateWrapper() + .set("vehicle_code",task.getVehicle_code2()) + .eq("point_code",task.getPoint_code1())); + } break; case STATUS_FINISH: - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); - //到专机:更新设备上料位物料数量 - String point_code2 = task.getString("point_code2"); - JSONObject pointInfo = pointTable.query("point_code = '" + point_code2 + "'").uniqueResult(0); - JSONObject device = deviceTable.query("device_code = '" + pointInfo.getString("device_code") + "'").uniqueResult(0); - task.getDouble("material_qty"); - double currentQty = device.getDouble("deviceinstor_qty") + task.getDouble("material_qty"); - deviceTable.update(MapOf.of("deviceinstor_qty", String.valueOf(currentQty)), "device_code = '" + pointInfo.getString("device_code") + "'"); + taskService.update(new UpdateWrapper() + .set("task_status",StatusEnum.TASK_FINISH.getCode()) + .set("update_name","acs") + .set("update_time",DateUtil.now()).eq("task_id",task.getTask_id())); break; case STATUS_CANNEL: cancel(param.getString("task_id")); @@ -184,63 +199,36 @@ public class SpeFullTask extends AbstractAcsTask { } class Spe2Cache implements SpeStatusHandler{ @Override - public void handle(JSONObject param, String sta,JSONObject task) { + public void handle(JSONObject param, String sta,SchBaseTask task) { AcsTaskEnum status = AcsTaskEnum.getType(sta,"status_"); - WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); - WQLObject cacheVehTable = WQLObject.getWQLObject("sch_cacheline_vehilematerial"); - String workprocedureCode = param.getString("workorder_code"); - String inboxtxm = param.getString("inboxtxm"); - String outboxtxm = param.getString("outboxtxm"); switch (status){ case STATUS_START: - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); - cacheVehTable.delete("vehicle_code = '" + outboxtxm + "'"); + Map extParam = (Map)param.get("ext_param"); + UpdateWrapper wrapper = new UpdateWrapper() + .set("task_status", StatusEnum.TASK_RUNNING.getCode()) + .set("update_name", "acs") + .set("update_time", DateUtil.now()).eq("task_id", task.getTask_id()); + + if (extParam.get("outboxt")!= null){ wrapper.set("vehicle_code2",extParam.get("outboxt")); } + taskService.update(wrapper); + + if (extParam.get("inboxt") != null){ + SchCachelineVehilematerial vehilematerial = new SchCachelineVehilematerial(); + vehilematerial.setVehmaterial_id(IdUtil.getStringId()); + vehilematerial.setVehicle_code(extParam.get("inboxt")); + vehilematerial.setMaterial_id(task.getMaterial_id()); + vehilematerial.setErr_type("0"); + vehilematerial.setCreate_time(DateUtil.now()); + vehilematerial.setQuantity(task.getMaterial_qty()); + cacheLineVechileService.save(vehilematerial); + } + break; case STATUS_FINISH: - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); - cacheVehTable.insert(MapOf.of("quantity", task.getString("material_qty"), - "material_id", task.getString("material_id"), - "vehicle_code", inboxtxm, - "vehicle_status", StatusEnum.CACHE_VEL_FULL.getCode(), - //工单,工序? - "workorder_code", workprocedureCode, - "create_time", DateUtil.now(), - "update_time", DateUtil.now() - //物料规格,物料名称 从物料信息表关联查询 - )); - break; - case STATUS_CANNEL: - cancel(param.getString("task_id")); - break; - default: - throw new BadRequestException(OPT_NAME+"未定义任务状态:"+sta); - } - } - } - class Cache2Spe implements SpeStatusHandler{ - @Override - public void handle(JSONObject param, String sta,JSONObject task) { - AcsTaskEnum status = AcsTaskEnum.getType(sta,"status_"); - WQLObject taskTable = WQLObject.getWQLObject("sch_base_task"); - WQLObject cacheVehTable = WQLObject.getWQLObject("sch_cacheline_vehilematerial"); - WQLObject pointTable = WQLObject.getWQLObject("SCH_BASE_Point"); - WQLObject deviceTable = WQLObject.getWQLObject("pdm_bi_device"); - String outboxtxm = param.getString("outboxtxm"); - - switch (status){ - case STATUS_START: - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); - cacheVehTable.delete("vehicle_code = '" + outboxtxm + "'"); - break; - case STATUS_FINISH: - taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'"); - - String point_code2 = task.getString("point_code2"); - JSONObject pointInfo = pointTable.query("point_code = '" + point_code2 + "'").uniqueResult(0); - JSONObject device = deviceTable.query("device_code = '" + pointInfo.getString("device_code") + "'").uniqueResult(0); - task.getDouble("material_qty"); - double currentQty = device.getDouble("deviceinstor_qty") + task.getDouble("material_qty"); - deviceTable.update(MapOf.of("deviceinstor_qty", String.valueOf(currentQty)), "device_code = '" + pointInfo.getString("device_code") + "'"); + taskService.update(new UpdateWrapper() + .set("task_status",StatusEnum.TASK_FINISH.getCode()) + .set("update_name","acs") + .set("update_time",DateUtil.now()).eq("task_id",task.getTask_id())); break; case STATUS_CANNEL: cancel(param.getString("task_id")); @@ -254,6 +242,5 @@ public class SpeFullTask extends AbstractAcsTask { @Override public void pointConfirm(JSONObject param) { agvInstService.fullMaster(param); - } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/device/dao/PdmBiDevice.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/device/dao/PdmBiDevice.java index 43aa1b40..9e3e4f69 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/device/dao/PdmBiDevice.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/device/dao/PdmBiDevice.java @@ -29,6 +29,11 @@ public class PdmBiDevice implements Serializable { @TableId(value = "device_code") private String device_code; + /** + * 设备系列TW_15/TW_22:25/22 + */ + private String spec; + /** * 设备名称 */ diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/device/dao/mapper/PdmBiDeviceMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/device/dao/mapper/PdmBiDeviceMapper.xml index 3fccb0be..17efe475 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/device/dao/mapper/PdmBiDeviceMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/device/dao/mapper/PdmBiDeviceMapper.xml @@ -23,7 +23,7 @@ GROUP_CONCAT(sch_base_task.task_id), pdm_bi_device.inupperlimit_qty - ifnull( sum( sch_base_task.material_qty ), 0 ) - pdm_bi_device.deviceinstor_qty AS currentQty, pdm_bi_device.device_code, - sch_base_point.point_code, + sch_base_point.point_code from sch_base_point left join pdm_bi_device on pdm_bi_device.device_code = sch_base_point.device_code left JOIN sch_base_task ON sch_base_point.point_code = point_code2 and '7' > task_status @@ -31,7 +31,7 @@ sch_base_point.point_type = '4' and workprocedure_id = #{workprocedure_id} - and pdm_bi_device.material_id = #{material_id} + and (pdm_bi_device.material_id = #{material_id} or pdm_bi_device.material_id is null ) GROUP BY pdm_bi_device.device_code HAVING currentQty > #{qty} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/device/dto/DeviceQuery.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/device/dto/DeviceQuery.java new file mode 100644 index 00000000..a9dffddc --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/device/dto/DeviceQuery.java @@ -0,0 +1,29 @@ +package org.nl.wms.product_manage.service.device.dto; + +import lombok.Data; +import org.nl.common.domain.query.BaseQuery; +import org.nl.common.domain.query.QParam; +import org.nl.common.enums.QueryTEnum; +import org.nl.wms.product_manage.service.device.dao.PdmBiDevice; +import org.nl.wms.system_manage.service.dept.dao.SysDept; + +import java.util.List; + +/* + * @author ZZQ + * @Date 2022/12/15 4:20 下午 + */ +@Data +public class DeviceQuery extends BaseQuery { + private String search; + + private String workprocedure_id; + + private String product_area; + + + @Override + public void paramMapping() { + super.doP.put("search", QParam.builder().k(new String[]{"device_code"}).type(QueryTEnum.LK).build()); + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/IPdmProduceWorkorderService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/IPdmProduceWorkorderService.java index 6bb5e166..2c403b12 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/IPdmProduceWorkorderService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/IPdmProduceWorkorderService.java @@ -4,8 +4,8 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.IService; import org.nl.common.domain.query.PageQuery; -import org.nl.common.utils.OptionRecord; import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder; +import org.nl.wms.product_manage.service.workorder.dto.ReportQuery; import org.nl.wms.product_manage.service.workorder.dto.WorkorderQuery; import org.springframework.web.multipart.MultipartFile; @@ -115,4 +115,6 @@ public interface IPdmProduceWorkorderService extends IService reportQuery(ReportQuery query); + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/IPdmProduceWorkorderrecordService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/IPdmProduceWorkorderrecordService.java index 2f95ec1f..c8b62eba 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/IPdmProduceWorkorderrecordService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/IPdmProduceWorkorderrecordService.java @@ -2,6 +2,10 @@ package org.nl.wms.product_manage.service.workorder; import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord; import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.product_manage.service.workorder.dto.ReportQuery; + +import java.util.List; +import java.util.Map; /** *

@@ -13,4 +17,5 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface IPdmProduceWorkorderrecordService extends IService { + List getWorkorderRecordDtl(ReportQuery query); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/PdmProduceWorkorder.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/PdmProduceWorkorder.java index 128ff135..9d43749c 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/PdmProduceWorkorder.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/PdmProduceWorkorder.java @@ -220,6 +220,10 @@ public class PdmProduceWorkorder implements Serializable { * 完工时间 */ private String confirm_time; + /** + * 自增序号 + */ + private Integer seq_number; } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderrecordMapper.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderrecordMapper.java index 7fb66f71..ae7c714f 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderrecordMapper.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/PdmProduceWorkorderrecordMapper.java @@ -1,7 +1,12 @@ package org.nl.wms.product_manage.service.workorder.dao.mapper; +import org.apache.ibatis.annotations.Param; import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.wms.product_manage.service.workorder.dto.ReportQuery; + +import java.util.List; +import java.util.Map; /** *

@@ -13,4 +18,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; */ public interface PdmProduceWorkorderrecordMapper extends BaseMapper { + List getWorkorderRecordDtl(@Param("query")ReportQuery query); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/xml/PdmProduceWorkorderrecordMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/xml/PdmProduceWorkorderrecordMapper.xml index ac1a9b89..0b782794 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/xml/PdmProduceWorkorderrecordMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dao/mapper/xml/PdmProduceWorkorderrecordMapper.xml @@ -2,4 +2,29 @@ + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dto/ReportQuery.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dto/ReportQuery.java new file mode 100644 index 00000000..f7216905 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/dto/ReportQuery.java @@ -0,0 +1,21 @@ +package org.nl.wms.product_manage.service.workorder.dto; + +import lombok.Data; +import org.nl.common.domain.query.BaseQuery; +import org.nl.common.domain.query.QParam; +import org.nl.common.enums.QueryTEnum; +import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder; +import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord; + +/* + * @author ZZQ + * @Date 2023/4/26 11:05 + */ +@Data +public class ReportQuery extends BaseQuery { + + private String device_code; + private String workorder_code; + private String report; + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/IPdmProduceWorkorderServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/IPdmProduceWorkorderServiceImpl.java index 227eebf0..fb20ee9f 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/IPdmProduceWorkorderServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/IPdmProduceWorkorderServiceImpl.java @@ -39,6 +39,7 @@ import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder; import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord; import org.nl.wms.product_manage.service.workorder.dao.WorkorderRecord; import org.nl.wms.product_manage.service.workorder.dao.mapper.PdmProduceWorkorderMapper; +import org.nl.wms.product_manage.service.workorder.dto.ReportQuery; import org.nl.wms.product_manage.service.workorder.dto.WorkorderQuery; import org.nl.wms.system_manage.service.user.ISysUserService; import org.nl.wms.system_manage.service.user.dao.SysUser; @@ -639,7 +640,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl reportQuery(ReportQuery query) { + return reportRecordService.getWorkorderRecordDtl(query); + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/PdmProduceWorkorderrecordServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/PdmProduceWorkorderrecordServiceImpl.java index 06bac38a..1a7582cb 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/PdmProduceWorkorderrecordServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/workorder/impl/PdmProduceWorkorderrecordServiceImpl.java @@ -1,11 +1,16 @@ package org.nl.wms.product_manage.service.workorder.impl; +import lombok.var; import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord; import org.nl.wms.product_manage.service.workorder.dao.mapper.PdmProduceWorkorderrecordMapper; import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderrecordService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.wms.product_manage.service.workorder.dto.ReportQuery; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; + /** *

* 生产设备报工记录表 服务实现类 @@ -17,4 +22,8 @@ import org.springframework.stereotype.Service; @Service public class PdmProduceWorkorderrecordServiceImpl extends ServiceImpl implements IPdmProduceWorkorderrecordService { + @Override + public List getWorkorderRecordDtl(ReportQuery query) { + return this.baseMapper.getWorkorderRecordDtl(query); + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/controller/scheduler/SchedulerController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/controller/scheduler/SchedulerController.java index 07b3f1ad..e8b8baa2 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/controller/scheduler/SchedulerController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/controller/scheduler/SchedulerController.java @@ -58,7 +58,7 @@ public class SchedulerController { .or() .like("process_name", blurry) .or() - .like("material_spec", blurry); + .like("rule_code", blurry); } List list = processRouteService.list(query); return new ResponseEntity<>(TableDataInfo.build(list), HttpStatus.OK); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/xml/SchCachelineVehicleMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/xml/SchCachelineVehicleMapper.xml index 0a847f3f..8a6b1e39 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/xml/SchCachelineVehicleMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/cacheline/dao/mapper/xml/SchCachelineVehicleMapper.xml @@ -12,7 +12,7 @@ WHERE p.vehicle_code ]]> '' and v.vehicle_status = #{vehicle_status} - v.material_id = #{material_id} + and v.material_id = #{material_id} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/ISchBasePointService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/ISchBasePointService.java index f0168faa..a1cdfd4b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/ISchBasePointService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/ISchBasePointService.java @@ -41,9 +41,16 @@ public interface ISchBasePointService extends IService { /** * 根据设备点位查询设备对应工序 + * r.workprocedure_code,r.workprocedure_id,p.device_code * @param point_code * @return */ Map findDeviceWorkprodure(String point_code); + + Map getWorkprodureById(String id); + Map getWorkprodureByCode(String code); + + + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/dao/mapper/SchBasePointMapper.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/dao/mapper/SchBasePointMapper.java index fb07e862..e2e42ea3 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/dao/mapper/SchBasePointMapper.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/dao/mapper/SchBasePointMapper.java @@ -1,6 +1,7 @@ package org.nl.wms.scheduler_manage.service.point.dao.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint; import java.util.List; @@ -30,4 +31,5 @@ public interface SchBasePointMapper extends BaseMapper { List selectPoint(Map map); Map getDeviceWorkprodure(String pointCode); + Map getWorkprodure(@Param("workprodureId") String workprodureId,@Param("workprodureCode") String workprodureCode); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/dao/mapper/SchBasePointMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/dao/mapper/SchBasePointMapper.xml index e7034ae8..335e0521 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/dao/mapper/SchBasePointMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/dao/mapper/SchBasePointMapper.xml @@ -91,9 +91,19 @@ + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/impl/SchBasePointServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/impl/SchBasePointServiceImpl.java index e6fda177..a1740613 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/impl/SchBasePointServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/point/impl/SchBasePointServiceImpl.java @@ -148,4 +148,18 @@ public class SchBasePointServiceImpl extends ServiceImpl @@ -13,5 +14,7 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface ISchProcessRouteService extends IService { - SchProcessRoute findByMaterialId(String materialId,String regionCode); + SchProcessRoute findByMaterialId(String ruleCode); + + FlowElement checkWorkprodure(String workprodureCode,String ruleCode); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/impl/SchProcessRouteServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/impl/SchProcessRouteServiceImpl.java index 52464bd3..99d51dc5 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/impl/SchProcessRouteServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/impl/SchProcessRouteServiceImpl.java @@ -2,14 +2,19 @@ package org.nl.wms.scheduler_manage.service.scheduler.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.commons.lang3.StringUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint; +import org.nl.wms.scheduler_manage.service.scheduler.SchedulerService; import org.nl.wms.scheduler_manage.service.scheduler.dao.SchProcessRoute; import org.nl.wms.scheduler_manage.service.scheduler.dao.mapper.SchProcessRouteMapper; import org.nl.wms.scheduler_manage.service.scheduler.ISchProcessRouteService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.impl.FlowElement; import org.nl.wms.system_manage.service.param.ISysParamService; import org.nl.wms.system_manage.service.param.dao.Param; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; /** *

@@ -23,18 +28,26 @@ import org.springframework.stereotype.Service; public class SchProcessRouteServiceImpl extends ServiceImpl implements ISchProcessRouteService { @Autowired - ISysParamService iSysParamService; + private ISysParamService iSysParamService; + @Autowired + private SchedulerService schedulerService; @Override - public SchProcessRoute findByMaterialId(String materialId, String regionCode) { + public SchProcessRoute findByMaterialId(String ruleCode) { Param one = iSysParamService.getOne(new QueryWrapper().eq("code", "process_route")); String value = one.getValue(); if (value.equals("1")){ - return this.getOne(new QueryWrapper().eq("rule_code",regionCode)); + return this.getOne(new QueryWrapper().eq("rule_code",ruleCode)); }else { - if (StringUtils.isNotEmpty(materialId)){ - return this.baseMapper.findByMaterialId(materialId); - } + return this.baseMapper.findByMaterialId(ruleCode); + } + } + + @Override + public FlowElement checkWorkprodure(String workprodureCode,String ruleCode) { + SchProcessRoute processRoute = this.findByMaterialId(ruleCode); + if (processRoute != null){ + return schedulerService.currentFlow(processRoute.getProcess_id(), workprodureCode); } return null; } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/labelConverter/impl/ParamConverter.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/labelConverter/impl/ParamConverter.java index 2f2c7e8b..4ea5da71 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/labelConverter/impl/ParamConverter.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/scheduler_manage/service/scheduler/labelConverter/impl/ParamConverter.java @@ -30,7 +30,7 @@ public class ParamConverter implements BaseConverter { break; } if (XMLStreamConstants.START_ELEMENT == xtr.next()){ - element.getItem().put(xtr.getAttributeValue(null,"id"),xtr.getAttributeValue(null,"value")); + element.getItem().put(xtr.getAttributeValue(null,"spec"),xtr.getAttributeValue(null,"value")); i++; } } diff --git a/mes/hd/nladmin-system/src/main/resources/scheduler.xml b/mes/hd/nladmin-system/src/main/resources/scheduler.xml index 1eee0673..87f97807 100644 --- a/mes/hd/nladmin-system/src/main/resources/scheduler.xml +++ b/mes/hd/nladmin-system/src/main/resources/scheduler.xml @@ -4,11 +4,11 @@ - - + + - + From f530e6d7b40cd18d1b2374d10d6032624a7413f4 Mon Sep 17 00:00:00 2001 From: liuxy Date: Thu, 25 May 2023 14:58:35 +0800 Subject: [PATCH 04/13] =?UTF-8?q?add:=20=E7=94=9F=E4=BA=A7=E8=AE=A2?= =?UTF-8?q?=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/nl/wms/aps_manage/mps.xls | Bin 171008 -> 175616 bytes .../saleOrder/MpsSaleOrderController.java | 21 + .../saleOrder/IMpsSaleOrderService.java | 16 + .../service/saleOrder/dao/MpsSaleOrder.java | 165 +++++++ .../dao/mapper/MpsSaleOrderMapper.java | 16 + .../dao/mapper/xml/MpsSaleOrderMapper.xml | 5 + .../impl/MpsSaleOrderServiceImpl.java | 20 + .../IStivtlostorivnCpOutController.java | 74 ++++ .../IStIvtIostorinvCpOutService.java | 86 ++++ .../impl/StIvtIostorinvCpOutServiceImpl.java | 275 ++++++++++++ .../impl/StIvtIostorinvCpServiceImpl.java | 13 +- .../structIvt/IStIvtStructivtCpService.java | 1 + .../impl/StIvtStructivtCpServiceImpl.java | 1 + .../product/productIn/index.vue | 2 +- .../product/productOut/AddDialog.vue | 339 ++++++++------- .../product/productOut/DivDialog.vue | 109 +---- .../product/productOut/index.vue | 61 +-- .../product/productOut/productout.js | 209 +-------- .../semiproduct/semiProductIn/AddDialog.vue | 410 ------------------ 19 files changed, 918 insertions(+), 905 deletions(-) create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/controller/saleOrder/MpsSaleOrderController.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/IMpsSaleOrderService.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/MpsSaleOrder.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/mapper/MpsSaleOrderMapper.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/mapper/xml/MpsSaleOrderMapper.xml create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/impl/MpsSaleOrderServiceImpl.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/iostorInv/IStivtlostorivnCpOutController.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpOutService.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpOutServiceImpl.java delete mode 100644 mes/qd/src/views/wms/storage_manage/semiproduct/semiProductIn/AddDialog.vue diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/aps_manage/mps.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/aps_manage/mps.xls index f061545183b81c6ba7200a2ed11b5fe0d93bb8a6..27cdf427ba0fad73c0033a9a335f9acb40e37e54 100644 GIT binary patch delta 37144 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 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/controller/saleOrder/MpsSaleOrderController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/controller/saleOrder/MpsSaleOrderController.java new file mode 100644 index 00000000..057e7975 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/controller/saleOrder/MpsSaleOrderController.java @@ -0,0 +1,21 @@ +package org.nl.wms.mps_manage.ordermanage.controller.saleOrder; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 生产订单表 前端控制器 + *

+ * + * @author generator + * @since 2023-05-25 + */ +@RestController +@RequestMapping("/mpsSaleOrder") +public class MpsSaleOrderController { + +} + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/IMpsSaleOrderService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/IMpsSaleOrderService.java new file mode 100644 index 00000000..ed3e74c5 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/IMpsSaleOrderService.java @@ -0,0 +1,16 @@ +package org.nl.wms.mps_manage.ordermanage.service.saleOrder; + +import org.nl.wms.mps_manage.ordermanage.service.saleOrder.dao.MpsSaleOrder; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 生产订单表 服务类 + *

+ * + * @author generator + * @since 2023-05-25 + */ +public interface IMpsSaleOrderService extends IService { + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/MpsSaleOrder.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/MpsSaleOrder.java new file mode 100644 index 00000000..2244a6dc --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/MpsSaleOrder.java @@ -0,0 +1,165 @@ +package org.nl.wms.mps_manage.ordermanage.service.saleOrder.dao; + +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * 生产订单表 + *

+ * + * @author generator + * @since 2023-05-25 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("mps_sale_order") +public class MpsSaleOrder implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 销售单标识 + */ + private Long sale_id; + + /** + * 销售单号 + */ + private String sale_code; + + /** + * 明细序号 + */ + private BigDecimal seq_no; + + /** + * 销售单类型 + */ + private String sale_type; + + /** + * 物料标识 + */ + private Long material_id; + + /** + * 状态 + */ + private String status; + + /** + * 销售数量 + */ + private BigDecimal sale_qty; + + /** + * 生产顺序 + */ + private BigDecimal produce_seq; + + /** + * 客户标识 + */ + private Long cust_id; + + /** + * 客户编码 + */ + private String cust_code; + + /** + * 客户名称 + */ + private String cust_name; + + /** + * 计量单位标识 + */ + private Long qty_unit_id; + + /** + * 计划交期 + */ + private String plandeliver_date; + + /** + * 创建人 + */ + private Long create_id; + + /** + * 创建人姓名 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 提交人 + */ + private Long audit_optid; + + /** + * 提交时间 + */ + private String audit_time; + + /** + * 提交人姓名 + */ + private String audit_optname; + + /** + * 确认人 + */ + private Long confirm_optid; + + /** + * 确认人姓名 + */ + private String confirm_optname; + + /** + * 确认时间 + */ + private String confirm_time; + + /** + * 是否删除 + */ + private String is_delete; + + /** + * 备注 + */ + private String remark; + + /** + * 车间标识 + */ + private Long workshop_id; + + /** + * 生产数量 + */ + private BigDecimal product_qty; + + /** + * 预入库数量 + */ + private BigDecimal instor_qty; + + /** + * 发货数量 + */ + private BigDecimal sendout_qty; + + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/mapper/MpsSaleOrderMapper.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/mapper/MpsSaleOrderMapper.java new file mode 100644 index 00000000..a8480826 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/mapper/MpsSaleOrderMapper.java @@ -0,0 +1,16 @@ +package org.nl.wms.mps_manage.ordermanage.service.saleOrder.dao.mapper; + +import org.nl.wms.mps_manage.ordermanage.service.saleOrder.dao.MpsSaleOrder; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 生产订单表 Mapper 接口 + *

+ * + * @author generator + * @since 2023-05-25 + */ +public interface MpsSaleOrderMapper extends BaseMapper { + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/mapper/xml/MpsSaleOrderMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/mapper/xml/MpsSaleOrderMapper.xml new file mode 100644 index 00000000..6fc43f10 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/dao/mapper/xml/MpsSaleOrderMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/impl/MpsSaleOrderServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/impl/MpsSaleOrderServiceImpl.java new file mode 100644 index 00000000..6df31f6d --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/ordermanage/service/saleOrder/impl/MpsSaleOrderServiceImpl.java @@ -0,0 +1,20 @@ +package org.nl.wms.mps_manage.ordermanage.service.saleOrder.impl; + +import org.nl.wms.mps_manage.ordermanage.service.saleOrder.dao.MpsSaleOrder; +import org.nl.wms.mps_manage.ordermanage.service.saleOrder.dao.mapper.MpsSaleOrderMapper; +import org.nl.wms.mps_manage.ordermanage.service.saleOrder.IMpsSaleOrderService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 生产订单表 服务实现类 + *

+ * + * @author generator + * @since 2023-05-25 + */ +@Service +public class MpsSaleOrderServiceImpl extends ServiceImpl implements IMpsSaleOrderService { + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/iostorInv/IStivtlostorivnCpOutController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/iostorInv/IStivtlostorivnCpOutController.java new file mode 100644 index 00000000..78cc2ece --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/controller/iostorInv/IStivtlostorivnCpOutController.java @@ -0,0 +1,74 @@ +package org.nl.wms.storage_manage.productmanage.controller.iostorInv; + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.anno.Log; +import org.nl.common.domain.query.PageQuery; +import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvCpOutService; +import org.nl.wms.storage_manage.productmanage.service.iostorInv.IStIvtIostorinvCpService; +import org.nl.wms.storage_manage.productmanage.service.iostorInv.dto.IostorInvQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequiredArgsConstructor +@Api(tags = "成品出库") +@RequestMapping("/api/productOut") +@Slf4j +public class IStivtlostorivnCpOutController { + + @Autowired + private IStIvtIostorinvCpOutService iStIvtIostorinvCpOutService; + + @GetMapping + @Log("查询出库单") + @ApiOperation("查询出库单") + public ResponseEntity query(IostorInvQuery query, PageQuery page){ + return new ResponseEntity<>(iStIvtIostorinvCpOutService.pageQuery(query,page),HttpStatus.OK); + } + + @PostMapping + @Log("创建出库单") + @ApiOperation("创建出库单") + public ResponseEntity create(@RequestBody JSONObject whereJson){ + iStIvtIostorinvCpOutService.create(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/update") + @Log("修改出库单") + @ApiOperation("修改出库单") + public ResponseEntity update(@RequestBody JSONObject whereJson){ + iStIvtIostorinvCpOutService.update(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/delete") + @Log("删除出库单") + @ApiOperation("删除出库单") + public ResponseEntity delete(@RequestBody Long[] ids){ + iStIvtIostorinvCpOutService.delete(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/getIosInvDtl") + @Log("获取明细") + @ApiOperation("获取明细") + public ResponseEntity getIosInvDtl(@RequestBody JSONObject whereJson){ + return new ResponseEntity<>(iStIvtIostorinvCpOutService.getIosInvDtl(whereJson),HttpStatus.OK); + } + + @PostMapping("/getIosInvDis") + @Log("获取分配明细") + @ApiOperation("获取明细") + public ResponseEntity getIosInvDis(@RequestBody JSONObject whereJson){ + return new ResponseEntity<>(iStIvtIostorinvCpOutService.getIosInvDis(whereJson),HttpStatus.OK); + } + + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpOutService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpOutService.java new file mode 100644 index 00000000..7361207f --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/IStIvtIostorinvCpOutService.java @@ -0,0 +1,86 @@ +package org.nl.wms.storage_manage.productmanage.service.iostorInv; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.common.domain.query.PageQuery; +import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.StIvtIostorinvCp; +import org.nl.wms.storage_manage.productmanage.service.iostorInv.dto.IostorInvQuery; + +import java.util.List; + +/** + *

+ * 出库单主表 服务类 + *

+ * + * @author generator + * @since 2023-05-04 + */ +public interface IStIvtIostorinvCpOutService extends IService { + + /** + * 分页查询 + * @param query,page / + * @return JSONObject + */ + Object pageQuery(IostorInvQuery query, PageQuery page); + + /** + * 创建 + * @param form / + */ + void create(JSONObject form); + + /** + * 更新相关联的表 + * @param form / + */ + void update(JSONObject form); + + /** + * 查询出出库单明细 + * @param whereJson + * { + * "bill_code": 单据号 + * "iostorinv_id": 主表标识 + * } + * @return List + * { + * "明细表所有字段" + * "material_code": 物料编码 + * "material_name": 物料名称 + * "material_spec": 物料批次 + * } + */ + List getIosInvDtl(JSONObject whereJson); + + /** + * 查询出出库单分配明细 + * @param whereJson + * { + * "iostorinvdtl_id": 明细表标识 + * "iostorinv_id": 主表标识 + * } + * + * @return List + * { + * "分配表所有字段" + * "bucketunique":箱号 + * "qty": 数量 + * "material_code": 物料编码 + * "material_name": 物料名称 + * "material_spec": 物料批次 + * } + */ + List getIosInvDis(JSONObject whereJson); + + /** + * 删除 + * @param ids + * { + * 主表id.. + * } + */ + void delete(Long[] ids); + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpOutServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpOutServiceImpl.java new file mode 100644 index 00000000..464f5718 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpOutServiceImpl.java @@ -0,0 +1,275 @@ +package org.nl.wms.storage_manage.productmanage.service.iostorInv.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import io.jsonwebtoken.lang.Assert; +import org.jetbrains.annotations.NotNull; +import org.nl.common.TableDataInfo; +import org.nl.common.domain.query.PageQuery; +import org.nl.common.publish.BussEventMulticaster; +import org.nl.common.publish.event.PointEvent; +import org.nl.common.utils.IdUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; +import org.nl.wms.masterdata_manage.service.vehicle.IMdPbBucketrecordService; +import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleextService; +import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleinfoService; +import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbBucketrecord; +import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleext; +import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleinfo; +import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtBsrealstorattrService; +import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService; +import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtBsrealstorattr; +import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr; +import org.nl.wms.product_manage.sch.manage.TaskStatusEnum; +import org.nl.wms.scheduler_manage.service.point.ISchBasePointService; +import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint; +import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService; +import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask; +import org.nl.wms.storage_manage.CHANGE_BILL_TYPE_ENUM; +import org.nl.wms.storage_manage.IOSEnum; +import org.nl.wms.storage_manage.productmanage.service.iostorInv.*; +import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.StIvtIostorinvCp; +import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.StIvtIostorinvdisCp; +import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.StIvtIostorinvdisdtlCp; +import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.StIvtIostorinvdtlCp; +import org.nl.wms.storage_manage.productmanage.service.iostorInv.dao.mapper.StIvtIostorinvCpMapper; +import org.nl.wms.storage_manage.productmanage.service.iostorInv.dto.IostorInvQuery; +import org.nl.wms.storage_manage.productmanage.service.structIvt.IStIvtStructivtCpService; +import org.nl.wms.storage_manage.productmanage.util.ChangeIvtUtil; +import org.nl.wms.storage_manage.productmanage.util.DivRuleCpService; +import org.nl.wms.storage_manage.productmanage.util.RuleUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; +import java.util.stream.Collectors; + +/** + *

+ * 出库单主表 服务实现类 + *

+ * + * @author generator + * @since 2023-05-04 + */ +@Service +public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl implements IStIvtIostorinvCpOutService { + + @Autowired + protected IStIvtIostorinvdtlCpService iostorinvdtlCpService; // 成品出入库明细表服务 + + @Autowired + protected IStIvtIostorinvdisCpService iostorinvdisCpService; // 成品出入库分配表服务 + + @Autowired + protected IStIvtIostorinvdisdtlCpService iStIvtIostorinvdisdtlCpService; // 成品出入库分配明细表服务 + + @Autowired + protected IStIvtBsrealstorattrService stIvtBsrealstorattrService; // 实物属性表表服务 + + @Autowired + protected IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService; // 载具信息表服务 + + @Autowired + protected IMdPbStoragevehicleextService iMdPbStoragevehicleextService; // 载具扩展属性信息表服务 + + @Autowired + protected DivRuleCpService divRuleCpService; // 成品分配规则服务类 + + @Autowired + protected IStIvtStructattrService iStIvtStructattrService; // 仓位属性服务 + + @Autowired + private ISchBaseTaskService iSchBaseTaskService; // 任务表服务 + + @Autowired + private ISchBasePointService iSchBasePointService; // 点位服务 + + @Autowired + private IStIvtStructivtCpService iStIvtStructivtCpService; // 库存服务 + + @Autowired + protected IMdPbBucketrecordService iMdPbBucketrecordService; // 包装箱记录表服务 + + @Override + public Object pageQuery(IostorInvQuery query, PageQuery page) { + // 查询条件 + query.setIo_type(IOSEnum.IO_TYPE.code("出库")); + page.setSort("bill_code,DESC"); + + // 分页查询 + Page pageQuery = this.page(page.build(), query.build()); + TableDataInfo build = TableDataInfo.build(pageQuery); + + return build; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(JSONObject form) { + + JSONArray rows = form.getJSONArray("tableData"); + if (ObjectUtil.isEmpty(rows)) throw new BadRequestException("请求参数不能为空"); + + // 调用主表 插入/更新方法 + StIvtIostorinvCp stIvtIostorinvCp = packageMstForm(new StIvtIostorinvCp(), form, false); + // 插入主表 + this.save(stIvtIostorinvCp); + + // 调用明细表 插入/更新方法 + iostorinvdtlCpService.create(rows, stIvtIostorinvCp.getIostorinv_id()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(JSONObject form) { + + JSONArray rows = form.getJSONArray("tableData"); + if (ObjectUtil.isEmpty(rows)) throw new BadRequestException("明细不能为空"); + + StIvtIostorinvCp iostorinvCp = this.getOne(new QueryWrapper().eq("iostorinv_id", form.getString("iostorinv_id"))); + packageMstForm(iostorinvCp,form,true); + + //创建明细 + iostorinvdtlCpService.create(rows, iostorinvCp.getIostorinv_id()); + // 更新主表 + this.updateById(iostorinvCp); + } + + + @Override + public List getIosInvDtl(JSONObject whereJson) { + // 查询主表明细 + List maps = iostorinvdtlCpService.queryInvDtlByInv(whereJson); + return maps; + } + + @Override + public List getIosInvDis(JSONObject whereJson) { + + // 查询分配表 + List maps = iostorinvdisCpService.queryInvDisByInvdtl(whereJson); + return maps; + + } + + + @Override + public void delete(Long[] ids) { + + for (Long id : ids) { + StIvtIostorinvCp dao = this.getOne(new QueryWrapper().eq("iostorinv_id", id)); + dao.setIs_delete(true); + + this.updateById(dao); + } + } + + + @NotNull + private StIvtIostorinvCp packageMstForm(StIvtIostorinvCp stIvtIostorinvCp,JSONObject whereJson,Boolean isUpdate) { + JSONArray rows = whereJson.getJSONArray("tableData"); + if (!isUpdate){ + // 新增 + stIvtIostorinvCp.setIostorinv_id(IdUtil.getStringId()); + stIvtIostorinvCp.setBill_code(CodeUtil.getNewCode("IO_CODE")); + stIvtIostorinvCp.setIo_type(IOSEnum.IO_TYPE.code("出库")); + stIvtIostorinvCp.setBuss_type(whereJson.getString("bill_type")); + stIvtIostorinvCp.setBill_type(stIvtIostorinvCp.getBuss_type()); + stIvtIostorinvCp.setBill_status(IOSEnum.BILL_STATUS.code("生成")); + stIvtIostorinvCp.setCreate_id(SecurityUtils.getCurrentUserId()); + stIvtIostorinvCp.setCreate_name(SecurityUtils.getCurrentNickName()); + stIvtIostorinvCp.setCreate_time(new Date()); + stIvtIostorinvCp.setIs_delete(false); + // TODO 暂时写死 + stIvtIostorinvCp.setSysdeptid("111"); + stIvtIostorinvCp.setSyscompanyid("111"); + }else { + + // 修改 + stIvtIostorinvCp.setUpdate_id(SecurityUtils.getCurrentUserId()); + stIvtIostorinvCp.setUpdate_name(SecurityUtils.getCurrentNickName()); + stIvtIostorinvCp.setUpdate_time(new Date()); + } + + stIvtIostorinvCp.setBiz_date(whereJson.getString("biz_date").substring(0,10)); + // 获取仓库信息 + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.lambda() + .eq(StIvtBsrealstorattr::getStor_id,whereJson.getString("stor_id")) + .eq(StIvtBsrealstorattr::getIs_used, true); + + StIvtBsrealstorattr bsrealDao = stIvtBsrealstorattrService.getOne(wrapper); + if (ObjectUtil.isEmpty(bsrealDao)) throw new BadRequestException("仓库不存在或未启用!"); + + stIvtIostorinvCp.setStor_id(bsrealDao.getStor_id()); + stIvtIostorinvCp.setStor_code(bsrealDao.getStor_code()); + stIvtIostorinvCp.setStor_name(bsrealDao.getStor_name()); + stIvtIostorinvCp.setTotal_qty(whereJson.getBigDecimal("total_qty")); + stIvtIostorinvCp.setDetail_count(rows.size()); + stIvtIostorinvCp.setRemark(whereJson.getString("remark")); + + return stIvtIostorinvCp; + } + + @NotNull + public void updateMst(String iostorinv_id) { + /* + 更新主表 + */ + + StIvtIostorinvCp mstDao = this.baseMapper.selectOne( + new QueryWrapper().lambda() + .eq(StIvtIostorinvCp::getIostorinv_id, iostorinv_id) + ); + mstDao.setUpdate_id(SecurityUtils.getCurrentUserId()); + mstDao.setUpdate_name(SecurityUtils.getCurrentNickName()); + mstDao.setUpdate_time(new Date()); + mstDao.setDis_id(SecurityUtils.getCurrentUserId()); + mstDao.setDis_name(SecurityUtils.getCurrentNickName()); + mstDao.setDis_time(DateUtil.now()); + + // 查询主表下所有明细 + List dtlDaoList = iostorinvdtlCpService.list( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdtlCp::getIostorinv_id, iostorinv_id) + ); + + // 判断是否都为分配完 + boolean is_true = dtlDaoList + .stream() + .allMatch(row -> row.getBill_status().equals(IOSEnum.BILL_STATUS.code("分配完"))); + + if (is_true) { + // 更新主表为分配完 + mstDao.setBill_status(IOSEnum.BILL_STATUS.code("分配完")); + } else { + // 更新主表为分配中 + mstDao.setBill_status(IOSEnum.BILL_STATUS.code("分配中")); + } + + // 判断是否为生成 + boolean is_create = dtlDaoList + .stream() + .allMatch(row -> row.getBill_status().equals(IOSEnum.BILL_STATUS.code("生成"))); + + if (is_create) mstDao.setBill_status(IOSEnum.BILL_STATUS.code("生成")); + + this.updateById(mstDao); + } + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java index 72586305..67644810 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/iostorInv/impl/StIvtIostorinvCpServiceImpl.java @@ -389,8 +389,10 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl { * ivt_level:库存等级 * change_qty:变动数量 * change_type:变动类型 + * sale_id: 生产订单标识 * } */ void UpdateIvt(JSONObject json); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/impl/StIvtStructivtCpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/impl/StIvtStructivtCpServiceImpl.java index 284bfffb..f92b489d 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/impl/StIvtStructivtCpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/impl/StIvtStructivtCpServiceImpl.java @@ -101,6 +101,7 @@ public class StIvtStructivtCpServiceImpl extends ServiceImpl - + - + @@ -396,21 +396,21 @@ - + - - - + + +