From e78a3c35fe6c6fefe940ddfdb2722a63957282bf Mon Sep 17 00:00:00 2001 From: "USER-20220102CG\\noblelift" <546428999@qq.com> Date: Thu, 10 Aug 2023 18:22:33 +0800 Subject: [PATCH] =?UTF-8?q?rev=20=20=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/nl/acs/device/wql/task_inst.xls | Bin 156160 -> 157184 bytes .../acs/device_driver/RequestMethodEnum.java | 6 +- .../LnshLaminatingMachineDeviceDriver.java | 64 ++-- ...hPackagePalletManipulatorDeviceDriver.java | 105 +++++- ...nshPalletizingManipulatorDeviceDriver.java | 329 +----------------- .../lnsh_press/LnshPressDeviceDriver.java | 50 ++- .../lnsh_station/LnshStationDeviceDriver.java | 36 ++ .../ApplySignalStatusRequest.java | 25 ++ .../ApplySignalStatusResponse.java | 10 + .../data/AcsToWmsData/grab/GrabRequest.java | 8 + .../GrabPlaceStationRequest.java | 45 +++ .../GrabPlaceStationResponse.java | 10 + .../wms/service/impl/WmsToAcsServiceImpl.java | 10 +- .../java/org/nl/acs/opc/DeviceManageDto.java | 7 +- .../driver/lnsh/lnsh_Laminating_machine.vue | 5 + .../lnsh/lnsh_package_pallet_manipulator.vue | 34 ++ .../acs/device/driver/lnsh/lnsh_station.vue | 5 + 17 files changed, 339 insertions(+), 410 deletions(-) create mode 100644 acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/data/AcsToWmsData/applySignalStaus/ApplySignalStatusRequest.java create mode 100644 acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/data/AcsToWmsData/applySignalStaus/ApplySignalStatusResponse.java create mode 100644 acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/data/AcsToWmsData/grab_place_station/GrabPlaceStationRequest.java create mode 100644 acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/data/AcsToWmsData/grab_place_station/GrabPlaceStationResponse.java diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device/wql/task_inst.xls b/acs/nladmin-system/src/main/java/org/nl/acs/device/wql/task_inst.xls index cc791b44d7b190362906fcf4387e09e5e80df8e1..cca434e2060c067f2fd7f3af8a4a1f4da6bb47fd 100644 GIT binary patch delta 46833 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 Hh)n)J#A4a? delta 44785 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 F{{_iOCLsU- diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/RequestMethodEnum.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/RequestMethodEnum.java index e7910e1..6a8bf3d 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/RequestMethodEnum.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/RequestMethodEnum.java @@ -36,13 +36,15 @@ public enum RequestMethodEnum { apply_one_grab(13, "apply_one_grab", "单次放置完成","0"), - real_time_set_point(14, "real_time_set_point", "反馈光电状态","1"), + real_time_set_point(14, "real_time_set_point", "反馈信号状态","1"), feedback_task_status(15, "feedback_task_status", "反馈任务状态","1"), feedback_device_status(16, "feedback_device_status", "反馈设备状态","1"), - apply_feedback_weight(16, "apply_feedback_weight", "反馈压机残留重量","0"); + apply_feedback_weight(17, "apply_feedback_weight", "反馈压机残留重量","0"), + + apply_get_put_station(18, "apply_get_put_station", "反馈当前抓取放置位","0"); //驱动索引 diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_Laminating_machine/LnshLaminatingMachineDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_Laminating_machine/LnshLaminatingMachineDeviceDriver.java index c7f007e..5071654 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_Laminating_machine/LnshLaminatingMachineDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_Laminating_machine/LnshLaminatingMachineDeviceDriver.java @@ -11,9 +11,12 @@ import lombok.extern.slf4j.Slf4j; import org.nl.acs.device.device_driver.standard_inspect.ReadUtil; import org.nl.acs.device.service.DeviceService; import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.RequestMethodEnum; import org.nl.acs.device_driver.RouteableDeviceDriver; import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; +import org.nl.acs.ext.wms.data.AcsToWmsData.applySignalStaus.ApplySignalStatusRequest; +import org.nl.acs.ext.wms.data.AcsToWmsData.applySignalStaus.ApplySignalStatusResponse; import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.instruction.service.InstructionService; import org.nl.acs.instruction.service.dto.Instruction; @@ -22,6 +25,8 @@ import org.nl.acs.monitor.DeviceStageMonitor; import org.nl.acs.opc.Device; import org.nl.acs.route.service.RouteLineService; import org.nl.acs.task.service.TaskService; +import org.nl.modules.lucene.service.LuceneExecuteLogService; +import org.nl.modules.lucene.service.dto.LuceneLogDto; import org.nl.modules.wql.util.SpringContextHolder; import org.openscada.opc.lib.da.Server; import org.springframework.beans.factory.annotation.Autowired; @@ -43,6 +48,8 @@ import java.util.Map; public class LnshLaminatingMachineDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver, DeviceStageMonitor { protected ItemProtocol itemProtocol = new ItemProtocol(this); + LuceneExecuteLogService lucene = SpringContextHolder.getBean("luceneExecuteLogServiceImpl"); + InstructionService instructionService = SpringContextHolder.getBean("instructionServiceImpl"); DeviceService deviceservice = SpringContextHolder.getBean("deviceServiceImpl"); @@ -137,15 +144,23 @@ public class LnshLaminatingMachineDeviceDriver extends AbstractOpcDeviceDriver i logServer.deviceExecuteLog(this.device_code, "", "", "信号task:" + last_task + " -> " + task); } if (container_type != last_container_type) { - this.setRequireSucess(false); logServer.deviceItemValue(this.device_code, "container_type", String.valueOf(container_type)); logServer.deviceExecuteLog(this.device_code, "", "", "信号container_type:" + last_container_type + " -> " + container_type); - } + if ("true".equals(this.device.getExtraValue().get("sendDeviceStatus"))) { + ApplySignalStatusRequest request = new ApplySignalStatusRequest(); + request.setDevice_code(this.getDevice_code()); + request.setRequest_medthod_code(RequestMethodEnum.real_time_set_point.getCode()); + request.setRequest_medthod_name(RequestMethodEnum.real_time_set_point.getName()); + request.setMove(String.valueOf(move)); + request.setVehicle_type(String.valueOf(container_type)); + ApplySignalStatusResponse resp = JSON.toJavaObject(JSONObject.parseObject(acsToWmsService.applyTask(request)), ApplySignalStatusResponse.class); + message = RequestMethodEnum.getName("real_time_set_point") + "real_time_set_point 接口请求LMS..."; + lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message + "参数:" + JSON.toJSONString(request))); - if ("true".equals(this.device.getExtraValue().get("inspect_in_stocck"))) { - if (!requireSucess) { - if (this.feedbackVehicleType(String.valueOf(container_type))) { - this.setRequireSucess(true); + if (resp.getCode() == 200) { + message = RequestMethodEnum.getName("real_time_set_point") + "real_time_set_point 接口请求成功" + resp.getMessage();; + } else { + message = RequestMethodEnum.getName("real_time_set_point") + "real_time_set_point 接口请求失败" + resp.getMessage();; } } } @@ -170,19 +185,6 @@ public class LnshLaminatingMachineDeviceDriver extends AbstractOpcDeviceDriver i message = ""; Instruction instruction = null; List toInstructions; - switch (mode) { - case 1: - log.debug("设备运转模式:等待工作"); - return; - case 2: - break; - case 4: - if (!requireSucess) { - getVehicle_code(); - } - break; - } - } last_mode = mode; @@ -235,30 +237,6 @@ public class LnshLaminatingMachineDeviceDriver extends AbstractOpcDeviceDriver i } - /** - * 获取托盘号 - * - * @param - */ - public synchronized boolean getVehicle_code() { - Date date = new Date(); - if (date.getTime() - this.instruction_require_time.getTime() < (long) this.instruction_require_time_out) { - log.trace("触发时间因为小于{}毫秒,而被无视", this.instruction_require_time_out); - return false; - } else { - this.instruction_require_time = date; - JSONObject jo = acsToWmsService.getVehicleCode(this.device_code); - if (jo.getInteger("status") == 200) { - String vehicle_code = jo.getString("vehicle_code"); - this.writing("to_barcode", vehicle_code); - this.writing(200); - requireSucess = true; - } - - return true; - } - } - public void executing(Server server, Map itemMap) { ReadUtil.write(itemMap, server); server.disconnect(); diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_package_pallet_manipulator/LnshPackagePalletManipulatorDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_package_pallet_manipulator/LnshPackagePalletManipulatorDeviceDriver.java index e43495f..f1b26ad 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_package_pallet_manipulator/LnshPackagePalletManipulatorDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_package_pallet_manipulator/LnshPackagePalletManipulatorDeviceDriver.java @@ -2,7 +2,6 @@ package org.nl.acs.device_driver.lnsh.lnsh_package_pallet_manipulator; 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.JSONObject; import lombok.Getter; @@ -17,24 +16,26 @@ import org.nl.acs.device_driver.RouteableDeviceDriver; import org.nl.acs.device_driver.StandardRequestMethod; import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; +import org.nl.acs.device_driver.lnsh.lnsh_mixing_mill.LnshMixingMillDeviceDriver; +import org.nl.acs.device_driver.lnsh.lnsh_palletizing_manipulator_site.LnshPalletizingManipulatorSiteDeviceDriver; import org.nl.acs.ext.wms.data.AcsToWmsData.applyTask.ApplyTaskRequest; import org.nl.acs.ext.wms.data.AcsToWmsData.applyTask.ApplyTaskResponse; +import org.nl.acs.ext.wms.data.AcsToWmsData.grab_place_station.GrabPlaceStationRequest; +import org.nl.acs.ext.wms.data.AcsToWmsData.grab_place_station.GrabPlaceStationResponse; import org.nl.acs.ext.wms.service.AcsToWmsService; import org.nl.acs.instruction.service.InstructionService; import org.nl.acs.instruction.service.dto.Instruction; import org.nl.acs.log.service.DeviceExecuteLogService; import org.nl.acs.monitor.DeviceStageMonitor; import org.nl.acs.opc.Device; +import org.nl.acs.opc.DeviceAppService; import org.nl.acs.order.service.ProduceshiftorderService; -import org.nl.acs.order.service.dto.ProduceshiftorderDto; import org.nl.acs.route.service.RouteLineService; import org.nl.acs.task.service.TaskService; import org.nl.modules.lucene.service.LuceneExecuteLogService; import org.nl.modules.lucene.service.dto.LuceneLogDto; import org.nl.modules.wql.util.SpringContextHolder; import org.openscada.opc.lib.da.Server; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -66,6 +67,8 @@ public class LnshPackagePalletManipulatorDeviceDriver extends AbstractOpcDeviceD ProduceshiftorderService produceshiftorderService = SpringContextHolder.getBean("produceshiftorderServiceImpl"); + DeviceAppService deviceAppService = SpringContextHolder.getBean("deviceAppServiceImpl"); + int mode = 0; int error = 0; int last_mode = 0; @@ -132,6 +135,11 @@ public class LnshPackagePalletManipulatorDeviceDriver extends AbstractOpcDeviceD int last_Htrapezoidal = 0; int last_Wthickness = 0; + int grab_station =0; + int last_grab_station = 0; + + int place_station =0; + int last_place_station = 0; int order_qty = 0; int last_order_qty = 0; @@ -158,13 +166,13 @@ public class LnshPackagePalletManipulatorDeviceDriver extends AbstractOpcDeviceD production_time = this.itemProtocol.getProduction_time(); error_time = this.itemProtocol.getError_time(); order_No = this.itemProtocol.getOrder_No(); - product_code = this.itemProtocol.getProduct_code(); AlongSide = this.itemProtocol.getAlongSide(); BshortSide = this.itemProtocol.getBshortSide(); Htrapezoidal = this.itemProtocol.getHtrapezoidal(); Wthickness = this.itemProtocol.getWthickness(); - + grab_station = this.itemProtocol.getGrabStation(); + place_station = this.itemProtocol.getPlaceStation(); if (mode != last_mode) { this.setRequireSucess(false); logServer.deviceItemValue(this.device_code,"mode" ,String.valueOf(mode)); @@ -234,6 +242,88 @@ public class LnshPackagePalletManipulatorDeviceDriver extends AbstractOpcDeviceD logServer.deviceItemValue(this.device_code,"Wthickness" ,String.valueOf(Wthickness)); logServer.deviceExecuteLog(this.device_code,"","","信号Wthickness:" + last_Wthickness + " -> " + Wthickness); } + if(grab_station != last_grab_station){ + GrabPlaceStationRequest request = new GrabPlaceStationRequest(); + request.setDevice_code(this.getDevice_code()); + request.setRequest_medthod_code(RequestMethodEnum.apply_get_put_station.getCode()); + request.setRequest_medthod_name(RequestMethodEnum.apply_get_put_station.getName()); + List getDeviceCodeList = this.getExtraDeviceCodes("link_get_station"); + List putDeviceCodeList = this.getExtraDeviceCodes("link_put_station"); + request.setGet_station(getDeviceCodeList.get(grab_station)); + request.setPut_station(putDeviceCodeList.get(place_station)); + Device getDevice = deviceAppService.findDeviceByCode(getDeviceCodeList.get(grab_station).toString()); + Device putDevice = deviceAppService.findDeviceByCode(putDeviceCodeList.get(place_station).toString()); + + if (ObjectUtil.isEmpty(getDevice)) { + throw new Exception("抓取位未找到对应设备:" + getDeviceCodeList.get(grab_station)); + } + if (ObjectUtil.isEmpty(putDevice)) { + throw new Exception("放置位找到对应设备:" + putDeviceCodeList.get(grab_station)); + } + + LnshPalletizingManipulatorSiteDeviceDriver lnshPalletizingManipulatorSiteDeviceDriver; + if(getDevice.getDeviceDriver() instanceof LnshPalletizingManipulatorSiteDeviceDriver){ + lnshPalletizingManipulatorSiteDeviceDriver = (LnshPalletizingManipulatorSiteDeviceDriver) getDevice.getDeviceDriver(); + request.setGet_station_vehicle_code(String.valueOf(lnshPalletizingManipulatorSiteDeviceDriver.getBarcode())); + request.setGet_station_qty(String.valueOf(lnshPalletizingManipulatorSiteDeviceDriver.getEncoder_qty())); + } + if(putDevice.getDeviceDriver() instanceof LnshPalletizingManipulatorSiteDeviceDriver){ + lnshPalletizingManipulatorSiteDeviceDriver = (LnshPalletizingManipulatorSiteDeviceDriver) putDevice.getDeviceDriver(); + request.setPut_station_vehicle_code(String.valueOf(lnshPalletizingManipulatorSiteDeviceDriver.getBarcode())); + request.setPut_station_qty(String.valueOf(lnshPalletizingManipulatorSiteDeviceDriver.getEncoder_qty())); + } + + GrabPlaceStationResponse resp = JSON.toJavaObject(JSONObject.parseObject(acsToWmsService.applyTask(request)), GrabPlaceStationResponse.class); + message = RequestMethodEnum.getName("apply_get_put_station") + "apply_get_put_station 接口请求LMS..."; + lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message + "参数:" + JSON.toJSONString(request))); + + if (resp.getCode() == 200) { + message = RequestMethodEnum.getName("apply_get_put_station") + "apply_get_put_station 接口请求成功" + resp.getMessage();; + } else { + message = RequestMethodEnum.getName("apply_get_put_station") + "apply_get_put_station 接口请求失败" + resp.getMessage();; + } + } + if(place_station != last_place_station){ + GrabPlaceStationRequest request = new GrabPlaceStationRequest(); + request.setDevice_code(this.getDevice_code()); + request.setRequest_medthod_code(RequestMethodEnum.apply_get_put_station.getCode()); + request.setRequest_medthod_name(RequestMethodEnum.apply_get_put_station.getName()); + List getDeviceCodeList = this.getExtraDeviceCodes("link_get_station"); + List putDeviceCodeList = this.getExtraDeviceCodes("link_put_station"); + request.setGet_station(getDeviceCodeList.get(grab_station)); + request.setPut_station(putDeviceCodeList.get(place_station)); + Device getDevice = deviceAppService.findDeviceByCode(getDeviceCodeList.get(grab_station).toString()); + Device putDevice = deviceAppService.findDeviceByCode(putDeviceCodeList.get(place_station).toString()); + + if (ObjectUtil.isEmpty(getDevice)) { + throw new Exception("抓取位未找到对应设备:" + getDeviceCodeList.get(grab_station)); + } + if (ObjectUtil.isEmpty(putDevice)) { + throw new Exception("放置位找到对应设备:" + putDeviceCodeList.get(grab_station)); + } + + LnshPalletizingManipulatorSiteDeviceDriver lnshPalletizingManipulatorSiteDeviceDriver; + if(getDevice.getDeviceDriver() instanceof LnshPalletizingManipulatorSiteDeviceDriver){ + lnshPalletizingManipulatorSiteDeviceDriver = (LnshPalletizingManipulatorSiteDeviceDriver) getDevice.getDeviceDriver(); + request.setGet_station_vehicle_code(String.valueOf(lnshPalletizingManipulatorSiteDeviceDriver.getBarcode())); + request.setGet_station_qty(String.valueOf(lnshPalletizingManipulatorSiteDeviceDriver.getEncoder_qty())); + } + if(putDevice.getDeviceDriver() instanceof LnshPalletizingManipulatorSiteDeviceDriver){ + lnshPalletizingManipulatorSiteDeviceDriver = (LnshPalletizingManipulatorSiteDeviceDriver) putDevice.getDeviceDriver(); + request.setPut_station_vehicle_code(String.valueOf(lnshPalletizingManipulatorSiteDeviceDriver.getBarcode())); + request.setPut_station_qty(String.valueOf(lnshPalletizingManipulatorSiteDeviceDriver.getEncoder_qty())); + } + + GrabPlaceStationResponse resp = JSON.toJavaObject(JSONObject.parseObject(acsToWmsService.applyTask(request)), GrabPlaceStationResponse.class); + message = RequestMethodEnum.getName("apply_get_put_station") + "apply_get_put_station 接口请求LMS..."; + lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message + "参数:" + JSON.toJSONString(request))); + + if (resp.getCode() == 200) { + message = RequestMethodEnum.getName("apply_get_put_station") + "apply_get_put_station 接口请求成功" + resp.getMessage();; + } else { + message = RequestMethodEnum.getName("apply_get_put_station") + "apply_get_put_station 接口请求失败" + resp.getMessage();; + } + } } catch (Exception var17) { return; @@ -287,12 +377,13 @@ public class LnshPackagePalletManipulatorDeviceDriver extends AbstractOpcDeviceD last_production_time = production_time; last_error_time = error_time; last_order_No = order_No; - last_product_code = product_code; last_AlongSide = AlongSide; last_BshortSide = BshortSide; last_Htrapezoidal = Htrapezoidal; last_Wthickness = Wthickness; + last_grab_station = grab_station; + last_place_station = place_station; } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_palletizing_manipulator/LnshPalletizingManipulatorDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_palletizing_manipulator/LnshPalletizingManipulatorDeviceDriver.java index 4573d58..cf45f04 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_palletizing_manipulator/LnshPalletizingManipulatorDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_palletizing_manipulator/LnshPalletizingManipulatorDeviceDriver.java @@ -365,312 +365,7 @@ public class LnshPalletizingManipulatorDeviceDriver extends AbstractOpcDeviceDri } } - /** - * 申请补满料盅托盘 - * - * @param - */ - public synchronized boolean apply_put_full_vehicle() { - if(move == 0) { - ApplyTaskRequest request = new ApplyTaskRequest(); - request.setDevice_code(this.getDevice_code()); - request.setRequest_medthod_code(Thread.currentThread().getStackTrace()[1].getMethodName()); - request.setRequest_medthod_name(RequestMethodEnum.getName(Thread.currentThread().getStackTrace()[1].getMethodName())); - message = RequestMethodEnum.getName("apply_put_full_vehicle") + "apply_put_full_vehicle 接口请求LMS..."; - lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message + "参数:" + JSON.toJSONString(request))); - ApplyTaskResponse resp = JSON.toJavaObject(JSONObject.parseObject(acsToWmsService.applyTask(request)),ApplyTaskResponse.class); - if (resp.getCode() == 200) { - this.writing(200); - this.setRequireSucess(true); - } else { - this.writing(400); - message = RequestMethodEnum.getName("apply_put_full_vehicle") + "apply_put_full_vehicle 接口请求失败" + resp.getMessage();; - } - lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message)); - return true; - } else { - message = RequestMethodEnum.getName("apply_put_full_vehicle") + "apply_put_full_vehicle 设备有货未请求LMS..."; - lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message)); - return false; - } - } - /** - * 申请补空料盅托盘 - * - * @param - */ - public synchronized boolean apply_put_empty_vehicle() { - if(move == 0) { - ApplyTaskRequest request = new ApplyTaskRequest(); - request.setDevice_code(this.getDevice_code()); - request.setRequest_medthod_code(Thread.currentThread().getStackTrace()[1].getMethodName()); - request.setRequest_medthod_name(RequestMethodEnum.getName(Thread.currentThread().getStackTrace()[1].getMethodName())); - ApplyTaskResponse resp = JSON.toJavaObject(JSONObject.parseObject(acsToWmsService.applyTask(request)),ApplyTaskResponse.class); - message = RequestMethodEnum.getName("apply_put_empty_vehicle") + "apply_put_empty_vehicle 接口请求LMS..."; - lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message + "参数:" + JSON.toJSONString(request))); - if (resp.getCode() == 200) { - this.writing(200); - this.setRequireSucess(true); - } else { - this.writing(400); - message = RequestMethodEnum.getName("apply_put_empty_vehicle") + "apply_put_empty_vehicle 接口请求失败" + resp.getMessage();; - } - return true; - } else { - message = RequestMethodEnum.getName("apply_put_empty_vehicle") + "apply_put_empty_vehicle 设备有货未请求LMS..."; - lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message)); - return false; - } - } - - /** - * 申请取走空料盅托盘 - * - * @param - */ - public synchronized boolean apply_take_empty_vehicle() { - if(move == 0) { - ApplyTaskRequest request = new ApplyTaskRequest(); - request.setDevice_code(this.getDevice_code()); - request.setRequest_medthod_code(Thread.currentThread().getStackTrace()[1].getMethodName()); - request.setRequest_medthod_name(RequestMethodEnum.getName(Thread.currentThread().getStackTrace()[1].getMethodName())); - ApplyTaskResponse resp = JSON.toJavaObject(JSONObject.parseObject(acsToWmsService.applyTask(request)),ApplyTaskResponse.class); - message = RequestMethodEnum.getName("apply_take_empty_vehicle") + "apply_take_empty_vehicle 接口请求LMS..."; - lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message + "参数:" + JSON.toJSONString(request))); - if (resp.getCode() == 200) { - this.writing(200); - this.setRequireSucess(true); - } else { - this.writing(400); - message = RequestMethodEnum.getName("apply_take_empty_vehicle") + "apply_take_empty_vehicle 接口请求失败" + resp.getMessage();; - } - return true; - } else { - message = RequestMethodEnum.getName("apply_take_empty_vehicle") + "apply_take_empty_vehicle 设备有货未请求LMS..."; - lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message)); - return false; - } - } - - - /** - * 申请取走满料盅托盘 - * - * @param - */ - public synchronized boolean apply_take_full_vehicle() { - if(move > 0) { - ApplyTaskRequest request = new ApplyTaskRequest(); - request.setDevice_code(this.getDevice_code()); - request.setRequest_medthod_code(Thread.currentThread().getStackTrace()[1].getMethodName()); - request.setRequest_medthod_name(RequestMethodEnum.getName(Thread.currentThread().getStackTrace()[1].getMethodName())); - if(ObjectUtil.isNotEmpty(this.getDevice().getExtraValue().get("link_device_code"))){ - Device device = deviceAppService.findDeviceByCode(this.getDevice().getExtraValue().get("link_device_code").toString()); - if(ObjectUtil.isNotEmpty(device)){ - LnshMixingMillDeviceDriver lnshMixingMillDeviceDriver; - if(device.getDeviceDriver() instanceof LnshMixingMillDeviceDriver){ - lnshMixingMillDeviceDriver = (LnshMixingMillDeviceDriver) device.getDeviceDriver(); - request.setMix_mum(String.valueOf(lnshMixingMillDeviceDriver.getMix_num())); - } - } - } - ApplyTaskResponse resp = JSON.toJavaObject(JSONObject.parseObject(acsToWmsService.applyTask(request)),ApplyTaskResponse.class); - message = RequestMethodEnum.getName("apply_take_full_vehicle") + "apply_take_full_vehicle 接口请求LMS..."; - lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message + "参数:" + JSON.toJSONString(request))); - - if (resp.getCode() == 200) { - this.writing(200); - this.setRequireSucess(true); - } else { - this.writing(400); - message = RequestMethodEnum.getName("apply_take_full_vehicle") + "apply_take_full_vehicle 接口请求失败" + resp.getMessage();; - } - return true; - } else { - message = RequestMethodEnum.getName("apply_take_full_vehicle") + "apply_take_full_vehicle 设备无货未请求LMS..."; - lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message)); - return false; - } - } - - /** - * 申请强制取走满料盅托盘 - * - * @param - */ - public synchronized boolean apply_force_take_full_vehicle() { - if(move > 0) { - ApplyTaskRequest request = new ApplyTaskRequest(); - request.setDevice_code(this.getDevice_code()); - request.setRequest_medthod_code(Thread.currentThread().getStackTrace()[1].getMethodName()); - request.setRequest_medthod_name(RequestMethodEnum.getName(Thread.currentThread().getStackTrace()[1].getMethodName())); - ApplyTaskResponse resp = JSON.toJavaObject(JSONObject.parseObject(acsToWmsService.applyTask(request)),ApplyTaskResponse.class); - message = RequestMethodEnum.getName("apply_force_take_full_vehicle") + "apply_force_take_full_vehicle 接口请求LMS..."; - lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message + "参数:" + JSON.toJSONString(request))); - - if (resp.getCode() == 200) { - this.writing(200); - this.setRequireSucess(true); - } else { - this.writing(400); - message = RequestMethodEnum.getName("apply_force_take_full_vehicle") + "apply_force_take_full_vehicle 接口请求失败" + resp.getMessage();; - } - return true; - } else { - message = RequestMethodEnum.getName("apply_force_take_full_vehicle") + "apply_force_take_full_vehicle 设备无货未请求LMS..."; - lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message)); - return false; - } - } - - /** - * 申请强制满托入缓存 - * - * @param - */ - public synchronized boolean apply_force_take_full_vehicle_in_storage() { - if(move > 0) { - ApplyTaskRequest request = new ApplyTaskRequest(); - request.setDevice_code(this.getDevice_code()); - request.setRequest_medthod_code(Thread.currentThread().getStackTrace()[1].getMethodName()); - request.setRequest_medthod_name(RequestMethodEnum.getName(Thread.currentThread().getStackTrace()[1].getMethodName())); - ApplyTaskResponse resp = JSON.toJavaObject(JSONObject.parseObject(acsToWmsService.applyTask(request)),ApplyTaskResponse.class); - message = RequestMethodEnum.getName("apply_force_take_full_vehicle_in_storage") + "apply_force_take_full_vehicle_in_storage 接口请求LMS..."; - lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message + "参数:" + JSON.toJSONString(request))); - - if (resp.getCode() == 200) { - this.writing(200); - this.setRequireSucess(true); - } else { - this.writing(400); - message = RequestMethodEnum.getName("apply_force_take_full_vehicle_in_storage") + "apply_force_take_full_vehicle_in_storage 接口请求失败" + resp.getMessage();; - } - return true; - } else { - message = RequestMethodEnum.getName("apply_force_take_full_vehicle_in_storage") + "apply_force_take_full_vehicle_in_storage 设备无货未请求LMS..."; - lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message)); - return false; - } - } - - /** - * 扫码成功申请 - * - * @param - */ - public synchronized boolean barcode_success_apply() { - if(move > 0) { - ApplyTaskRequest request = new ApplyTaskRequest(); - request.setDevice_code(this.getDevice_code()); - request.setRequest_medthod_code(Thread.currentThread().getStackTrace()[1].getMethodName()); - request.setRequest_medthod_name(RequestMethodEnum.getName(Thread.currentThread().getStackTrace()[1].getMethodName())); - ApplyTaskResponse resp = JSON.toJavaObject(JSONObject.parseObject(acsToWmsService.applyTask(request)),ApplyTaskResponse.class); - message = RequestMethodEnum.getName("barcode_success_apply") + "barcode_success_apply 接口请求LMS..."; - lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message + "参数:" + JSON.toJSONString(request))); - if (resp.getCode() == 200) { - this.writing(200); - this.writing(resp.getIs_standing_finish(),"1"); - this.setRequireSucess(true); - } else { - this.writing(400); - message = RequestMethodEnum.getName("barcode_success_apply") + "barcode_success_apply 接口请求失败" + resp.getMessage();; - } - return true; - } else { - message = RequestMethodEnum.getName("barcode_success_apply") + "barcode_success_apply 设备无货未请求LMS..."; - lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message)); - return false; - } - } - - /** - * 获取组盘信息 - * - * @param - */ - public synchronized boolean get_vehicle_info() { - if(move > 0) { - ApplyTaskRequest request = new ApplyTaskRequest(); - request.setDevice_code(this.getDevice_code()); - request.setRequest_medthod_code(Thread.currentThread().getStackTrace()[1].getMethodName()); - request.setRequest_medthod_name(RequestMethodEnum.getName(Thread.currentThread().getStackTrace()[1].getMethodName())); - ApplyTaskResponse resp = JSON.toJavaObject(JSONObject.parseObject(acsToWmsService.applyTask(request)),ApplyTaskResponse.class); - message = RequestMethodEnum.getName("get_vehicle_info") + "get_vehicle_info 接口请求LMS..."; - lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message + "参数:" + JSON.toJSONString(request))); - - if (resp.getCode() == 200) { - this.writing(200); - this.setRequireSucess(true); - } else { - this.writing(400); - message = RequestMethodEnum.getName("get_vehicle_info") + "get_vehicle_info 接口请求失败" + resp.getMessage();; - } - return true; - } else { - message = RequestMethodEnum.getName("get_vehicle_info") + "get_vehicle_info 设备无货未请求LMS..."; - lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message)); - return false; - } - - } - - /** - * 强制去包装-不包装 - */ - public synchronized boolean force_no_package() { - if(move > 0) { - ApplyTaskRequest request = new ApplyTaskRequest(); - request.setDevice_code(this.getDevice_code()); - request.setRequest_medthod_code(Thread.currentThread().getStackTrace()[1].getMethodName()); - request.setRequest_medthod_name(RequestMethodEnum.getName(Thread.currentThread().getStackTrace()[1].getMethodName())); - ApplyTaskResponse resp = JSON.toJavaObject(JSONObject.parseObject(acsToWmsService.applyTask(request)),ApplyTaskResponse.class); - message = RequestMethodEnum.getName("force_no_package") + "force_no_package 接口请求LMS..."; - lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message + "参数:" + JSON.toJSONString(request))); - - if (resp.getCode() == 200) { - this.writing(200); - this.setRequireSucess(true); - } else { - this.writing(400); - message = RequestMethodEnum.getName("force_no_package") + "force_no_package 接口请求失败" + resp.getMessage();; - } - return true; - } else { - message = RequestMethodEnum.getName("force_no_package") + "force_no_package 设备无货未请求LMS..."; - lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message)); - return false; - } - } - - - /** - * 申请贴标 - */ - public synchronized boolean apply_labelling() { - if(move > 0) { - ApplyTaskRequest request = new ApplyTaskRequest(); - request.setDevice_code(this.getDevice_code()); - request.setRequest_medthod_code(Thread.currentThread().getStackTrace()[1].getMethodName()); - request.setRequest_medthod_name(RequestMethodEnum.getName(Thread.currentThread().getStackTrace()[1].getMethodName())); - ApplyTaskResponse resp = JSON.toJavaObject(JSONObject.parseObject(acsToWmsService.applyTask(request)),ApplyTaskResponse.class); - message = RequestMethodEnum.getName("apply_labelling") + "apply_labelling 接口请求LMS..."; - lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message + "参数:" + JSON.toJSONString(request))); - - if (resp.getCode() == 200) { - this.writing(200); - this.setRequireSucess(true); - } else { - this.writing(400); - message = RequestMethodEnum.getName("apply_labelling") + "apply_labelling 接口请求失败" + resp.getMessage();; - } - return true; - } else { - message = RequestMethodEnum.getName("apply_labelling") + "apply_labelling 设备无货未请求LMS..."; - lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message)); - return false; - } - } public boolean apply_one_grab() { GrabRequest request = new GrabRequest(); @@ -692,6 +387,7 @@ public class LnshPalletizingManipulatorDeviceDriver extends AbstractOpcDeviceDri request.setLen(String.valueOf(len)); request.setVolume(String.valueOf(volume)); request.setFlatness(String.valueOf(flatness)); + request.setIs_qualified(String.valueOf(is_qualified)); request.setUnqualified_qty(String.valueOf(unqualified_qty)); message = RequestMethodEnum.getName("apply_one_grab") + "apply_one_grab 接口请求LMS..."; lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message + "参数:" + JSON.toJSONString(request))); @@ -708,30 +404,7 @@ public class LnshPalletizingManipulatorDeviceDriver extends AbstractOpcDeviceDri return true; } - /** - * 反馈压机残留重量 - */ - public synchronized boolean apply_feedback_weight() { - ApplyTaskRequest request = new ApplyTaskRequest(); - request.setDevice_code(this.getDevice_code()); - request.setRequest_medthod_code(Thread.currentThread().getStackTrace()[1].getMethodName()); - request.setRequest_medthod_name(RequestMethodEnum.getName(Thread.currentThread().getStackTrace()[1].getMethodName())); - request.setWeight(String.valueOf(weight)); - request.setMaterial_code(String.valueOf(material_code)); - ApplyTaskResponse resp = JSON.toJavaObject(JSONObject.parseObject(acsToWmsService.applyTask(request)), ApplyTaskResponse.class); - message = RequestMethodEnum.getName("apply_feedback_weight") + "apply_feedback_weight 接口请求LMS..."; - lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message + "参数:" + JSON.toJSONString(request))); - if (resp.getCode() == 200) { - this.writing(200); - this.setRequireSucess(true); - } else { - this.writing(400); - message = RequestMethodEnum.getName("apply_feedback_weight") + "apply_feedback_weight 接口请求失败" + resp.getMessage(); - ; - } - return true; - } /** * 获取托盘信息 diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_press/LnshPressDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_press/LnshPressDeviceDriver.java index 9e96b69..d7a6a6f 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_press/LnshPressDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_press/LnshPressDeviceDriver.java @@ -14,6 +14,7 @@ import org.nl.acs.device.service.DeviceService; import org.nl.acs.device_driver.DeviceDriver; import org.nl.acs.device_driver.RequestMethodEnum; import org.nl.acs.device_driver.RouteableDeviceDriver; +import org.nl.acs.device_driver.StandardRequestMethod; import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; import org.nl.acs.ext.wms.data.AcsToWmsData.applyTask.ApplyTaskRequest; @@ -50,7 +51,7 @@ import java.util.Map; @Getter @Setter @RequiredArgsConstructor -public class LnshPressDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver, DeviceStageMonitor { +public class LnshPressDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, RouteableDeviceDriver, DeviceStageMonitor, StandardRequestMethod { protected ItemProtocol itemProtocol = new ItemProtocol(this); InstructionService instructionService = SpringContextHolder.getBean("instructionServiceImpl"); @@ -336,36 +337,29 @@ public class LnshPressDeviceDriver extends AbstractOpcDeviceDriver implements De } /** - * 排产单确认 - * - * @param + * 反馈压机残留重量 */ - public synchronized boolean enterProduction(JSONObject json) { - Date date = new Date(); - if (date.getTime() - this.instruction_require_time.getTime() < (long) this.instruction_require_time_out) { - log.trace("触发时间因为小于{}毫秒,而被无视", this.instruction_require_time_out); - return false; + public synchronized boolean apply_feedback_weight() { + ApplyTaskRequest request = new ApplyTaskRequest(); + request.setDevice_code(this.getDevice_code()); + request.setRequest_medthod_code(Thread.currentThread().getStackTrace()[1].getMethodName()); + request.setRequest_medthod_name(RequestMethodEnum.getName(Thread.currentThread().getStackTrace()[1].getMethodName())); + request.setWeight(String.valueOf(weight)); + request.setOrder_code(String.valueOf(order_No)); + request.setMaterial_code(String.valueOf(material)); + ApplyTaskResponse resp = JSON.toJavaObject(JSONObject.parseObject(acsToWmsService.applyTask(request)), ApplyTaskResponse.class); + message = RequestMethodEnum.getName("apply_feedback_weight") + "apply_feedback_weight 接口请求LMS..."; + lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message + "参数:" + JSON.toJSONString(request))); + + if (resp.getCode() == 200) { + this.writing(200); + this.setRequireSucess(true); } else { - this.instruction_require_time = date; - HttpResponse result = acsToWmsService.enterOrder(json); - if (ObjectUtil.isNotEmpty(result)) { - if (result.getStatus() == HttpStatus.OK.value()) { - JSONObject jsonObject = JSONObject.parseObject(result.body()); - if (ObjectUtil.isNotEmpty(jsonObject) && "200".equals(jsonObject.getString("status"))) { -// ProduceshiftorderDto dto = produceshiftorderService.findByCode(order_No); -// if (this.mode == 3) { -// dto.setOrder_status("1"); -// } else if (this.mode == 4) { -// dto.setOrder_status("2"); -// } -// produceshiftorderService.update(dto); - this.writing(200); - this.setRequireSucess(true); - } - } - } - return true; + this.writing(400); + message = RequestMethodEnum.getName("apply_feedback_weight") + "apply_feedback_weight 接口请求失败" + resp.getMessage(); + ; } + return true; } public boolean exe_business() { diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_station/LnshStationDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_station/LnshStationDeviceDriver.java index a9c5449..bc231c5 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_station/LnshStationDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_station/LnshStationDeviceDriver.java @@ -17,6 +17,8 @@ import org.nl.acs.device_driver.StandardRequestMethod; import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; import org.nl.acs.device_driver.lnsh.lnsh_mixing_mill.LnshMixingMillDeviceDriver; +import org.nl.acs.ext.wms.data.AcsToWmsData.applySignalStaus.ApplySignalStatusRequest; +import org.nl.acs.ext.wms.data.AcsToWmsData.applySignalStaus.ApplySignalStatusResponse; import org.nl.acs.ext.wms.data.AcsToWmsData.applyTask.ApplyTaskResponse; import org.nl.acs.ext.wms.data.Resp; import org.nl.acs.ext.wms.data.AcsToWmsData.applyTask.ApplyTaskRequest; @@ -151,6 +153,23 @@ public class LnshStationDeviceDriver extends AbstractOpcDeviceDriver implements if (move != last_move) { logServer.deviceItemValue(this.device_code, "move", String.valueOf(move)); logServer.deviceExecuteLog(this.device_code, "", "", "信号move:" + last_move + " -> " + move); + if ("true".equals(this.device.getExtraValue().get("sendDeviceStatus"))) { + ApplySignalStatusRequest request = new ApplySignalStatusRequest(); + request.setDevice_code(this.getDevice_code()); + request.setRequest_medthod_code(RequestMethodEnum.real_time_set_point.getCode()); + request.setRequest_medthod_name(RequestMethodEnum.real_time_set_point.getName()); + request.setMove(String.valueOf(move)); + ApplySignalStatusResponse resp = JSON.toJavaObject(JSONObject.parseObject(acsToWmsService.applyTask(request)), ApplySignalStatusResponse.class); + message = RequestMethodEnum.getName("real_time_set_point") + "real_time_set_point 接口请求LMS..."; + lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message + "参数:" + JSON.toJSONString(request))); + + if (resp.getCode() == 200) { + message = RequestMethodEnum.getName("real_time_set_point") + "real_time_set_point 接口请求成功" + resp.getMessage();; + } else { + this.writing(400); + message = RequestMethodEnum.getName("real_time_set_point") + "real_time_set_point 接口请求失败" + resp.getMessage();; + } + } } if (error != last_error) { logServer.deviceItemValue(this.device_code, "error", String.valueOf(error)); @@ -163,6 +182,23 @@ public class LnshStationDeviceDriver extends AbstractOpcDeviceDriver implements if (action != last_action) { logServer.deviceItemValue(this.device_code, "action", String.valueOf(action)); logServer.deviceExecuteLog(this.device_code, "", "", "信号action:" + last_action + " -> " + action); + if ("true".equals(this.device.getExtraValue().get("sendDeviceStatus"))) { + ApplySignalStatusRequest request = new ApplySignalStatusRequest(); + request.setDevice_code(this.getDevice_code()); + request.setRequest_medthod_code(RequestMethodEnum.real_time_set_point.getCode()); + request.setRequest_medthod_name(RequestMethodEnum.real_time_set_point.getName()); + request.setAction(String.valueOf(action)); + ApplySignalStatusResponse resp = JSON.toJavaObject(JSONObject.parseObject(acsToWmsService.applyTask(request)), ApplySignalStatusResponse.class); + message = RequestMethodEnum.getName("real_time_set_point") + "real_time_set_point 接口请求LMS..."; + lucene.deviceExecuteLog(new LuceneLogDto(this.device_code, message + "参数:" + JSON.toJSONString(request))); + + if (resp.getCode() == 200) { + message = RequestMethodEnum.getName("real_time_set_point") + "real_time_set_point 接口请求成功" + resp.getMessage();; + } else { + this.writing(400); + message = RequestMethodEnum.getName("real_time_set_point") + "real_time_set_point 接口请求失败" + resp.getMessage();; + } + } } if (io_action != last_ioaction) { logServer.deviceItemValue(this.device_code, "io_action", String.valueOf(io_action)); diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/data/AcsToWmsData/applySignalStaus/ApplySignalStatusRequest.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/data/AcsToWmsData/applySignalStaus/ApplySignalStatusRequest.java new file mode 100644 index 0000000..20142e2 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/data/AcsToWmsData/applySignalStaus/ApplySignalStatusRequest.java @@ -0,0 +1,25 @@ +package org.nl.acs.ext.wms.data.AcsToWmsData.applySignalStaus; + +import lombok.Data; +import org.nl.acs.ext.wms.data.BaseRequest; +import org.nl.acs.ext.wms.data.PalletizeDto; + +@Data +public class ApplySignalStatusRequest extends BaseRequest { + + /** + * 光电信号 0无货 1有货 + */ + private String move; + + /** + * 载具类型 + */ + private String vehicle_type; + + /** + * 是否允许 0不允许 1允许 + */ + private String action; + +} diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/data/AcsToWmsData/applySignalStaus/ApplySignalStatusResponse.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/data/AcsToWmsData/applySignalStaus/ApplySignalStatusResponse.java new file mode 100644 index 0000000..8cd5ec7 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/data/AcsToWmsData/applySignalStaus/ApplySignalStatusResponse.java @@ -0,0 +1,10 @@ +package org.nl.acs.ext.wms.data.AcsToWmsData.applySignalStaus; + +import lombok.Data; +import org.nl.acs.ext.wms.data.BaseResponse; + +@Data +public class ApplySignalStatusResponse extends BaseResponse { + + +} diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/data/AcsToWmsData/grab/GrabRequest.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/data/AcsToWmsData/grab/GrabRequest.java index 64a8e2a..c31111c 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/data/AcsToWmsData/grab/GrabRequest.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/data/AcsToWmsData/grab/GrabRequest.java @@ -4,6 +4,9 @@ package org.nl.acs.ext.wms.data.AcsToWmsData.grab; import lombok.Data; import org.nl.acs.ext.wms.data.BaseRequest; +/** + * 反馈单次抓取 + */ @Data public class GrabRequest extends BaseRequest { @@ -17,6 +20,11 @@ public class GrabRequest extends BaseRequest { */ private String put_station; + /** + * 是否合格 + */ + private String is_qualified; + /** * 激光标刻码 */ diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/data/AcsToWmsData/grab_place_station/GrabPlaceStationRequest.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/data/AcsToWmsData/grab_place_station/GrabPlaceStationRequest.java new file mode 100644 index 0000000..604e698 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/data/AcsToWmsData/grab_place_station/GrabPlaceStationRequest.java @@ -0,0 +1,45 @@ +package org.nl.acs.ext.wms.data.AcsToWmsData.grab_place_station; + + +import lombok.Data; +import org.nl.acs.ext.wms.data.BaseRequest; + +/** + * 当前抓取放置工位切换 + */ +@Data +public class GrabPlaceStationRequest extends BaseRequest { + + /** + * 抓取位 + */ + private String get_station; + + /** + * 放置位 + */ + private String put_station; + + /** + * 取货点位载具号 + */ + private String get_station_vehicle_code; + + + /** + * 放货点位载具号 + */ + private String put_station_vehicle_code; + + /** + * 取货点当前数量 + */ + private String get_station_qty; + + /** + * 放货点当前数量 + */ + private String put_station_qty; + + +} diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/data/AcsToWmsData/grab_place_station/GrabPlaceStationResponse.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/data/AcsToWmsData/grab_place_station/GrabPlaceStationResponse.java new file mode 100644 index 0000000..b5c7c24 --- /dev/null +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/data/AcsToWmsData/grab_place_station/GrabPlaceStationResponse.java @@ -0,0 +1,10 @@ +package org.nl.acs.ext.wms.data.AcsToWmsData.grab_place_station; + +import org.nl.acs.ext.wms.data.BaseResponse; + + +public class GrabPlaceStationResponse extends BaseResponse { + + +} + diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java index 723fd52..7623dd8 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/WmsToAcsServiceImpl.java @@ -118,7 +118,11 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { String task_type = task.getString("task_type"); String remark = task.getString("remark"); String params = task.getString("params"); - + // 双工RGV任务 后工位任务 + String start_point_code2 = task.getString("start_device_code2"); + String next_point_code2 = task.getString("next_device_code2"); + String start_device_code2 = task.getString("start_device_code2"); + String next_device_code2 = task.getString("next_device_code2"); if (start_point_code.indexOf("-") > 0) { String str[] = start_point_code.split("-"); start_device_code = str[0]; @@ -160,6 +164,10 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { jo.put("next_parent_code", next_parent_code); jo.put("start_device_code", start_device_code); jo.put("next_device_code", next_device_code); + jo.put("start_point_code2", start_point_code2); + jo.put("next_point_code2", next_point_code2); + jo.put("start_device_code2", start_device_code2); + jo.put("next_device_code2", next_device_code2); jo.put("priority", priority); jo.put("vehicle_code", vehicle_code); jo.put("vehicle_type", vehicle_type); diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/opc/DeviceManageDto.java b/acs/nladmin-system/src/main/java/org/nl/acs/opc/DeviceManageDto.java index c4e9753..1647976 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/opc/DeviceManageDto.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/opc/DeviceManageDto.java @@ -1,5 +1,6 @@ package org.nl.acs.opc; +import cn.hutool.core.util.ObjectUtil; import eu.bitwalker.useragentutils.DeviceType; import lombok.Data; @@ -71,7 +72,11 @@ public class DeviceManageDto { while (var2.hasNext()) { DeviceExtraManageDto dto = (DeviceExtraManageDto) var2.next(); // result.put(dto.getExtra_code(), dto.parseName()); - result.put(dto.getExtra_code(), dto.getExtra_name()); + if(ObjectUtil.isEmpty( dto.getExtra_value())){ + result.put(dto.getExtra_code(), dto.getExtra_name()); + } else { + result.put(dto.getExtra_code(), dto.parseName()); + } } this.extra_map = result; diff --git a/acs/nladmin-ui/src/views/acs/device/driver/lnsh/lnsh_Laminating_machine.vue b/acs/nladmin-ui/src/views/acs/device/driver/lnsh/lnsh_Laminating_machine.vue index 5b9f0b6..dec278b 100644 --- a/acs/nladmin-ui/src/views/acs/device/driver/lnsh/lnsh_Laminating_machine.vue +++ b/acs/nladmin-ui/src/views/acs/device/driver/lnsh/lnsh_Laminating_machine.vue @@ -135,6 +135,11 @@ + + + + + diff --git a/acs/nladmin-ui/src/views/acs/device/driver/lnsh/lnsh_package_pallet_manipulator.vue b/acs/nladmin-ui/src/views/acs/device/driver/lnsh/lnsh_package_pallet_manipulator.vue index d005783..a0dcaef 100644 --- a/acs/nladmin-ui/src/views/acs/device/driver/lnsh/lnsh_package_pallet_manipulator.vue +++ b/acs/nladmin-ui/src/views/acs/device/driver/lnsh/lnsh_package_pallet_manipulator.vue @@ -135,6 +135,40 @@ + + + + + + + + + + + + + + diff --git a/acs/nladmin-ui/src/views/acs/device/driver/lnsh/lnsh_station.vue b/acs/nladmin-ui/src/views/acs/device/driver/lnsh/lnsh_station.vue index 9ab599f..8744184 100644 --- a/acs/nladmin-ui/src/views/acs/device/driver/lnsh/lnsh_station.vue +++ b/acs/nladmin-ui/src/views/acs/device/driver/lnsh/lnsh_station.vue @@ -98,6 +98,11 @@ + + + + +