From 415b980c517178348fce8ba8118b62e5dc8527db Mon Sep 17 00:00:00 2001 From: jiaoliming Date: Wed, 19 Jul 2023 18:15:12 +0800 Subject: [PATCH 1/6] =?UTF-8?q?add=20:=20=E6=B8=85=E6=B4=97=E5=90=8E?= =?UTF-8?q?=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: jiaoliming --- .../java/org/nl/acs/acsEnum/StatusEnum.java | 2 +- .../org/nl/acs/agv/server/NDCAgvService.java | 10 +- .../agv/server/impl/NDCAgvServiceImpl.java | 32 ++ .../auto/run/NDCSocketConnectionAutoRun.java | 2 + .../service/impl/DeviceServiceImpl.java | 4 +- .../HailiangCleaningFeedingLineDriver.java | 117 +++++- .../ItemProtocol.java | 4 +- .../HailiangCleaningPutLineDeviceDriver.java | 9 +- .../EalingMachineDeviceDriver.java | 17 +- .../HailiangEngravingInDeviceDriver.java | 28 +- .../HailiangPackerStationDeviceDriver.java | 21 +- .../hailiang_packer_station/ItemProtocol.java | 2 +- .../HailiangSpecialDeviceDriver.java | 2 +- .../UnboxingMachineDeviceDriver.java | 2 +- .../acs/ext/wms/rest/WmsToAcsController.java | 47 +++ .../acs/ext/wms/service/AcsToWmsService.java | 8 +- .../acs/ext/wms/service/WmsToAcsService.java | 54 +++ .../wms/service/impl/AcsToWmsServiceImpl.java | 27 ++ .../wms/service/impl/WmsToAcsServiceImpl.java | 382 +++++++++++++++++- .../service/impl/InstructionServiceImpl.java | 7 +- .../impl/ProduceshiftorderServiceImpl.java | 9 + 21 files changed, 730 insertions(+), 56 deletions(-) diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/acsEnum/StatusEnum.java b/wcs/nladmin-system/src/main/java/org/nl/acs/acsEnum/StatusEnum.java index 7967eb74..bd0b4afb 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/acsEnum/StatusEnum.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/acsEnum/StatusEnum.java @@ -50,7 +50,7 @@ public enum StatusEnum { KZ_EMPTY_REQ("4", "叫空框请求(刻字)", ""), BZ_FULL_REQ("5", "叫满框请求(包装)", ""), BZ_EMPTY_REQ("6", "送空框请求(包装)", ""), - QX_LACK_REQ("7", "清洗机缺料请求", ""), + QX_LACK_REQ("7", "清洗机上料请求", ""), QX_FULL_REQ("8", "清洗机满料请求", ""), QXXL_FULL_REQ("9", "取满框请求(清洗下料)", ""), QXXL_EMPTY_REQ("10", "叫空框请求(清洗下料)", ""), diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/agv/server/NDCAgvService.java b/wcs/nladmin-system/src/main/java/org/nl/acs/agv/server/NDCAgvService.java index 0a776412..e12db06c 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/agv/server/NDCAgvService.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/agv/server/NDCAgvService.java @@ -14,13 +14,21 @@ public interface NDCAgvService { Map findAllAgvFromCache(); /** - * 删除NDC任务 + * 删除NDC任务(诺宝) * * @param inst * @throws Exception */ public void deleteAgvInstToNDC(Instruction inst) throws Exception; + /** + * 删除NDC任务(叉车) + * + * @param inst + * @throws Exception + */ + public void deleteAgvOneInstToNDC(Instruction inst) throws Exception; + /** * 下发任务 * diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java b/wcs/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java index b7b9a15e..6ef48991 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/agv/server/impl/NDCAgvServiceImpl.java @@ -66,6 +66,38 @@ public class NDCAgvServiceImpl implements NDCAgvService { } + @LokiLog(type = LokiLogType.AGV) + @Override + public void deleteAgvOneInstToNDC(Instruction inst) throws Exception { + if (StrUtil.equals(paramService.findByCode(AcsConfig.FORKAGV).getValue(), "1")) { + int index = Integer.parseInt(inst.getAgv_jobno()); + + byte indexhigh = (byte) IntToHexHigh(index); + byte indexlow = (byte) IntToHexLow(index); + + String str = "十进制下发:"; + String str1 = "十六进制下发:"; + str += "index:" + index; + str1 += "ikey:" + hexToString(indexhigh & 0xFF) + hexToString(indexlow & 0xFF); + System.out.println(str); + System.out.println(str1); + + byte[] b = new byte[]{(byte) 0X87, (byte) 0XCD, + (byte) 0X00, (byte) 0X08, + (byte) 0X00, (byte) 0X06, + (byte) 0X00, (byte) 0X01, + (byte) 0X00, (byte) 0X6E, + (byte) 0X00, (byte) 0X02, + (byte) indexhigh, (byte) indexlow, + }; + log.info("下发删除AGV指令--{}", Bytes2HexString(b)); + if (ObjectUtil.isNotEmpty(b)) { + OneNDCSocketConnectionAutoRun.write(b); + System.out.println("下发删除agv指令数据:" + Bytes2HexString(b)); + } + } + + } @LokiLog(type = LokiLogType.AGV) @Override 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 92d6a46a..ce64f573 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 @@ -69,6 +69,8 @@ public class NDCSocketConnectionAutoRun extends AbstractAutoRunnable { String ip = paramService.findByCode(AcsConfig.AGVURL).getValue(); int port = Integer.parseInt(paramService.findByCode(AcsConfig.AGVPORT).getValue()); socket = new Socket(ip, port); + //加上超时时间5秒 +// socket.setSoTimeout(5000); byte[] bytes = new byte[256]; dos = new DataOutputStream(socket.getOutputStream()); dis = new DataInputStream(socket.getInputStream()); diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java index fb9a7342..8a8d5fd0 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device/service/impl/DeviceServiceImpl.java @@ -631,7 +631,9 @@ public class DeviceServiceImpl implements DeviceService, ApplicationAutoInitial celldto.setX(formatNum(x)); celldto.setY(formatNum(i)); celldto.setZ(formatNum(j)); - //celldto.setAddress(Integer.parseInt(CodeUtil.getNewCode("NDCADDRESS_NO"))); +// celldto.setAddress(Integer.parseInt(CodeUtil.getNewCode("NDCADDRESS_NO"))); + //临时生成货位用 + celldto.setAddress(Integer.parseInt("3"+device_code.substring(device_code.length()-1)+formatNum(i)+formatNum(j).substring(formatNum(j).length()-1))); celldto.setCreate_by("init"); // celldto.setCreate_time(SecurityUtils.getCurrentUsername()); celldto.setCreate_time(DateUtil.now()); diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_feeding_line/HailiangCleaningFeedingLineDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_feeding_line/HailiangCleaningFeedingLineDriver.java index 03fe053a..e832302c 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_feeding_line/HailiangCleaningFeedingLineDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_feeding_line/HailiangCleaningFeedingLineDriver.java @@ -73,6 +73,9 @@ public class HailiangCleaningFeedingLineDriver extends AbstractOpcDeviceDriver i int error = 0; //上料批次号 int in_pcsn = 0; + //上料命令确认完毕 + int to_in_confirm_finish = 0; + int last_mode = 0; int last_is_open = 0; @@ -82,6 +85,7 @@ public class HailiangCleaningFeedingLineDriver extends AbstractOpcDeviceDriver i int last_allowed_in = 0; int last_error = 0; int last_in_pcsn = 0; + int last_to_in_confirm_finish = 0; Boolean isonline = true; String message = null; @@ -118,6 +122,7 @@ public class HailiangCleaningFeedingLineDriver extends AbstractOpcDeviceDriver i allowed_in = this.itemProtocol.getItem_allowed_in(); error = this.itemProtocol.getItem_error(); in_pcsn = this.itemProtocol.getItem_in_pcsn(); + to_in_confirm_finish = this.itemProtocol.getItem_to_in_confirm_finish(); if (mode != last_mode) { logServer.deviceExecuteLog(this.device_code, "", "", "信号mode:" + last_mode + "->" + mode); } @@ -200,22 +205,36 @@ public class HailiangCleaningFeedingLineDriver extends AbstractOpcDeviceDriver i } //反馈mes清洗上料完成 - if (mode == 1 && task_finish == 1 && !requireSucess) { - boolean flag = feedMesTaskClear(in_pcsn); - this.noFeedMessage = null; +// if (mode == 1 && task_finish == 1 && !requireSucess) { +// boolean flag = feedMesTaskClear(in_pcsn); +// this.noFeedMessage = null; +// if (flag) { +// this.message = "反馈清洗上料完成成功"; +// } +// } else { +// if (task_finish == 1) { +// String notFeedMessage = "未反馈mes清洗上料完成原因:"; +// if (mode != 1) { +// notFeedMessage += ""; +// } +//// if (requireSucess) { +//// notFeedMessage += "请求标记未复位,"; +//// } +// this.noFeedMessage = this.replace(notFeedMessage); +// } +// } + + if (mode == 1 && task_finish == 1 ) { + boolean flag = washTask(in_pcsn); if (flag) { this.message = "反馈清洗上料完成成功"; } - } else { - if (task_finish == 1) { - String notFeedMessage = "未反馈mes清洗上料完成原因:"; - if (mode != 1) { - notFeedMessage += ""; - } - if (requireSucess) { - notFeedMessage += "请求标记未复位,"; - } - this.noFeedMessage = this.replace(notFeedMessage); + } + + if (mode == 1 && to_in_confirm_finish == 1 ) { + boolean flag = washTaskRun(in_pcsn); + if (flag) { + this.message = "反馈清洗上料执行中"; } } } @@ -253,7 +272,7 @@ public class HailiangCleaningFeedingLineDriver extends AbstractOpcDeviceDriver i //下发储料仓去皮 hailiangCleaningMachineStorageStationDeviceDriver.writing("to_peel","1"); //下发称重 - hailiangCleaningMachineStorageStationDeviceDriver.writing("to_open_weight","1"); +// hailiangCleaningMachineStorageStationDeviceDriver.writing("to_open_weight","1"); } }); //修改工单状态为执行中 @@ -344,6 +363,70 @@ public class HailiangCleaningFeedingLineDriver extends AbstractOpcDeviceDriver i // } } + /** + * 上料完成以后反馈mes 上料设备号 + */ + private boolean washTask(int in_pcsn) { + ProduceshiftorderDto dto = produceshiftorderService.findOrderByDeviceCode(this.getDevice_code()); + if (dto != null) { + if (!StrUtil.equals(dto.getOrder_code(),String.valueOf(in_pcsn))){ + return false; + } + this.writing("to_confirm_finished", "1"); + String[] in_devices = dto.getIn_devices().split(","); + //上料完成清除储料仓内存中的物料信息 + Arrays.stream(in_devices).forEach(device_code -> { + Device device = deviceAppService.findDeviceByCode(device_code); + if (device.getDeviceDriver() instanceof HailiangCleaningMachineStorageStationDeviceDriver) { + HailiangCleaningMachineStorageStationDeviceDriver hailiangCleaningMachineStorageStationDeviceDriver = (HailiangCleaningMachineStorageStationDeviceDriver) device.getDeviceDriver(); + hailiangCleaningMachineStorageStationDeviceDriver.setMaterial_code(null); + //下发储料仓去皮 + hailiangCleaningMachineStorageStationDeviceDriver.writing("to_peel","1"); + } + }); + //修改工单状态为执行中 + dto.setOrder_status("2"); + produceshiftorderService.update(dto); + // TODO 反馈mes + JSONObject reqParam = new JSONObject(); + reqParam.put("in_pcsn", in_pcsn); + reqParam.put("status", StatusEnum.TASK_FINISH.getCode()); + HttpResponse httpResponse = acsToWmsService.washTask(reqParam); + if (ObjectUtil.isNotEmpty(httpResponse) && httpResponse.getStatus() == 200) { + requireSucess = true; + return true; + } + } + return false; + + } + + /** + * 上料执行中反馈mes + */ + private boolean washTaskRun(int in_pcsn) { + ProduceshiftorderDto dto = produceshiftorderService.findOrderByDeviceCode(this.getDevice_code()); + if (dto != null) { + if (!StrUtil.equals(dto.getOrder_code(),String.valueOf(in_pcsn))){ + return false; + } + + //修改工单状态为执行中 + dto.setOrder_status("1"); + produceshiftorderService.update(dto); + // TODO 反馈mes + JSONObject reqParam = new JSONObject(); + reqParam.put("in_pcsn", in_pcsn); + reqParam.put("status", StatusEnum.TASK_RUNNING.getCode()); + HttpResponse httpResponse = acsToWmsService.washTask(reqParam); + if (ObjectUtil.isNotEmpty(httpResponse) && httpResponse.getStatus() == 200) { + requireSucess = true; + return true; + } + } + return false; + + } /** * 获取设备监控信息 @@ -393,7 +476,7 @@ public class HailiangCleaningFeedingLineDriver extends AbstractOpcDeviceDriver i */ @Override public void issuedOrderInfo(ProduceshiftorderDto dto) { - HailiangCleaningMachineStorageStationDeviceDriver hailiangCleaningMachineStorageStationDeviceDriver; + String[] in_devices = dto.getIn_devices().split(","); //上料储料仓总重量 int weightSum = 0; @@ -404,7 +487,7 @@ public class HailiangCleaningFeedingLineDriver extends AbstractOpcDeviceDriver i String in_device = in_devices[i]; Device device = deviceAppService.findDeviceByCode(in_device); if (device != null) { - hailiangCleaningMachineStorageStationDeviceDriver = (HailiangCleaningMachineStorageStationDeviceDriver) device.getDeviceDriver(); + HailiangCleaningMachineStorageStationDeviceDriver hailiangCleaningMachineStorageStationDeviceDriver = (HailiangCleaningMachineStorageStationDeviceDriver) device.getDeviceDriver(); weightSum += hailiangCleaningMachineStorageStationDeviceDriver.getSilo_weight(); qtySum += hailiangCleaningMachineStorageStationDeviceDriver.getFull_number(); hailiangCleaningMachineStorageStationDeviceDriver.writing("to_feeding", "1"); @@ -412,7 +495,7 @@ public class HailiangCleaningFeedingLineDriver extends AbstractOpcDeviceDriver i } //下发电气信号 Map map = new LinkedHashMap<>(); - map.put("to_pcsn",dto.getOrder_id());//下发批次号,暂时用工单号 + map.put("to_pcsn",dto.getOrder_code());//下发批次号,暂时用工单号 map.put("to_all_num", String.valueOf(qtySum)); map.put("to_all_weight", String.valueOf(weightSum)); map.put("to_in_confirm_finish", "1"); diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_feeding_line/ItemProtocol.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_feeding_line/ItemProtocol.java index d991a5c9..d7b08d01 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_feeding_line/ItemProtocol.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_feeding_line/ItemProtocol.java @@ -69,7 +69,9 @@ public class ItemProtocol { public int getItem_task_finish() { return this.getOpcIntegerValue(item_task_finish); } - + public int getItem_to_in_confirm_finish() { + return this.getOpcIntegerValue(item_to_in_confirm_finish); + } public int getItem_allowed_in() { return this.getOpcIntegerValue(item_allowed_in); } diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_put_line/HailiangCleaningPutLineDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_put_line/HailiangCleaningPutLineDeviceDriver.java index bf946b5a..88d108bd 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_put_line/HailiangCleaningPutLineDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_put_line/HailiangCleaningPutLineDeviceDriver.java @@ -285,7 +285,7 @@ public class HailiangCleaningPutLineDeviceDriver extends AbstractOpcDeviceDriver } } //工作模式联机、强制搬出请求 就申请agv任务 - if (mode == 1 && empty_req == 1 && put_line_ready ==0 && !requireSucess) { + if (mode == 1 && compel_full_req == 1 && put_line_ready ==0 && !requireSucess) { boolean flag = apply_task(StatusEnum.QXXL_COMPEL_REQ.getCode()); this.noApplyTaskMessage = null; if (flag) { @@ -444,9 +444,10 @@ public class HailiangCleaningPutLineDeviceDriver extends AbstractOpcDeviceDriver reqParam.put("type", code); reqParam.put("device_code", this.getDevice_code()); reqParam.put("in_pcsn", this.getIn_pcsn()); - reqParam.put("barcode", this.getBarcode()); - reqParam.put("full_weight", this.getFull_weight()); - reqParam.put("all_num",this.getAll_num()); + reqParam.put("workorder_code", this.getIn_pcsn()); + reqParam.put("vehicle_code", this.getBarcode()); + reqParam.put("weight", this.getFull_weight()); + reqParam.put("qty",this.getAll_num()); HttpResponse httpResponse = acsToWmsService.applyTaskToWms(reqParam); if (ObjectUtil.isNotEmpty(httpResponse) && httpResponse.getStatus() == 200) { JSONObject resp = JSONObject.parseObject(httpResponse.body()); diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_ealing_machine/EalingMachineDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_ealing_machine/EalingMachineDeviceDriver.java index b20edf32..a0d8f1e8 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_ealing_machine/EalingMachineDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_ealing_machine/EalingMachineDeviceDriver.java @@ -259,22 +259,25 @@ public class EalingMachineDeviceDriver extends AbstractOpcDeviceDriver implement public void issuedOrderInfo(ProduceshiftorderDto dto) { EalingOrderDto ealingOrderDto = dto.getEalingOrderDto(); if (ObjectUtil.isNotEmpty(ealingOrderDto)) { - String x = "0"; - String y = "0"; - String[] xys = ealingOrderDto.getX_y().split(","); - if (xys.length == 2) { - x = xys[0]; - y = xys[1]; - } Map map = new LinkedHashMap<>(); map.put("to_clear", "1"); map.put("to_order", ealingOrderDto.getOrder_code()); map.put("to_order_box_num", ealingOrderDto.getOrder_box_num()); map.put("to_order_bag_num", ealingOrderDto.getOrder_bag_num()); +// map.put("to_bag_num_of_box", ealingOrderDto.getBag_num_of_box()); +// map.put("to_one_box_weight", ealingOrderDto.getOne_box_weight()); +// map.put("to_one_bag_weight", ealingOrderDto.getOne_bag_weight()); map.put("to_template_no", ealingOrderDto.getTemplate_no()); //模板号大于100 再下发这些信息 if (StrUtil.isNotEmpty(ealingOrderDto.getTemplate_no()) && Integer.parseInt(ealingOrderDto.getTemplate_no()) > 100) { + String x = "0"; + String y = "0"; + String[] xys = ealingOrderDto.getX_y().split(","); + if (xys.length == 2) { + x = xys[0]; + y = xys[1]; + } map.put("to_x" + x, x); map.put("to_y" + y, y); map.put("to_bag_length", ealingOrderDto.getBag_length()); diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_engraving_in/HailiangEngravingInDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_engraving_in/HailiangEngravingInDeviceDriver.java index b1e42612..30a97f39 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_engraving_in/HailiangEngravingInDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_engraving_in/HailiangEngravingInDeviceDriver.java @@ -482,7 +482,9 @@ public class HailiangEngravingInDeviceDriver extends AbstractOpcDeviceDriver imp //到达取货点 if (agvphase == 0x03) { - if (ObjectUtil.isNotEmpty(inst) && gd_move == 1) { + logServer.deviceExecuteLog(this.device_code, "", inst.getInstruction_code(), "刻字上料PS20上报到达取货点:" + ",inst == null :" + ObjectUtil.isEmpty(inst)); +// if (gd_move == 1 && ObjectUtil.isNotEmpty(inst)) { + if (ObjectUtil.isNotEmpty(inst)) { inst.setExecute_status(InstActionEnum.EXECUTE_TO_GET.getCode()); instructionService.update(inst); byte[] data = agvService.sendAgvOneModeInst(agvphase, index, 0); @@ -505,7 +507,8 @@ public class HailiangEngravingInDeviceDriver extends AbstractOpcDeviceDriver imp //取货完成 if (agvphase == 0x05) { - if (ObjectUtil.isNotEmpty(inst) && gd_move == 0) { +// if (ObjectUtil.isNotEmpty(inst) && gd_move == 0) { + if (ObjectUtil.isNotEmpty(inst)) { inst.setExecute_status(InstActionEnum.EXECUTE_GET_FINISH.getCode()); instructionService.update(inst); byte[] data = agvService.sendAgvOneModeInst(agvphase, index, 0); @@ -526,8 +529,11 @@ public class HailiangEngravingInDeviceDriver extends AbstractOpcDeviceDriver imp } } + //到达放货点 if (agvphase == 0x07) { - if (ObjectUtil.isNotEmpty(inst) && gd_move == 0) { + logServer.deviceExecuteLog(this.device_code, "", inst.getInstruction_code(), "刻字上料PS20上报到达放货点:" + ",inst == null :" + ObjectUtil.isEmpty(inst)); +// if (ObjectUtil.isNotEmpty(inst) && gd_move == 0) { + if (ObjectUtil.isNotEmpty(inst)) { inst.setExecute_status(InstActionEnum.EXECUTE_TO_PUT_FALL_SEND_FULL.getCode()); instructionService.update(inst); byte[] data = agvService.sendAgvOneModeInst(agvphase, index, 0); @@ -548,13 +554,15 @@ public class HailiangEngravingInDeviceDriver extends AbstractOpcDeviceDriver imp } } + //放货完成 if (agvphase == 0x09) { - if (ObjectUtil.isNotEmpty(inst) && mode == 1 && allow_put == 1) { +// if (ObjectUtil.isNotEmpty(inst) && mode == 1 && allow_put == 1) { + if (ObjectUtil.isNotEmpty(inst)) { //放框完成 writing("to_agv_put_finish", "1"); - if (empty_req == 1){ +// if (empty_req == 1){ //判断电气上报的【剩余实时重量】>10kg 将【上料总重量】写给电气 - if (engraving_storage_now_weight > 10){ +// if (engraving_storage_now_weight > 10000){ writing("to_all_weight", String.valueOf(engraving_all_weight)); inst.setExecute_status(InstActionEnum.EXECUTE_PUT_FALL_SEND_FULL_FINISH.getCode()); instructionService.update(inst); @@ -564,10 +572,10 @@ public class HailiangEngravingInDeviceDriver extends AbstractOpcDeviceDriver imp noFeedAgvMessage = null; message = this.messageInfo(agvphase); logServer.deviceExecuteLog(device_code, "", "", this.messageInfo(agvphase)); - }else { - writing("to_agv_put_finish", "1"); - } - } +// }else { +// writing("to_agv_put_finish", "1"); +// } +// } } else { String notFeedAgvMessage = ""; diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_packer_station/HailiangPackerStationDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_packer_station/HailiangPackerStationDeviceDriver.java index 3714d17e..25f28997 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_packer_station/HailiangPackerStationDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_packer_station/HailiangPackerStationDeviceDriver.java @@ -34,6 +34,7 @@ import org.nl.acs.log.service.DeviceExecuteLogService; import org.nl.acs.monitor.DeviceStageMonitor; import org.nl.acs.opc.Device; import org.nl.acs.order.service.ProduceshiftorderService; +import org.nl.acs.order.service.dto.EalingOrderDto; import org.nl.acs.order.service.dto.ProduceshiftorderDto; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.dto.TaskDto; @@ -586,11 +587,21 @@ public class HailiangPackerStationDeviceDriver extends AbstractOpcDeviceDriver i // if (!this.getItemProtocol().getIsonline()) { // throw new BadRequestException("设备未开机,工单下发失败"); // } - Map map = new LinkedHashMap<>(); - map.put("to_clear", "1"); - map.put("to_order", dto.getOrder_code()); - map.put("to_order_prod_num", String.valueOf(dto.getQty())); - this.writing(map); + EalingOrderDto ealingOrderDto = dto.getEalingOrderDto(); + if (ealingOrderDto != null) { + String box_total_num = ealingOrderDto.getOrder_box_num(); + String bag_total_num = ealingOrderDto.getOrder_bag_num(); + String time = ealingOrderDto.getTime(); + Map map = new LinkedHashMap<>(); + map.put("to_clear", "1"); + map.put("to_order", dto.getOrder_code()); + // map.put("to_order_prod_num", String.valueOf(dto.getQty())); + map.put("to_order_prod_num", bag_total_num);//包装机总包数 + map.put("to_box_total_num", box_total_num);//总箱数 + map.put("to_bag_total_num", bag_total_num);//总袋数 + + this.writing(map); + } } /** diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_packer_station/ItemProtocol.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_packer_station/ItemProtocol.java index afc44a43..61923387 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_packer_station/ItemProtocol.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_packer_station/ItemProtocol.java @@ -253,7 +253,7 @@ public class ItemProtocol { list.add(new ItemDto(item_device_running_time, "包装机设备运转时间(S)", "DB1.D112")); list.add(new ItemDto(item_await_time, "包装机待机时间(S)", "DB1.D116")); list.add(new ItemDto(item_now_up_box_num, "当前装箱数量", "DB1.D124")); - list.add(new ItemDto(item_now_bag_num_of_box, "当前装箱机箱实时袋数量", "DB1.D128")); + list.add(new ItemDto(item_now_bag_num_of_box, "当前箱实时袋数量", "DB1.D128")); list.add(new ItemDto(item_now_bag_num, "当前装箱机袋装的总数量", "DB1.D132")); list.add(new ItemDto(item_now_seal_box_num, "当前封箱数量", "DB1.D136")); list.add(new ItemDto(item_order, "工单号", "DB1.D160")); diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_device/HailiangSpecialDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_device/HailiangSpecialDeviceDriver.java index 9c2f2eb0..34d7294e 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_device/HailiangSpecialDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_special_device/HailiangSpecialDeviceDriver.java @@ -325,7 +325,7 @@ public class HailiangSpecialDeviceDriver extends AbstractOpcDeviceDriver impleme } /** - * 专家暂停 + * 专机暂停 */ @Override public void toStop() { diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_unboxing_machine/UnboxingMachineDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_unboxing_machine/UnboxingMachineDeviceDriver.java index 582b5673..df6d11e7 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_unboxing_machine/UnboxingMachineDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_unboxing_machine/UnboxingMachineDeviceDriver.java @@ -199,7 +199,7 @@ public class UnboxingMachineDeviceDriver extends AbstractOpcDeviceDriver impleme String is_foreward = ealingOrderDto.getIs_foreward(); Map map = new LinkedHashMap<>(); map.put("to_clear", "1"); - map.put("to_is_foreward", is_foreward); + map.put("to_foreward", is_foreward); map.put("to_order_box_num", ealingOrderDto.getOrder_box_num()); map.put("to_order", ealingOrderDto.getOrder_code()); this.writing(map); diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java b/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java index 316533c2..a8710754 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java @@ -128,4 +128,51 @@ public class WmsToAcsController { return new ResponseEntity<>(wmstoacsService.replaceDevice(whereJson), HttpStatus.OK); } + @PostMapping("/putOver") + @Log("余料上完") + @ApiOperation("余料上完") + @SaIgnore + public ResponseEntity putOver(@RequestBody JSONObject param) { + return new ResponseEntity<>(wmstoacsService.putOver(param), HttpStatus.OK); + } + + @PostMapping("/handPour") + @Log("手工倒料") + @ApiOperation("手工倒料") + @SaIgnore + public ResponseEntity handPour(@RequestBody JSONObject param) { + return new ResponseEntity<>(wmstoacsService.handPour(param), HttpStatus.OK); + } + + @PostMapping("/startDischarge") + @Log("开始卸料") + @ApiOperation("开始卸料") + @SaIgnore + public ResponseEntity startDischarge(@RequestBody JSONObject param) { + return new ResponseEntity<>(wmstoacsService.startDischarge(param), HttpStatus.OK); + } + + @PostMapping("/handWeigh") + @Log("手动称重") + @ApiOperation("手动称重") + @SaIgnore + public ResponseEntity handWeigh(@RequestBody JSONObject param) { + return new ResponseEntity<>(wmstoacsService.handWeigh(param), HttpStatus.OK); + } + + @PostMapping("/cleanPut") + @Log("清洗下料") + @ApiOperation("清洗下料") + @SaIgnore + public ResponseEntity cleanPut(@RequestBody JSONObject param) { + return new ResponseEntity<>(wmstoacsService.cleanPut(param), HttpStatus.OK); + } + + @PostMapping("/cleaningIn") + @Log("清洗上料") + @ApiOperation("清洗上料") + @SaIgnore + public ResponseEntity cleaningIn(@RequestBody JSONObject param) { + return new ResponseEntity<>(wmstoacsService.cleaningIn(param), HttpStatus.OK); + } } diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java b/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java index 14bde518..155d242e 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java @@ -162,5 +162,11 @@ public interface AcsToWmsService { HttpResponse shipDeviceUpdate(JSONObject param); ApplyLabelingAndBindingResponse applyLabelingAndBindingRequest(ApplyLabelingAndBindingRequest param); - + /** + * 反馈清洗上料状态 + * + * @param param + * @return + */ + HttpResponse washTask(JSONObject param); } diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java b/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java index e0b59655..20813899 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/WmsToAcsService.java @@ -107,5 +107,59 @@ public interface WmsToAcsService { */ Map queryDeviceDBValue(String whereJson); + /** + * 余料上完 + * + * @param param 条件 + * @return Map + */ + Map putOver(JSONObject param); + /** + * 人工倒料 + * + * @param param 条件 + * @return Map + */ + Map handPour(JSONObject param); + + /** + * 开始卸料 + * + * @param param 条件 + * @return Map + */ + Map startDischarge(JSONObject param); + + /** + * 手动称重 + * + * @param param 条件 + * @return Map + */ + Map handWeigh(JSONObject param); + + /** + * 清洗下料 + * + * @param param 条件 + * @return Map + */ + Map cleanPut(JSONObject param); + + /** + * 刻字上料(mes直接下任务acs,此接口暂未用) + * + * @param param 条件 + * @return Map + */ + Map engravingIn(JSONObject param); + + /** + * 清洗上料 + * + * @param param 条件 + * @return Map + */ + Map cleaningIn(JSONObject param); } diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java b/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java index cc8c5021..a54da89b 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java @@ -689,4 +689,31 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } return null; } + + @Override + public HttpResponse washTask(JSONObject param) { + try { + MDC.put(log_file_type, log_type); + if (StrUtil.equals(paramService.findByCode(AcsConfig.HASWMS).getValue(), "1")) { + log.info("acs开始向mes反馈清洗上料状态,请求参数:{}", JSON.toJSONString(param)); + String wmsurl = paramService.findByCode(AcsConfig.WMSURL).getValue(); + AddressDto addressDto = addressService.findByCode("washTask"); + String methods_url = addressDto.getMethods_url(); + String url = wmsurl + methods_url; + HttpResponse result = null; + try { + result = HttpRequest.post(url) + .body(JSON.toJSONString(param)) + .execute(); + log.info("acs向mes反馈工单状态成功,请求路径:{},请求参数:{},响应参数:{}", url, JSON.toJSONString(param), result.body()); + } catch (Exception e) { + log.error("acs向mes反馈工单状态失败,请求路径:{},请求参数:{},失败原因:{}", url, JSON.toJSONString(param), e.getMessage()); + } + return result; + } + return null; + } finally { + MDC.remove(log_file_type); + } + } } 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 c495ca8c..e742afd7 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 @@ -3,6 +3,7 @@ package org.nl.acs.ext.wms.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -12,9 +13,14 @@ import org.nl.acs.AcsConfig; import org.nl.acs.device.service.DeviceService; import org.nl.acs.device_driver.basedriver.hailiang_one.IssuedDeviceOrderInfo; import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_auto_cache_line.HailiangAutoCacheLineDeviceDriver; +import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_cleaning_feeding_line.HailiangCleaningFeedingLineDriver; +import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_cleaning_machine_storage_station.HailiangCleaningMachineStorageStationDeviceDriver; +import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_cleaning_put_line.HailiangCleaningPutLineDeviceDriver; +import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_engraving_in.HailiangEngravingInDeviceDriver; import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_engraving_machine.HailiangEngravingMachineDeviceDriver; import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_packer_station.HailiangPackerStationDeviceDriver; import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_special_device.HailiangSpecialDeviceDriver; +import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_special_pour_station.HailiangSpecialPourStationDeviceDriver; import org.nl.acs.device_driver.basedriver.standard_autodoor.StandardAutodoorDeviceDriver; import org.nl.acs.device_driver.basedriver.standard_conveyor_control.StandardCoveyorControlDeviceDriver; import org.nl.acs.device_driver.basedriver.standard_conveyor_control_with_plcscanner.StandardCoveyorControlWithPlcScannerDeviceDriver; @@ -29,7 +35,6 @@ import org.nl.acs.instruction.service.InstructionService; import org.nl.acs.instruction.service.dto.Instruction; import org.nl.acs.opc.Device; import org.nl.acs.opc.DeviceAppService; -import org.nl.acs.opc.DeviceExtraManageDto; import org.nl.acs.order.service.ProduceshiftorderService; import org.nl.acs.order.service.dto.EalingOrderDto; import org.nl.acs.order.service.dto.ProduceshiftorderDto; @@ -39,11 +44,11 @@ import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.system.service.ParamService; import org.nl.modules.wql.core.bean.WQLObject; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -156,6 +161,44 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { continue; } } + TaskDto start_device_task = taskService.findByStartCode(start_point_code); + if (start_device_task != null) { + JSONObject json = new JSONObject(); + json.put("task_id", task_id); +// json.put("message", "已存在该设备的任务,设备号:" + start_point_code + ",对应的任务号:" + task_code); + json.put("message", "已提交过任务!请勿重复点击!"); + errArr.add(json); + continue; + } + //刻字上料任务特殊处理 + if (StrUtil.equals(start_point_code,"A1_KZ_SL")) { + Device device = deviceAppService.findDeviceByCode(start_point_code); + HailiangEngravingInDeviceDriver hailiangEngravingInDeviceDriver; + if (device.getDeviceDriver() instanceof HailiangEngravingInDeviceDriver) { + hailiangEngravingInDeviceDriver = (HailiangEngravingInDeviceDriver) device.getDeviceDriver(); + if (hailiangEngravingInDeviceDriver.getGd_move() == 0) { + JSONObject json = new JSONObject(); + json.put("task_id", task_id); + json.put("message", "上面无料框!请核实后再点击按钮!"); + errArr.add(json); + continue; + } + } + } + if (StrUtil.equals(put_point_code,"A1_KZ_SL")) { + Device device = deviceAppService.findDeviceByCode(put_point_code); + HailiangEngravingInDeviceDriver hailiangEngravingInDeviceDriver; + if (device.getDeviceDriver() instanceof HailiangEngravingInDeviceDriver) { + hailiangEngravingInDeviceDriver = (HailiangEngravingInDeviceDriver) device.getDeviceDriver(); + if (hailiangEngravingInDeviceDriver.getGd_move() == 1) { + JSONObject json = new JSONObject(); + json.put("task_id", task_id); + json.put("message", "上面有料框!请核实后再点击按钮!"); + errArr.add(json); + continue; + } + } + } String start_device_code = ""; String next_device_code = ""; @@ -267,7 +310,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { if (ObjectUtil.isNotEmpty(package_ext)) { //是否启用封箱线 is_used_fxx = ObjectUtil.isEmpty(package_ext.get("is_used_fxx")) ? null : package_ext.get("is_used_fxx").toString(); - //拆箱数量 + //拆箱数量() // unboxingOrderDto.setOrder_box_num(ObjectUtil.isEmpty(package_ext.get("demol_num")) ? null : package_ext.get("demol_num").toString()); ealingOrderDto.setOrder_box_num(ObjectUtil.isEmpty(package_ext.get("demol_num")) ? null : package_ext.get("demol_num").toString()); //装箱模版 @@ -276,8 +319,22 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { lane_tray_template= ObjectUtil.isEmpty(package_ext.get("stack_model")) ? null : package_ext.get("stack_model").toString(); //是否正反转 ealingOrderDto.setIs_foreward(ObjectUtil.isEmpty(package_ext.get("is_foreward")) ? null : package_ext.get("is_foreward").toString()); - //袋数 + //总袋数 ealingOrderDto.setOrder_bag_num(ObjectUtil.isEmpty(package_ext.get("order_bag_num")) ? null : package_ext.get("order_bag_num").toString()); + //装箱机设备 + ealing_device_code = ObjectUtil.isEmpty(package_ext.get("ealing_device_code")) ? null : package_ext.get("ealing_device_code").toString(); + //开箱机设备 + unboxing_device_code = ObjectUtil.isEmpty(package_ext.get("unboxing_device_code")) ? null : package_ext.get("unboxing_device_code").toString(); + //封箱机是否自动确认(1:自动确认 2:定时确认 3:人工确认) + ealingOrderDto.setIs_auto_confirm(ObjectUtil.isEmpty(package_ext.get("auto_confirm")) ? null : package_ext.get("auto_confirm").toString()); + //确认时间 + ealingOrderDto.setTime(ObjectUtil.isEmpty(package_ext.get("time")) ? null : package_ext.get("time").toString()); + //每箱袋数 + ealingOrderDto.setBag_num_of_box(ObjectUtil.isEmpty(package_ext.get("one_bag_num")) ? null : package_ext.get("one_bag_num").toString()); + //每箱重量 + ealingOrderDto.setOne_box_weight(ObjectUtil.isEmpty(package_ext.get("demol_weight")) ? null : package_ext.get("demol_weight").toString()); + //每袋重量 + ealingOrderDto.setOne_bag_weight(ObjectUtil.isEmpty(package_ext.get("one_bag_weight")) ? null : package_ext.get("one_bag_weight").toString()); } ealingOrderDto.setOrder_code(workorder_code); @@ -1078,5 +1135,322 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { // return resultJson; return null; } + @Override + public Map putOver(JSONObject param) { + log.info("接收WMS余料上完,下发参数:{}", JSON.toJSONString(param)); + String start_point_code = param.getString("start_point_code"); + String next_point_code = param.getString("next_point_code"); + String weight = param.getString("weight"); + if (StrUtil.isEmpty(start_point_code)) { + throw new BadRequestException("起点号不能为空!"); + } + if (StrUtil.isEmpty(next_point_code)) { + throw new BadRequestException("终点号不能为空!"); + } + if (StrUtil.isEmpty(weight)) { + throw new BadRequestException("下发重量不能为空!"); + } + Device device = deviceAppService.findDeviceByCode(start_point_code); + if (ObjectUtil.isEmpty(device)) { + throw new BadRequestException("未找到对应设备:" + start_point_code); + } + //刻字上料 + HailiangEngravingInDeviceDriver hailiangEngravingInDeviceDriver; + if (device.getDeviceDriver() instanceof HailiangEngravingInDeviceDriver) { + hailiangEngravingInDeviceDriver = (HailiangEngravingInDeviceDriver) device.getDeviceDriver(); + hailiangEngravingInDeviceDriver.writing("to_engraving_sn",next_point_code); + hailiangEngravingInDeviceDriver.writing("to_in_weight",weight); + } + JSONObject resultJson = new JSONObject(); + resultJson.put("status", 200); + resultJson.put("message", "操作成功"); + log.info("接收WMS余料上完成功,响应参数:{}", JSON.toJSONString(resultJson)); + return resultJson; + } + @Override + public Map handPour(JSONObject param) { + log.info("接收WMS人工倒料,下发参数:{}", JSON.toJSONString(param)); + String device_code = param.getString("device_code"); + int qtySum = param.getIntValue("qty"); + if (StrUtil.isEmpty(device_code)) { + throw new BadRequestException("设备号不能为空!"); + } + if (StrUtil.isEmpty(qtySum+"")) { + throw new BadRequestException("下发数量不能为空!"); + } + Device device = deviceAppService.findDeviceByCode(device_code); + if (ObjectUtil.isEmpty(device)) { + throw new BadRequestException("未找到对应设备:" + device_code); + } + //专机倒料 + HailiangSpecialPourStationDeviceDriver hailiangSpecialPourStationDeviceDriver; + if (device.getDeviceDriver() instanceof HailiangSpecialPourStationDeviceDriver) { + hailiangSpecialPourStationDeviceDriver = (HailiangSpecialPourStationDeviceDriver) device.getDeviceDriver(); + qtySum += hailiangSpecialPourStationDeviceDriver.getStorage_stock_num(); + hailiangSpecialPourStationDeviceDriver.writing("to_pour_num",String.valueOf(qtySum)); + } + //清洗机储料仓 + HailiangCleaningMachineStorageStationDeviceDriver hailiangCleaningMachineStorageStationDeviceDriver; + if (device.getDeviceDriver() instanceof HailiangCleaningMachineStorageStationDeviceDriver) { + hailiangCleaningMachineStorageStationDeviceDriver = (HailiangCleaningMachineStorageStationDeviceDriver) device.getDeviceDriver(); + qtySum += hailiangCleaningMachineStorageStationDeviceDriver.getFull_number(); + hailiangCleaningMachineStorageStationDeviceDriver.writing("to_dumping_num",String.valueOf(qtySum)); + //下发储料仓开始称重 + hailiangCleaningMachineStorageStationDeviceDriver.writing("to_open_weight","1"); + //要睡一秒吗 + } + //刻字机上料位(电气是重量) + HailiangEngravingInDeviceDriver hailiangEngravingInDeviceDriver; + if (device.getDeviceDriver() instanceof HailiangEngravingInDeviceDriver) { + hailiangEngravingInDeviceDriver = (HailiangEngravingInDeviceDriver) device.getDeviceDriver(); + qtySum += hailiangEngravingInDeviceDriver.getEngraving_storage_now_weight(); + hailiangEngravingInDeviceDriver.writing("to_in_weight",String.valueOf(qtySum)); + } + + //刻字机倒料位 + HailiangEngravingMachineDeviceDriver hailiangEngravingMachineDeviceDriver; + if (device.getDeviceDriver() instanceof HailiangEngravingMachineDeviceDriver) { + hailiangEngravingMachineDeviceDriver = (HailiangEngravingMachineDeviceDriver) device.getDeviceDriver(); + qtySum += hailiangEngravingMachineDeviceDriver.getLettering_silo_number(); + hailiangEngravingMachineDeviceDriver.writing("to_to_dumping_num",String.valueOf(qtySum)); + } + + JSONObject resultJson = new JSONObject(); + resultJson.put("status", 200); + resultJson.put("message", "操作成功"); + log.info("接收WMS人工倒料成功,响应参数:{}", JSON.toJSONString(resultJson)); + return resultJson; + } + + @Override + public Map startDischarge(JSONObject param) { + log.info("接收WMS开始卸料,下发参数:{}", JSON.toJSONString(param)); + String device_code = param.getString("device_code"); + if (StrUtil.isEmpty(device_code)) { + throw new BadRequestException("设备号不能为空!"); + } + Device device = deviceAppService.findDeviceByCode(device_code); + if (ObjectUtil.isEmpty(device)) { + throw new BadRequestException("未找到对应设备:" + device_code); + } + //刻字上料 + HailiangEngravingInDeviceDriver hailiangEngravingInDeviceDriver; + if (device.getDeviceDriver() instanceof HailiangEngravingInDeviceDriver) { + hailiangEngravingInDeviceDriver = (HailiangEngravingInDeviceDriver) device.getDeviceDriver(); + hailiangEngravingInDeviceDriver.writing("to_agv_put_finish", "1"); + } + JSONObject resultJson = new JSONObject(); + resultJson.put("status", 200); + resultJson.put("message", "操作成功"); + log.info("接收WMS开始卸料成功,响应参数:{}", JSON.toJSONString(resultJson)); + return resultJson; + } + + @Override + public Map handWeigh(JSONObject param) { + log.info("接收WMS人工称重,下发参数:{}", JSON.toJSONString(param)); + String device_code = param.getString("device_code"); + int qtySum = param.getIntValue("qty"); + if (StrUtil.isEmpty(device_code)) { + throw new BadRequestException("设备号不能为空!"); + } + if (StrUtil.isEmpty(qtySum+"")) { + throw new BadRequestException("下发数量不能为空!"); + } + Device device = deviceAppService.findDeviceByCode(device_code); + if (ObjectUtil.isEmpty(device)) { + throw new BadRequestException("未找到对应设备:" + device_code); + } + int weight = 0; + //清洗机储料仓 + HailiangCleaningMachineStorageStationDeviceDriver hailiangCleaningMachineStorageStationDeviceDriver; + if (device.getDeviceDriver() instanceof HailiangCleaningMachineStorageStationDeviceDriver) { + hailiangCleaningMachineStorageStationDeviceDriver = (HailiangCleaningMachineStorageStationDeviceDriver) device.getDeviceDriver(); + qtySum += hailiangCleaningMachineStorageStationDeviceDriver.getFull_number(); + hailiangCleaningMachineStorageStationDeviceDriver.writing("to_dumping_num",String.valueOf(qtySum)); + //下发储料仓开始称重 + hailiangCleaningMachineStorageStationDeviceDriver.writing("to_open_weight","1"); + //下发称重后,读取重量要睡一秒吗 + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + weight = hailiangCleaningMachineStorageStationDeviceDriver.getSilo_weight(); + } + + JSONObject resultJson = new JSONObject(); + resultJson.put("status", 200); + resultJson.put("message", "操作成功"); + resultJson.put("weight",weight); + log.info("接收WMS人工倒料成功,响应参数:{}", JSON.toJSONString(resultJson)); + return resultJson; + } + + @Override + public Map cleanPut(JSONObject param) { + log.info("接收WMS清洗下料,下发参数:{}", JSON.toJSONString(param)); + String device_code = param.getString("device_code"); + if (StrUtil.isEmpty(device_code)) { + throw new BadRequestException("设备号不能为空!"); + } + Device device = deviceAppService.findDeviceByCode(device_code); + if (ObjectUtil.isEmpty(device)) { + throw new BadRequestException("未找到对应设备:" + device_code); + } + JSONObject resultJson = new JSONObject(); + + //清洗下料 + HailiangCleaningPutLineDeviceDriver hailiangCleaningPutLineDeviceDriver; + if (device.getDeviceDriver() instanceof HailiangCleaningMachineStorageStationDeviceDriver) { + hailiangCleaningPutLineDeviceDriver = (HailiangCleaningPutLineDeviceDriver) device.getDeviceDriver(); + resultJson.put("in_pcsn", hailiangCleaningPutLineDeviceDriver.getIn_pcsn()); + resultJson.put("vehicle_code", hailiangCleaningPutLineDeviceDriver.getBarcode()); + resultJson.put("weight", hailiangCleaningPutLineDeviceDriver.getFull_weight()); + } + resultJson.put("status", 200); + resultJson.put("message", "操作成功"); + log.info("接收WMS清洗下料成功,响应参数:{}", JSON.toJSONString(resultJson)); + return resultJson; + } + + @Override + public Map engravingIn(JSONObject param) { + log.info("接收WMS刻字上料,下发参数:{}", JSON.toJSONString(param)); + String device_code = param.getString("device_code"); + if (StrUtil.isEmpty(device_code)) { + throw new BadRequestException("设备号不能为空!"); + } + Device device = deviceAppService.findDeviceByCode(device_code); + if (ObjectUtil.isEmpty(device)) { + throw new BadRequestException("未找到对应设备:" + device_code); + } + JSONObject resultJson = new JSONObject(); + + //清洗下料 + HailiangCleaningPutLineDeviceDriver hailiangCleaningPutLineDeviceDriver; + if (device.getDeviceDriver() instanceof HailiangCleaningMachineStorageStationDeviceDriver) { + hailiangCleaningPutLineDeviceDriver = (HailiangCleaningPutLineDeviceDriver) device.getDeviceDriver(); + resultJson.put("in_pcsn", hailiangCleaningPutLineDeviceDriver.getIn_pcsn()); + resultJson.put("vechile_code", hailiangCleaningPutLineDeviceDriver.getBarcode()); + resultJson.put("weight", hailiangCleaningPutLineDeviceDriver.getFull_weight()); + } + resultJson.put("status", 200); + resultJson.put("message", "操作成功"); + log.info("接收WMS刻字上料成功,响应参数:{}", JSON.toJSONString(resultJson)); + return resultJson; + } + +// @Override +// public Map cleaningIn(JSONObject param) { +// log.info("接收WMS清洗上料,下发参数:{}", JSON.toJSONString(param)); +// String device_code = param.getString("device_code"); +// String in_pcsn = param.getString("in_pcsn"); +// String[] in_devices = param.getString("in_devices").split(","); +// if (StrUtil.isEmpty(device_code)) { +// throw new BadRequestException("设备号不能为空!"); +// } +// Device device = deviceAppService.findDeviceByCode(device_code); +// if (ObjectUtil.isEmpty(device)) { +// throw new BadRequestException("未找到对应清洗上料设备:" + device_code); +// } +// JSONObject resultJson = new JSONObject(); +// //清洗上料 +// HailiangCleaningMachineStorageStationDeviceDriver hailiangCleaningMachineStorageStationDeviceDriver; +// HailiangCleaningFeedingLineDriver hailiangCleaningFeedingLineDriver; +// //上料储料仓总重量 +// int weightSum = 0; +// //上料储料仓总数量 +// int qtySum = 0; +// +// if (device.getDeviceDriver() instanceof HailiangCleaningFeedingLineDriver) { +// hailiangCleaningFeedingLineDriver = (HailiangCleaningFeedingLineDriver) device.getDeviceDriver(); +// if (hailiangCleaningFeedingLineDriver.getMode() == 1 && hailiangCleaningFeedingLineDriver.getIn_ready() == 1 && hailiangCleaningFeedingLineDriver.getAllowed_in() == 1 ) { +// //遍历上料储料仓设备 求重量和数量和下发给清洗上料位 +// for (int i = 0; i < in_devices.length; i++) { +// String in_device = in_devices[i]; +// Device m_device = deviceAppService.findDeviceByCode(in_device); +// if (m_device != null) { +// hailiangCleaningMachineStorageStationDeviceDriver = (HailiangCleaningMachineStorageStationDeviceDriver) m_device.getDeviceDriver(); +// weightSum += hailiangCleaningMachineStorageStationDeviceDriver.getSilo_weight(); +// qtySum += hailiangCleaningMachineStorageStationDeviceDriver.getFull_number(); +// hailiangCleaningMachineStorageStationDeviceDriver.writing("to_feeding", "1"); +// } +// } +// //下发上料位电气信号 +// if (device.getDeviceDriver() instanceof HailiangCleaningFeedingLineDriver) { +// hailiangCleaningFeedingLineDriver = (HailiangCleaningFeedingLineDriver) device.getDeviceDriver(); +// Map map = new LinkedHashMap<>(); +// map.put("to_pcsn",in_pcsn);//下发批次号 +// map.put("to_all_num", String.valueOf(qtySum)); +// map.put("to_all_weight", String.valueOf(weightSum)); +// map.put("to_in_confirm_finish", "1"); +// hailiangCleaningFeedingLineDriver.writing(map); +// //反馈给mes执行中状态 +// JSONObject reqParam = new JSONObject(); +// reqParam.put("in_pcsn", hailiangCleaningFeedingLineDriver.getIn_pcsn()); +// reqParam.put("status", StatusEnum.TASK_RUNNING.getCode()); +//// HttpResponse httpResponse = acsToWmsService.washTask(reqParam); +//// if (ObjectUtil.isNotEmpty(httpResponse) && httpResponse.getStatus() == 200) { +//// this.writing("to_in_confirm_req", "1"); +//// requireSucess = true; +//// return true; +//// } +// } +// }else { +// //光电信号不允许上料 +// +// } +// } +// resultJson.put("status", 200); +// resultJson.put("message", "操作成功"); +// log.info("接收WMS清洗上料成功,响应参数:{}", JSON.toJSONString(resultJson)); +// return resultJson; +// } + @Override + public Map cleaningIn(JSONObject param) { + log.info("接收WMS清洗上料,下发参数:{}", JSON.toJSONString(param)); + String device_code = param.getString("device_code"); + String in_pcsn = param.getString("in_pcsn"); + String in_devices = param.getString("in_devices"); +// String[] in_devices = param.getString("in_devices").split(","); + JSONArray errArr = new JSONArray(); + if (StrUtil.isEmpty(device_code)) { + throw new BadRequestException("设备号不能为空!"); + } + Device device = deviceAppService.findDeviceByCode(device_code); + if (ObjectUtil.isEmpty(device)) { + throw new BadRequestException("未找到对应清洗上料设备:" + device_code); + } + JSONObject resultJson = new JSONObject(); + ProduceshiftorderDto dto = new ProduceshiftorderDto(); + dto.setExt_order_id(in_pcsn); + dto.setOrder_code(in_pcsn); + dto.setQty(BigDecimal.valueOf(999999)); + dto.setMaterial_code("qxsl"); + dto.setDevice_code(device_code); + dto.setIs_needmove("0"); + dto.setIn_devices(in_devices); + dto.setCreate_by("mes"); + try { + produceshiftorderService.create(dto); + } catch (Exception e) { + e.printStackTrace(); + JSONObject json = new JSONObject(); + json.put("in_pcsn", in_pcsn); + json.put("message", e.getMessage()); + errArr.add(json); + } + if (ObjectUtil.isEmpty(errArr)) { + resultJson.put("status", 200); + } else { + resultJson.put("status", 400); + } + resultJson.put("errArr", errArr); + resultJson.put("message", errArr.size() > 0 ? "存在下发未成功的清洗任务!" : "操作成功!"); + resultJson.put("data", new JSONObject()); + log.info("接收wms下发清洗下料,响应参数:{}", JSON.toJSONString(resultJson)); + return resultJson; + } } 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 348b4d67..3f7df84e 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 @@ -1034,7 +1034,12 @@ public class InstructionServiceImpl implements InstructionService, ApplicationAu } else if (StrUtil.equals(paramService.findByCode(AcsConfig.AGVTYPE).getValue(), "2")) { // NDC agv指令不当场取消指令,需要等agv上报 if (!StrUtil.isEmpty(entity.getAgv_jobno())) { - ndcAgvService.deleteAgvInstToNDC(entity); + if (StrUtil.equals(entity.getInstruction_type(),AgvTypeEnum.PS_TYPE_1.getTaskType()) || StrUtil.equals(entity.getInstruction_type(),AgvTypeEnum.PS_TYPE_2.getTaskType()) || StrUtil.equals(entity.getInstruction_type(),AgvTypeEnum.RT_TYPE_1.getTaskType())){ + ndcAgvService.deleteAgvOneInstToNDC(entity); + }else { + ndcAgvService.deleteAgvInstToNDC(entity); + } + } else { flag = true; } diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/order/service/impl/ProduceshiftorderServiceImpl.java b/wcs/nladmin-system/src/main/java/org/nl/acs/order/service/impl/ProduceshiftorderServiceImpl.java index 23dcce1f..e69d5d60 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/order/service/impl/ProduceshiftorderServiceImpl.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/order/service/impl/ProduceshiftorderServiceImpl.java @@ -245,6 +245,15 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService, A } } } + + //码垛机械手(巷道),包装线体 +// if (StrUtil.isNotEmpty(dto.机械手设备号(待mes传))) { + Device md_device = deviceAppService.findDeviceByCode("A1_MDJXS_1"); + if (md_device != null && md_device.getDeviceDriver() instanceof IssuedDeviceOrderInfo) { + issuedDeviceOrderInfo = (IssuedDeviceOrderInfo) md_device.getDeviceDriver(); + issuedDeviceOrderInfo.issuedOrderInfo(dto); + } +// } } JSONObject json = (JSONObject) JSONObject.toJSON(dto); wo.insert(json); From 7e7bbe64baf562168b843fb7edf8baffa4b17bfa Mon Sep 17 00:00:00 2001 From: baoge <751575283@qq.com> Date: Thu, 20 Jul 2023 15:03:45 +0800 Subject: [PATCH 2/6] =?UTF-8?q?add:=E5=A2=9E=E5=8A=A0aps=E7=9A=84Bom?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD=EF=BC=9B?= =?UTF-8?q?rev:=E4=BF=AE=E6=94=B9=E4=B8=80=E4=BA=9Buuid=E6=94=B9=E4=B8=BAi?= =?UTF-8?q?d,optid,optName=E6=94=B9=E4=B8=BAid,name;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/nl/common/domain/entity/BaseDto.java | 2 +- .../org/nl/wms/masterdata_manage/mdme.xls | Bin 79360 -> 79360 bytes .../impl/MdMeMaterialbaseServiceImpl.java | 52 ++- .../impl/SemirealrawmaterialServiceImpl.java | 32 +- .../service/impl/MpsSaleOrderServiceImpl.java | 2 - .../processroute/dao/PdmBiProcessroute.java | 4 +- .../impl/PdmBiProcessrouteServiceImpl.java | 16 +- .../dao/PdmBiProductprocessroute.java | 8 +- .../PdmBiProductprocessrouteServiceImpl.java | 8 +- .../备份pdm/rest/BomController.java | 12 + .../备份pdm/service/BomService.java | 14 +- .../备份pdm/service/dto/BomDto.java | 6 +- .../service/dto/ProcessrouteDto.java | 4 +- .../service/dto/ProductprocessrouteDto.java | 4 +- .../service/impl/BomServiceImpl.java | 331 +++++++++++++++--- .../impl/FactoryCalendarServiceImpl.java | 4 +- .../备份pdm/wql/PDM_BI_BOM01.wql | 12 +- .../wms/product_manage/备份pdm/wql/pdm.xls | Bin 218624 -> 223232 bytes mes/qd/src/api/wms/pdm/bom.js | 10 +- .../master/semirealrawmaterial/index.vue | 56 +-- .../views/wms/pdm/base/bom/UploadDialog.vue | 115 ++++++ mes/qd/src/views/wms/pdm/base/bom/index.vue | 42 ++- 22 files changed, 572 insertions(+), 162 deletions(-) create mode 100644 mes/qd/src/views/wms/pdm/base/bom/UploadDialog.vue diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/common/domain/entity/BaseDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/common/domain/entity/BaseDto.java index e2484a5c..9a96533f 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/common/domain/entity/BaseDto.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/common/domain/entity/BaseDto.java @@ -22,7 +22,7 @@ public class BaseDto implements Serializable { private String update_name; - private String update_optid; + private String update_id; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JSONField(format = "yyyy-MM-dd HH:mm:ss") diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/mdme.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/mdme.xls index c66039cf753c77ec4aa91343d2bcf4f44b13a727..6eff23b42cc0777d7da33ba08cd78dd7fc90709f 100644 GIT binary patch delta 26160 zcmcJ234D~*)%U%b$z(!8G6~t&Nr3ERXA2<-81`LMP^dzpNL_HLt%%A51r@b5a+Prx ztyXD$-B59R0k=xkD!jE?`}x+TzSh2Kg%;att9<8w?tSje^JL)r_4n(S;hAU7x%Zy` zIp=QY-uuij@R@($GykG}Z)ClH*CRzA2+v=a@QH5^r;0!vKZ!m|hYkq=8rQdn4Z_4F}9*8p8x>*QIf+unU))mu-$ zBYn~D*U4W6{lq5;hgH^^Q2`JmzmBe}m-B=T*^UbaP2WLHXs=Dpl%hdFDz#s2=>bFgo5ZGoxL88T3(}8yCs^8&}96T^Y=bc1f9aW0NePD{D(q{jindRB^WW zu2>_~l%yqUVN$xfDd}wg_ASTs?nw2GO_F}qo&3WjDb(x9$D|z~ndxGX94%F6O0Bv# zkfUTuk@{Imp4uNMQ0LKgB3&1yl&H@s?RrWprfVAU#-`+`r|AA%N`YEQ>0{_~F6CL~ z&)M;LN>1`HA?n4Khr>erU45ESrKV&Ss6S>Gs6|;NzC(wFYR=BZeM@>#+s(cE9hg9gIgEl zuN0!o8c^@>AEOWW^VhMQ2Kq=2iU?s7#&E(Ioe;;bXMW=lei!qbhVaXez;8$(r<6+j z%Mv7jU#PAn4-ExqIzs-^Bk=Q?KU9wP#87@(yqtIsxf0?$H0lTdjYs7V^{AHP<`cf~ zw;VxG@e%mC3fzJqCs7rEuRS-^6V%Bf)XRn@v@!5dfOfY+BwPRK-el!CY}3n*#{Uj? zOOqrv~n(qt24##-(FFU?8rQFMbz&fn2}pG?{I`_)4u@{0ER!$Qn7 z#gcR}Oth5z9w*Z{i_sB(fmE((lbo4jN(XhSu%%m2x;rOt&VE0QRco_CJz)_R0o_26 z+wik`!juxw4KyfFjPhTS<>4cLr5eb~O(L;(GAa#NYn^ObsZ7B773Q^aWjLmo);ElGph|N1rjm?_kv!BPsXifFyU!%2 zYY#lc$?&es>Jez1y3wZSH-^qTFKQ$5pxp_sDD^9EUCZX;ug5$Cs z$GxG+EycQ}GZi9ASCM0Y@unFl7L=H-?(`~?Y@FIu41_|}T&x=%-IJ(EM@md*b2@}6 zmBG#&t{yJYZIer9JLE$p5Eg>Ebgyyx{TIdD2j62&P(h(A!J~(+piK6ZqFm&Pun;Ru zMZ`5Vc#4G3EwgmF`f*u-IORSS)FPr zU!gWrnkqjzC5u3$C{pj2pQ4&70;;qkTXl!0s@jSIwIRHM?;nIIB(7Mcsz+w4rz+N} zi6bYe&dO$WT;<#9nvo}{cScvLPe(SWzm3k`ku_?s+>u(9A=TT}*($4gkNRWv+@g0d z#CTdSTJ=|cwV{9aGodfA{3G<2(F zV=~l(Q!`jrqdL^m#GjhfxeeX2S^4R`h0C<^dz&Lq6*pz5$&DG1t!6Zps6oP_~Q9c3b)9v^2;m%$tgLbt}=m z{ORQujW(TAXYl(hexJ?nbMUUNY-^D7`O|xC0riuqRVuArmphhoE#~**ILA(tassFw zBgeib>j3`o>Hk^?Ji*@e@aR=%b&68 z58z$>xTh6$As?dr#oTHiwvdn5Pmj{4ZuRh#Vd|$-E7iMGTGf~1s^k+~4b%tJimBeQ)uqz=1Oy*9Ok+xyd~x*ZdaDUfP#78U9Bt5EMkb#3oVwXioNpI0k; z>*WjTgBkVmMKy0mw|q(6HR~AUl|QFXi{;Dem(#oDUc9Tsz&^w@iiR{IA+IrA!sfT?JZx z#I8IrH-ot)^Jc2Sc_I0Um9uT$8I$}XG~hd|lKdiTz|Z&Wfn>gq7zpq^XCQ^|xdTDI z=MALNJyqnZ#Y<~^!$pC5X-Ts$RTQemB{jZG8a-b-zMc5RYUA>OKkg zGIjC^$X~8%7S_-`tWG>0_X>5=VwA5`l~g`cj8vgzt;s+drS=_HN5j+n<3{;XM3wpn z-BU%i+DrL!MUC3DxW`u^YSn`a%al5y1oh5Rl$pq7GLOwsqmM(G z4lV;a?fUBR7Hl19^n^q!pSdg4vTR@ zC1r^zA`oMQ#aL!ejWJs(gxAbtV$5;GY^9vTMQ=>rL@qkbovWRh(=}6_K0hNeBbH%; z5tBtL5vxVJWzLE*Ct59LyO~=495=I#LFc-e(6>;`YZSvAd)pWZmN?eTk6DB46=H!( zT~ry#qNR}44@zr?EOIloD#yl{j@&G(V1VJO!3u$azuk7aNt~QH9jWA z**m^IW0_Bd*MuVFLLP`nK^{ywa3S4&zQdc(UoG$d^QjwdKO9{Cx9eve7K@2b|Lot2 zisA!vh~dpynPjtw-&2HnnCJ;RL*k}!eo+Vk->$vw?CU4bf1xL|>AlaYe%>N`BO5}Y zk=yRt5Ipa)cat7`Kj~ogd1Bau8|M5rxL;oCzx#vW71=8{XM|q8HTUGRd(ZmeH>>_| z>F@V1-6ubLR-~T)$*=pC&f5R+#lQVz^G_fA#d*W#Jbra;*X|Q*um13j-Sh6abg=r< z``@{;cK+QXR=(B$*5K<;_00b0(~GkEKWcg0|7gRjJ-6)LIW=r~D#~;7p zvFp!yN3~8bYn>bZ^y!RK>;F7v|LJQFKh*Hyz%!4IxbXhj*Z%dmUq^p(M(@3A{`l%8 z6LtsQt-E-G99MQn*(vAU(elfO`**Hd|K#)Ed@#K6?Z3VrSo!o5U%Ywnls9)jb?d!1 z9TWYvzxMQ#_I&b}br)PX_L7U&?~dGjZ~w8YADTDpyw|@jTrVFVHf_6l^Sn{=nH^u9 zR~DAbb`)%>^XDfEdFSGVr{8>9UPP|V67qbpQd}rbQQNi@hYpKu@u(MBln0XDZd?g9;VS_SNxbrP3OOTOvT!&-~C&*Wk zARh(!P;f`}%@ZYs)GKe9Qc*48!f$9`DyGAX8i{_kiz=v?4nS%oz0?c0j4!R0aH>oS zh*Hjl9Hll#{;kM?wE=RJ+Z^RK$C;c1OIGBlusJGhj@`E|i@2@F&bPOEMl;WyuPQ;l z>IC^}66C9m=Q-7lEp9JxeF7e~w!QhVtL?2u>|Vy_gA1_VKU%`=BWZxDme`TW*9oWv z_;;lBP1Ei0FBZPYG1_`>w9Rq(?c*cW5{(==s%?&HCx;x(uOQWJfq*A!WgWljrSsBh z@QA~S-E|rq({O}x_1Hg-6>vTUSs{3;o~>;lYsX0Ryj`^4+dzso%Gj%(8W9wP7aa-p zvQ{?9W_oE^@MgV)nT;$9avDj_@R*oJS-<0@JBnq}>v!7$`q6|pmbN?ML+QJ(DET?{}2hNR&Q?9qnC%8gM^B^y*gmy!kZf#4_+Q^ znTiyWaNZCJw8euImlYW1ygZC@knr3P33&-}=O^INCKV*?$olbcS$c@-MGq{=B8`sC zaxIlE4yj4^v{4QSK_3Wk4iwiEa$IvyTh<|*J5h@mMq(l3kb2{u7UE)11vhB8S@(jA zVHMm|&E2v1-aWp+f77wkDNpKVu;YyF$IHn3E>B>*^LhdkjhBZw#LGkb@bb_;ygalI z%X3B<42G6zCKWUnFAvSd%R_VV^3bQeJTx9JuNbYz%lx;t9?!J>FSZ_6?O>Mm>WU`e z<)J}X-fZJdva|!BYv79(JrA`vP5nS&yrpN>AX@*9t5HSi6F$xed3J~KB1O_4)QNjqRj4;8- zOeKU!hMZ_gKy+9N5V15s#3(>aqMWD-jB9`hGX#24rtCCQ&`UycvZZ`3iZ+8Haf!*U zMAUYdfxs{ch)RY?BZzd_ZG@%~M4Ife6ne!JOQBc9($Fhn6c8d)DJ!hNs0)Zu43W+d z#}E(AGMyoMEd_{amI6d94G=L35Ys6q5HN-Vp^6b`=}rA^1_CQU3}=X$mIA~qO95iG zr2rA505ONs0D&n15H$>u!A8tAWVU?Wa3 z$c%Mgy`xh@~&a!tq5;(e6MZE3ZE$fG-qXlH~x zM)J^qz3#6}~uj3G8z3J_OV3J|e0 zK*Xqch;jolnT??BTr%QHBL$mCx$-Jdtz;8+lJewcn+OO_k zZ;+4R+shl7fHx`uZ*&4)RXh*tJao)3G2zHAwld6CUPC-oRhX^3)>1I?hn9kou{0PN zqu|FMQBEMhG$3>{LIopS=QLaFwdKk|BNY2>dGdNo`CVzrE(#D^3As7F{ag{>Gx5c%?UQ*abR++is|+-WHovCUF2B1Qq>E=mIe zS_Ox1W_RGHU+V9S15mMDW52k_gKo0W6Ec0CqlugtY8(FzR%>S;?nn93Z=JO z3Z)yLeLLypXY7vGi8~(o&k`w1cf7vqUKz;$IkokdP2wwiKBo<@C!d?-=_G!V=j{;5 z33!17JgkMhWrGQLsqs8#GXx6+Z{f5Ayz~UT;R$$%a=r2pmU?+92qcO5@7Xr0953{3}hw04n{+$~iqh6dB`J8$WhN&b1`4gU1Hh9{P}3k{0q&?0Zv0}hEUOis1>^yU$O-3U>p?BQv&4qS>6joL7typjywu{{Vsv% z3J@4%f!MUr0LwikFDmMa#lulJPfwX{FG0AS1*wuq&ZuU`OJhpiat4 z1t23LUN%CYeY_C#H3-RJA=r1&La^s>Q0z5AQdp5+7#S%Z8R(mkQNS{=v7lvOQ{kX^ zg;IC~4YH6|jgX*62s$%_l&}!&9sHg3$G*Wq@fxMT#i=agmqtdaM+W*nWQ17;HV3{U z&xQ2H*Fkb+yyX}akh!u4dvI9he@#H{JQyU9XB6kbIvsibO!bPFt_BPm$Wz66u+koy zCxTG~nQAx_*2+UOWtu#7oCk~De+&V`AOkrKY#~;w+Cr>Uy^3MoiM)+HyCP&E)}2E^ zv2sMFW(LK|acG_qCQl3J!P0MN9<1LWrI$JQxzcK>r`dnXsIJW^O?kBOz!!D~9#RKLr{N)*=U~ z;n8`49SbmaBJTv2hn2;*L-JrOMV^VAr&!R#1<2$EMR1Qy9h?cl{m?v!&XH#l=RtHn zG!Noy+tlDgP_SduE&p%4=r>v*TUq;bD{u6AyB`ST17H zp$bA4@^o_^M3r&arWaK@-ss^>hzk$LJf;r4vOjwvi5N}e)uP|gm(UIf@x8C&0+bD} z4NAFCWxrnSF$6PCk>|_`bA-bikW1_%0S-?XgE2~bc^GxQJPe|i=L8}c6)n>U#31MJ z2INu(#-Qc!9AJ!1ULM9GFArmnm&ap`mzkL$BgT>u9?xLR@bWN3czGBSygUp6#LJO% zr|lj6qy@S>G1V(?R4v~?pD&{e-xl0R_f2$NLD!XZZKmsobX`r?HFRA|7gi;R@UNq5 zkS;7Xu#8Z2(XxQ$Am)d>oy%+FJyIQb<2297D|(PuQ}h@w4>1W8-LmgKxk7d9KPR%1 zI68_*qSn|a{twYQhDj3r;$2Jm=u3$ht#q27a>7sq3Q06)pJw<0v5I$Ac2V9W>RP9Z zyTsjO_K*2>HEoJI(F<_tyabzdIFjiT|80aLdg&L``dK)lm(?uXN7G=xILY!IP#^WJ z7^sgy`@}usUhxxt-AABM+DG37ykER$Q9?w$k5wNI(0w#<+&|=1Xu~3CtB+m~7WIh_ zj2MJQ{o+HT6hb4dEW)CgvWSYbhx{&O{URkoF6#5R2-^Bd+wJ1_7A8d0M?^tcdeD<7 z?@KF-&J1PsAr3;WKJhl4Z* zv$B7%Fi`drE`|NEBP&azOoX-7=RpYW`otfN7&NSY@xMetTLgI8wTSIv%EAuqTI5;9 zr{+*La71MTtn8--h30H%`bRW`*@Ho~q=Iij{HtS#mhI68%urCEX7LCR5-#kdS*^&u6a)jpbNv=l_F z{S@DUqL>{K>uR#mNsRB?L921l(U_|v$O=QHAier{34j1INU`hC_7P+w4p{_v{7a&! zF-NG#kzJ0N1Xk#CFoetBrSL*4ijesXigg{zNBgIa5eS*TYX_)QGU6=uAHJV{Hn$P9 zsZ=r|vc@C?sQ?x-yXa}3RC@hX{7gK+um2DaCVc5ufr$+&R`$Rfh{pRUrq@bgCD>2V zpKcWxf^@4u_wLg}S%maJ2RetGe}gs8vZLRr(n*LSJ~MkIt}~Mylw9G*ab!>#8(T<$GKpjVi340!QtsG*5jW zO+8HQP){G$VVTi~!y2t0&I9`?Vsa=8fpzoMBU@lxk)1Q)qG4hsDyM< z@gWMVw2J9RRWagdtX+su13K!{J}h(kNV--E=ZXD7S}MNR3}-JoDh{_Q4rdiHf*-r;q+U+>n)Wb-&%LCa~k!(`rRO^B4L~dtH zgtr|3>ElQ&dHd*CMuXzCv!5PG(4ZqM=m-}m4mx#b#35%4bi@%s5kIe_OP^2XLp zJqMvdaR$1Mo^^02AN~G@24ikDr)w+-^5s&qe)18-13E zwfZ`GVnV}Xy}phPZnXz+T6!@H#z|?c;pJLIa7ucyb$c!=vMxcxLlg~6KHQ8@Z0Hm|26MXf>}fkvzc@(6gq&T0tAHn2j7b~bR>4G-iI@MVS{Bw1Lg?4tEk9(iDc zcvw8buSdlWenoar(?bKqE(5gE=b_kTxRiG7wHi2bT~GV_+7tP#6#7LzDRen~HNxRL z3gugcc8M~|1%=ip04HqS|1pLGe0&eYV)x=wIwa8GIE-CSrve%Tp}IccLmWIHCKzx8 zn%Wx$798Fvu-+)3Zn&PmoB(eW7;i+}?r^+;MhAuT!78>&Hq!BdRtVcA8%43De6+-K z8Yzx$uOLOVvW2A7My`rNQfiZ(O$$k>D>WbS&qh%~!k|@Q!a8!4!k)}Zy7W;j_GC8l z!WKTmVedv!Msi>^4tqB-K#{A8imXCKMj>kdsG}m*Xk+3!;`V{f9)RmZTATxK6y*d5 zaGV2g6k!97bKt8CAML}bqGAhPY`sByc4br??l>AawoL%8k8iPwv{_UbaGVft7L^7Z zC&X7XI8KK*TX38XUt{ z`|C&a6ufpnPM0^+L+~23%qmmnQl`u*Qx>NT#s6jG0iz8mQ|3~pETJ;xMj3rXi*2^e z^nAQl1_#lbMV(Ow=g`_S^g}r`YC3UdxueWD+OrFgWlo4x&eZ`Ym9rxCBnVz9cPpa0 zK0KaIsJWGoES8nVf*vm4Mgn;bD>q6K^G5 z`s6)K4X2O4!h`z8*?vEL*8#1VR^?%8IXcVU z2lxt7Mi20auPaCyjA)PB*Apu6aa-;6qJ`C}vcbT}j5NF7!yi!<^;(Pk-(`_4AqXwvm^tLtd1>uA;$b1rlpZFC(v0HVhL z*KE__czvU2H&8fU9~5JWg7>Saw)BKkMW8p>eqLokt6ZQ}M+8Ne1Za>)-D<`hCuy2O z)!>UdgJQf<0bkaMO}*7FYpX4AwXGQ_TFt;(7G~ZFBn#t9b;4$Xu>i`1BCJgfYctWn z*RV3q4rz@`nHrZeHCCA#>jfxNW0k3)HoH-D7-g^n;jWGddJje+Xrp(_YFQb4p$^v6 zvNF!DX|1h}T2{mvc5AI7wJt?!ts=FoNT*Sx)=?zl+P}rn2SxNwSRE@e*(g%Sia0x> zbykr&R-~Uw!SXt*NS#ZOI;%(>E7D~YiPSloxD>%~3q^D{u4hHMjUx4|$j1h--YQb> zQl#E0Qg7P{dPO}eveBsq*zfFKV>}0_-ju=@v~Hvmb6pMig4R|sg(z6rK%h~so(2NF ziE7y4CsP?zTLXdK%y9ug8{D9Am=R1E0IlSPIEF2qYCy-ZrNG@W#9WYCcY6kj156ukzt(SkNIs1pG-TF^!UjjDfsS{&Ibrco($ zy2gZ++7yE&)FwiWEsvTAHMTrzBGlOOsELqc%cCYj)(e6rLXItunj&PcULQ446N{~n znn;mw)jZZ=Bk&8ucs%2^&Yvr^9TsF{^QnjX zDbz{|#g;;?+z6bRvXzvIErnWbLx{B6=7&B)-$plUp;qqk&QhrLs7kdNrSvXU8!Lrx z?7{7Atdz49YGb7|pI56im2l^5vl_Kog|HNAGyUPnZK2(O>)on$26vW1?F=3^-J+eq z^-`#v+XAX60;}6Cc)JU{{r?F*)`08%ld%LITL_FL@Yq6NEP>z59vMsEx6&NVhKJ|} z5t7ZYG?u`lYTFmZE4Pa2rc;h3$3IDrD?QDxXDDET!sAHva`P!bpWsl0ptp$`T&|KR zNz@Tvs^kD7n%)D5Xs$jGAJI%?56(2zH<6GA#Vkw3M>G@JiyO2dVxo28M0TPR(M&W> zbWfp}K@s?3L^Bah2Ln5yR0jh)p;U*fF?YCtJ1lUA1%{J4Y+LT&wmh3%lTCc@e7-)3 z7G4Osp^Xl8CXq6?3;fsud^?GhxkJn)3W6t*GItujUu?4z$s|(bcEb-)4#xwNj_3hI z^uRO`O(%O`o&oJ-4>%D`r^^GKE)R5C4|KXb&}lu;$sTYbn$95};D`om3237un#rt; zGk;HJWt{nYGAjemOlC!#Kw`30WHKw_tm`Kq(F0hk5N5pd84pab-9y~|HvI_9`?U3amOB5?EYC7?3ZZ0r9+jAyfOkv+UT*^4v;@5A@jPdl zIU}BFmYFjX@Mb08%}&6ZlYobM^BNbKmw-7x0dIkahq0uGc&JVt2KI1m9%pK^himhA zQ=2`uHt~Z#u_n}mC|Gyj9#FEyjL#c#wr zc%3DFYZlR{UnoPPDfP=~q|A%rBm+N)pR0*X{5}{R+(v}%w7h?uMz#i zDl?6gc}1Q4_lk&vhqePeJzh>{1_OWh=L*0$>Yzn%;_$y>DF-k$kFq57jQZo z{uVv_@-97xg4geijnp(F45}Zfn8BbY8_*dHdWr#^VL@lOKxbG`{F+h>bcO+aPrOgh zli>BC0Y%$~p?X-1%p}lP#R>yDlR#e;D-GyO0)34wok^g-v|gP_psyN!fO0tF;!Fa4 zot`WCh@J}hm|uS|py*rx)r-1Wg!zU(l|aBai$M3;V~JS=8mrD(1iaq@&m!ReVqp9t z)PLFPoJGLDGW;OP(#I0nBsrCGeL@#re>BRVS3?<$l{8b%W^J5!dp0ZM#M`r38MMIJ z>~`lkVzyOewp9d+tl6x{z678cHUO%7^c=>d&|4oj%wbR`_MT%w=dkro>^;YV;#aO> z*3Yrl&!GW&pE-ue7IP9>kFg4h=*3=SE@`sY9zV<_MfTd`hq=t)}F`8II;FTRt8lu z&s7!ktRnNQBB+XatjOL3Re?bmm{@L6{m*AmC&r%7pkdPk<`d|z*&6&H*voduf4&8s z?*g5FL{NGtg z=-{%Q{BSM3F5nmLS1}d5Ky)Q#izfo=Pj}R2Or|O$EDD3@Q&4q%^Zd?%QF4{MF)XXi zeDHJVCrnj%898UiMM0qqTD8td( zfUJh}7Mra)`mj&dY)vABaegZKJEDM<9o^%XqoQX4wZt!TqO0-t07(O2L9`;7#1Tvw zWPUV6|A#`fCRrA0Xi_4d1xHsTlXh1oQ;F-6Da)N8zm@c9SF#+o6{WTX`y} z;syh9CM+&M`5DpsQb^+mQz+l-DRN3QKPb2F+>83(^C`Lp{233r`ljPZzqyWpv@$)o6OVoDke%sGW0b9{iy!Wd9RyB->8~Q8u04(54FL4l75|9eT{9 zJ6gtax~I^6HQmV>;sUzE`fYSa5HzTrV#BN zBb$>IF|JT@O}pCmO+L2{v=ID7pDUFYxH#(iZ<=>LSwT%Npz9(!ZlqjOfr@RVEv&Kh jK87}oT50dDg|244j}$#}-HS39*?zLwBUF zuMg_$=(_&CIrqrT3DpT}#WJx{oGaD}H7;SkIwm1WU6*jCr}&p^8h6Ae4vUgPwIyE_ zC8YXW@&xrnYL2=iHD3**`{OB@>Xwuol}6V%y1GcWf$pEsbwWz6%1g~vGgC8FWlFyK z4W+$K`k2&gwJIfBok#MCNtrvoNX?A#7Z9JreMHp$?JhnjGR6NVeU*i!u>L%-s>-cX zkL2e3*C-bfHoN|SA>nCuGqCzv)|>o(A#B26_XE}$?MjUUuq7=mkQhi5o;r7aYbWt2 z`YP7L?BTv*+~`kj%t%lJvvNxN^B>?gBh;X*GJpSU1)QzFzUC3NR34NG?D10mrZ%lc|3zYSNln~>G#v3{^C|4foRI*ztZ+XssHflB9r*F={P zV~ZTm>KwhzKUCeFU7#+^&hZa%(q0qC&`0}>#UQ2r({-Vi1a|scx8CLtVlb!TqvRK& z3Uxs(%gQSM*>-E~)v6ye3;bwk-}d2+F8=%Z=2lL5ewMGX;>4=IAG)p&(sopDR+gXb zSzfx%!wl=Urln;kW>Xuxh#Ez$q{QK&%QL&5 zUq`oV%<8&S9JGUvsg9lgymc!yeo|Glfzi#7YLpJlYoe1r<~oLANZ2IRJ$c!=n`E&N zQ%S~OlrB$QGHq6j^zR#RSz`m__O;+@W4vpmSYQz~V+03!I1i zg-Fd+`||P7Ky`0n7Wqk3TGBM6872~$ifSuD_8iq-gzWSf-v^qzBd4pLB8^>~o#(P< zqNc6+)Xn*v?WLk>q3kZC?(RbbK}PAnDlYnOO;RiTvuSqdYL^~EUc0@M+zrew|mHZCy2KR7#zZto7x z*6xMnGGKLs&^HiRg^7;gqI;J9deb-T3g_s0%%=_w%Ib&|38F@Iom}rRaK^V-)}w9s z(gb%!x(y*eIgvVKk-B)uWcA*VscJ)6z50Z%ab=C_{PLXi1|iX%uJcjf#(kJa?HN+4 zc9nV6(z3y-vMfpMDXUUNbJW-6g{rR7t4^v&r+d1p ztSnTED?8Oq)iLTo<(cZds!{5Ns$KDhm#0QetZI*QIxn@Zda3$P_3#~2YMzwpz3S3n zz8#+045{ks9#v^|G?TBJk$b%isimglLoJ;arDoTc4j8rW{{LJMS0OGyjP0LK9c-ak%dDtSbq ztX0Ph%Tuw9z8K7~V$_ulbJQbEWwM_1)v`fd*<7ba&+^Gel}{F$R1(RAsH#V#s4rRz z)%+3pYUKo<9Ij?i3RsO$z9v5`$`+N=xSaWoWPYPmeM7Yz&G?tK>gRW~)~FF9Yt+V( z+RkM4@vu78Hq0ldsIUt5IIn z)sW5FywTd~v1$>qpQjGA=-kg6{qgGNrnVh}#=Ib9w|cLmTAohtdFm~4=uFixaiUzo z?8M?ae| z41`quM336hF;oWFg%`*BLOn2JDi`~cYUZpubqrPazpAuj=E|q&eFAdIJ?gy~)$(b2&*SuGIDN0` znlo3uFsp~3e%?O)g6f(vSH8%(QMLa@DQ(Jkj7J?aYqZ>_l4rNcmmOOwY0hor?V^wlowYvGZ)1%Xb zPo;Hd`qPA0$d;3z+E6T7X+GC1R8*QscPpD%nc-G8vNAKMY@x?>&Mdc5=gbZ&hZ~?| zF~Bc84*YO7m=ny_Oxf`4Krv7xIJufwi3FXPMm@Im0ERVMUQmgg!^ljs$Pa=cR|)N9 zsHm>_(Iui#&0bWf@=wlGub)&Foh6D?=Sl6E$@HY9*GhTgMTvTOeg!>Hs*apgsLouJ zsSYfvpuTSQqJ?s>Qr)GA9x%7a`GBXIGEiryH?R3a+XeJ3s; zgH?1dR6UC`)w_!;sB?UHVS7%RsBu4v(kT%`IcxF4Oto=g89iFdGRR+Xa#?h|s8i(& zD#(d?b;=3tBsZwm6TrEVodiVX;!!Vtj8rXPywu3?$UI zcrj7^?)VBStx3VsYT-yt=28OmlnQR=H_ji_Mc*LyUIHo$g*GuDkahy`TaAb6HI`<4hhi~>65d0d(R908isd_gIQztCf02-fR+Fk!#2#8n_o%2B zzt|N$Wm-nd*O`~r-LZ7~seNKP=_Q^vf9+#(4^1Flc+RZ}P7Wc?rjPk_Ets4wuG5_bz?;*QbuZZrru? z=XRgD`n)gx`rFlS-L&hT^<&0oA6~HJ>-{UERy=df-yiY5Uo(HwfysXvwX@Fg z-~Qp+Y43lVvHFtoGoJk}b6@!*Yt~=6CilBPiLY;*^Y+As<+Gmtbk7fGU+_x)HT%E0 z{Hxpl*%su%K-uQG#PsQPu`@fqy==9ge+_bv;u6O>h@XxD1fBdTDGh17l zi#CqAdd0+*^ZuB>eAeXobl>^$ceig?emJ9L%VVE?eAORbS8Epj_EZ0k7cX zWbwkzDRsN{{rZB;Cm&k>^*jH5@ux$dPoMD1%L`ZTzvtWb+ipzsU$wFC*pnx}{n)^l z?|Od8(!yas?sz$UWz6~yr$o(v7ccqYw11zrVePNJe=PCq>knM`#k3#hS2u4h{j&Ej{`Jovnz;D+d;fG_-S>gI zvyVUhQ&=pQ?5Mx4 z%F~e~e?LD`sr*F*ncj{IxQ$<{qkGfeQ;)Pp>WnQ=r9Z9$jNa4EV2)c|= zo!*jGKWfCF$iKaSvbTCvd(GBjT0?MPqq;g3w_3F(d3d$scDxM`jDf@<|wi`&gUH1;z5oQo1?_$cGzpZZVwV#@@75n&PgGpu>4ecs?8^gzK=^9;!nK29a)vMA!$>&{ZZeG7ZoPPJ9R1 z*tGo)@x^`*atyK28)9>)-;MB>NmO#=D7QJvog8uqzv8HDa|9w$AuIV+C7qW}Lqr@+ z@UGJk7+Ow8e6HGmlm|fwk*Z>EYslLgiI%sMPW5Vt=ujDaRZ%4ZK}0bKULosbJ-y=C zIYhHc!fGwsf}L8jlN>ZNR95YH{kA+AwevRHq1>)M{{0zQ?#?5MOeKp>b=vlF>U1`3 z&luxQN6VmeR~tt=2-l(J!_IsCETCA!bE6!?btpMlX!t`o2W)eN=f(zExQ@1@L@Zgj zu%89mU_*+_3v_egI`nd|@Nz#3bo$UQH%>3YEzs68bURA!NR|ahs9bc%5+f4D5s_u3 zBymJdzq5&QzzEuamvi88Eg{Em?`%ptf{ih%5eZ}#Hjb!w?`$9~I#p=njJD)1Xwj`g z8?UuHmfW>F+WX>zLdSET&p@$LL(zi@`nzyHFwlhSaLy5~L;VQXp?-wx zP(Q5B>1EIvTBRX_>JqL)bqUv@x`gY{rowfoJmI=L)ShtVf3^064cq^ZwZ~OYG0KK> zMU{vZ^{!Gxg|PWLOf*p+tkUQ(%!cbQ%7*JO%92iH?x^$+q#+XZ63jdjxiS1ndc{cR zm22{Vl~>|vJV9TTAgS0&Q6!aEDVn5GD|tx5sGy&VAqfK@Nq#cpB@tua`ltlz(TN&y zIn;)%(F74EF$QWWO2kWyep-rlNgkIJ zFhBr;TPH#I7=m_dM54q7FRXY8B1zU;DcU7@T#`S=B~o7{8w>=zTL@*5yK?x9}3YYj3yF9yll4;TE#dkp;ZLa&?68X1ct{|K3WlJS8l}xJ&!sTJOe+Cl7S%t7Pob6{FN2AI2ugsM zZ6J7nA&4r5NM(p)jL}qvm}4bC9BU;Y1k->(lAqyIsm&(HxdwvAD}tzD2p>btGiH1) zFMQN{zzgjJ7Lh^PKI%O}B_JGU5Yp(5UbeQ~kKm^fM5;XAm`NjuJ~7`)(IhRflE;-6 zJ ziw1_sU?&!v=Q7xdPAkEQE-S$ao#uxbc+pLXn0I4KK2^dzPZ`O4Bb(1;50)4cne4$S zRzfi>wGtc%ron-r1P4x~oIs#iqwfEj7$S=yeqqdHF@)oJmMcbCT++d`&=}#QAVDrO z5ZQD`jG7rCn-NYk2-$?-kC&%g5ne2}61+IWN`MGTfH;%V-~~^X31S#S3}A>A=D7jv z#7Zjxp~p&u;Fo7v5fDKM5NA^wAb9Rg5W^WFhah}%m3c0QAkw4*kwbAxvk*BHr!;Fb zhYC7W@{$$*IR;`N-4Un}3^9-(;%Ey`mKaYQ)Y4^ zafy`xajBI65ljO_Pzr@8G7w|f3EJo3BbZu!I*r9>jp*84UV8253=D4YL?Z3glS!vY5TRf^;aVV)pV% zE5XUDtOO^6X>c+qA&ys5P9U&rgwVzaC5*7qskYc_%aGR?qu6iDl$)&Naizt$BtUF7 z5F9CjXlIC0hET>zDI;vLQZ!lljZdZ!`}MW{7Q80>n*Lf)h7e z2~GqhAlyP}K;T+IP7ngB?GS>GMO_)s1k3p8 z?IuSVKm7+Q;psc9gr~JR6G7*VpyRbrSObfTkS{(|=WK@X0wL_-#L$dp`JNO(mmERIv)nLy zJS`2=#qvb*zqM@^7EPX5gaPtQAWWAN!2up?!}9Uy7^dUl%+dWfH$Ix5o9X|NS`WIZ zC?fa;zEf@_Nzx-$iX!PzD@Bv^n3X&v{l!W#Bt32=FG)K|Lc58k`cyD1rDqUrUuc!DJTpog@05IcX-G-m!pW2l$YP@7>?v}4waU5tOR1?*rP5>HYB z?0MMUUrB;J54{|FH1YMg45BH(U>qC7riC_$4U0qKDPu5(41Oc_khGJQj4@=Rk6)S; znhtFE*amhbv<>V?91>3(8(!G(i)V}xun#qYwgw}aYy|rb+6eX>4hd@M>{%=mdDhs7 z4YPr^2^%?V0~-t41~wHAiRUPVd(b#G^1Lw;7iI*F8AkHi2=)%XWoYah91<^33PK#u zHeNI~;=^p9?ZZYf+rZ|)VTznjZ+so1P=rp_4(L8uk#YRqY{G zs^P@2?nK_&_MLw65bMtVpjbH~Q$2%X<=8(DmVU_7zz@bfH{@yLJXpVllK1OS z(GrX^H8Fdvz%+ZTzQWm~%Y(sYHi)$pK;6ZIE)aQ!aULv&`sYEH_$Au^aL$C~44AnM zp^t>25ljs0k$($R9IQnSiT_YPfR}axeJAp^usy6Se(0A6eJS#^a-KZl*O}a)nA{`N zNX~@GJq)??6qr1tI1gs${qtac4LhSb52n}s2o-Xdi%erU6K2REnN;S!Xy;6r7yfTB8p`wX%jvVp#1QJQ z#vK&mw0{Zl)(;^QlufT(Bjs#W`dYc)y`PT}C)XL)%-D}H!qN50`SvRTj?OvJK`$My zL$4dILnmr=&O`*gqE#ATbaIZaS1w>+bXtzi0Y={xu0vlGu0!7wuH(KYT#3FVT!+3S zBP=rLGs1P~BEog(62f)p0!WuB>243j(Bw&}{{DK|=KV{!>yn;hwCt3fRS7G zZ%hjLy>5(e=o8c%;^^j>iZ z?|ST{yiru`FBP|lTg58zJAR!*JDtwVqLZGcvkYvcMKkc*B*Qpn7Tw|nu{JNh&wcS*)L%eHId?X#jiVTO_wEIG0_-mk@vUJj8 z`d9>0mM-z0F@tGKw|Ji=l_G5mE_pbU;eSn4o)C1}P{LEIL)nMY)B|b4`P_eqjrzC+b zYJ#o@n0E!q!Veu<VEegY>;0L~qHpS?OP~5+g4ac}WgS{f z^18We23btCy*Cm`Qfg zY)g~HY_gkXmXK&ZjoIWWR3c7dXxomnjN=@}TpV#s7-b(vuPz#EK`EU+$498laqPsm z76DEi<|lIe^vKa`GkW<>y7UFiS5LB*33mvIZg z@9;0@3XNilCnx+HOhOzzpuMP|gm|%C{6XBouRn_iBffMU#-P(lS7|$qtrrO;NB%u#eGCR>Wh zOc6aOC?;Eq$wZM`4cdP?CAh<=hshK}MxWVXsnbPY`_^P|EZ9w7+}4Ius62Jm!iiuv z)gedk#45!SL06u_L{PK*;bSxAH=T6pQ#`Dly66iQ8WabG-Sh7BmFY&jSG_Pynsvs)5DWGWv3b2E~HxG~TU62yt|HI#)y-8wNeavEfFe_lj%m zpyeabO=K;!4e97&g4T)gzn(#{sOzG`6Ag;P#BMs*aiq|)PIHxYn)MdHpV8ieXqqkS zG^eb&sMFj^id&}qh0iM0S$_i$Zq;dfCkO5pcyVu975{Ghy%zVXvR@NF}H=I`s^^% zPoT@`3j`Vz=ab9n9Mh4a=}gM$1u|V>&m`dGT;BNIkp@QCGYNRJ(T5I9neMQgsAr-4 z!A74mVjaDlPS-R%*3!%A)O`t1n1hNTO*-;G>vMo#qzo**5({4l{n}B~~^l@YhtB9Sn zWXYxoY!P>fyZQByc$i=QhpGF)Tnsw^V5QG0u>)`>?V)QLI1XJwo8~$a1DF&>y8%S# zS}~8F0`LG!Xn-ZOQxuXOgjPfVCv4sR(T4+EpJHNX;Y`|<*WfrPT|xWm8U$1ImFykn z!Ai6ka7;9HH1M;rU^FmG($UDFX1GEOBs+*kj){if9S$cNsB|Et4?VGs(IavVA#7#z zh&(Gri?eJI;aD|bi)bK`>S3}2iPTwkG#yB!uG4zVe|ki|VKp#f89Ah|UjkD4m=yaZ zJ)*$Sz(H(}C?p9*frHqy7$DbGM7fp_ekun-RR2*%xy-01av5>`z(x$f^#Ll*XnRDF z0mm6_k0>_a_?G(F436X3Yi$wbS#bO$Pe+6H(+cUEqX@^(f#(}=eYA=Vo>ij6faCOb zl_)jfIK4fG!EtiC%7WwM_IjiDQVwTPS~-bRNijXPr^=*C9SwT0=N zJr?S!syJQr%L84DaqiwtzdS(2p;dV?)f_#|!7p!@**>+HYL1?9(7&+~GT$nu zigPJ9@M5YsU82@hoMLyyF#~@Ik@zKDdU=eE)YYPnoH5SNhK;vU-~i=hr>dU^Q8sU#}KTRzkmz2?iV)LR_!4T!&b$LzpYZT&x9#7_PTc zvvqINp~V2#Y}4WByGJw|C>(vS7Q;wFPgh2zr3aic0^MrYlVujP%mrF@R8TZYfa=}0 za>g7kX_$gX_z}%&F~U&54{3r!Z@J6catn;#TnC5Vat7A6F!HvLE%Yzt5vvLM0+8|f z+wn*RvuQQ(6-?#;CF`_MG8HZ|6_!kejRK-pVaZfbo$V1L4H@h}xQoM&)`MOMZ1iqf zC6gIt$W$^JXVW#YC3SQ}DdX5~*?#sj@_>n8;W|g#K-^@Q@%P=x#woH{)t1(q@QMGm(E9 zz-mjR+C`+=5~;TJ1g)Z)iS#(d0RNrcYxL&;)tgfI@znXE-GJi9Q|rVylHg?xfnLD1 zqlQ3lq<+iM$IvsVHTYHkdY%^mw8jk@g6YSA0nk#eh(p=a@dk7#dpf~@4z->RWlv8t zphK;vLtUN@Jt`;$Bw*5h(q!UV%b?B-2tV&yEhZY!S_@jspw0}a)`Hd&=mje2+dTg| zF^Qf+qpOWrsC7YDLaigz;PR-BP=m{(IzkODkLn0HxIC&OWW6A$Bjn(MppL$}YE}ew zRKt5| z0%s}INQ8n*p+>F*&Pdrvq=HMKMq3g5jkfxsjWlxgL%15b#XC!(#-AnCWJu{F=w5^kJLmQj->gr!iEX%9!Q3(W>x?^ZQ4xU&>$X7FOuESd>i zFNK;J97W`Z*Uc8Z*#+MGe+3_A!1eygFai%Q1cniKa3L^^z}IsxGmOA*qA{8s_t8Jf z5o5ZgVFZ4Gy7&9Mu61IvX_Uh#@b`#&#eMvGj3!JVJe*7~GM~Kk2?50v)Gwy+bEPCn zl8*XPHUGwpX5POsqq*VVp);CRj^I?X1FNlsv|3EFQs|7Pm7{o}c7$>|v#(YTqBEmu zH9>R_p%^bP@kNhjW;7!i*qKU=WMF41HPTg?N4kJVT44NhCuiBMmyxzEkL0@C!J$bf z*#3hTExa)01{*!q8AW7z#dPEMC?a#Am_ZVvKZ?j)#L*c=L~gbN$tWVyYxG{q;Y486 zQ6qpEJuuCTW;91&rU4zz5pZTSqg@dg?TWx?8-dZT2#mH77|juIW;CPwMSy2CSWAG7 zp3#h9GS2uthRHbN_ZTLF`Z0!yI1`C6mdF?;;;ie(95n)1s}QE&%wEPa=qwX~u?#xf zN~nCtSP9eV8T2@cWUK`q>jEBoRA4NK;H;jk_}dtGjxpZGz{ipV<89X4Hum;L1KMUm z@lWLhD_)xodmD#+F4@5V+tx4aZ-|NFAZ>l0p)UGyTG%pk9HFF!eT`v!1lff%Gb^% zH_wz@JD1#XrsUdf$+dIIIn|||N=~=b_F#3%ra51G|N5fNKJsVzf~x3Sxp)_W>Sf15%6&YrZDKq26PI8E;gW3Ea(&$=oAY&#RWRWfWA#% zY{X-Fp=hm1d@ECf14ghhXaU?!7s=G8Nq%o0->XEGU3 zp6M!znU=^*O9VwRlZiarzbO0yJuX1?+G-YqI`ipS3|eeJXA$W0T(M>`s8bZPEa)s3 z=&XpKZ_sM2ioPI|BhR7p!oYCM~^>iZGU z6e4hSoXnx!m4oz|nLBswfngVdt{#amRF}p30*mQq+<|ubIeuUR{hU2;O^U1!+?yzi z@o7O|UxG}@5a#h8`;3!EiUMf~vLKM1Agcm5C&{$HK%YzvT%JImS`(;rbo`D4d_FRC zZ@i3$x<2qoq8tz?PLzd#Bk|G~7@H__@W~rEBS|I&_J<~<1lA={7JADEog6%tgHJvX ztHeqF?mi+U1J5PMqQE0bl=>z(ot!Ky1A$}`A4;Tzcamj7U_pXRjXGQuxG+Udu{K)Z zHL)`$+wqCL?g5rhCotLHr_w*PyfZE?@J_01r7v^@(&*nQ-QHU+qaNzbmA&%8LfISt z&~Be>mk(yjUhhM@8|7{p=&h8VXs?V?_nwm#*jgzw{rjm@;^{)697C6ft_5^a-KHIL zLEp}yf5MoqB)TrAE19k>bfwdEGhO%sz+SrOuXi84MbULH89}kY)+w|>y_)Wjy>tct zFA{+%QHAKe=!E0rujoSB zrF6fHE)?(vqYG42$zqQp>7f}_@&UQobA}q~iIeNqxt>?!5Gi`FPi^v4L~ZzAwKis! z+Uu!Ff=i|FmHw_xmlNZW34bvts-{41zMPnZ7$IKJlYzmqI&e5&`ePbNHz06cx|~a; zjO^Fu%X7Rx)1hd@)hqGU6)q*%^z2BE3P^QZY`uCdx;W=( hF%2YD$(9l>0D1`b-_ZS9x&lW2iF7~R*Y#WZe*kC}H<17U diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/material/impl/MdMeMaterialbaseServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/material/impl/MdMeMaterialbaseServiceImpl.java index 65b4daa5..c8fe0aa7 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/material/impl/MdMeMaterialbaseServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/masterdata_manage/service/material/impl/MdMeMaterialbaseServiceImpl.java @@ -71,7 +71,7 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl().eq("class_name", product_series).eq("is_delete", false)); +// if (ObjectUtil.isEmpty(class_jo)) { +// errorMap.put("第" + (i + 1) + "行:", "系列分类编码对应的分类不存在!"); +// continue; +// } +// material_jo.setProduct_series(class_jo.getClass_id()); +// } + String material_type = list.get(4).toString(); + if (StrUtil.isEmpty(material_type)&&!"1".equals(material_spec)) { errorMap.put("第" + (i + 1) + "行:", "物料分类编码为空!"); - }else { + }else{ //查询对应的系列名称 MdPbClassstandard class_jo = classstandardService.getOne(new QueryWrapper().eq("class_name", material_type).eq("is_delete", false)); if (ObjectUtil.isEmpty(class_jo)) { @@ -110,20 +114,12 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl().eq("class_name", product_series).eq("is_delete", false)); - if (ObjectUtil.isEmpty(class_jo)) { - errorMap.put("第" + (i + 1) + "行:", "系列分类编码对应的分类不存在!"); - continue; - } - material_jo.setProduct_series(class_jo.getClass_id()); + String material_model = list.get(5).toString(); + if (StrUtil.isNotEmpty(material_model)&&!"1".equals(material_spec)) { + material_jo.setMaterial_model(material_model); } - - String unit_name = (String) list.get(6); - if (StrUtil.isEmpty(unit_name)) { + String unit_name = list.get(6).toString(); + if (StrUtil.isEmpty(unit_name)&&!"1".equals(material_spec)) { errorMap.put("第" + (i + 1) + "行:", "单位为空!"); }else { MdPbMeasureunit unit_jo = measureunitService.getOne(new QueryWrapper().eq("unit_name", unit_name)); @@ -134,8 +130,8 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl().eq("workprocedure_code", workprocedure_code)); - if (ObjectUtil.isEmpty(workprocedure)) { - errorMap.put("第" + (i + 1) + "行:", "为查询到该工序编号对应的工序!"); - continue; - } - - String semi_material_code = (String) list.get(1); + String semi_material_code = (String) list.get(0); if (StrUtil.isEmpty(semi_material_code)){ errorMap.put("第" + (i + 1) + "行:", "半成品物料编码为空!"); continue; @@ -193,7 +182,7 @@ public class SemirealrawmaterialServiceImpl implements SemirealrawmaterialServic continue; } - String raw_material_code = String.valueOf(list.get(2)); + String raw_material_code = String.valueOf(list.get(1)); if (StrUtil.isEmpty(raw_material_code)){ errorMap.put("第" + (i + 1) + "行:", "原材料物料编码为空!"); continue; @@ -206,7 +195,7 @@ public class SemirealrawmaterialServiceImpl implements SemirealrawmaterialServic continue; } - String rate_qty = String.valueOf(list.get(3)); + String rate_qty = String.valueOf(list.get(2)); if (StrUtil.isEmpty(rate_qty)){ errorMap.put("第" + (i + 1) + "行:", "原材料消耗重量为空!"); continue; @@ -217,7 +206,6 @@ public class SemirealrawmaterialServiceImpl implements SemirealrawmaterialServic if (ObjectUtil.isNotEmpty(jo)){ jo.put("rate_qty",rate_qty); - jo.put("workprocedure_id",workprocedure.getWorkprocedure_id()); WQLObject.getWQLObject("md_me_semirealrawmaterial").update(jo); }else { jo = new JSONObject(); @@ -225,12 +213,12 @@ public class SemirealrawmaterialServiceImpl implements SemirealrawmaterialServic String nickName = SecurityUtils.getCurrentNickName(); jo.put("relation_id",IdUtil.getSnowflake(1, 1).nextId()); jo.put("semi_material_id",semi_jo.getMaterial_id()); - jo.put("raw_material_id",semi_jo.getMaterial_id()); + jo.put("raw_material_id",raw_jo.getMaterial_id()); + jo.put("raw_material_code",raw_jo.getMaterial_code()); jo.put("create_id",currentUserId); jo.put("create_name",nickName); jo.put("create_time",DateUtil.now()); jo.put("rate_qty",rate_qty); - jo.put("workprocedure_id",workprocedure.getWorkprocedure_id()); WQLObject wo = WQLObject.getWQLObject("md_me_semirealrawmaterial"); wo.insert(jo); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/saleorder/service/impl/MpsSaleOrderServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/saleorder/service/impl/MpsSaleOrderServiceImpl.java index 9376a8d4..056b9f5c 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/saleorder/service/impl/MpsSaleOrderServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/saleorder/service/impl/MpsSaleOrderServiceImpl.java @@ -144,7 +144,6 @@ public class MpsSaleOrderServiceImpl extends ServiceImpl meMaterialBases = materialbaseService.list(new QueryWrapper().like("material_spec", col)); if(CollectionUtils.isEmpty(meMaterialBases)) { errorMap.put("第" + i + "行" + col, "物料规格对应物料信息不存在"); - error_message = error_message + col + "物料规格对应物料信息不存在,"; } else{ Optional first = meMaterialBases.stream().findFirst(); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/processroute/dao/PdmBiProcessroute.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/processroute/dao/PdmBiProcessroute.java index 7fc48650..4329b6a4 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/processroute/dao/PdmBiProcessroute.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/processroute/dao/PdmBiProcessroute.java @@ -72,12 +72,12 @@ public class PdmBiProcessroute implements Serializable { /** * 修改人 */ - private String update_optid; + private String update_id; /** * 修改人姓名 */ - private String update_optname; + private String update_name; /** * 修改时间 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/processroute/impl/PdmBiProcessrouteServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/processroute/impl/PdmBiProcessrouteServiceImpl.java index baa39482..9fdcb26f 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/processroute/impl/PdmBiProcessrouteServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/processroute/impl/PdmBiProcessrouteServiceImpl.java @@ -114,9 +114,9 @@ public class PdmBiProcessrouteServiceImpl extends ServiceImpl dtlArr = pdmBiProcessroutedtlService.list(new QueryWrapper().eq("processroute_id", processroute_id)); @@ -154,8 +154,8 @@ public class PdmBiProcessrouteServiceImpl extends ServiceImpl() .set("is_delete","1") - .set("update_optid",SecurityUtils.getCurrentUserId()) - .set("update_optname",SecurityUtils.getCurrentNickName()) + .set("update_id",SecurityUtils.getCurrentUserId()) + .set("update_name",SecurityUtils.getCurrentNickName()) .set("update_time",DateUtil.now()) .in("processroute_id",ids)); } @@ -178,8 +178,8 @@ public class PdmBiProcessrouteServiceImpl extends ServiceImpl() .set("processroute_status","10") - .set("update_optid",SecurityUtils.getCurrentUserId()) - .set("update_optname",SecurityUtils.getCurrentNickName()) + .set("update_id",SecurityUtils.getCurrentUserId()) + .set("update_name",SecurityUtils.getCurrentNickName()) .set("update_time",DateUtil.now()) .set("audit_id"," ") .set("audit_name"," ") @@ -191,8 +191,8 @@ public class PdmBiProcessrouteServiceImpl extends ServiceImpl() .set("processroute_status","20") - .set("update_optid",SecurityUtils.getCurrentUserId()) - .set("update_optname",SecurityUtils.getCurrentNickName()) + .set("update_id",SecurityUtils.getCurrentUserId()) + .set("update_name",SecurityUtils.getCurrentNickName()) .set("update_time",DateUtil.now()) .set("audit_id",SecurityUtils.getCurrentUserId()) .set("audit_name",SecurityUtils.getCurrentNickName()) diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/productProcessRoute/dao/PdmBiProductprocessroute.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/productProcessRoute/dao/PdmBiProductprocessroute.java index 1a9a2091..d39e27ea 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/productProcessRoute/dao/PdmBiProductprocessroute.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/productProcessRoute/dao/PdmBiProductprocessroute.java @@ -69,12 +69,12 @@ public class PdmBiProductprocessroute implements Serializable { /** * 修改人 */ - private String update_optid; + private String update_id; /** * 修改人姓名 */ - private String update_optname; + private String update_name; /** * 修改时间 @@ -84,12 +84,12 @@ public class PdmBiProductprocessroute implements Serializable { /** * 审核人 */ - private String audit_optid; + private String audit_id; /** * 审核人姓名 */ - private String audit_optname; + private String audit_name; /** * 审核时间 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/productProcessRoute/impl/PdmBiProductprocessrouteServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/productProcessRoute/impl/PdmBiProductprocessrouteServiceImpl.java index c4af9047..91b04f0e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/productProcessRoute/impl/PdmBiProductprocessrouteServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/service/productProcessRoute/impl/PdmBiProductprocessrouteServiceImpl.java @@ -151,7 +151,7 @@ public class PdmBiProductprocessrouteServiceImpl extends ServiceImpl().set("remark", jo.getString("remark")).set("class_id", jo.getString("class_id")).set("detail_count", rows.size()).set("update_optid", SecurityUtils.getCurrentUserId()).set("update_optname", SecurityUtils.getCurrentNickName()).set("update_time", DateUtil.now()).eq("productprocess_id", jo.getString("productprocess_id"))); + this.update(new UpdateWrapper().set("remark", jo.getString("remark")).set("class_id", jo.getString("class_id")).set("detail_count", rows.size()).set("update_id", SecurityUtils.getCurrentUserId()).set("update_name", SecurityUtils.getCurrentNickName()).set("update_time", DateUtil.now()).eq("productprocess_id", jo.getString("productprocess_id"))); productprocessroutedtlService.remove(new QueryWrapper().eq("productprocess_id", jo.getString("productprocess_id"))); for (int i = 0; i < rows.size(); i++) { JSONObject row = rows.getJSONObject(i); @@ -164,7 +164,7 @@ public class PdmBiProductprocessrouteServiceImpl extends ServiceImpl().set("is_delete", "1").set("update_optid", SecurityUtils.getCurrentUserId()).set("update_optname", SecurityUtils.getCurrentNickName()).set("update_time", DateUtil.now()).in("productprocess_id", ids)); + this.update(new UpdateWrapper().set("is_delete", "1").set("update_id", SecurityUtils.getCurrentUserId()).set("update_name", SecurityUtils.getCurrentNickName()).set("update_time", DateUtil.now()).in("productprocess_id", ids)); } @Override @@ -185,12 +185,12 @@ public class PdmBiProductprocessrouteServiceImpl extends ServiceImpl().set("productprocess_status", "20").set("update_optid", SecurityUtils.getCurrentUserId()).set("update_optname", SecurityUtils.getCurrentNickName()).set("update_time", DateUtil.now()).set("audit_optid", SecurityUtils.getCurrentUserId()).set("audit_optname", SecurityUtils.getCurrentNickName()).set("audit_time", DateUtil.now()).eq("processroute_id", whereJson.getString("processroute_id"))); + this.update(new UpdateWrapper().set("productprocess_status", "20").set("update_id", SecurityUtils.getCurrentUserId()).set("update_name", SecurityUtils.getCurrentNickName()).set("update_time", DateUtil.now()).set("audit_id", SecurityUtils.getCurrentUserId()).set("audit_name", SecurityUtils.getCurrentNickName()).set("audit_time", DateUtil.now()).eq("processroute_id", whereJson.getString("processroute_id"))); } @Override public void unSubmit(JSONObject whereJson) { - this.update(new UpdateWrapper().set("productprocess_status", "10").set("update_optid", SecurityUtils.getCurrentUserId()).set("update_optname", SecurityUtils.getCurrentNickName()).set("update_time", DateUtil.now()).set("audit_optid", " ").set("audit_optname", " ").set("audit_time", " ").eq("processroute_id", whereJson.getString("processroute_id"))); + this.update(new UpdateWrapper().set("productprocess_status", "10").set("update_id", SecurityUtils.getCurrentUserId()).set("update_name", SecurityUtils.getCurrentNickName()).set("update_time", DateUtil.now()).set("audit_id", " ").set("audit_name", " ").set("audit_time", " ").eq("processroute_id", whereJson.getString("processroute_id"))); } @Override diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/rest/BomController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/rest/BomController.java index 557d0f67..ffdefe46 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/rest/BomController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/rest/BomController.java @@ -13,7 +13,9 @@ import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; import java.util.Map; /** @@ -106,4 +108,14 @@ public class BomController { return new ResponseEntity<>(HttpStatus.OK); } + /** + *导入bom数据 + */ + @Log("导入bom数据") + @PostMapping("/excelImport") + public ResponseEntity excelImport(@RequestParam("file") MultipartFile file, HttpServletRequest request) { + bomService.excelImport(file,request); + return new ResponseEntity<>(HttpStatus.OK); + } + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/BomService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/BomService.java index b4c241fb..f58e932a 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/BomService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/BomService.java @@ -5,7 +5,9 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.nl.wms.product_manage.备份pdm.service.dto.BomDto; import org.springframework.data.domain.Pageable; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.Map; @@ -33,10 +35,10 @@ public interface BomService { /** * 根据ID查询 - * @param bom_uuid ID + * @param bom_id ID * @return Bom */ - BomDto findById(String bom_uuid); + BomDto findById(String bom_id); /** * 根据编码查询 @@ -73,4 +75,12 @@ public interface BomService { void submits(JSONObject param); void cancelSubmit(JSONObject param); + + + /** + * excel导入 + * @param file + * @param request + */ + void excelImport(MultipartFile file, HttpServletRequest request); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/dto/BomDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/dto/BomDto.java index aee66c63..205931c4 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/dto/BomDto.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/dto/BomDto.java @@ -15,7 +15,7 @@ import java.math.BigDecimal; public class BomDto implements Serializable { /** BOM单标识 */ - private String bom_uuid; + private String bom_id; /** BOM单编码 */ private String bom_code; @@ -24,10 +24,10 @@ public class BomDto implements Serializable { private String bom_name; /** 物料标识 */ - private String material_uuid; + private String material_id; /** 产品工艺路线标识 */ - private String processroute_uuid; + private String processroute_id; /** 成材率百分比 */ private BigDecimal yield_rate; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/dto/ProcessrouteDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/dto/ProcessrouteDto.java index b1da83f4..84932d5e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/dto/ProcessrouteDto.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/dto/ProcessrouteDto.java @@ -55,10 +55,10 @@ public class ProcessrouteDto implements Serializable { private String update_time; /** 审核人 */ - private Long audit_optid; + private Long audit_id; /** 审核人姓名 */ - private String audit_optname; + private String audit_name; /** 审核时间 */ private String audit_time; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/dto/ProductprocessrouteDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/dto/ProductprocessrouteDto.java index e3cd2c2f..b5bbd4d5 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/dto/ProductprocessrouteDto.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/dto/ProductprocessrouteDto.java @@ -57,10 +57,10 @@ public class ProductprocessrouteDto implements Serializable { private String update_time; /** 审核人 */ - private Long audit_optid; + private Long audit_id; /** 审核人姓名 */ - private String audit_optname; + private String audit_name; /** 审核时间 */ private String audit_time; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/impl/BomServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/impl/BomServiceImpl.java index 8cd30c24..edea866a 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/impl/BomServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/impl/BomServiceImpl.java @@ -7,24 +7,34 @@ import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.poi.excel.ExcelReader; +import cn.hutool.poi.excel.ExcelUtil; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; - import lombok.RequiredArgsConstructor; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; +import org.nl.modules.system.util.CodeUtil; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.WqlUtil; import org.nl.wms.product_manage.备份pdm.service.BomService; import org.nl.wms.product_manage.备份pdm.service.dto.BomDto; - +import org.nl.wms.system_manage.service.user.ISysUserService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import org.springframework.web.multipart.MultipartFile; -import java.util.List; -import java.util.Map; +import javax.servlet.http.HttpServletRequest; +import java.io.InputStream; +import java.math.BigDecimal; +import java.util.*; /** * @description 服务实现 @@ -36,14 +46,18 @@ import java.util.Map; @Slf4j public class BomServiceImpl implements BomService { + @Autowired + ISysUserService userService; + @Override public Map queryAll(Map whereJson, Pageable page){ String material = MapUtil.getStr(whereJson, "material"); String bom = MapUtil.getStr(whereJson, "bom"); JSONObject map = new JSONObject(); map.put("flag", "1"); - if (StrUtil.isNotEmpty(material)) map.put("material", "%" + material + "%"); - if (StrUtil.isNotEmpty(bom)) map.put("bom", "%" + bom + "%"); + if (StrUtil.isNotEmpty(material)) + {map.put("material", "%" + material + "%");} + if (StrUtil.isNotEmpty(bom)) {map.put("bom", "%" + bom + "%");} JSONObject json = WQL.getWO("PDM_BI_BOM01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "bom.update_time desc"); return json; } @@ -52,14 +66,14 @@ public class BomServiceImpl implements BomService { public List queryAll(Map whereJson){ WQLObject wo = WQLObject.getWQLObject("pdm_bi_bom"); JSONArray arr = wo.query().getResultJSONArray(0); - if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(BomDto.class); + if (ObjectUtil.isNotEmpty(arr)) {return arr.toJavaList(BomDto.class);} return null; } @Override - public BomDto findById(String bom_uuid) { + public BomDto findById(String bom_id) { WQLObject wo = WQLObject.getWQLObject("pdm_bi_bom"); - JSONObject json = wo.query("bom_uuid = '" + bom_uuid + "'").uniqueResult(0); + JSONObject json = wo.query("bom_id = '" + bom_id + "'").uniqueResult(0); if (ObjectUtil.isNotEmpty(json)){ return json.toJavaObject( BomDto.class); } @@ -82,33 +96,33 @@ public class BomServiceImpl implements BomService { WQLObject wo_bom = WQLObject.getWQLObject("pdm_bi_bom"); WQLObject wo_bomdtl = WQLObject.getWQLObject("PDM_BI_BOMDtl"); final JSONArray jsonArray = param.getJSONArray("tableData"); - final String material_uuid = param.getString("material_uuid"); - final JSONObject jsonObject1 = wo_bom.query("material_uuid = '" + material_uuid + "'").uniqueResult(0); + final String material_id = param.getString("material_id"); + final JSONObject jsonObject1 = wo_bom.query("material_id = '" + material_id + "'").uniqueResult(0); if (ObjectUtil.isNotEmpty(jsonObject1)){ throw new BadRequestException("物料已经存在,请重新选择"); } String currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); - String bom_uuid = IdUtil.getSnowflake(1, 1).nextId() + ""; - param.put("bom_uuid",bom_uuid); + String bom_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + param.put("bom_id",bom_id); param.put("bom_status","01"); param.put("detail_count",jsonArray.size()); param.put("create_id",currentUserId); param.put("create_name",nickName); param.put("create_time",DateUtil.now()); - param.put("update_optid",currentUserId); - param.put("update_optname",nickName); + param.put("update_id",currentUserId); + param.put("update_name",nickName); param.put("update_time",DateUtil.now()); wo_bom.insert(param); if (jsonArray.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { JSONObject map = new JSONObject(); final JSONObject jsonObject = jsonArray.getJSONObject(i); - map.put("bomdtl_uuid",IdUtil.getSnowflake(1, 1).nextId() + ""); - map.put("bom_uuid",bom_uuid); - map.put("workprocedure_uuid",jsonObject.getString("workprocedure_uuid")); - map.put("material_uuid",jsonObject.getString("material_uuid")); + map.put("bomdtl_id",IdUtil.getSnowflake(1, 1).nextId() + ""); + map.put("bom_id",bom_id); + map.put("workprocedure_id",jsonObject.getString("workprocedure_id")); + map.put("material_id",jsonObject.getString("material_id")); map.put("yield_rate",jsonObject.getString("yield_rate")); map.put("endproduct_rate",jsonObject.getString("endproduct_rate")); map.put("piece_weight",jsonObject.getString("piece_weight")); @@ -129,15 +143,15 @@ public class BomServiceImpl implements BomService { String nickName = SecurityUtils.getCurrentNickName(); param.put("detail_count",jsonArray.size()); - param.put("update_optid",currentUserId); - param.put("update_optname",nickName); + param.put("update_id",currentUserId); + param.put("update_name",nickName); param.put("update_time",DateUtil.now()); wo_bom.update(param); if (jsonArray.size() > 0) { for (int i = 0; i < jsonArray.size(); i++) { JSONObject map = new JSONObject(); final JSONObject jsonObject = jsonArray.getJSONObject(i); - map.put("bomdtl_uuid",jsonObject.getString("bomdtl_uuid")); + map.put("bomdtl_id",jsonObject.getString("bomdtl_id")); map.put("yield_rate",jsonObject.getString("yield_rate")); map.put("endproduct_rate",jsonObject.getString("endproduct_rate")); map.put("piece_weight",jsonObject.getString("piece_weight")); @@ -151,30 +165,30 @@ public class BomServiceImpl implements BomService { public void deleteAll(String[] ids) { WQLObject wo = WQLObject.getWQLObject("pdm_bi_bom"); WQLObject wo_dtl = WQLObject.getWQLObject("PDM_BI_BOMDtl"); - for (String bom_uuid: ids) { - wo.delete("bom_uuid = '"+bom_uuid+"'"); - wo_dtl.delete("bom_uuid = '"+bom_uuid+"'"); + for (String bom_id: ids) { + wo.delete("bom_id = '"+bom_id+"'"); + wo_dtl.delete("bom_id = '"+bom_id+"'"); } } @Override public JSONObject getProduceProcessRouteByMaterialId(JSONObject param) { WQLObject wo = WQLObject.getWQLObject("PDM_BI_ProductProcessRoute"); - final JSONObject jsonObject = wo.query("is_delete = '0' and productprocess_status = '20' and material_id = '" + param.getString("material_uuid") + "'").uniqueResult(0); + final JSONObject jsonObject = wo.query("is_delete = '0' and productprocess_status = '20' and material_id = '" + param.getString("material_id") + "'").uniqueResult(0); return jsonObject; } @Override public JSONObject getworkprocedureListByProduceProcessRouteId(JSONObject param) { JSONObject json = new JSONObject(); - final String material_uuid = param.getString("material_uuid"); + final String material_id = param.getString("material_id"); WQLObject wo_endrealsemimaterial = WQLObject.getWQLObject("md_me_endrealsemimaterial"); WQLObject wo_material = WQLObject.getWQLObject("md_me_materialbase"); - final JSONObject jsonEndrealsemimaterial = wo_endrealsemimaterial.query("end_material_id = '" + material_uuid + "'").uniqueResult(0); + final JSONObject jsonEndrealsemimaterial = wo_endrealsemimaterial.query("end_material_id = '" + material_id + "'").uniqueResult(0); final JSONObject semi_material = wo_material.query("is_delete = '0' and material_id = '" + jsonEndrealsemimaterial.getString("semi_material_id") + "'").uniqueResult(0); WQLObject wo = WQLObject.getWQLObject("PDM_BI_ProductProcessRouteDtl"); WQLObject wo_workprocedure = WQLObject.getWQLObject("pdm_bi_workprocedure"); - final JSONArray resultJSONArray = wo.query("productprocess_id = '" + param.getString("processroute_uuid") + "'","workprocedure_no").getResultJSONArray(0); + final JSONArray resultJSONArray = wo.query("productprocess_id = '" + param.getString("processroute_id") + "'","workprocedure_no").getResultJSONArray(0); JSONArray newJ = new JSONArray(); for (int i = 0; i < resultJSONArray.size(); i++) { JSONObject jsonObject = resultJSONArray.getJSONObject(i); @@ -190,10 +204,10 @@ public class BomServiceImpl implements BomService { @Override public JSONArray getDtl(JSONObject param) { - final String bom_uuid = param.getString("bom_uuid"); + final String bom_id = param.getString("bom_id"); JSONObject map = new JSONObject(); map.put("flag","2"); - map.put("bom_uuid",bom_uuid); + map.put("bom_id",bom_id); JSONArray json = WQL.getWO("PDM_BI_BOM01").addParamMap(map).process().getResultJSONArray(0); return json; } @@ -205,12 +219,12 @@ public class BomServiceImpl implements BomService { String currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); - final String bom_uuid = param.getString("bom_uuid"); + final String bom_id = param.getString("bom_id"); JSONObject map = new JSONObject(); - map.put("bom_uuid",bom_uuid); + map.put("bom_id",bom_id); map.put("bom_status","02"); - map.put("update_optid",currentUserId); - map.put("update_optname",nickName); + map.put("update_id",currentUserId); + map.put("update_name",nickName); map.put("update_time",DateUtil.now()); wo_bom.update(map); } @@ -222,14 +236,253 @@ public class BomServiceImpl implements BomService { String currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); - final String bom_uuid = param.getString("bom_uuid"); + final String bom_id = param.getString("bom_id"); JSONObject map = new JSONObject(); - map.put("bom_uuid",bom_uuid); + map.put("bom_id",bom_id); map.put("bom_status","01"); - map.put("update_optid",currentUserId); - map.put("update_optname",nickName); + map.put("update_id",currentUserId); + map.put("update_name",nickName); map.put("update_time",DateUtil.now()); wo_bom.update(map); } + @Override + @Transactional(rollbackFor = Exception.class) + public void excelImport(MultipartFile file, HttpServletRequest request) { + if(file.isEmpty()) { + throw new BadRequestException("文件为空,请添加数据后重新导入"); + } + try(InputStream inputStream = file.getInputStream()) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + //Bom主表 + WQLObject wo_pdm_bi_bom = WQLObject.getWQLObject("pdm_bi_bom"); + //Bom明细表 + WQLObject wo_pdm_bomdtl_aps = WQLObject.getWQLObject("pdm_bi_bomdtl_aps"); + //物料表 + WQLObject wo_material = WQLObject.getWQLObject("md_me_materialbase"); + //原材料对应半成品 + WQLObject wo_semirealrawmaterial = WQLObject.getWQLObject("md_me_semirealrawmaterial"); + //设备表 + WQLObject wo_device = WQLObject.getWQLObject("pdm_bi_device"); + //工序表 + WQLObject wo_workprocedure = WQLObject.getWQLObject("pdm_bi_workprocedure"); + //工艺路线 + WQLObject wo_processroute = WQLObject.getWQLObject("pdm_bi_processroute"); + ExcelReader excelReader = ExcelUtil.getReader(inputStream, 0); + List> read = excelReader.read(0, excelReader.getRowCount()); + Map errorMap = new HashMap(); + boolean isCreateBom = true; + // 循环获取的数据 + row: + for(int i = 1; i < read.size(); i++) { + List list = read.get(i); + if(ObjectUtil.isEmpty(list)) { + continue; + } + JSONObject param = new JSONObject(); + //循环每一行 + col: + for(int j = 0; j < list.size(); j++) { + String col = null == list.get(j) ? "" : String.valueOf(list.get(j)); + if(j == 0) { + if(StringUtils.isBlank(col)) { + throw new BadRequestException("物料编号不能为空!"); + } + JSONObject jsonMaterial = wo_material.query("is_delete = '0' and material_code = '" + col + "'").uniqueResult(0); + if(ObjectUtil.isEmpty(jsonMaterial)) { + errorMap.put("第" + i + "行" + col, "物料规格对应物料信息不存在"); + } + else{ + JSONObject jsonBom = wo_pdm_bi_bom.query("material_id = '" + jsonMaterial.getString("material_id") + "'").uniqueResult(0); + if(!ObjectUtil.isEmpty(jsonBom)) { + param.put("bom_id", jsonBom.getString("bom_id")); + isCreateBom = false; + } + else{ + param.put("bom_id", IdUtil.getSnowflake(1, 1).nextId()); + param.put("bom_code", "BOM" + jsonMaterial.getString("material_spec")); + isCreateBom = true; + } + param.put("material_code", col); + param.put("material_id", jsonMaterial.getString("material_id")); + param.put("material_spec", jsonMaterial.getString("material_spec")); + param.put("bom_name", jsonMaterial.getString("material_spec")); + } + } + if(j == 3) { + //数量计量单位名称 + param.put("qty_unit_name", col); + } + if(j == 4) { + //工艺路线代码 + if(StringUtils.isBlank(col)) { + throw new BadRequestException("工艺路线代码不能为空"); + } + JSONObject jsonProcessroute = wo_processroute.query("is_delete = '0' and processroute_code = '" + col + "'").uniqueResult(0); + if(ObjectUtil.isEmpty(jsonProcessroute)) { + errorMap.put("第" + i + "行" + col, "工艺路线信息不存在"); + } + else{ + param.put("processroute_id", jsonProcessroute.getString("processroute_id")); + param.put("processroute_name", jsonProcessroute.getString("processroute_name")); + } + param.put("processroute_code", col); + } + // if(j == 6) { + // //成材率 + // if(StringUtils.isBlank(col)) { + // throw new BadRequestException("成材率不能为空"); + // } + // param.put("yield_rate", col); + // } + // if(j == 7) { + // //合格率 + // if(StringUtils.isBlank(col)) { + // throw new BadRequestException("合格率不能为空"); + // } + // param.put("endproduct_rate", col); + // } + if(j == 8) { + //产能 + if(StringUtils.isBlank(col)) { + param.put("manufacture", "0"); + } + else{ + param.put("manufacture", col + "ph"); + } + } + if(j == 9) { + //产品单重 + param.put("piece_weight", col); + } + if(j == 10) { + //工序编号 + if(StringUtils.isBlank(col)) { + throw new BadRequestException("工序编号不能为空"); + } + //绕过仓储工序 + if(col.contains("A1_CC")) { + break; + } + //判断是否前段工序 + if(col.contains("A1_SKQX") || col.contains("A1_KZ") || col.contains("A1_BZ") || col.contains("A1_MP")) { + param.put("is_front", "0"); + } + else{ + param.put("is_front", "1"); + } + JSONObject jsonWorkprocedure = wo_workprocedure.query("is_used = '1' and workprocedure_code = '" + col + "'").uniqueResult(0); + if(ObjectUtil.isEmpty(jsonWorkprocedure)) { + errorMap.put("请检查第" + i + "行" + col , "所匹配的工序信息不存在!"); + } + else{ + param.put("workprocedure_id", jsonWorkprocedure.getString("workprocedure_id")); + param.put("workprocedure_name", jsonWorkprocedure.getString("workprocedure_name")); + } + } + if(j == 12) { + if(!StringUtils.isBlank(col)) { + //工序顺序号 + param.put("workprocedure_no", col); + JSONObject bomDtlParam = new JSONObject(); + param.put("yield_rate", "0"); + param.put("endproduct_rate", "1"); + bomDtlParam.put("bomdtl_id", IdUtil.getSnowflake(1, 1).nextId()); + bomDtlParam.put("bom_id", param.getString("bom_id")); + bomDtlParam.put("material_id", param.getString("material_id")); + bomDtlParam.put("material_code", param.getString("material_code")); + bomDtlParam.put("material_spec", param.getString("material_spec")); + bomDtlParam.put("piece_weight", param.getString("piece_weight")); + bomDtlParam.put("qty_unit_name", param.getString("qty_unit_name")); + bomDtlParam.put("processroute_id", param.getString("processroute_id")); + bomDtlParam.put("workprocedure_id", param.getString("workprocedure_id")); + bomDtlParam.put("workprocedure_no", param.getString("workprocedure_no")); + bomDtlParam.put("workprocedure_name", param.getString("workprocedure_name")); + bomDtlParam.put("connection_method", "ES"); + bomDtlParam.put("is_front", param.getString("is_front")); + bomDtlParam.put("bom_status", "01"); + bomDtlParam.put("create_id", currentUserId); + bomDtlParam.put("create_name", nickName); + bomDtlParam.put("create_time", DateUtil.now()); + bomDtlParam.put("manufacture", param.getString("manufacture")); + bomDtlParam.put("instruction_type", "I"); + bomDtlParam.put("instruction_code", "In0"); + bomDtlParam.put("yield_rate", param.getString("yield_rate")); + bomDtlParam.put("endproduct_rate", param.getString("endproduct_rate")); + if("10".equals(col)) { + bomDtlParam.put("instruction_code", "In"); + JSONObject rawmaterialJson = wo_semirealrawmaterial.query("semi_material_id = '" + param.getString("material_id") + "'").uniqueResult(0); + if(!ObjectUtil.isEmpty(rawmaterialJson)) { + bomDtlParam.put("resources", rawmaterialJson.getString("raw_material_code")); + bomDtlParam.put("manufacture", rawmaterialJson.getString("rate_qty")); + } + else{ + bomDtlParam.put("resources", "0"); + bomDtlParam.put("manufacture", "0"); + } + } + else{ + //后段暂无产能 + int no = Integer.parseInt(col) - 10; + bomDtlParam.put("resources", param.getString("material_code") + "-" + no); + bomDtlParam.put("manufacture", ""); + } + //插入原材料明细 + wo_pdm_bomdtl_aps.insert(bomDtlParam); + } + } + if(j == 13) { + //插入设备明细 + JSONArray deviceList = wo_device.query("is_delete = '0' and product_area = 'A1' and workprocedure_id = '" + param.getString("workprocedure_id") + "'").getResultJSONArray(0); + JSONObject bomDtlParam = new JSONObject(); + for(int d = 0; d < deviceList.size(); d++) { + JSONObject device = deviceList.getJSONObject(d); + bomDtlParam.put("resources", device.getString("device_code")); + bomDtlParam.put("bomdtl_id", IdUtil.getSnowflake(1, 1).nextId()); + bomDtlParam.put("bom_id", param.getString("bom_id")); + bomDtlParam.put("material_id", param.getString("material_id")); + bomDtlParam.put("material_code", param.getString("material_code")); + bomDtlParam.put("material_spec", param.getString("material_spec")); + bomDtlParam.put("qty_unit_name", param.getString("qty_unit_name")); + bomDtlParam.put("processroute_id", param.getString("processroute_id")); + bomDtlParam.put("workprocedure_id", param.getString("workprocedure_id")); + bomDtlParam.put("workprocedure_no", param.getString("workprocedure_no")); + bomDtlParam.put("workprocedure_name", param.getString("workprocedure_name")); + bomDtlParam.put("is_front", param.getString("is_front")); + bomDtlParam.put("piece_weight", param.getString("piece_weight")); + bomDtlParam.put("connection_method", "ES"); + bomDtlParam.put("bom_status", "01"); + bomDtlParam.put("create_id", currentUserId); + bomDtlParam.put("create_name", nickName); + bomDtlParam.put("create_time", DateUtil.now()); + bomDtlParam.put("manufacture", param.getString("manufacture")); + bomDtlParam.put("instruction_type", "U"); + bomDtlParam.put("instruction_code", "M"); + //插入明细表 + wo_pdm_bomdtl_aps.insert(bomDtlParam); + } + } + } + param.put("bom_status", "01"); + param.put("create_mode", "03"); + param.put("create_id", currentUserId); + param.put("create_name", nickName); + param.put("create_time", DateUtil.now()); + if(isCreateBom) { + //插入主表 + wo_pdm_bi_bom.insert(param); + } + if(!CollectionUtils.isEmpty(errorMap)) { + throw new BadRequestException(JSON.toJSONString(errorMap)); + } + } + } + catch(Exception e) { + e.printStackTrace(); + throw new BadRequestException(e.getMessage()); + } + } + + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/impl/FactoryCalendarServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/impl/FactoryCalendarServiceImpl.java index 7f0ae7ee..bf878e81 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/impl/FactoryCalendarServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/impl/FactoryCalendarServiceImpl.java @@ -224,8 +224,8 @@ public class FactoryCalendarServiceImpl implements FactoryCalendarService{ JSONObject param = new JSONObject(); param.put("factorycalendar_id", String.valueOf(factorycalendar_id)); param.put("is_delete", "1"); - param.put("update_optid", currentUserId); - param.put("update_optname", nickName); + param.put("update_id", currentUserId); + param.put("update_name", nickName); param.put("update_time", DateUtil.now()); wo.update(param); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/wql/PDM_BI_BOM01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/wql/PDM_BI_BOM01.wql index 72b56cfb..a80256a1 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/wql/PDM_BI_BOM01.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/wql/PDM_BI_BOM01.wql @@ -16,7 +16,7 @@ 输入.flag TYPEAS s_string 输入.bom TYPEAS s_string 输入.material TYPEAS s_string - 输入.bom_uuid TYPEAS s_string + 输入.bom_id TYPEAS s_string [临时表] @@ -50,8 +50,8 @@ material.material_spec FROM PDM_BI_BOM bom - left join md_me_materialbase material on bom.material_uuid = material.material_id - left join PDM_BI_ProductProcessRoute productProcessRoute on bom.processroute_uuid = productProcessRoute.productprocess_id + left join md_me_materialbase material on bom.material_id = material.material_id + left join PDM_BI_ProductProcessRoute productProcessRoute on bom.processroute_id = productProcessRoute.productprocess_id WHERE 1 = 1 OPTION 输入.material <> "" @@ -77,10 +77,10 @@ material.material_name FROM PDM_BI_BOMDtl dtl - LEFT JOIN pdm_bi_workprocedure workprocedure ON dtl.workprocedure_uuid = workprocedure.workprocedure_id - LEFT JOIN md_me_materialbase material ON dtl.material_uuid = material.material_id + LEFT JOIN pdm_bi_workprocedure workprocedure ON dtl.workprocedure_id = workprocedure.workprocedure_id + LEFT JOIN md_me_materialbase material ON dtl.material_id = material.material_id where - dtl.bom_uuid = 输入.bom_uuid + dtl.bom_id = 输入.bom_id order by dtl.seq_no ENDSELECT diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/wql/pdm.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/wql/pdm.xls index d00588e9ee0833a0ae3444b5b3b192d74bc5edd8..66f68e16d2ca5e6331895c0fc824aa05cbe4ba28 100644 GIT binary patch delta 14782 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 - - + + - + @@ -80,16 +87,16 @@ :header-cell-style="{'text-align':'center'}" @selection-change="crud.selectionChangeHandler" > - - - - - - - - - - + + + + + + + + + + + diff --git a/mes/qd/src/views/wms/pdm/base/bom/index.vue b/mes/qd/src/views/wms/pdm/base/bom/index.vue index 9776b6d2..e28c3726 100644 --- a/mes/qd/src/views/wms/pdm/base/bom/index.vue +++ b/mes/qd/src/views/wms/pdm/base/bom/index.vue @@ -12,6 +12,16 @@ + + 导入 + {{ scope.row.bom_code }} - - - - - - - - + + + + + + + + - + - + @@ -87,12 +102,13 @@ import crudOperation from '@crud/CRUD.operation' import udOperation from '@crud/UD.operation' import pagination from '@crud/Pagination' import AddDialog from '@/views/wms/pdm/base/bom/AddDialog' +import UploadDialog from '@/views/wms/pdm/base/bom/UploadDialog' const defaultForm = { bom_uuid: null, bom_code: null, bom_name: null, material_uuid: null, processroute_uuid: null, yield_rate: null, endproduct_rate: null, bom_status: null, detail_count: null, remark: null, create_id: null, create_name: null, create_time: null, update_optid: null, update_optname: null, update_time: null } export default { name: 'Bom', dicts: ['BOM_STATUS'], - components: { pagination, crudOperation, rrOperation, udOperation, AddDialog }, + components: { pagination, crudOperation, rrOperation, udOperation, AddDialog, UploadDialog }, mixins: [presenter(), header(), form(defaultForm), crud()], cruds() { return CRUD({ title: 'BOM单管理', url: 'api/bom', idField: 'bom_uuid', sort: 'bom_uuid,desc', @@ -107,6 +123,7 @@ export default { }, data() { return { + uploadShow: false, permission: { }, rules: { @@ -149,6 +166,9 @@ export default { return true } }, + tableChanged3() { + this.crud.toQuery() + }, // 取消提交 cancelSubmit(row) { crudBom.cancelSubmit({ bom_uuid: row.bom_uuid }).then(res => { From d43b0ba9eb98f265dccf280a7930fa2ab9d7dc27 Mon Sep 17 00:00:00 2001 From: baoge <751575283@qq.com> Date: Thu, 20 Jul 2023 16:10:16 +0800 Subject: [PATCH 3/6] =?UTF-8?q?rev:=E4=BF=AE=E6=94=B9bom=E5=8D=95=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E8=A1=A8=E5=A2=9E=E5=8A=A0aps=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/BomServiceImpl.java | 6 +++--- .../wms/product_manage/备份pdm/wql/pdm.xls | Bin 223232 -> 222208 bytes 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/impl/BomServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/impl/BomServiceImpl.java index edea866a..b0a58e0b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/impl/BomServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/service/impl/BomServiceImpl.java @@ -258,7 +258,7 @@ public class BomServiceImpl implements BomService { //Bom主表 WQLObject wo_pdm_bi_bom = WQLObject.getWQLObject("pdm_bi_bom"); //Bom明细表 - WQLObject wo_pdm_bomdtl_aps = WQLObject.getWQLObject("pdm_bi_bomdtl_aps"); + WQLObject pdm_bi_bomdtl = WQLObject.getWQLObject("pdm_bi_bomdtl"); //物料表 WQLObject wo_material = WQLObject.getWQLObject("md_me_materialbase"); //原材料对应半成品 @@ -429,7 +429,7 @@ public class BomServiceImpl implements BomService { bomDtlParam.put("manufacture", ""); } //插入原材料明细 - wo_pdm_bomdtl_aps.insert(bomDtlParam); + pdm_bi_bomdtl.insert(bomDtlParam); } } if(j == 13) { @@ -460,7 +460,7 @@ public class BomServiceImpl implements BomService { bomDtlParam.put("instruction_type", "U"); bomDtlParam.put("instruction_code", "M"); //插入明细表 - wo_pdm_bomdtl_aps.insert(bomDtlParam); + pdm_bi_bomdtl.insert(bomDtlParam); } } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/wql/pdm.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/wql/pdm.xls index 66f68e16d2ca5e6331895c0fc824aa05cbe4ba28..ab37737b5ebda35fc0fb7e59640b39d9d2001b10 100644 GIT binary patch delta 5518 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 l@pty*{%v9TF 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 From 76d42e71fc0adbf3b6b88725e3c3ee0166012da9 Mon Sep 17 00:00:00 2001 From: zhouz <> Date: Fri, 21 Jul 2023 17:24:01 +0800 Subject: [PATCH 4/6] =?UTF-8?q?rev:=E7=BB=B4=E6=8A=A4=E9=94=80=E5=94=AE?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E3=80=81=E5=B7=A5=E8=89=BA=E8=B7=AF=E7=BA=BF?= =?UTF-8?q?=E3=80=81=E4=BA=A7=E5=93=81=E5=B7=A5=E8=89=BA=E8=B7=AF=E7=BA=BF?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sap/service/impl/WmsToSapServiceImpl.java | 2 +- .../saleorder/service/dao/MpsSaleOrder.java | 15 ++++++--------- .../dao/mapper/xml/MpsSaleOrderMapper.xml | 6 ++++++ .../service/impl/MpsSaleOrderServiceImpl.java | 6 +++--- .../dao/PdmBiProductprocessroute.java | 4 ++-- .../PdmBiProductprocessrouteServiceImpl.java | 4 ++-- .../wms/product_manage/备份pdm/wql/pdm.xls | Bin 222208 -> 222208 bytes .../src/views/wms/pdm/base/bom/AddDialog.vue | 4 ++-- .../wms/pdm/base/productRoute/AddDialog.vue | 8 ++++---- 9 files changed, 26 insertions(+), 23 deletions(-) diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/sap/service/impl/WmsToSapServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/sap/service/impl/WmsToSapServiceImpl.java index 2c691cbc..7200ed3d 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/sap/service/impl/WmsToSapServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/sap/service/impl/WmsToSapServiceImpl.java @@ -175,7 +175,7 @@ public class WmsToSapServiceImpl implements WmsToSapService { } //sale_jo.setPlandeliver_date(row.getString("Edatu")); sale_jo.setCreate_id(SecurityUtils.getCurrentUserId()); - sale_jo.setCreate_time(new Date()); + sale_jo.setCreate_time(DateUtil.now()); sale_jo.setCreate_name(SecurityUtils.getCurrentNickName()); if (need_update) { saleOrderService.updateById(sale_jo); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/saleorder/service/dao/MpsSaleOrder.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/saleorder/service/dao/MpsSaleOrder.java index f493f88f..d36be4b5 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/saleorder/service/dao/MpsSaleOrder.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/saleorder/service/dao/MpsSaleOrder.java @@ -1,16 +1,13 @@ package org.nl.wms.mps_manage.saleorder.service.dao; -import java.math.BigDecimal; - import com.baomidou.mybatisplus.annotation.*; - -import java.io.Serializable; -import java.util.Date; - import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import java.io.Serializable; +import java.math.BigDecimal; + /** *

* 生产订单表 @@ -94,7 +91,7 @@ public class MpsSaleOrder implements Serializable{ * 计划交期 */ @ApiModelProperty(value = "/**计划交期*/") - private Date plandeliver_date; + private String plandeliver_date; /** * 创建人 */ @@ -110,7 +107,7 @@ public class MpsSaleOrder implements Serializable{ */ @ApiModelProperty(value = "/**创建时间*/") @TableField(fill = FieldFill.INSERT) - private Date create_time; + private String create_time; /** * 提交人 */ @@ -216,5 +213,5 @@ public class MpsSaleOrder implements Serializable{ * aps变更时间 */ @ApiModelProperty(value = "/**aps变更时间*/") - private Date aps_update_time; + private String aps_update_time; } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/saleorder/service/dao/mapper/xml/MpsSaleOrderMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/saleorder/service/dao/mapper/xml/MpsSaleOrderMapper.xml index 690ee974..7c2edeb5 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/saleorder/service/dao/mapper/xml/MpsSaleOrderMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/saleorder/service/dao/mapper/xml/MpsSaleOrderMapper.xml @@ -26,6 +26,12 @@ and der.cust_code >= #{query.cust_code} + + and der.create_time >= #{query.start_time} + + + and #{query.end_time} >= der.create_time + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/saleorder/service/impl/MpsSaleOrderServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/saleorder/service/impl/MpsSaleOrderServiceImpl.java index 056b9f5c..ede19516 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/saleorder/service/impl/MpsSaleOrderServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps_manage/saleorder/service/impl/MpsSaleOrderServiceImpl.java @@ -112,7 +112,7 @@ public class MpsSaleOrderServiceImpl extends ServiceImpl().eq("cust_code", mpsSaleOrder.getCust_code())); mpsSaleOrder.setCust_id(cust.getCust_id()); mpsSaleOrder.setCust_name(cust.getCust_name()); @@ -147,7 +147,7 @@ public class MpsSaleOrderServiceImpl extends ServiceImpl().set("productprocess_status", "20").set("update_id", SecurityUtils.getCurrentUserId()).set("update_name", SecurityUtils.getCurrentNickName()).set("update_time", DateUtil.now()).set("audit_id", SecurityUtils.getCurrentUserId()).set("audit_name", SecurityUtils.getCurrentNickName()).set("audit_time", DateUtil.now()).eq("processroute_id", whereJson.getString("processroute_id"))); + this.update(new UpdateWrapper().set("productprocess_status", "20").set("update_id", SecurityUtils.getCurrentUserId()).set("update_name", SecurityUtils.getCurrentNickName()).set("update_time", DateUtil.now()).set("audit_optid", SecurityUtils.getCurrentUserId()).set("audit_optname", SecurityUtils.getCurrentNickName()).set("audit_time", DateUtil.now()).eq("productprocess_id", whereJson.getString("productprocess_id"))); } @Override public void unSubmit(JSONObject whereJson) { - this.update(new UpdateWrapper().set("productprocess_status", "10").set("update_id", SecurityUtils.getCurrentUserId()).set("update_name", SecurityUtils.getCurrentNickName()).set("update_time", DateUtil.now()).set("audit_id", " ").set("audit_name", " ").set("audit_time", " ").eq("processroute_id", whereJson.getString("processroute_id"))); + this.update(new UpdateWrapper().set("productprocess_status", "10").set("update_id", SecurityUtils.getCurrentUserId()).set("update_name", SecurityUtils.getCurrentNickName()).set("update_time", DateUtil.now()).set("audit_optid", " ").set("audit_optname", " ").set("audit_time", " ").eq("productprocess_id", whereJson.getString("productprocess_id"))); } @Override diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/wql/pdm.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/product_manage/备份pdm/wql/pdm.xls index ab37737b5ebda35fc0fb7e59640b39d9d2001b10..5f3eac40628449ef06207c2b9b913a566784d3bd 100644 GIT binary patch delta 54034 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 Wu;3kb^MqjT{)R!pL%iM|`u_kU{A+gr diff --git a/mes/qd/src/views/wms/pdm/base/bom/AddDialog.vue b/mes/qd/src/views/wms/pdm/base/bom/AddDialog.vue index 6b73d920..0e928ed1 100644 --- a/mes/qd/src/views/wms/pdm/base/bom/AddDialog.vue +++ b/mes/qd/src/views/wms/pdm/base/bom/AddDialog.vue @@ -216,10 +216,10 @@ export default { this.form.material_spec = row.material_spec this.form.bom_code = 'BOM' + row.material_spec this.form.bom_name = row.material_name - this.getProduceProcessRouteByMaterialId(this.form.material_uuid) + this.getProduceProcessRouteByMaterialId(this.form.material_id) }, getProduceProcessRouteByMaterialId(material_uuid) { - crudBom.getProduceProcessRouteByMaterialId({ material_uuid: material_uuid }).then(res => { + crudBom.getProduceProcessRouteByMaterialId({ material_id: material_uuid }).then(res => { this.form.processroute_uuid = res.productprocess_id this.getworkprocedureListByProduceProcessRouteId(this.form.processroute_uuid, material_uuid) }) diff --git a/mes/qd/src/views/wms/pdm/base/productRoute/AddDialog.vue b/mes/qd/src/views/wms/pdm/base/productRoute/AddDialog.vue index a359b6ec..bbe0ac09 100644 --- a/mes/qd/src/views/wms/pdm/base/productRoute/AddDialog.vue +++ b/mes/qd/src/views/wms/pdm/base/productRoute/AddDialog.vue @@ -30,7 +30,7 @@ - + From 240d5aa8b44d05c7034ca4173ef93a12e475397d Mon Sep 17 00:00:00 2001 From: jiaoliming Date: Sat, 22 Jul 2023 11:53:32 +0800 Subject: [PATCH 5/6] =?UTF-8?q?fix=20:=20=E4=BF=AE=E6=94=B9=E5=88=BB?= =?UTF-8?q?=E5=AD=97=E4=B8=8A=E6=96=99=E8=BE=93=E9=80=81=E7=BA=BF=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: jiaoliming --- .../agv/ndcone/AgvNdcOneDeviceDriver.java | 2 +- .../HailiangEngravingInDeviceDriver.java | 104 ++++++++++++------ .../hailiang_engraving_in/ItemProtocol.java | 36 ++++++ .../device_driver/driver/OpcDeviceDriver.java | 5 + .../acs/ext/wms/rest/WmsToAcsController.java | 7 ++ .../wms/service/impl/WmsToAcsServiceImpl.java | 37 ++++--- wcs/nladmin-ui/src/views/acs/order/index.vue | 2 +- 7 files changed, 142 insertions(+), 51 deletions(-) diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java index 3f821a7a..19ad1685 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/agv/ndcone/AgvNdcOneDeviceDriver.java @@ -126,7 +126,7 @@ public class AgvNdcOneDeviceDriver extends AbstractDeviceDriver implements Devic StandardStorageDeviceDriver standardStorageDeviceDriver; //刻字上料线体 HailiangEngravingInDeviceDriver hailiangEngravingInDeviceDriver; - //清洗下料 + // HailiangCleaningPutLineDeviceDriver hailiangCleaningPutLineDeviceDriver; //开始任务/上报订单号 diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_engraving_in/HailiangEngravingInDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_engraving_in/HailiangEngravingInDeviceDriver.java index 30a97f39..946523a6 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_engraving_in/HailiangEngravingInDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_engraving_in/HailiangEngravingInDeviceDriver.java @@ -42,6 +42,7 @@ import org.nl.modules.wql.util.SpringContextHolder; import org.springframework.beans.factory.annotation.Autowired; import java.util.Date; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -70,6 +71,8 @@ public class HailiangEngravingInDeviceDriver extends AbstractOpcDeviceDriver imp TaskService taskService = SpringContextHolder.getBean(TaskServiceImpl.class); @Autowired RedisUtils redisUtils = SpringContextHolder.getBean(RedisUtils.class); + @Autowired + TaskService taskserver = SpringContextHolder.getBean(TaskService.class); //线体状态 int status = 0; @@ -420,20 +423,20 @@ public class HailiangEngravingInDeviceDriver extends AbstractOpcDeviceDriver imp logServer.deviceExecuteLog(this.device_code, "", "", "读取信号值时出现异常:" + var17 + ",inst == null :" + ObjectUtil.isEmpty(inst)); } - if (!this.itemProtocol.getIsonline()) { - //this.setIsonline(false); - //this.setIserror(true); - message = "信号量同步异常"; - //未联机 - } else if (mode == 0) { - //this.setIsonline(false); - //this.setIserror(true); - message = "未联机"; - //有报警 - } else { - //this.setIsonline(true); - this.setIserror(false); - message = ""; +// if (!this.itemProtocol.getIsonline()) { +// //this.setIsonline(false); +// //this.setIserror(true); +// message = "信号量同步异常"; +// //未联机 +// } else if (mode == 0) { +// //this.setIsonline(false); +// //this.setIserror(true); +// message = "未联机"; +// //有报警 +// } else { +// //this.setIsonline(true); +// this.setIserror(false); +// message = ""; //有货、联机、满料请求申请AGV搬运任务 // if (gd_move == 1 && mode == 1 && empty_req == 1 && !requireSucess) { // boolean flag = apply_task(); @@ -458,7 +461,34 @@ public class HailiangEngravingInDeviceDriver extends AbstractOpcDeviceDriver imp // } //无货、联机、空箱请求申请AGV搬运任务 - if (gd_move == 0 && mode == 1 && empty_req == 1 && !requireSucess) { + if (gd_move == 1 && mode == 1 && empty_req == 1 && !requireSucess) { + //刻字上料 + //判断电气上报的【剩余实时重量】>10kg 将【上料总重量】写给电气 +// if (engraving_storage_now_weight > 10){ + writing("to_all_weight", String.valueOf(engraving_all_weight)); + inst.setExecute_status(InstActionEnum.EXECUTE_PUT_FALL_SEND_FULL_FINISH.getCode()); + instructionService.update(inst); + byte[] data = agvService.sendAgvOneModeInst(agvphase, index, 0); + OneNDCSocketConnectionAutoRun.write(data); + //agv任务完成,反馈mes + if (inst != null) { + TaskDto taskDto = taskserver.findByCodeFromCache(inst.getTask_code()); + if (taskDto != null) { + taskDto.setExt_param(new HashMap<>()); + taskDto.getExt_param().put("take_finish", "1"); + taskDto.getExt_param().put("weight", String.valueOf(engraving_storage_now_weight)); + taskserver.update(taskDto); + } + } + this.set(0, 0, null); + noFeedAgvMessage = null; + message = this.messageInfo(agvphase); + logServer.deviceExecuteLog(device_code, "", "", this.messageInfo(agvphase)); +// }else { +// writing("to_agv_put_finish", "1"); +// } + + boolean flag = apply_empty_task(); this.noApplyTaskMessage = null; if (flag) { @@ -482,7 +512,6 @@ public class HailiangEngravingInDeviceDriver extends AbstractOpcDeviceDriver imp //到达取货点 if (agvphase == 0x03) { - logServer.deviceExecuteLog(this.device_code, "", inst.getInstruction_code(), "刻字上料PS20上报到达取货点:" + ",inst == null :" + ObjectUtil.isEmpty(inst)); // if (gd_move == 1 && ObjectUtil.isNotEmpty(inst)) { if (ObjectUtil.isNotEmpty(inst)) { inst.setExecute_status(InstActionEnum.EXECUTE_TO_GET.getCode()); @@ -557,26 +586,31 @@ public class HailiangEngravingInDeviceDriver extends AbstractOpcDeviceDriver imp //放货完成 if (agvphase == 0x09) { // if (ObjectUtil.isNotEmpty(inst) && mode == 1 && allow_put == 1) { - if (ObjectUtil.isNotEmpty(inst)) { + if (ObjectUtil.isNotEmpty(inst) && mode == 1) { //放框完成 writing("to_agv_put_finish", "1"); -// if (empty_req == 1){ - //判断电气上报的【剩余实时重量】>10kg 将【上料总重量】写给电气 -// if (engraving_storage_now_weight > 10000){ - writing("to_all_weight", String.valueOf(engraving_all_weight)); - inst.setExecute_status(InstActionEnum.EXECUTE_PUT_FALL_SEND_FULL_FINISH.getCode()); - instructionService.update(inst); - byte[] data = agvService.sendAgvOneModeInst(agvphase, index, 0); - OneNDCSocketConnectionAutoRun.write(data); - this.set(0, 0, null); - noFeedAgvMessage = null; - message = this.messageInfo(agvphase); - logServer.deviceExecuteLog(device_code, "", "", this.messageInfo(agvphase)); -// }else { -// writing("to_agv_put_finish", "1"); -// } -// } - + //判断电气上报的【剩余实时重量】>10kg ,保障电气拉开气闸门下料 + while (engraving_storage_now_weight < 10000){ + writing("to_agv_put_finish", "1"); + } + inst.setExecute_status(InstActionEnum.EXECUTE_PUT_FALL_SEND_FULL_FINISH.getCode()); + instructionService.update(inst); + byte[] data = agvService.sendAgvOneModeInst(agvphase, index, 0); + OneNDCSocketConnectionAutoRun.write(data); + //agv任务完成,反馈mes + if (inst != null) { + TaskDto taskDto = taskserver.findByCodeFromCache(inst.getTask_code()); + if (taskDto != null) { + taskDto.setExt_param(new HashMap<>()); + taskDto.getExt_param().put("take_finish", "1"); + taskDto.getExt_param().put("weight", String.valueOf(engraving_storage_now_weight)); + taskserver.update(taskDto); + } + } + this.set(0, 0, null); + noFeedAgvMessage = null; + message = this.messageInfo(agvphase); + logServer.deviceExecuteLog(device_code, "", "", this.messageInfo(agvphase)); } else { String notFeedAgvMessage = ""; if (gd_move != 1) { @@ -590,7 +624,7 @@ public class HailiangEngravingInDeviceDriver extends AbstractOpcDeviceDriver imp } - } +// } last_status = status; last_is_open = is_open; diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_engraving_in/ItemProtocol.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_engraving_in/ItemProtocol.java index 99c1d31a..06febe71 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_engraving_in/ItemProtocol.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_engraving_in/ItemProtocol.java @@ -1,5 +1,6 @@ package org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_engraving_in; +import cn.hutool.core.util.ObjectUtil; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.nl.acs.device.device_driver.standard_inspect.ItemDto; @@ -38,6 +39,10 @@ public class ItemProtocol { public static String item_fl_now_weight = "fl_now_weight"; //回流实时重量 public static String item_fl_full_weight = "fl_full_weight"; //回流满框重量 public static String item_barcode = "barcode"; //料框条码 + public static String item_current_sort = "current_sort"; //当前上料序号 + public static String item_current_device = "current_device"; //当前上料站点 + public static String item_current_weight = "current_weight"; //当前站需要重量实时 + //开机 public static String item_to_open = "to_open"; @@ -69,6 +74,12 @@ public class ItemProtocol { public static String item_to_all_weight = "to_all_weight"; //回流塑料框自重 public static String item_to_fl_self_weight = "to_fl_self_weight"; + //任务顺序数组 + public static String item_to_sort_array = "to_sort_array"; + //设备数组 + public static String item_to_devices_array = "to_devices_array"; + //重量数组 + public static String item_to_weight_array = "to_weight_array"; private HailiangEngravingInDeviceDriver driver; @@ -185,6 +196,16 @@ public class ItemProtocol { return this.getOpcIntegerValue(item_barcode); } + public float getItem_current_sort() { + return this.getOpcFloatValue(item_current_sort); + } + public float getItem_current_device() { + return this.getOpcFloatValue(item_current_device); + } + public float getItem_current_weight() { + return this.getOpcFloatValue(item_current_weight); + } + //是否有货 public int hasGoods(int move) { return move; @@ -201,7 +222,16 @@ public class ItemProtocol { return value; } return 0; + } + public float getOpcFloatValue(String protocol) { + Float value = this.driver.getFloatValue(protocol); + if (ObjectUtil.isEmpty(value)) { + + } else { + return value; + } + return 0.0f; } public static List getReadableItemDtos() { @@ -233,6 +263,9 @@ public class ItemProtocol { list.add(new ItemDto(item_fl_now_weight, "回流实时重量", "DB1.D132")); list.add(new ItemDto(item_fl_full_weight, "回流满框重量", "DB1.D136")); list.add(new ItemDto(item_barcode, "料框条码", "DB1.D140")); + list.add(new ItemDto(item_current_sort, "当前上料序号", "DB1.W12")); + list.add(new ItemDto(item_current_device, "当前上料站号", "DB1.W14")); + list.add(new ItemDto(item_current_weight, "当前站需要重量实时", "DB1.REAL144")); return list; } @@ -254,6 +287,9 @@ public class ItemProtocol { list.add(new ItemDto(item_to_fl_full_weight, "回流满框重量标准值", "DB2.D100")); list.add(new ItemDto(item_to_all_weight, "上料总重量", "DB2.D104")); list.add(new ItemDto(item_to_fl_self_weight, "回流塑料框自重", "DB2.D108")); + list.add(new ItemDto(item_to_sort_array, "排序数组", "DB200.W0[15]")); + list.add(new ItemDto(item_to_devices_array, "设备数组", "DB200.W30[15]")); + list.add(new ItemDto(item_to_weight_array, "重量数组", "DB200.REAL60[15]")); return list; } diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/driver/OpcDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/driver/OpcDeviceDriver.java index edf93e8b..44512cd1 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/driver/OpcDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/driver/OpcDeviceDriver.java @@ -93,4 +93,9 @@ public interface OpcDeviceDriver extends DeviceDriver { } + default Float getFloatValue(String protocol) { +// RedisUtils redisUtils = SpringContextHolder.getBean(RedisUtils.class); +// return (Float)redisUtils.get(this.getItem(protocol)); + return (Float) this.getOpcValueAccessor().getValue(this.getItem(protocol)); + } } diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java b/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java index a8710754..b3fca404 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/ext/wms/rest/WmsToAcsController.java @@ -175,4 +175,11 @@ public class WmsToAcsController { public ResponseEntity cleaningIn(@RequestBody JSONObject param) { return new ResponseEntity<>(wmstoacsService.cleaningIn(param), HttpStatus.OK); } + @PostMapping("/engravingIn") + @Log("刻字上料") + @ApiOperation("刻字上料") + @SaIgnore + public ResponseEntity engravingIn(@RequestBody JSONObject param) { + return new ResponseEntity<>(wmstoacsService.engravingIn(param), HttpStatus.OK); + } } 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 e742afd7..0e52e2bf 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 @@ -1303,10 +1303,10 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { //清洗下料 HailiangCleaningPutLineDeviceDriver hailiangCleaningPutLineDeviceDriver; - if (device.getDeviceDriver() instanceof HailiangCleaningMachineStorageStationDeviceDriver) { + if (device.getDeviceDriver() instanceof HailiangCleaningPutLineDeviceDriver) { hailiangCleaningPutLineDeviceDriver = (HailiangCleaningPutLineDeviceDriver) device.getDeviceDriver(); resultJson.put("in_pcsn", hailiangCleaningPutLineDeviceDriver.getIn_pcsn()); - resultJson.put("vehicle_code", hailiangCleaningPutLineDeviceDriver.getBarcode()); + resultJson.put("vechile_code", hailiangCleaningPutLineDeviceDriver.getBarcode()); resultJson.put("weight", hailiangCleaningPutLineDeviceDriver.getFull_weight()); } resultJson.put("status", 200); @@ -1318,23 +1318,32 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { @Override public Map engravingIn(JSONObject param) { log.info("接收WMS刻字上料,下发参数:{}", JSON.toJSONString(param)); - String device_code = param.getString("device_code"); - if (StrUtil.isEmpty(device_code)) { + String start_device_code = param.getString("start_point_code"); + String to_sort_array = param.getString("to_sort_array"); + String to_devices_array = param.getString("to_devices_array"); + String to_weight_array = param.getString("to_weight_array"); + //上料总重量 + String all_weight = param.getString("all_weight"); + String to_task = param.getString("task_code"); + if (StrUtil.isEmpty(start_device_code)) { throw new BadRequestException("设备号不能为空!"); } - Device device = deviceAppService.findDeviceByCode(device_code); + Device device = deviceAppService.findDeviceByCode(start_device_code); if (ObjectUtil.isEmpty(device)) { - throw new BadRequestException("未找到对应设备:" + device_code); + throw new BadRequestException("未找到对应设备:" + start_device_code); } JSONObject resultJson = new JSONObject(); - //清洗下料 - HailiangCleaningPutLineDeviceDriver hailiangCleaningPutLineDeviceDriver; - if (device.getDeviceDriver() instanceof HailiangCleaningMachineStorageStationDeviceDriver) { - hailiangCleaningPutLineDeviceDriver = (HailiangCleaningPutLineDeviceDriver) device.getDeviceDriver(); - resultJson.put("in_pcsn", hailiangCleaningPutLineDeviceDriver.getIn_pcsn()); - resultJson.put("vechile_code", hailiangCleaningPutLineDeviceDriver.getBarcode()); - resultJson.put("weight", hailiangCleaningPutLineDeviceDriver.getFull_weight()); + //刻字上料 + HailiangEngravingInDeviceDriver hailiangEngravingInDeviceDriver; + if (device.getDeviceDriver() instanceof HailiangEngravingInDeviceDriver) { + hailiangEngravingInDeviceDriver = (HailiangEngravingInDeviceDriver) device.getDeviceDriver(); + hailiangEngravingInDeviceDriver.writing("to_sort_array",to_sort_array); + hailiangEngravingInDeviceDriver.writing("to_devices_array",to_devices_array); + hailiangEngravingInDeviceDriver.writing("to_weight_array",to_weight_array); + hailiangEngravingInDeviceDriver.writing("to_all_weight", all_weight); +// hailiangEngravingInDeviceDriver.writing("to_all_weight",String.valueOf(hailiangEngravingInDeviceDriver.getEngraving_storage_now_weight())); + hailiangEngravingInDeviceDriver.writing("to_task",to_task); } resultJson.put("status", 200); resultJson.put("message", "操作成功"); @@ -1428,7 +1437,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { dto.setExt_order_id(in_pcsn); dto.setOrder_code(in_pcsn); dto.setQty(BigDecimal.valueOf(999999)); - dto.setMaterial_code("qxsl"); + dto.setMaterial_code("QXSL"); dto.setDevice_code(device_code); dto.setIs_needmove("0"); dto.setIn_devices(in_devices); diff --git a/wcs/nladmin-ui/src/views/acs/order/index.vue b/wcs/nladmin-ui/src/views/acs/order/index.vue index 504b9dca..cfd770fe 100644 --- a/wcs/nladmin-ui/src/views/acs/order/index.vue +++ b/wcs/nladmin-ui/src/views/acs/order/index.vue @@ -308,7 +308,7 @@ export default { methods: { // 在 Input 值改变时触发 handleEdit(e) { - let value = e.replace(/^(0+)|[^d]+/g, '') // 以0开头或者输入非数字,会被替换成空 + let value = e.replace(/^(0+)|[^\d]+/g, '') // 以0开头或者输入非数字,会被替换成空 value = value.replace(/(d{15})d*/, '$1') // 最多保留15位整数 this.form.lane_tray_template = value }, From 3b02e7bc1c8e2a596f3c775b6a819c2b0d4af54f Mon Sep 17 00:00:00 2001 From: jiaoliming Date: Tue, 25 Jul 2023 11:03:20 +0800 Subject: [PATCH 6/6] =?UTF-8?q?fix=20=EF=BC=9A=E6=B8=85=E6=B4=97=E4=B8=8A?= =?UTF-8?q?=E6=96=99=EF=BC=8C=E4=B8=8B=E6=96=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: jiaoliming --- .../src/main/java/org/nl/acs/AcsConfig.java | 1 + .../HailiangCleaningFeedingLineDriver.java | 1 + .../HailiangCleaningPutLineDeviceDriver.java | 232 +++++++++++++++++- .../ItemProtocol.java | 45 +++- .../HailiangEngravingInDeviceDriver.java | 109 +++++--- .../hailiang_engraving_in/ItemProtocol.java | 107 +++++++- .../device_driver/driver/OpcDeviceDriver.java | 7 + .../wms/service/impl/WmsToAcsServiceImpl.java | 27 +- 8 files changed, 477 insertions(+), 52 deletions(-) diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/AcsConfig.java b/wcs/nladmin-system/src/main/java/org/nl/acs/AcsConfig.java index a3497a34..7566ac12 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/AcsConfig.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/AcsConfig.java @@ -42,6 +42,7 @@ public interface AcsConfig { String ERPURL = "erpurl"; //是否存在wms系统 String HASWMS = "hasWms"; + String ISTEST = "isTest"; String ISFEEDDEVICESTATUS = "isFeedDeviceStatus"; //路由选择 String ROUTE = "route"; diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_feeding_line/HailiangCleaningFeedingLineDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_feeding_line/HailiangCleaningFeedingLineDriver.java index e832302c..2aa148de 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_feeding_line/HailiangCleaningFeedingLineDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_feeding_line/HailiangCleaningFeedingLineDriver.java @@ -499,6 +499,7 @@ public class HailiangCleaningFeedingLineDriver extends AbstractOpcDeviceDriver i map.put("to_all_num", String.valueOf(qtySum)); map.put("to_all_weight", String.valueOf(weightSum)); map.put("to_in_confirm_finish", "1"); + map.put("allowed_in","1"); this.writing(map); } diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_put_line/HailiangCleaningPutLineDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_put_line/HailiangCleaningPutLineDeviceDriver.java index 88d108bd..883b2c49 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_put_line/HailiangCleaningPutLineDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_put_line/HailiangCleaningPutLineDeviceDriver.java @@ -87,7 +87,7 @@ public class HailiangCleaningPutLineDeviceDriver extends AbstractOpcDeviceDriver //上料批次号 int in_pcsn = 0; //收料位1条码 - int barcode = 0; + String barcode = ""; //收料位1批次入料总数量 int all_num = 0; //收料位1批次入料总重量 @@ -99,6 +99,11 @@ public class HailiangCleaningPutLineDeviceDriver extends AbstractOpcDeviceDriver //待机时间(S) int await_time = 0; + int barcode_1 = 0; + int barcode_2 = 0; + int barcode_3 = 0; + int barcode_4 = 0; + //工作模式 int last_mode = 0; @@ -189,11 +194,15 @@ public class HailiangCleaningPutLineDeviceDriver extends AbstractOpcDeviceDriver now_weight = this.itemProtocol.getItem_now_weight(); full_weight = this.itemProtocol.getItem_full_weight(); in_pcsn = this.itemProtocol.getItem_in_pcsn(); - barcode = this.itemProtocol.getItem_barcode(); + barcode_1 = this.itemProtocol.getItem_barcode_1(); + barcode_2 = this.itemProtocol.getItem_barcode_2(); + barcode_3 = this.itemProtocol.getItem_barcode_3(); + barcode_4 = this.itemProtocol.getItem_barcode_4(); all_num = this.itemProtocol.getItem_all_num(); all_weight = this.itemProtocol.getItem_all_weight(); device_running_time = this.itemProtocol.getItem_device_running_time(); await_time = this.itemProtocol.getItem_await_time(); + barcode = stringToascii(barcode_1) + stringToascii(barcode_2) + stringToascii(barcode_3) + stringToascii(barcode_4); if (mode != last_mode) { logServer.deviceExecuteLog(this.device_code, "", "", "信号mode:" + last_mode + "->" + mode); } @@ -430,6 +439,225 @@ public class HailiangCleaningPutLineDeviceDriver extends AbstractOpcDeviceDriver last_await_time = await_time; } + public String stringToascii(int num) { + String str = ""; + switch (num) { + case 48: + str = "0"; + break; + case 49: + str = "1"; + break; + case 50: + str = "2"; + break; + case 51: + str = "3"; + break; + case 52: + str = "4"; + break; + case 53: + str = "5"; + break; + case 54: + str = "6"; + break; + case 55: + str = "7"; + break; + case 56: + str = "8"; + break; + case 57: + str = "9"; + break; + case 65: + str = "A"; + break; + case 66: + str = "B"; + break; + case 67: + str = "C"; + break; + case 68: + str = "D"; + break; + case 69: + str = "E"; + break; + case 70: + str = "F"; + break; + case 71: + str = "G"; + break; + case 72: + str = "H"; + break; + case 73: + str = "I"; + break; + case 74: + str = "J"; + break; + case 75: + str = "K"; + break; + case 76: + str = "L"; + break; + case 77: + str = "M"; + break; + case 78: + str = "N"; + break; + case 79: + str = "O"; + break; + case 80: + str = "P"; + break; + case 81: + str = "Q"; + break; + case 82: + str = "R"; + break; + case 83: + str = "S"; + break; + case 84: + str = "T"; + break; + case 85: + str = "U"; + break; + case 86: + str = "V"; + break; + case 87: + str = "W"; + break; + case 88: + str = "X"; + break; + case 89: + str = "Y"; + break; + case 90: + str = "Z"; + break; + case 97: + str = "a"; + break; + case 98: + str = "b"; + break; + case 99: + str = "c"; + break; + case 100: + str = "d"; + break; + case 101: + str = "e"; + break; + case 102: + str = "f"; + break; + case 103: + str = "g"; + break; + case 104: + str = "h"; + break; + case 105: + str = "i"; + break; + case 106: + str = "j"; + break; + case 107: + str = "k"; + break; + case 108: + str = "l"; + break; + case 109: + str = "m"; + break; + case 110: + str = "n"; + break; + case 111: + str = "o"; + break; + case 112: + str = "p"; + break; + case 113: + str = "q"; + break; + case 114: + str = "r"; + break; + case 115: + str = "s"; + break; + case 116: + str = "t"; + break; + case 117: + str = "u"; + break; + case 118: + str = "v"; + break; + case 119: + str = "w"; + break; + case 120: + str = "x"; + break; + case 121: + str = "y"; + break; + case 122: + str = "z"; + break; + + case 40: + str = "("; + break; + case 41: + str = ")"; + break; + case 43: + str = "+"; + break; + case 45: + str = "-"; + break; + case 47: + str = "/"; + break; + case 91: + str = "["; + break; + case 93: + str = "]"; + break; + case 95: + str = "_"; + break; + default: + str = "*"; + } + return str; + } /** * 申请任务 * diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_put_line/ItemProtocol.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_put_line/ItemProtocol.java index ab908d57..c5daaad0 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_put_line/ItemProtocol.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_cleaning_put_line/ItemProtocol.java @@ -3,8 +3,6 @@ package org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_cleaning_put_l import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.nl.acs.device.device_driver.standard_inspect.ItemDto; -import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_cleaning_feeding_line.HailiangCleaningFeedingLineDriver; -import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_cleaning_machine.HailiangCleaningMachineDeviceDriver; import java.util.ArrayList; import java.util.List; @@ -28,7 +26,11 @@ public class ItemProtocol { public static String item_error = "error"; //报警信号 public static String item_now_weight = "now_weight";//收料位1实时重量 public static String item_full_weight = "full_weight";//收料位1满料框重量 - public static String item_barcode = "barcode";//收料位1条码 + + public static String item_barcode_1 = "barcode_1";//收料位1条码 + public static String item_barcode_2 = "barcode_2";//收料位1条码 + public static String item_barcode_3 = "barcode_3";//收料位1条码 + public static String item_barcode_4 = "barcode_4";//收料位1条码 public static String item_in_pcsn = "in_pcsn";//收料位1批次号(上料批次号) public static String item_all_num = "all_num";//收料位1批次入料总数量 public static String item_all_weight = "all_weight";//收料位1批次入料总重量 @@ -116,9 +118,7 @@ public class ItemProtocol { public int getItem_in_pcsn() { return this.getOpcIntegerValue(item_in_pcsn); } - public int getItem_barcode() { - return this.getOpcIntegerValue(item_barcode); - } + public int getItem_all_num() { return this.getOpcIntegerValue(item_all_num); } @@ -143,8 +143,35 @@ public class ItemProtocol { return this.getOpcIntegerValue(item_mode); } + public int getItem_barcode_1() { + return this.getOpcIntegerValue(item_barcode_1); + } + + public int getItem_barcode_2() { + return this.getOpcIntegerValue(item_barcode_2); + } + + public int getItem_barcode_3() { + return this.getOpcIntegerValue(item_barcode_3); + } + + public int getItem_barcode_4() { + return this.getOpcIntegerValue(item_barcode_4); + } Boolean isonline; + public Byte getOpcByteValue(String protocol) { + Byte value = this.driver.getByteValue(protocol); + if (value == null) { + setIsonline(false); + } else { + setIsonline(true); + return value; + } + return 57; + + } + public int getOpcIntegerValue(String protocol) { Integer value = this.driver.getIntegeregerValue(protocol); if (value == null) { @@ -154,7 +181,6 @@ public class ItemProtocol { return value; } return 0; - } public static List getReadableItemDtos() { @@ -174,7 +200,10 @@ public class ItemProtocol { list.add(new ItemDto(item_error, "故障信息", "DB1.W4")); list.add(new ItemDto(item_now_weight, "收料位1实时重量", "DB1.D84")); list.add(new ItemDto(item_full_weight, "收料位1满料框重量", "DB1.D88")); - list.add(new ItemDto(item_barcode, "收料位1条码", "DB1.D100")); + list.add(new ItemDto(item_barcode_1, "收料位1条码", "DB1.B100")); + list.add(new ItemDto(item_barcode_2, "收料位1条码", "DB1.B101")); + list.add(new ItemDto(item_barcode_3, "收料位1条码", "DB1.B102")); + list.add(new ItemDto(item_barcode_4, "收料位1条码", "DB1.B103")); list.add(new ItemDto(item_in_pcsn, "收料位1批次号", "DB1.D116")); list.add(new ItemDto(item_all_num, "收料位1批次入料总数量", "DB1.D120")); list.add(new ItemDto(item_all_weight, "收料位1批次入料总重量", "DB1.D124")); diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_engraving_in/HailiangEngravingInDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_engraving_in/HailiangEngravingInDeviceDriver.java index 946523a6..8b9221a9 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_engraving_in/HailiangEngravingInDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_engraving_in/HailiangEngravingInDeviceDriver.java @@ -8,6 +8,7 @@ import com.alibaba.fastjson.JSONObject; import lombok.Data; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.acs.AcsConfig; import org.nl.acs.acsEnum.InstActionEnum; import org.nl.acs.acsEnum.StatusEnum; import org.nl.acs.acsEnum.WorkerOrderEnum; @@ -19,6 +20,7 @@ import org.nl.acs.device_driver.basedriver.hailiang_one.ApplyTaskTime; import org.nl.acs.device_driver.basedriver.hailiang_one.IssuedDeviceOrderInfo; import org.nl.acs.device_driver.basedriver.hailiang_one.MonitoringLargeScreenData; import org.nl.acs.device_driver.basedriver.hailiang_one.RemoveDevicePhase; +import org.nl.acs.device_driver.basedriver.hailiang_one.hailiang_cleaning_machine_storage_station.HailiangCleaningMachineStorageStationDeviceDriver; import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; import org.nl.acs.ext.wms.service.AcsToWmsService; @@ -38,13 +40,11 @@ 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.common.utils.RedisUtils; +import org.nl.modules.system.service.ParamService; import org.nl.modules.wql.util.SpringContextHolder; import org.springframework.beans.factory.annotation.Autowired; -import java.util.Date; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.Map; +import java.util.*; import java.util.concurrent.TimeUnit; /** @@ -73,7 +73,8 @@ public class HailiangEngravingInDeviceDriver extends AbstractOpcDeviceDriver imp RedisUtils redisUtils = SpringContextHolder.getBean(RedisUtils.class); @Autowired TaskService taskserver = SpringContextHolder.getBean(TaskService.class); - + @Autowired + ParamService paramService = SpringContextHolder.getBean(ParamService.class); //线体状态 int status = 0; //线体开机状态 @@ -193,7 +194,7 @@ public class HailiangEngravingInDeviceDriver extends AbstractOpcDeviceDriver imp Boolean requireSucess = false; //反馈设备状态请求标记 Boolean feedDeviceStatusFlag = false; - + Boolean is_test = false; //agv请求动作信息 private int agvphase = 0; private int index = 0; @@ -462,33 +463,10 @@ public class HailiangEngravingInDeviceDriver extends AbstractOpcDeviceDriver imp //无货、联机、空箱请求申请AGV搬运任务 if (gd_move == 1 && mode == 1 && empty_req == 1 && !requireSucess) { - //刻字上料 - //判断电气上报的【剩余实时重量】>10kg 将【上料总重量】写给电气 -// if (engraving_storage_now_weight > 10){ - writing("to_all_weight", String.valueOf(engraving_all_weight)); - inst.setExecute_status(InstActionEnum.EXECUTE_PUT_FALL_SEND_FULL_FINISH.getCode()); - instructionService.update(inst); - byte[] data = agvService.sendAgvOneModeInst(agvphase, index, 0); - OneNDCSocketConnectionAutoRun.write(data); - //agv任务完成,反馈mes - if (inst != null) { - TaskDto taskDto = taskserver.findByCodeFromCache(inst.getTask_code()); - if (taskDto != null) { - taskDto.setExt_param(new HashMap<>()); - taskDto.getExt_param().put("take_finish", "1"); - taskDto.getExt_param().put("weight", String.valueOf(engraving_storage_now_weight)); - taskserver.update(taskDto); - } - } - this.set(0, 0, null); - noFeedAgvMessage = null; - message = this.messageInfo(agvphase); - logServer.deviceExecuteLog(device_code, "", "", this.messageInfo(agvphase)); -// }else { -// writing("to_agv_put_finish", "1"); +// boolean flag_wash = washTaskRun(task); +// if (flag_wash) { +// this.message = "反馈刻字上料执行中"; // } - - boolean flag = apply_empty_task(); this.noApplyTaskMessage = null; if (flag) { @@ -586,13 +564,32 @@ public class HailiangEngravingInDeviceDriver extends AbstractOpcDeviceDriver imp //放货完成 if (agvphase == 0x09) { // if (ObjectUtil.isNotEmpty(inst) && mode == 1 && allow_put == 1) { - if (ObjectUtil.isNotEmpty(inst) && mode == 1) { + +// if (ObjectUtil.isNotEmpty(inst) && mode == 1) {//正式方案需要联机 + //一体机临时方案不判断联机 + + if (StrUtil.equals(paramService.findByCode(AcsConfig.ISTEST).getValue(), "1")) { + is_test = ObjectUtil.isNotEmpty(inst); + }else { + is_test = ObjectUtil.isNotEmpty(inst) && mode == 1; + } + if (is_test) { //放框完成 writing("to_agv_put_finish", "1"); //判断电气上报的【剩余实时重量】>10kg ,保障电气拉开气闸门下料 - while (engraving_storage_now_weight < 10000){ - writing("to_agv_put_finish", "1"); + logServer.deviceExecuteLog(device_code, "", "任务号"+inst.getTask_code(), "下发开闸门开始----"); + try { + Thread.sleep(5000); + } catch (InterruptedException e) { + e.printStackTrace(); } + int i = 0; + while (this.engraving_storage_now_weight < 10000 && i<5){ + writing("to_agv_put_finish", "1"); + i++; + logServer.deviceExecuteLog(device_code, "", "任务号"+inst.getTask_code(), "重量小于10KG循环下发拉闸门"); + } + logServer.deviceExecuteLog(device_code, "", "任务号"+inst.getTask_code(), "关闭闸门----反馈称重"); inst.setExecute_status(InstActionEnum.EXECUTE_PUT_FALL_SEND_FULL_FINISH.getCode()); instructionService.update(inst); byte[] data = agvService.sendAgvOneModeInst(agvphase, index, 0); @@ -600,6 +597,7 @@ public class HailiangEngravingInDeviceDriver extends AbstractOpcDeviceDriver imp //agv任务完成,反馈mes if (inst != null) { TaskDto taskDto = taskserver.findByCodeFromCache(inst.getTask_code()); + logServer.deviceExecuteLog(device_code, "", "任务号"+inst.getTask_code(), "任务="+taskDto.getTask_code()); if (taskDto != null) { taskDto.setExt_param(new HashMap<>()); taskDto.getExt_param().put("take_finish", "1"); @@ -622,10 +620,17 @@ public class HailiangEngravingInDeviceDriver extends AbstractOpcDeviceDriver imp this.noFeedAgvMessage = this.replace(notFeedAgvMessage); } } - + if (mode == 1 && task_finish == 1 ) { + boolean flag = washTask(task); + if (flag) { + this.message = "反馈刻字上料完成成功"; + } + } // } + + last_status = status; last_is_open = is_open; last_is_running = is_running; @@ -757,6 +762,38 @@ public class HailiangEngravingInDeviceDriver extends AbstractOpcDeviceDriver imp // } // } + /** + * 上料完成以后反馈mes 上料设备号 + */ + private boolean washTaskRun(int task_code) { + // TODO 反馈mes + JSONObject reqParam = new JSONObject(); + reqParam.put("task_code", task_code); + reqParam.put("status", StatusEnum.TASK_RUNNING.getCode()); + HttpResponse httpResponse = acsToWmsService.washTask(reqParam); + if (ObjectUtil.isNotEmpty(httpResponse) && httpResponse.getStatus() == 200) { + requireSucess = true; + return true; + } + return false; + } + /** + * 上料完成以后反馈mes 上料设备号 + */ + private boolean washTask(int task_code) { + + this.writing("to_confirm_finished", "1"); + // TODO 反馈mes + JSONObject reqParam = new JSONObject(); + reqParam.put("task_code", task_code); + reqParam.put("status", StatusEnum.TASK_FINISH.getCode()); + HttpResponse httpResponse = acsToWmsService.washTask(reqParam); + if (ObjectUtil.isNotEmpty(httpResponse) && httpResponse.getStatus() == 200) { + requireSucess = true; + return true; + } + return false; + } /** * 下发工单信息 diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_engraving_in/ItemProtocol.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_engraving_in/ItemProtocol.java index 06febe71..909180f1 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_engraving_in/ItemProtocol.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/hailiang_one/hailiang_engraving_in/ItemProtocol.java @@ -81,6 +81,64 @@ public class ItemProtocol { //重量数组 public static String item_to_weight_array = "to_weight_array"; + //任务顺序1 + public static String item_to_sort1 = "to_sort1"; + //任务顺序2 + public static String item_to_sort2 = "to_sort2"; + //任务顺序3 + public static String item_to_sort3 = "to_sort3"; + public static String item_to_sort4 = "to_sort4"; + public static String item_to_sort5 = "to_sort5"; + public static String item_to_sort6 = "to_sort6"; + public static String item_to_sort7 = "to_sort7"; + public static String item_to_sort8 = "to_sort8"; + public static String item_to_sort9 = "to_sort9"; + public static String item_to_sort10 = "to_sort10"; + public static String item_to_sort11 = "to_sort11"; + public static String item_to_sort12 = "to_sort12"; + public static String item_to_sort13 = "to_sort13"; + public static String item_to_sort14 = "to_sort14"; + public static String item_to_sort15 = "to_sort15"; + + //站点1 + public static String item_to_devices1 = "to_devices1"; + //站点2 + public static String item_to_devices2 = "to_devices2"; + //站点3 + public static String item_to_devices3 = "to_devices3"; + public static String item_to_devices4 = "to_devices4"; + public static String item_to_devices5 = "to_devices5"; + public static String item_to_devices6 = "to_devices6"; + public static String item_to_devices7 = "to_devices7"; + public static String item_to_devices8 = "to_devices8"; + public static String item_to_devices9 = "to_devices9"; + public static String item_to_devices10 = "to_devices10"; + public static String item_to_devices11 = "to_devices11"; + public static String item_to_devices12 = "to_devices12"; + public static String item_to_devices13 = "to_devices13"; + public static String item_to_devices14 = "to_devices14"; + public static String item_to_devices15 = "to_devices15"; + + + //站点上料重量1 + public static String item_to_weight1 = "to_weight1"; + //站点2 + public static String item_to_weight2 = "to_weight2"; + //站点3 + public static String item_to_weight3 = "to_weight3"; + public static String item_to_weight4 = "to_weight4"; + public static String item_to_weight5 = "to_weight5"; + public static String item_to_weight6 = "to_weight6"; + public static String item_to_weight7 = "to_weight7"; + public static String item_to_weight8 = "to_weight8"; + public static String item_to_weight9 = "to_weight9"; + public static String item_to_weight10 = "to_weight10"; + public static String item_to_weight11 = "to_weight11"; + public static String item_to_weight12 = "to_weight12"; + public static String item_to_weight13 = "to_weight13"; + public static String item_to_weight14 = "to_weight14"; + public static String item_to_weight15 = "to_weight15"; + private HailiangEngravingInDeviceDriver driver; public ItemProtocol(HailiangEngravingInDeviceDriver driver) { @@ -275,7 +333,7 @@ public class ItemProtocol { list.add(new ItemDto(item_to_engraving_sn, "刻字机编号", "DB2.W6")); list.add(new ItemDto(item_to_clean_open, "清洗机开关", "DB2.W8")); list.add(new ItemDto(item_to_clear, "当前产量清零", "DB2.W12")); - list.add(new ItemDto(item_to_confirm_finished, "确认完成", "DB2.W14")); +// list.add(new ItemDto(item_to_confirm_finished, "确认完成", "DB2.W14")); list.add(new ItemDto(item_to_dis_weight, "称重校验是否禁用", "DB2.W16")); list.add(new ItemDto(item_to_confirm_finished, "任务确认完成", "DB2.W20")); list.add(new ItemDto(item_to_agv_put_finish, "AGV放货完成", "DB2.W24")); @@ -288,8 +346,53 @@ public class ItemProtocol { list.add(new ItemDto(item_to_all_weight, "上料总重量", "DB2.D104")); list.add(new ItemDto(item_to_fl_self_weight, "回流塑料框自重", "DB2.D108")); list.add(new ItemDto(item_to_sort_array, "排序数组", "DB200.W0[15]")); - list.add(new ItemDto(item_to_devices_array, "设备数组", "DB200.W30[15]")); + list.add(new ItemDto(item_to_devices_array, "站点数组", "DB200.W30[15]")); list.add(new ItemDto(item_to_weight_array, "重量数组", "DB200.REAL60[15]")); + list.add(new ItemDto(item_to_sort1, "排序1", "DB200.W0")); + list.add(new ItemDto(item_to_sort2, "排序2", "DB200.W2")); + list.add(new ItemDto(item_to_sort3, "排序3", "DB200.W4")); + list.add(new ItemDto(item_to_sort4, "排序4", "DB200.W6")); + list.add(new ItemDto(item_to_sort5, "排序5", "DB200.W8")); + list.add(new ItemDto(item_to_sort6, "排序6", "DB200.W10")); + list.add(new ItemDto(item_to_sort7, "排序7", "DB200.W12")); + list.add(new ItemDto(item_to_sort8, "排序8", "DB200.W14")); + list.add(new ItemDto(item_to_sort9, "排序9", "DB200.W16")); + list.add(new ItemDto(item_to_sort10, "排序10", "DB200.W18")); + list.add(new ItemDto(item_to_sort11, "排序11", "DB200.W20")); + list.add(new ItemDto(item_to_sort12, "排序12", "DB200.W22")); + list.add(new ItemDto(item_to_sort13, "排序13", "DB200.W24")); + list.add(new ItemDto(item_to_sort14, "排序14", "DB200.W26")); + list.add(new ItemDto(item_to_sort15, "排序15", "DB200.W28")); + list.add(new ItemDto(item_to_devices1, "站点1", "DB200.W30")); + list.add(new ItemDto(item_to_devices2, "站点2", "DB200.W32")); + list.add(new ItemDto(item_to_devices3, "站点3", "DB200.W34")); + list.add(new ItemDto(item_to_devices4, "站点4", "DB200.W36")); + list.add(new ItemDto(item_to_devices5, "站点5", "DB200.W38")); + list.add(new ItemDto(item_to_devices6, "站点6", "DB200.W40")); + list.add(new ItemDto(item_to_devices7, "站点7", "DB200.W42")); + list.add(new ItemDto(item_to_devices8, "站点8", "DB200.W44")); + list.add(new ItemDto(item_to_devices9, "站点9", "DB200.W46")); + list.add(new ItemDto(item_to_devices10, "站点10", "DB200.W48")); + list.add(new ItemDto(item_to_devices11, "站点11", "DB200.W50")); + list.add(new ItemDto(item_to_devices12, "站点12", "DB200.W52")); + list.add(new ItemDto(item_to_devices13, "站点13", "DB200.W54")); + list.add(new ItemDto(item_to_devices14, "站点14", "DB200.W56")); + list.add(new ItemDto(item_to_devices15, "站点15", "DB200.W58")); + list.add(new ItemDto(item_to_weight1, "站点1上料重量", "DB200.REAL60")); + list.add(new ItemDto(item_to_weight2, "站点2上料重量", "DB200.REAL64")); + list.add(new ItemDto(item_to_weight3, "站点3上料重量", "DB200.REAL68")); + list.add(new ItemDto(item_to_weight4, "站点4上料重量", "DB200.REAL72")); + list.add(new ItemDto(item_to_weight5, "站点5上料重量", "DB200.REAL76")); + list.add(new ItemDto(item_to_weight6, "站点6上料重量", "DB200.REAL80")); + list.add(new ItemDto(item_to_weight7, "站点7上料重量", "DB200.REAL84")); + list.add(new ItemDto(item_to_weight8, "站点8上料重量", "DB200.REAL88")); + list.add(new ItemDto(item_to_weight9, "站点9上料重量", "DB200.REAL92")); + list.add(new ItemDto(item_to_weight10, "站点10上料重量", "DB200.REAL96")); + list.add(new ItemDto(item_to_weight11, "站点11上料重量", "DB200.REAL100")); + list.add(new ItemDto(item_to_weight12, "站点12上料重量", "DB200.REAL104")); + list.add(new ItemDto(item_to_weight13, "站点13上料重量", "DB200.REAL108")); + list.add(new ItemDto(item_to_weight14, "站点14上料重量", "DB200.REAL112")); + list.add(new ItemDto(item_to_weight15, "站点15上料重量", "DB200.REAL116")); return list; } diff --git a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/driver/OpcDeviceDriver.java b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/driver/OpcDeviceDriver.java index 44512cd1..3f4e07eb 100644 --- a/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/driver/OpcDeviceDriver.java +++ b/wcs/nladmin-system/src/main/java/org/nl/acs/device_driver/driver/OpcDeviceDriver.java @@ -4,6 +4,7 @@ package org.nl.acs.device_driver.driver; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.sun.jna.platform.win32.WinDef; import org.nl.acs.device_driver.DeviceDriver; import org.nl.acs.opc.Device; import org.nl.acs.opc.OpcItemDto; @@ -98,4 +99,10 @@ public interface OpcDeviceDriver extends DeviceDriver { // return (Float)redisUtils.get(this.getItem(protocol)); return (Float) this.getOpcValueAccessor().getValue(this.getItem(protocol)); } + default Byte getByteValue(String protocol) { + return (Byte) this.getOpcValueAccessor().getValue(this.getItem(protocol)); + } + default char getCharValue(String protocol) { + return (char) this.getOpcValueAccessor().getValue(this.getItem(protocol)); + } } 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 0e52e2bf..b4e5be87 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 @@ -28,6 +28,7 @@ import org.nl.acs.device_driver.basedriver.standard_conveyor_control_with_scanne import org.nl.acs.device_driver.basedriver.standard_inspect_site.StandardInspectSiteDeviceDriver; import org.nl.acs.device_driver.basedriver.standard_ordinary_site.StandardOrdinarySiteDeviceDriver; import org.nl.acs.device_driver.basedriver.standard_scanner.StandardScannerDeviceDriver; +import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.ext.wms.service.WmsToAcsService; import org.nl.acs.acsEnum.StatusEnum; import org.nl.acs.acsEnum.WorkerOrderEnum; @@ -43,6 +44,7 @@ import org.nl.acs.task.service.dto.TaskDto; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.system.service.ParamService; import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @@ -69,6 +71,8 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { private ParamService paramService; @Autowired private InstructionService instructionService; + @Autowired + AcsToWmsService acsToWmsService; @Override public Map createFromWms(List tasks) { @@ -1333,18 +1337,33 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { throw new BadRequestException("未找到对应设备:" + start_device_code); } JSONObject resultJson = new JSONObject(); - //刻字上料 HailiangEngravingInDeviceDriver hailiangEngravingInDeviceDriver; if (device.getDeviceDriver() instanceof HailiangEngravingInDeviceDriver) { hailiangEngravingInDeviceDriver = (HailiangEngravingInDeviceDriver) device.getDeviceDriver(); - hailiangEngravingInDeviceDriver.writing("to_sort_array",to_sort_array); - hailiangEngravingInDeviceDriver.writing("to_devices_array",to_devices_array); - hailiangEngravingInDeviceDriver.writing("to_weight_array",to_weight_array); + String[] sort = to_sort_array.split(","); + for (int i=0;i< sort.length;i++){ + hailiangEngravingInDeviceDriver.writing("to_sort"+(i+1),sort[i]); + } + String[] devices = to_devices_array.split(","); + for (int i=0;i< devices.length;i++){ + String[] device_i = devices[i].split("_"); + hailiangEngravingInDeviceDriver.writing("to_devices"+(i+1),device_i[device_i.length-1]); + } + String[] weight = to_weight_array.split(","); + for (int i=0;i< weight.length;i++){ + hailiangEngravingInDeviceDriver.writing("to_weight"+(i+1),weight[i]); + } hailiangEngravingInDeviceDriver.writing("to_all_weight", all_weight); // hailiangEngravingInDeviceDriver.writing("to_all_weight",String.valueOf(hailiangEngravingInDeviceDriver.getEngraving_storage_now_weight())); hailiangEngravingInDeviceDriver.writing("to_task",to_task); } + // TODO 反馈mes + JSONObject reqParam = new JSONObject(); + reqParam.put("task_code", to_task); + reqParam.put("status", StatusEnum.TASK_RUNNING.getCode()); + HttpResponse httpResponse = acsToWmsService.washTask(reqParam); + resultJson.put("status", 200); resultJson.put("message", "操作成功"); log.info("接收WMS刻字上料成功,响应参数:{}", JSON.toJSONString(resultJson));