From 122147fc2400890a898f62c3cb07e4e6b05fe29f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=B1=9F=E7=8E=AE?= Date: Wed, 20 Sep 2023 17:59:07 +0800 Subject: [PATCH] =?UTF-8?q?rev=20=E5=A4=A7=E5=B1=8F=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LnshFoldDiscSiteDeviceDriver.java | 3 + .../LnshKilnLaneDeviceDriver.java | 6 + .../LnshKilnTrussDeviceDriver.java | 3 + .../LnshMixingMillDeviceDriver.java | 3 + .../LnshOutKilnTrussDeviceDriver.java | 3 + ...hPackagePalletManipulatorDeviceDriver.java | 3 + ...nshPalletizingManipulatorDeviceDriver.java | 3 + .../lnsh_press/LnshPressDeviceDriver.java | 3 + .../acs/ext/wms/service/AcsToWmsService.java | 2 + .../wms/service/impl/AcsToWmsServiceImpl.java | 26 + .../wms/service/impl/WmsToAcsServiceImpl.java | 221 ++- .../org/nl/acs/opc/DeviceAppServiceImpl.java | 22 +- .../dashboard/service/DashboardService.java | 1560 ++++++++++++----- .../org/nl/wms/dashboard/wql/DASHBOARD.wql | 83 + .../wms/ext/acs/rest/AcsToWmsController.java | 8 + .../wms/ext/acs/service/AcsToWmsService.java | 2 + .../acs/service/impl/AcsToWmsServiceImpl.java | 28 +- .../org/nl/wms/pda/rest/PdaController.java | 6 - .../service/impl/WorkorderServiceImpl.java | 12 +- .../wms/sch/manage/AutoUpdateWorkOrder.java | 101 ++ .../sch/manage/AutoUpdateWorkOrderDaily.java | 7 - .../nl/wms/sch/manage/wql/MANAGE_QUERY.wql | 16 + .../org/nl/wms/sch/task/util/TaskUtils.java | 6 + .../src/main/resources/config/application.yml | 2 +- .../src/test/java/org/nl/test/PointTest.java | 31 +- .../src/views/wms/pdm/device/index.vue | 8 - .../views/wms/pdm/workerorder/hl/index.vue | 2 +- .../src/views/wms/pdm/workerorder/index.vue | 2 +- 28 files changed, 1610 insertions(+), 562 deletions(-) create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoUpdateWorkOrder.java delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoUpdateWorkOrderDaily.java diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_fold_disc_site/LnshFoldDiscSiteDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_fold_disc_site/LnshFoldDiscSiteDeviceDriver.java index bcddd4f..819fa6b 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_fold_disc_site/LnshFoldDiscSiteDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_fold_disc_site/LnshFoldDiscSiteDeviceDriver.java @@ -120,6 +120,9 @@ public class LnshFoldDiscSiteDeviceDriver extends AbstractOpcDeviceDriver implem if (status != last_status) { logServer.deviceItemValue(this.device_code, "status", String.valueOf(status)); logServer.deviceExecuteLog(this.device_code, "", "", "信号status:" + last_status + " -> " + status); + if (status == 3) { + acsToWmsService.equipmentFailure(device_code); + } } if (!open_time.equals(last_open_time)) { logServer.deviceItemValue(this.device_code, "open_time", open_time); diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_kiln_lane/LnshKilnLaneDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_kiln_lane/LnshKilnLaneDeviceDriver.java index 5e8d1d5..a2f368c 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_kiln_lane/LnshKilnLaneDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_kiln_lane/LnshKilnLaneDeviceDriver.java @@ -11,6 +11,8 @@ import org.nl.acs.device_driver.DeviceDriver; 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.service.AcsToWmsService; +import org.nl.acs.ext.wms.service.impl.AcsToWmsServiceImpl; import org.nl.acs.instruction.service.InstructionService; import org.nl.acs.log.service.DeviceExecuteLogService; import org.nl.acs.monitor.DeviceStageMonitor; @@ -41,6 +43,7 @@ public class LnshKilnLaneDeviceDriver extends AbstractOpcDeviceDriver implements TaskService taskserver = SpringContextHolder.getBean("taskServiceImpl"); DeviceExecuteLogService logServer = SpringContextHolder.getBean("deviceExecuteLogServiceImpl"); + AcsToWmsService acsToWmsService = SpringContextHolder.getBean("acsToWmsServiceImpl"); String device_code; int mode = 0; @@ -109,6 +112,9 @@ public class LnshKilnLaneDeviceDriver extends AbstractOpcDeviceDriver implements if (status != last_status) { logServer.deviceItemValue(this.device_code, "status", String.valueOf(status)); logServer.deviceExecuteLog(this.device_code, "", "", "信号status:" + last_status + " -> " + status); + if (status == 3) { + acsToWmsService.equipmentFailure(device_code); + } } if (!open_time.equals(last_open_time)) { logServer.deviceItemValue(this.device_code, "open_time", open_time); diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_kiln_truss/LnshKilnTrussDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_kiln_truss/LnshKilnTrussDeviceDriver.java index f753053..9b88aec 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_kiln_truss/LnshKilnTrussDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_kiln_truss/LnshKilnTrussDeviceDriver.java @@ -112,6 +112,9 @@ public class LnshKilnTrussDeviceDriver extends AbstractOpcDeviceDriver implement if (status != last_status) { logServer.deviceItemValue(this.device_code, "status", String.valueOf(status)); logServer.deviceExecuteLog(this.device_code, "", "", "信号status:" + last_status + " -> " + status); + if (status == 3) { + acsToWmsService.equipmentFailure(device_code); + } } if (kiln_number != last_kiln_number) { logServer.deviceItemValue(this.device_code, "kiln_number", String.valueOf(kiln_number)); diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_mixing_mill/LnshMixingMillDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_mixing_mill/LnshMixingMillDeviceDriver.java index d367eb8..2c4d4bc 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_mixing_mill/LnshMixingMillDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_mixing_mill/LnshMixingMillDeviceDriver.java @@ -142,6 +142,9 @@ public class LnshMixingMillDeviceDriver extends AbstractOpcDeviceDriver implemen if (status != last_status) { logServer.deviceItemValue(this.device_code,"status" ,String.valueOf(status)); logServer.deviceExecuteLog(this.device_code,"","","信号status:" + last_status + " -> " + status); + if (status == 3) { + acsToWmsService.equipmentFailure(device_code); + } } if (!open_time.equals(last_open_time)) { logServer.deviceItemValue(this.device_code,"open_time" ,String.valueOf(open_time)); diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_out_kiln_truss/LnshOutKilnTrussDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_out_kiln_truss/LnshOutKilnTrussDeviceDriver.java index 11f8d72..3813d12 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_out_kiln_truss/LnshOutKilnTrussDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/lnsh/lnsh_out_kiln_truss/LnshOutKilnTrussDeviceDriver.java @@ -135,6 +135,9 @@ public class LnshOutKilnTrussDeviceDriver extends AbstractOpcDeviceDriver implem if (status != last_status) { logServer.deviceItemValue(this.device_code,"status" ,String.valueOf(status)); logServer.deviceExecuteLog(this.device_code,"","","信号status:" + last_status + " -> " + status); + if (status == 3) { + acsToWmsService.equipmentFailure(device_code); + } } if (!open_time.equals(last_open_time)) { logServer.deviceItemValue(this.device_code,"open_time" ,String.valueOf(open_time)); 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 f801cfe..2ce8068 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 @@ -163,6 +163,9 @@ public class LnshPackagePalletManipulatorDeviceDriver extends AbstractOpcDeviceD if (status != last_status) { logServer.deviceItemValue(this.device_code,"status" ,String.valueOf(status)); logServer.deviceExecuteLog(this.device_code,"","","信号status:" + last_status + " -> " + status); + if (status == 3) { + acsToWmsService.equipmentFailure(device_code); + } } if (error != last_error) { logServer.deviceItemValue(this.device_code,"error" ,String.valueOf(error)); 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 d28b92c..46443ef 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 @@ -126,6 +126,9 @@ public class LnshPalletizingManipulatorDeviceDriver extends AbstractOpcDeviceDri if (status != last_status) { logServer.deviceItemValue(this.device_code,"status" ,String.valueOf(status)); logServer.deviceExecuteLog(this.device_code,"","","信号status:" + last_status + " -> " + status); + if (status == 3) { + acsToWmsService.equipmentFailure(device_code); + } } if (action != last_action) { logServer.deviceItemValue(this.device_code,"action" ,String.valueOf(action)); 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 672c4c7..826471c 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 @@ -151,6 +151,9 @@ public class LnshPressDeviceDriver extends AbstractOpcDeviceDriver implements De if (status != last_status) { logServer.deviceItemValue(this.device_code, "status", String.valueOf(status)); logServer.deviceExecuteLog(this.device_code, "", "", "信号status:" + last_status + " -> " + status); + if (status == 3) { + acsToWmsService.equipmentFailure(device_code); + } } if (!open_time.equals(last_open_time)) { logServer.deviceItemValue(this.device_code, "open_time", String.valueOf(open_time)); diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java index 2f95688..30e09c9 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/AcsToWmsService.java @@ -182,4 +182,6 @@ public interface AcsToWmsService { HttpResponse fjCallEmpty(JSONObject param); HttpResponse fjNeed(JSONObject param); + + void equipmentFailure(String deviceCode); } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java index 40f9550..cdf76e6 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/ext/wms/service/impl/AcsToWmsServiceImpl.java @@ -1157,4 +1157,30 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { MDC.remove(log_file_type); } } + + @Override + public void equipmentFailure(String deviceCode) { + try { + MDC.put(log_file_type, log_type); + String wmsurl = acsConfigService.findByCode(AcsConfig.WMSURL).getValue(); + + JSONObject param = new JSONObject(); + param.put("device_code", deviceCode); + log.info("equipmentFailure - 请求参数 {}", param); + AddressDto addressDto = addressService.findByCode("equipmentFailure"); + String methods_url = addressDto.getMethods_url(); + try { + HttpResponse response = HttpRequest + .post(wmsurl + methods_url) + .timeout(2000) + .body(param.toJSONString()) + .execute(); + log.info("equipmentFailure - 响应参数 {}", response.body()); + } catch (Exception e) { + log.error("equipmentFailure - 请求错误!", e); + } + } finally { + MDC.remove(log_file_type); + } + } } 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 49394ec..b914f93 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 @@ -8,17 +8,19 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.acs.config.AcsConfig; import org.nl.acs.device.service.DeviceService; +import org.nl.acs.device_driver.DeviceDriver; +import org.nl.acs.device_driver.basedriver.standard_inspect_site.StandardInspectSiteDeviceDriver; +import org.nl.acs.device_driver.lnsh.lnsh_Laminating_machine.LnshLaminatingMachineDeviceDriver; import org.nl.acs.device_driver.lnsh.lnsh_fold_disc_site.LnshFoldDiscSiteDeviceDriver; import org.nl.acs.device_driver.lnsh.lnsh_kiln_lane.LnshKilnLaneDeviceDriver; import org.nl.acs.device_driver.lnsh.lnsh_kiln_truss.LnshKilnTrussDeviceDriver; import org.nl.acs.device_driver.lnsh.lnsh_mixing_mill.LnshMixingMillDeviceDriver; import org.nl.acs.device_driver.lnsh.lnsh_out_kiln_truss.LnshOutKilnTrussDeviceDriver; -import org.nl.acs.device_driver.lnsh.lnsh_package_line.LnshPackageLineDeviceDriver; import org.nl.acs.device_driver.lnsh.lnsh_package_pallet_manipulator.LnshPackagePalletManipulatorDeviceDriver; import org.nl.acs.device_driver.lnsh.lnsh_package_site.LnshPackageSiteDeviceDriver; import org.nl.acs.device_driver.lnsh.lnsh_palletizing_manipulator.LnshPalletizingManipulatorDeviceDriver; +import org.nl.acs.device_driver.lnsh.lnsh_palletizing_manipulator_site.LnshPalletizingManipulatorSiteDeviceDriver; import org.nl.acs.device_driver.lnsh.lnsh_press.LnshPressDeviceDriver; -import org.nl.acs.device_driver.lnsh.lnsh_rgv.LnshRGVDeviceDriver; import org.nl.acs.device_driver.lnsh.lnsh_split_manipulator.LnshSplitManipulatorDeviceDriver; import org.nl.acs.device_driver.lnsh.lnsh_station.LnshStationDeviceDriver; import org.nl.acs.ext.wms.service.WmsToAcsService; @@ -415,111 +417,156 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { continue; } - String device_code = status.getString("device_code"); - if (StrUtil.isBlank(device_code)) { + String deviceCode = status.getString("device_code"); + if (StrUtil.isBlank(deviceCode)) { continue; + } else if (deviceCode.startsWith("HLJ") && !deviceCode.contains("XL")) { + deviceCode = "HLJ"; } - Device device = DeviceAppService.findDeviceByCode(device_code); + Device device = DeviceAppService.findDeviceByCode(deviceCode); if (ObjectUtil.isEmpty(device)) { continue; } - if (device.getDeviceDriver() instanceof LnshMixingMillDeviceDriver) { - LnshMixingMillDeviceDriver driver = (LnshMixingMillDeviceDriver) device.getDeviceDriver(); - - status.put("device_status", driver.getStatus()); + DeviceDriver deviceDriver = device.getDeviceDriver(); + if (deviceDriver instanceof LnshMixingMillDeviceDriver) { + LnshMixingMillDeviceDriver driver = (LnshMixingMillDeviceDriver) deviceDriver; + status.put("mode", driver.getMode()); + status.put("status", driver.getStatus()); status.put("error", driver.getError()); status.put("open_time", driver.getOpen_time()); - status.put("stand_time", driver.getStandby_time() / 3600); - status.put("work_time", driver.getProduction_time() / 3600); - status.put("error_time", driver.getError_time() / 3600); - status.put("real_qty", driver.getWeight()); + status.put("standby_time", driver.getStandby_time()); + status.put("production_time", driver.getProduction_time()); + status.put("error_time", driver.getError_time()); + status.put("weight", driver.getWeight()); status.put("mix_num", driver.getMix_num()); - } else if (device.getDeviceDriver() instanceof LnshPressDeviceDriver) { - LnshPressDeviceDriver driver = (LnshPressDeviceDriver) device.getDeviceDriver(); - - status.put("device_status", driver.getStatus()); + status.put("material", driver.getMaterial()); + } else if (deviceDriver instanceof LnshStationDeviceDriver) { + LnshStationDeviceDriver driver = (LnshStationDeviceDriver) deviceDriver; + status.put("mode", driver.getMode()); + status.put("move", driver.getMove()); + status.put("action", driver.getAction()); + status.put("ioaction", driver.getIo_action()); + status.put("error", driver.getError()); + status.put("task", driver.getTask()); + status.put("weight", driver.getWeight()); + status.put("material", driver.getMaterial()); + status.put("barcode", driver.getBarcode()); + } else if (deviceDriver instanceof StandardInspectSiteDeviceDriver) { + StandardInspectSiteDeviceDriver driver = (StandardInspectSiteDeviceDriver) deviceDriver; + status.put("mode", driver.getMode()); + status.put("move", driver.getMove()); + status.put("error", driver.getError()); + status.put("task", driver.getTask()); + } else if (deviceDriver instanceof LnshPressDeviceDriver) { + LnshPressDeviceDriver driver = (LnshPressDeviceDriver) deviceDriver; + status.put("mode", driver.getMode()); + status.put("status", driver.getStatus()); status.put("error", driver.getError()); status.put("open_time", driver.getOpen_time()); - status.put("stand_time", driver.getStandby_time() / 3600); - status.put("work_time", driver.getProduction_time() / 3600); - status.put("error_time", driver.getError_time() / 3600); - status.put("real_qty", driver.getQty()); - status.put("current_weight", driver.getWeight()); - } else if (device.getDeviceDriver() instanceof LnshPackagePalletManipulatorDeviceDriver) { - LnshPackagePalletManipulatorDeviceDriver driver = (LnshPackagePalletManipulatorDeviceDriver) device.getDeviceDriver(); - - status.put("device_status", driver.getStatus()); + status.put("standby_time", driver.getStandby_time()); + status.put("production_time", driver.getProduction_time()); + status.put("error_time", driver.getError_time()); + status.put("material", driver.getMaterial()); + status.put("qty", driver.getQty()); + status.put("weight", driver.getWeight()); + status.put("qualified", driver.getQualified()); + status.put("unqualified", driver.getUnqualified()); + status.put("order_No", driver.getOrder_No()); + status.put("avg_piece_weight", driver.getAvg_piece_weight()); + } else if (deviceDriver instanceof LnshPalletizingManipulatorDeviceDriver) { + LnshPalletizingManipulatorDeviceDriver driver = (LnshPalletizingManipulatorDeviceDriver) deviceDriver; + status.put("mode", driver.getMode()); + status.put("status", driver.getStatus()); + status.put("action", driver.getAction()); status.put("error", driver.getError()); status.put("open_time", driver.getOpen_time()); - status.put("stand_time", driver.getStandby_time() / 3600); - status.put("work_time", driver.getProduction_time() / 3600); - status.put("error_time", driver.getError_time() / 3600); - status.put("real_qty", driver.getQty()); - } else if (device.getDeviceDriver() instanceof LnshPalletizingManipulatorDeviceDriver) { - LnshPalletizingManipulatorDeviceDriver driver = (LnshPalletizingManipulatorDeviceDriver) device.getDeviceDriver(); - - status.put("device_status", driver.getStatus()); + status.put("standby_time", driver.getStandby_time()); + status.put("production_time", driver.getProduction_time()); + status.put("error_time", driver.getError_time()); + } else if (deviceDriver instanceof LnshPalletizingManipulatorSiteDeviceDriver) { + LnshPalletizingManipulatorSiteDeviceDriver driver = (LnshPalletizingManipulatorSiteDeviceDriver) deviceDriver; + status.put("mode", driver.getMode()); + status.put("move", driver.getMove()); + status.put("action", driver.getAction()); + status.put("ioaction", driver.getIo_action()); status.put("error", driver.getError()); + status.put("task", driver.getTask()); + status.put("weight", driver.getWeight()); + status.put("material", driver.getMaterial()); + status.put("barcode", driver.getBarcode()); + status.put("unqualified_qty", driver.getUnqualified_qty()); + status.put("encoder_qty", driver.getEncoder_qty()); + } else if (deviceDriver instanceof LnshKilnTrussDeviceDriver) { + LnshKilnTrussDeviceDriver driver = (LnshKilnTrussDeviceDriver) deviceDriver; + status.put("mode", driver.getMode()); + status.put("status", driver.getStatus()); status.put("open_time", driver.getOpen_time()); - status.put("stand_time", driver.getStandby_time() / 3600); - status.put("work_time", driver.getProduction_time() / 3600); - status.put("error_time", driver.getError_time() / 3600); - } else if (device.getDeviceDriver() instanceof LnshKilnTrussDeviceDriver) { - LnshKilnTrussDeviceDriver driver = (LnshKilnTrussDeviceDriver) device.getDeviceDriver(); - - status.put("device_status", driver.getStatus()); + status.put("standby_time", driver.getStandby_time()); + status.put("production_time", driver.getProduction_time()); + status.put("error_time", driver.getError_time()); + status.put("kiln_number", driver.getKiln_number()); + status.put("barcode", driver.getBarcode()); + } else if (deviceDriver instanceof LnshKilnLaneDeviceDriver) { + LnshKilnLaneDeviceDriver driver = (LnshKilnLaneDeviceDriver) deviceDriver; + status.put("mode", driver.getMode()); + status.put("status", driver.getStatus()); + status.put("open_time", driver.getOpen_time()); + status.put("standby_time", driver.getStandby_time()); + status.put("production_time", driver.getProduction_time()); + status.put("error_time", driver.getError_time()); + status.put("car_sum", driver.getCar_sum()); + status.put("nullCar_qty", driver.getNullCar_qty()); + status.put("burning_car_qty", driver.getBurning_car_qty()); + } else if (deviceDriver instanceof LnshOutKilnTrussDeviceDriver) { + LnshOutKilnTrussDeviceDriver driver = (LnshOutKilnTrussDeviceDriver) deviceDriver; + status.put("mode", driver.getMode()); + status.put("status", driver.getStatus()); + status.put("outKiln_move", driver.getOutKiln_move()); + status.put("outKiln_barcode", driver.getOutKiln_barcode()); + status.put("outKiln_device", driver.getOutKiln_device()); + status.put("open_time", driver.getOpen_time()); + status.put("standby_time", driver.getStandby_time()); + status.put("production_time", driver.getProduction_time()); + status.put("error_time", driver.getError_time()); + status.put("cool_number", driver.getCool_number()); + } else if (deviceDriver instanceof LnshPackagePalletManipulatorDeviceDriver) { + LnshPackagePalletManipulatorDeviceDriver driver = (LnshPackagePalletManipulatorDeviceDriver) deviceDriver; + status.put("mode", driver.getMode()); + status.put("status", driver.getStatus()); status.put("error", driver.getError()); + status.put("putStation", driver.getPut_station()); + status.put("material", driver.getMaterial()); + status.put("qty", driver.getQty()); + status.put("order_qty", driver.getOrder_qty()); status.put("open_time", driver.getOpen_time()); - status.put("stand_time", driver.getStandby_time() / 3600); - status.put("work_time", driver.getProduction_time() / 3600); - status.put("error_time", driver.getError_time() / 3600); - } else if (device.getDeviceDriver() instanceof LnshKilnLaneDeviceDriver) { - LnshKilnLaneDeviceDriver driver = (LnshKilnLaneDeviceDriver) device.getDeviceDriver(); - - status.put("device_status", driver.getStatus()); + status.put("standby_time", driver.getStandby_time()); + status.put("production_time", driver.getProduction_time()); + status.put("error_time", driver.getError_time()); + status.put("order_No", driver.getOrder_No()); + status.put("product_code", driver.getProduct_code()); + status.put("AlongSide", driver.getAlongSide()); + status.put("BshortSide", driver.getBshortSide()); + status.put("Htrapezoidal", driver.getHtrapezoidal()); + status.put("Wthickness", driver.getWthickness()); + } else if (deviceDriver instanceof LnshLaminatingMachineDeviceDriver) { + LnshLaminatingMachineDeviceDriver driver = (LnshLaminatingMachineDeviceDriver) deviceDriver; + status.put("mode", driver.getMode()); + status.put("move", driver.getMove()); + status.put("container_type", driver.getContainer_type()); status.put("error", driver.getError()); + status.put("task", driver.getTask()); + } else if (deviceDriver instanceof LnshFoldDiscSiteDeviceDriver) { + LnshFoldDiscSiteDeviceDriver driver = (LnshFoldDiscSiteDeviceDriver) deviceDriver; + status.put("mode", driver.getMode()); + status.put("status", driver.getStatus()); status.put("open_time", driver.getOpen_time()); - status.put("stand_time", driver.getStandby_time() / 3600); - status.put("work_time", driver.getProduction_time() / 3600); - status.put("error_time", driver.getError_time() / 3600); - } else if (device.getDeviceDriver() instanceof LnshOutKilnTrussDeviceDriver) { - LnshOutKilnTrussDeviceDriver driver = (LnshOutKilnTrussDeviceDriver) device.getDeviceDriver(); - - status.put("device_status", driver.getStatus()); - status.put("error", driver.getError()); - status.put("open_time", driver.getOpen_time()); - status.put("stand_time", driver.getStandby_time() / 3600); - status.put("work_time", driver.getProduction_time() / 3600); - status.put("error_time", driver.getError_time() / 3600); - } else if (device.getDeviceDriver() instanceof LnshRGVDeviceDriver) { - LnshRGVDeviceDriver driver = (LnshRGVDeviceDriver) device.getDeviceDriver(); - - status.put("device_status", driver.getStatus()); - status.put("error", driver.getError()); - status.put("open_time", driver.getOpen_time()); - status.put("stand_time", driver.getStandby_time() / 3600); - status.put("work_time", driver.getProduction_time() / 3600); - status.put("error_time", driver.getError_time() / 3600); - } else if (device.getDeviceDriver() instanceof LnshPackageLineDeviceDriver) { - LnshPackageLineDeviceDriver driver = (LnshPackageLineDeviceDriver) device.getDeviceDriver(); - - status.put("device_status", driver.getStatus()); - status.put("error", driver.getError()); - status.put("open_time", driver.getOpen_time()); - status.put("stand_time", driver.getStandby_time() / 3600); - status.put("work_time", driver.getProduction_time() / 3600); - status.put("error_time", driver.getError_time() / 3600); - } else if (device.getDeviceDriver() instanceof LnshFoldDiscSiteDeviceDriver) { - LnshFoldDiscSiteDeviceDriver driver = (LnshFoldDiscSiteDeviceDriver) device.getDeviceDriver(); - - status.put("device_status", driver.getStatus()); - status.put("error", driver.getError()); - status.put("open_time", driver.getOpen_time()); - status.put("stand_time", driver.getStandby_time() / 3600); - status.put("work_time", driver.getProduction_time() / 3600); - status.put("error_time", driver.getError_time() / 3600); + status.put("close_time", driver.getClose_time()); + status.put("standby_time", driver.getStandby_time()); + status.put("production_time", driver.getProduction_time()); + status.put("error_time", driver.getError_time()); + status.put("container_qty", driver.getContainer_qty()); } } } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/opc/DeviceAppServiceImpl.java b/acs/nladmin-system/src/main/java/org/nl/acs/opc/DeviceAppServiceImpl.java index 561ed6f..fd2338b 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/opc/DeviceAppServiceImpl.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/opc/DeviceAppServiceImpl.java @@ -10,15 +10,17 @@ import org.nl.acs.device_driver.DeviceDriver; import org.nl.acs.device_driver.DeviceDriverDefination; import org.nl.acs.device_driver.LinewayDeviceDriver; import org.nl.acs.device_driver.driver.OpcDeviceDriver; +import org.nl.acs.instruction.service.dto.Instruction; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; +import java.util.stream.Collectors; @Slf4j @Service public class DeviceAppServiceImpl implements DeviceAppService, ApplicationAutoInitial { - private List devices = new ArrayList(); + private List devices = new ArrayList<>(); private List code_indexs = new ArrayList(); @Autowired private DeviceManageService deviceManageService; @@ -36,18 +38,12 @@ public class DeviceAppServiceImpl implements DeviceAppService, ApplicationAutoIn return null; } - Iterator var2 = this.findAllDevice().iterator(); - - Device device; - do { - if (!var2.hasNext()) { - return null; - } - - device = (Device) var2.next(); - } while (!StrUtil.equals(device.getDevice_code(), device_code)); - - return device; + List list = this.devices.stream().filter(d -> device_code.equals(d.getDevice_code())).collect(Collectors.toList()); + if (list.isEmpty()) { + return null; + } else { + return list.get(0); + } } public Device findDeviceByAddress(String address) { diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/dashboard/service/DashboardService.java b/lms/nladmin-system/src/main/java/org/nl/wms/dashboard/service/DashboardService.java index bb506aa..e1c3da6 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/dashboard/service/DashboardService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/dashboard/service/DashboardService.java @@ -1,16 +1,24 @@ package org.nl.wms.dashboard.service; +import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.core.engine.object.WO; +import org.nl.wms.basedata.eum.VehicleType; import org.nl.wms.ext.acs.service.WmsToAcsService; +import org.nl.wms.sch.manage.Region; import org.nl.wms.sch.manage.WorkOrderEnum; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -23,405 +31,6 @@ public class DashboardService { private final WmsToAcsService wmsToAcsService; - /** - * 大屏首页报表 - * - * @return 大屏首页报表数据 - */ - public JSONObject homepageData() { - JSONObject result = new JSONObject(); - - // 当前设备情况--------------------------------------------------------------------------------------------------- - JSONObject currentEquipmentCondition = new JSONObject(); - result.put("currentEquipmentCondition", currentEquipmentCondition); - // todo 现在是假数据,后期更新。 - currentEquipmentCondition.put("running", 10); - currentEquipmentCondition.put("pausing", 4); - currentEquipmentCondition.put("shutdown", 1); - currentEquipmentCondition.put("inTrouble", 1); - - // 每月故障统计--------------------------------------------------------------------------------------------------- - JSONObject monthlyFailureStatistics = new JSONObject(); - result.put("monthlyFailureStatistics", monthlyFailureStatistics); - - // 故障次数 - JSONObject currentMonth = new JSONObject(); - monthlyFailureStatistics.put("currentMonth", currentMonth); - // todo 现在是假数据,后期更新。 - currentMonth.put("mix", 12); - currentMonth.put("press", 8); - currentMonth.put("dry", 4); - currentMonth.put("sort", 2); - - // 平均次数 - JSONObject average = new JSONObject(); - monthlyFailureStatistics.put("average", average); - // todo 现在是假数据,后期更新。 - average.put("mix", 16); - average.put("press", 10); - average.put("dry", 6); - average.put("sort", 1); - - // 当日工序生产统计------------------------------------------------------------------------------------------------ - JSONObject dailyProductionStatistics = new JSONObject(); - result.put("dailyProductionStatistics", dailyProductionStatistics); - - // 混料 - JSONObject mix = new JSONObject(); - dailyProductionStatistics.put("mix", mix); - // todo 现在是假数据,后期更新。 - mix.put("planned", 64.25); - mix.put("completed", 32.25); - - // 困料 - JSONObject stand = new JSONObject(); - dailyProductionStatistics.put("stand", stand); - // todo 现在是假数据,后期更新。 - stand.put("onStanding", 32.25); - stand.put("completed", 16.25); - - // 压制 - JSONObject press = new JSONObject(); - dailyProductionStatistics.put("press", press); - // todo 现在是假数据,后期更新。 - press.put("planned", 64.25); - press.put("completed", 32.25); - - // 干燥 - JSONObject dry = new JSONObject(); - dailyProductionStatistics.put("dry", dry); - // todo 现在是假数据,后期更新。 - dry.put("planned", 64.25); - dry.put("completed", 32.25); - - // 分拣 - JSONObject sort = new JSONObject(); - dailyProductionStatistics.put("sort", sort); - // todo 现在是假数据,后期更新。 - sort.put("planned", 32.25); - sort.put("completed", 16.25); - - // 设备生产统计--------------------------------------------------------------------------------------------------- - JSONArray equipmentProductionStatistics = new JSONArray(); - result.put("equipmentProductionStatistics", equipmentProductionStatistics); - // todo 现在是假数据,后期更新。 - for (int i = 1; i <= 3; i++) { - JSONObject row = new JSONObject(); - equipmentProductionStatistics.add(row); - row.put("equipment", "HLJ0" + i); - row.put("materialCode", "WL0" + i); - row.put("materialName", "物料" + i); - row.put("completed", 64 / i + 0.25); - } - - return result; - } - - /** - * 大屏首页设备 - * - * @return 大屏首页设备数据 - */ - public JSONObject homepageEquipment() { - JSONObject result = new JSONObject(); - - // 混料区-------------------------------------------------------------------------------------------------------- - JSONObject mix = new JSONObject(); - result.put("mix", mix); - - // 混料机 - JSONArray mixingMachine = new JSONArray(); - mix.put("mixingMachine", mixingMachine); - // todo 现在是假数据,后期更新。 - for (int i = 1; i <= 14; i++) { - JSONObject row = new JSONObject(); - row.put("equipment", "混料机" + i); - row.put("status", this.randomFrom1To(4)); - mixingMachine.add(row); - } - - // 混料对接位 - JSONArray unloadLocation = new JSONArray(); - mix.put("unloadLocation", unloadLocation); - // todo 现在是假数据,后期更新。 - for (int i = 1; i <= 14; i++) { - JSONObject row = new JSONObject(); - row.put("equipment", "混料机" + i + "下料位1"); - row.put("status", this.randomFrom1To(4)); - unloadLocation.add(row); - } - - // 困料货架------------------------------------------------------------------------------------------------------ - JSONObject stand = new JSONObject(); - result.put("stand", stand); - - // 困料货位 - JSONArray storageLocation = new JSONArray(); - stand.put("storageLocation", storageLocation); - // todo 现在是假数据,后期更新。 - for (int i = 1; i <= 8; i++) { - JSONObject row = new JSONObject(); - row.put("equipment", "困料货位" + i); - row.put("status", this.randomFrom1To(4)); - String pointStatus = this.randomFrom1To(3); - row.put("pointStatus", pointStatus); - if ("3".equals(pointStatus)) { - row.put("standStatus", this.randomFrom1To(5)); - } - storageLocation.add(row); - } - - // 压制区-------------------------------------------------------------------------------------------------------- - JSONObject press = new JSONObject(); - result.put("press", press); - - // 压机上料位 - JSONArray loadLocation = new JSONArray(); - press.put("loadLocation", loadLocation); - // todo 现在是假数据,后期更新。 - for (int i = 1; i <= 10; i++) { - JSONObject row = new JSONObject(); - row.put("equipment", "压机" + i + "上料位1"); - row.put("status", this.randomFrom1To(4)); - loadLocation.add(row); - } - - // 压机 - JSONArray pressMachine = new JSONArray(); - press.put("pressMachine", pressMachine); - // todo 现在是假数据,后期更新。 - for (int i = 1; i <= 10; i++) { - JSONObject row = new JSONObject(); - row.put("equipment", "压机" + i); - row.put("status", this.randomFrom1To(4)); - pressMachine.add(row); - } - - // 码垛机械手 - JSONArray palletizingRobot = new JSONArray(); - press.put("palletizingRobot", palletizingRobot); - // todo 现在是假数据,后期更新。 - for (int i = 1; i <= 5; i++) { - JSONObject row = new JSONObject(); - row.put("equipment", "码垛机械手" + i); - row.put("status", this.randomFrom1To(4)); - palletizingRobot.add(row); - } - - // 压机下料位 - unloadLocation = new JSONArray(); - press.put("unloadLocation", unloadLocation); - // todo 现在是假数据,后期更新。 - for (int i = 1; i <= 10; i++) { - for (int j = 1; j <= 2; j++) { - JSONObject row = new JSONObject(); - row.put("equipment", "压机" + i + "下料位" + j); - row.put("status", this.randomFrom1To(4)); - unloadLocation.add(row); - } - } - - // 窑前货架------------------------------------------------------------------------------------------------------ - JSONObject frontWarehouse = new JSONObject(); - result.put("frontWarehouse", frontWarehouse); - - // 窑前货位 - storageLocation = new JSONArray(); - frontWarehouse.put("storageLocation", storageLocation); - // todo 现在是假数据,后期更新。 - for (int i = 1; i <= 28; i += 2) { - JSONObject row = new JSONObject(); - row.put("equipment", "窑前货位" + i); - row.put("status", this.randomFrom1To(4)); - row.put("pointStatus", this.randomFrom1To(3)); - storageLocation.add(row); - } - for (int i = 2; i <= 28; i += 2) { - JSONObject row = new JSONObject(); - row.put("equipment", "窑前货位" + i); - row.put("status", this.randomFrom1To(4)); - row.put("pointStatus", this.randomFrom1To(3)); - storageLocation.add(row); - } - - // 干燥区-------------------------------------------------------------------------------------------------------- - JSONObject dry = new JSONObject(); - result.put("dry", dry); - - // 输送线 - JSONArray conveyorLine = new JSONArray(); - dry.put("conveyorLine", conveyorLine); - // todo 现在是假数据,后期更新。 - for (int i = 1; i <= 4; i++) { - JSONObject row = new JSONObject(); - row.put("equipment", "窑前输送线" + i); - row.put("status", this.randomFrom1To(4)); - conveyorLine.add(row); - } - - // 桁架 - JSONArray gantryRobot = new JSONArray(); - dry.put("gantryRobot", gantryRobot); - // todo 现在是假数据,后期更新。 - { - JSONObject row = new JSONObject(); - row.put("equipment", "窑前桁架1"); - row.put("status", this.randomFrom1To(4)); - gantryRobot.add(row); - row = new JSONObject(); - row.put("equipment", "窑后桁架1"); - row.put("status", this.randomFrom1To(4)); - gantryRobot.add(row); - } - - // 窑 - JSONArray kiln = new JSONArray(); - dry.put("kiln", kiln); - // todo 现在是假数据,后期更新。 - for (int i = 1; i <= 4; i++) { - JSONObject row = new JSONObject(); - row.put("equipment", "窑" + i); - row.put("status", this.randomFrom1To(4)); - kiln.add(row); - } - - // 回车道 - JSONArray emptyVehicleConveyorLine = new JSONArray(); - dry.put("emptyVehicleConveyorLine", emptyVehicleConveyorLine); - // todo 现在是假数据,后期更新。 - { - JSONObject row = new JSONObject(); - row.put("equipment", "回车道1"); - row.put("status", this.randomFrom1To(4)); - emptyVehicleConveyorLine.add(row); - } - - // 冷却道 - JSONArray coolingConveyorLine = new JSONArray(); - dry.put("coolingConveyorLine", coolingConveyorLine); - // todo 现在是假数据,后期更新。 - for (int i = 1; i <= 3; i++) { - JSONObject row = new JSONObject(); - row.put("equipment", "冷却道" + i); - row.put("status", this.randomFrom1To(4)); - coolingConveyorLine.add(row); - } - - // 窑后货架------------------------------------------------------------------------------------------------------ - JSONObject backWarehouse = new JSONObject(); - result.put("backWarehouse", backWarehouse); - - // 窑后货位 - storageLocation = new JSONArray(); - backWarehouse.put("storageLocation", storageLocation); - // todo 现在是假数据,后期更新。 - for (int i = 1; i <= 24; i++) { - JSONObject row = new JSONObject(); - row.put("equipment", "窑后货位" + i); - row.put("status", this.randomFrom1To(4)); - row.put("pointStatus", this.randomFrom1To(3)); - storageLocation.add(row); - } - - // 分拣区-------------------------------------------------------------------------------------------------------- - JSONObject sort = new JSONObject(); - result.put("sort", sort); - - // 拆垛对接位 - loadLocation = new JSONArray(); - sort.put("loadLocation", loadLocation); - // todo 现在是假数据,后期更新。 - for (int i = 1; i <= 2; i++) { - JSONObject row = new JSONObject(); - row.put("equipment", "分拣拆垛1对接位" + i); - row.put("status", this.randomFrom1To(4)); - loadLocation.add(row); - } - - // 分拣拆垛机械手 - JSONArray depalletizingRobot = new JSONArray(); - sort.put("depalletizingRobot", depalletizingRobot); - // todo 现在是假数据,后期更新。 - { - JSONObject row = new JSONObject(); - row.put("equipment", "分拣拆垛机械手1"); - row.put("status", this.randomFrom1To(4)); - depalletizingRobot.add(row); - } - - // 分拣码垛机械手 - palletizingRobot = new JSONArray(); - sort.put("palletizingRobot", palletizingRobot); - // todo 现在是假数据,后期更新。 - { - JSONObject row = new JSONObject(); - row.put("equipment", "分拣码垛机械手1"); - row.put("status", this.randomFrom1To(4)); - palletizingRobot.add(row); - } - - // 码垛对接位 - unloadLocation = new JSONArray(); - sort.put("unloadLocation", unloadLocation); - // todo 现在是假数据,后期更新。 - for (int i = 1; i <= 2; i++) { - JSONObject row = new JSONObject(); - row.put("equipment", "分拣码垛1对接位" + i); - row.put("status", this.randomFrom1To(4)); - unloadLocation.add(row); - } - - // 覆膜机 - JSONArray laminatingMachine = new JSONArray(); - sort.put("laminatingMachine", laminatingMachine); - // todo 现在是假数据,后期更新。 - { - JSONObject row = new JSONObject(); - row.put("equipment", "覆膜机1"); - row.put("status", this.randomFrom1To(4)); - laminatingMachine.add(row); - } - - // 托盘输送线----------------------------------------------------------------------------------------------------- - JSONObject vehicleConveyorLine = new JSONObject(); - result.put("vehicleConveyorLine", vehicleConveyorLine); - - // 叠托机 - JSONArray trayStacker = new JSONArray(); - vehicleConveyorLine.put("trayStacker", trayStacker); - // todo 现在是假数据,后期更新。 - { - JSONObject row = new JSONObject(); - row.put("equipment", "叠托机1"); - row.put("status", this.randomFrom1To(4)); - trayStacker.add(row); - } - - // 输送线 - conveyorLine = new JSONArray(); - vehicleConveyorLine.put("conveyorLine", conveyorLine); - // todo 现在是假数据,后期更新。 - for (int i = 5; i >= 5; i--) { - JSONObject row = new JSONObject(); - row.put("equipment", "拆盘机1对接位" + i); - row.put("status", this.randomFrom1To(4)); - conveyorLine.add(row); - } - - // 拆盘机 - JSONArray trayDestacker = new JSONArray(); - vehicleConveyorLine.put("trayDestacker", trayDestacker); - // todo 现在是假数据,后期更新。 - { - JSONObject row = new JSONObject(); - row.put("equipment", "拆盘机1"); - row.put("status", this.randomFrom1To(4)); - trayDestacker.add(row); - } - - return result; - } - /** * 生产统计 * @@ -649,7 +258,7 @@ public class DashboardService { * @return 首页真实数据 */ @SuppressWarnings("unused") - private JSONObject homepageData1() { + public JSONObject homepageData() { JSONObject result = new JSONObject(); // 当前设备情况--------------------------------------------------------------------------------------------------- @@ -666,10 +275,10 @@ public class DashboardService { if (acsResult.getIntValue("status") == HttpStatus.OK.value()) { JSONArray data = acsResult.getJSONArray("data"); - currentEquipmentCondition.put("running", data.stream().filter(o -> ((JSONObject) o).getIntValue("device_status") == 2).count()); - currentEquipmentCondition.put("pausing", data.stream().filter(o -> ((JSONObject) o).getIntValue("device_status") == 1).count()); - currentEquipmentCondition.put("shutdown", data.stream().filter(o -> ((JSONObject) o).getIntValue("device_status") == 0).count()); - currentEquipmentCondition.put("inTrouble", data.stream().filter(o -> ((JSONObject) o).getIntValue("device_status") == 3).count()); + currentEquipmentCondition.put("running", data.stream().filter(o -> ((JSONObject) o).getIntValue("status") == 2).count()); + currentEquipmentCondition.put("pausing", data.stream().filter(o -> ((JSONObject) o).getIntValue("status") == 1).count()); + currentEquipmentCondition.put("shutdown", data.stream().filter(o -> ((JSONObject) o).getIntValue("status") == 0).count()); + currentEquipmentCondition.put("inTrouble", data.stream().filter(o -> ((JSONObject) o).getIntValue("status") == 3).count()); } // 每月故障统计--------------------------------------------------------------------------------------------------- @@ -712,9 +321,9 @@ public class DashboardService { monthlyFailureStatistics.put("average", average); // 真实获取 average.put("mix", mixData.isEmpty() ? 0 : mixData.stream().mapToInt(o -> ((JSONObject) o).getIntValue("count")).sum() / mixData.size()); - average.put("press", pressData.isEmpty() ? 0 : pressData.stream().mapToInt(o -> ((JSONObject) o).getIntValue("count")).sum() / mixData.size()); - average.put("dry", dryData.isEmpty() ? 0 : dryData.stream().mapToInt(o -> ((JSONObject) o).getIntValue("count")).sum() / mixData.size()); - average.put("sort", sortData.isEmpty() ? 0 : sortData.stream().mapToInt(o -> ((JSONObject) o).getIntValue("count")).sum() / mixData.size()); + average.put("press", pressData.isEmpty() ? 0 : pressData.stream().mapToInt(o -> ((JSONObject) o).getIntValue("count")).sum() / pressData.size()); + average.put("dry", dryData.isEmpty() ? 0 : dryData.stream().mapToInt(o -> ((JSONObject) o).getIntValue("count")).sum() / dryData.size()); + average.put("sort", sortData.isEmpty() ? 0 : sortData.stream().mapToInt(o -> ((JSONObject) o).getIntValue("count")).sum() / sortData.size()); // 当日工序生产统计------------------------------------------------------------------------------------------------ JSONObject dailyProductionStatistics = new JSONObject(); @@ -777,9 +386,1144 @@ public class DashboardService { * @return 大屏首页设备数据 */ @SuppressWarnings("all") - public JSONObject homepageEquipment1() { + public JSONObject homepageEquipment() { JSONObject result = new JSONObject(); + JSONArray pointData = wmsToAcsService.getDeviceStatus(WQL.getWO("DASHBOARD").addParam("flag", "3").process().getResultJSONArray(0)).getJSONArray("data"); + if (ObjectUtil.isEmpty(pointData)) { + pointData = new JSONArray(); + } + + JSONArray deviceData = wmsToAcsService.getDeviceStatus(WQLObject.getWQLObject("pdm_bi_device").query().getResultJSONArray(0)).getJSONArray("data"); + if (ObjectUtil.isEmpty(deviceData)) { + deviceData = new JSONArray(); + } + + JSONArray WorkOrders = WQL.getWO("DASHBOARD").addParam("flag", "4").process().getResultJSONArray(0); + if (ObjectUtil.isEmpty(WorkOrders)) { + WorkOrders = new JSONArray(); + } + + JSONArray allDeviceTodayProduction = WQL.getWO("DASHBOARD").addParam("flag", "5").process().getResultJSONArray(0); + if (ObjectUtil.isEmpty(allDeviceTodayProduction)) { + allDeviceTodayProduction = new JSONArray(); + } + + // 混料区-------------------------------------------------------------------------------------------------------- + JSONObject mix = new JSONObject(); + result.put("mix", mix); + + // 混料机 + JSONArray mixingMachine = new JSONArray(); + mix.put("mixingMachine", mixingMachine); + List mixingMachineData = deviceData.stream().map(o -> (JSONObject) o).filter(o -> "1".equals(o.getString("device_model")) || "2".equals(o.getString("device_model"))).sorted((o1, o2) -> Integer.compare(o1.getIntValue("productivity"), o2.getIntValue("productivity"))).collect(Collectors.toList()); + for (JSONObject datum : mixingMachineData) { + String deviceCode = datum.getString("device_code"); + int deviceStatus = datum.getIntValue("status"); + List todayProduction = allDeviceTodayProduction.stream().map(o -> (JSONObject) o).filter(o -> deviceCode.equals(o.getString("device_code"))).collect(Collectors.toList()); + + JSONObject row = new JSONObject(); + row.put("equipment", deviceCode); + row.put("status", this.deviceStatusToDictStatus(deviceStatus)); + + JSONArray rowData = new JSONArray(); + row.put("data", rowData); + + JSONObject rowDatum = new JSONObject(); + rowDatum.put("key", datum.getString("device_name")); + rowDatum.put("value", this.deviceStatusToChinese(deviceStatus)); + rowData.add(rowDatum); + + List currentMaterial = WorkOrders.stream().map(o -> ((JSONObject) o)).filter(o -> deviceCode.equals(o.getString("device_code"))).map(o -> o.getString("material_number")).collect(Collectors.toList()); + rowDatum = new JSONObject(); + rowDatum.put("key", "当前生产"); + rowDatum.put("value", currentMaterial.isEmpty() ? "" : currentMaterial.get(0)); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "今日已生产"); + rowDatum.put("value", todayProduction.stream().mapToDouble(o -> o.getDoubleValue("weight")).sum() + "千克"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "开机时间"); + rowDatum.put("value", datum.getString("open_time")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "待机时间"); + rowDatum.put("value", datum.getIntValue("standby_time") / 3600 + "小时"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "生产时间"); + rowDatum.put("value", datum.getIntValue("production_time") / 3600 + "小时"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "故障时间"); + rowDatum.put("value", datum.getIntValue("error_time") / 3600 + "小时"); + rowData.add(rowDatum); + + row.put("table", todayProduction); + + mixingMachine.add(row); + } + + // 混料对接位 + JSONArray unloadLocation = new JSONArray(); + mix.put("unloadLocation", unloadLocation); + List unloadLocationData = pointData.stream().map(o -> (JSONObject) o).filter(o -> Region.HL.value().equals(o.getString("region_code")) && "12".contains(o.getString("point_type"))).sorted((o1, o2) -> Integer.compare(o1.getIntValue("sort_seq"), o2.getIntValue("sort_seq"))).collect(Collectors.toList()); + for (JSONObject datum : unloadLocationData) { + String deviceCode = datum.getString("device_code"); + int deviceMode = datum.getIntValue("mode"); + + JSONObject row = new JSONObject(); + row.put("equipment", deviceCode); + if (datum.getIntValue("error") != 0) { + row.put("status", 4); + } else { + row.put("status", this.deviceModeToDictStatus(deviceMode)); + } + + JSONArray rowData = new JSONArray(); + row.put("data", rowData); + + JSONObject rowDatum = new JSONObject(); + rowDatum.put("key", "点位"); + rowDatum.put("value", datum.getString("point_name")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "载具号"); + rowDatum.put("value", datum.getString("vehicle_code")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "物料号"); + rowDatum.put("value", datum.getString("material_number")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "物料名称"); + rowDatum.put("value", datum.getString("material_name")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "重量"); + rowDatum.put("value", String.format("%.0f", datum.getDoubleValue("weight")) + "千克"); + rowData.add(rowDatum); + + String createTime = datum.getString("create_time"); + rowDatum = new JSONObject(); + rowDatum.put("key", "组盘时间"); + rowDatum.put("value", createTime); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "已静置时间"); + rowDatum.put("value", StrUtil.isBlank(createTime) ? "" : DateUtil.between(DateUtil.parseDate(datum.getString("create_time")), new Date(), DateUnit.HOUR) + "小时"); + rowData.add(rowDatum); + + unloadLocation.add(row); + } + + // 困料货架------------------------------------------------------------------------------------------------------ + JSONObject stand = new JSONObject(); + result.put("stand", stand); + + // 困料货位 + JSONArray storageLocation = new JSONArray(); + stand.put("storageLocation", storageLocation); + List storageLocationData = pointData.stream().map(o -> (JSONObject) o).filter(o -> Region.KLHJ.value().equals(o.getString("region_code")) && "1234".contains(o.getString("point_type"))).sorted((o1, o2) -> Integer.compare(o1.getIntValue("sort_seq"), o2.getIntValue("sort_seq"))).collect(Collectors.toList()); + for (JSONObject datum : storageLocationData) { + String deviceCode = datum.getString("device_code"); + int deviceMode = datum.getIntValue("mode"); + + JSONObject row = new JSONObject(); + row.put("equipment", deviceCode); + if (datum.getIntValue("error") != 0) { + row.put("status", 4); + } else { + row.put("status", this.deviceModeToDictStatus(deviceMode)); + } + + JSONArray rowData = new JSONArray(); + row.put("data", rowData); + + JSONObject rowDatum = new JSONObject(); + rowDatum.put("key", "点位"); + rowDatum.put("value", datum.getString("point_name")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "载具号"); + rowDatum.put("value", datum.getString("vehicle_code")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "物料号"); + rowDatum.put("value", datum.getString("material_number")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "物料名称"); + rowDatum.put("value", datum.getString("material_name")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "重量"); + rowDatum.put("value", String.format("%.0f", datum.getDoubleValue("weight")) + "千克"); + rowData.add(rowDatum); + + String createTime = datum.getString("create_time"); + rowDatum = new JSONObject(); + rowDatum.put("key", "组盘时间"); + rowDatum.put("value", createTime); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "已静置时间"); + rowDatum.put("value", StrUtil.isBlank(createTime) ? "" : DateUtil.between(DateUtil.parseDate(datum.getString("create_time")), new Date(), DateUnit.HOUR) + "小时"); + rowData.add(rowDatum); + + storageLocation.add(row); + } + + // 压制区-------------------------------------------------------------------------------------------------------- + JSONObject press = new JSONObject(); + result.put("press", press); + + // 压机上料位 + JSONArray loadLocation = new JSONArray(); + press.put("loadLocation", loadLocation); + List loadLocationData = pointData.stream().map(o -> (JSONObject) o).filter(o -> Region.YZ.value().equals(o.getString("region_code")) && "2".contains(o.getString("point_type"))).sorted((o1, o2) -> Integer.compare(o1.getIntValue("sort_seq"), o2.getIntValue("sort_seq"))).collect(Collectors.toList()); + for (JSONObject datum : loadLocationData) { + String deviceCode = datum.getString("device_code"); + int deviceMode = datum.getIntValue("mode"); + + JSONObject row = new JSONObject(); + row.put("equipment", deviceCode); + if (datum.getIntValue("error") != 0) { + row.put("status", 4); + } else { + row.put("status", this.deviceModeToDictStatus(deviceMode)); + } + + JSONArray rowData = new JSONArray(); + row.put("data", rowData); + + JSONObject rowDatum = new JSONObject(); + rowDatum.put("key", "点位"); + rowDatum.put("value", datum.getString("point_name")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "载具号"); + rowDatum.put("value", datum.getString("vehicle_code")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "物料号"); + rowDatum.put("value", datum.getString("material_number")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "物料名称"); + rowDatum.put("value", datum.getString("material_name")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "重量"); + rowDatum.put("value", String.format("%.0f", datum.getDoubleValue("weight")) + "千克"); + rowData.add(rowDatum); + + String createTime = datum.getString("create_time"); + rowDatum = new JSONObject(); + rowDatum.put("key", "组盘时间"); + rowDatum.put("value", createTime); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "已静置时间"); + rowDatum.put("value", StrUtil.isBlank(createTime) ? "" : DateUtil.between(DateUtil.parseDate(datum.getString("create_time")), new Date(), DateUnit.HOUR) + "小时"); + rowData.add(rowDatum); + + loadLocation.add(row); + } + + // 压机 + JSONArray pressMachine = new JSONArray(); + press.put("pressMachine", pressMachine); + List pressMachineData = deviceData.stream().map(o -> (JSONObject) o).filter(o -> "3".equals(o.getString("device_model")) || "4".equals(o.getString("device_model"))).sorted((o1, o2) -> Integer.compare(o1.getIntValue("productivity"), o2.getIntValue("productivity"))).collect(Collectors.toList()); + for (JSONObject datum : pressMachineData) { + String deviceCode = datum.getString("device_code"); + int deviceStatus = datum.getIntValue("status"); + List todayProduction = allDeviceTodayProduction.stream().map(o -> (JSONObject) o).filter(o -> deviceCode.equals(o.getString("device_code"))).collect(Collectors.toList()); + + JSONObject row = new JSONObject(); + row.put("equipment", deviceCode); + row.put("status", this.deviceStatusToDictStatus(deviceStatus)); + + JSONArray rowData = new JSONArray(); + row.put("data", rowData); + + JSONObject rowDatum = new JSONObject(); + rowDatum.put("key", datum.getString("device_name")); + rowDatum.put("value", this.deviceStatusToChinese(deviceStatus)); + rowData.add(rowDatum); + + List currentMaterial = WorkOrders.stream().map(o -> ((JSONObject) o)).filter(o -> deviceCode.equals(o.getString("device_code"))).map(o -> o.getString("material_number")).collect(Collectors.toList()); + rowDatum = new JSONObject(); + rowDatum.put("key", "当前生产"); + rowDatum.put("value", currentMaterial.isEmpty() ? "" : currentMaterial.get(0)); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "今日已生产"); + rowDatum.put("value", todayProduction.stream().mapToInt(o -> o.getIntValue("qty")).sum() + "块"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "开机时间"); + rowDatum.put("value", datum.getString("open_time")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "待机时间"); + rowDatum.put("value", datum.getIntValue("standby_time") / 3600 + "小时"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "生产时间"); + rowDatum.put("value", datum.getIntValue("production_time") / 3600 + "小时"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "故障时间"); + rowDatum.put("value", datum.getIntValue("error_time") / 3600 + "小时"); + rowData.add(rowDatum); + + row.put("table", todayProduction); + + pressMachine.add(row); + } + + // 码垛机械手 + JSONArray palletizingRobot = new JSONArray(); + press.put("palletizingRobot", palletizingRobot); + List palletizingRobotData = deviceData.stream().map(o -> (JSONObject) o).filter(o -> "5".equals(o.getString("device_model"))).sorted((o1, o2) -> Integer.compare(o1.getIntValue("productivity"), o2.getIntValue("productivity"))).collect(Collectors.toList()); + for (JSONObject datum : palletizingRobotData) { + String deviceCode = datum.getString("device_code"); + int deviceStatus = datum.getIntValue("status"); + + JSONObject row = new JSONObject(); + row.put("equipment", deviceCode); + row.put("status", this.deviceStatusToDictStatus(deviceStatus)); + + JSONArray rowData = new JSONArray(); + row.put("data", rowData); + + JSONObject rowDatum = new JSONObject(); + rowDatum.put("key", datum.getString("device_name")); + rowDatum.put("value", this.deviceStatusToChinese(deviceStatus)); + rowData.add(rowDatum); + + + + + + rowDatum = new JSONObject(); + rowDatum.put("key", "开机时间"); + rowDatum.put("value", datum.getString("open_time")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "待机时间"); + rowDatum.put("value", datum.getIntValue("standby_time") / 3600 + "小时"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "生产时间"); + rowDatum.put("value", datum.getIntValue("production_time") / 3600 + "小时"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "故障时间"); + rowDatum.put("value", datum.getIntValue("error_time") / 3600 + "小时"); + rowData.add(rowDatum); + + row.put("table", new ArrayList<>()); + + palletizingRobot.add(row); + } + + // 压机下料位 + unloadLocation = new JSONArray(); + press.put("unloadLocation", unloadLocation); + unloadLocationData = pointData.stream().map(o -> (JSONObject) o).filter(o -> Region.YZ.value().equals(o.getString("region_code")) && "1".contains(o.getString("point_type"))).sorted((o1, o2) -> Integer.compare(o1.getIntValue("sort_seq"), o2.getIntValue("sort_seq"))).collect(Collectors.toList()); + for (JSONObject datum : unloadLocationData) { + String deviceCode = datum.getString("device_code"); + int deviceMode = datum.getIntValue("mode"); + + JSONObject row = new JSONObject(); + row.put("equipment", deviceCode); + if (datum.getIntValue("error") != 0) { + row.put("status", 4); + } else { + row.put("status", this.deviceModeToDictStatus(deviceMode)); + } + + JSONArray rowData = new JSONArray(); + row.put("data", rowData); + + JSONObject rowDatum = new JSONObject(); + rowDatum.put("key", "点位"); + rowDatum.put("value", datum.getString("point_name")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "载具号"); + rowDatum.put("value", datum.getString("vehicle_code")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "物料号"); + rowDatum.put("value", datum.getString("material_number")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "物料名称"); + rowDatum.put("value", datum.getString("material_name")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "数量"); + rowDatum.put("value", datum.getIntValue("qty")+ "块"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "组盘时间"); + rowDatum.put("value", datum.getString("create_time")); + rowData.add(rowDatum); + + unloadLocation.add(row); + } + + // 窑前货架------------------------------------------------------------------------------------------------------ + JSONObject frontWarehouse = new JSONObject(); + result.put("frontWarehouse", frontWarehouse); + + // 窑前货位 + storageLocation = new JSONArray(); + frontWarehouse.put("storageLocation", storageLocation); + storageLocationData = pointData.stream().map(o -> (JSONObject) o).filter(o -> Region.YQHJ.value().equals(o.getString("region_code")) && "1".contains(o.getString("point_type"))).sorted((o1, o2) -> Integer.compare(o1.getIntValue("sort_seq"), o2.getIntValue("sort_seq"))).collect(Collectors.toList()); + for (JSONObject datum : storageLocationData) { + String deviceCode = datum.getString("device_code"); + int deviceMode = datum.getIntValue("mode"); + + JSONObject row = new JSONObject(); + row.put("equipment", deviceCode); + if (datum.getIntValue("error") != 0) { + row.put("status", 4); + } else { + row.put("status", this.deviceModeToDictStatus(deviceMode)); + } + + JSONArray rowData = new JSONArray(); + row.put("data", rowData); + + JSONObject rowDatum = new JSONObject(); + rowDatum.put("key", "点位"); + rowDatum.put("value", datum.getString("point_name")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "载具号"); + rowDatum.put("value", datum.getString("vehicle_code")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "物料号"); + rowDatum.put("value", datum.getString("material_number")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "物料名称"); + rowDatum.put("value", datum.getString("material_name")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "数量"); + rowDatum.put("value", datum.getIntValue("qty")+ "块"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "组盘时间"); + rowDatum.put("value", datum.getString("create_time")); + rowData.add(rowDatum); + + storageLocation.add(row); + } + + + // 干燥区-------------------------------------------------------------------------------------------------------- + JSONObject dry = new JSONObject(); + result.put("dry", dry); + + // 输送线 + JSONArray conveyorLine = new JSONArray(); + dry.put("conveyorLine", conveyorLine); + List conveyorLineData = pointData.stream().map(o -> (JSONObject) o).filter(o -> Region.GZ.value().equals(o.getString("region_code")) && "123".contains(o.getString("point_type"))).sorted((o1, o2) -> Integer.compare(o1.getIntValue("sort_seq"), o2.getIntValue("sort_seq"))).collect(Collectors.toList()); + for (JSONObject datum : conveyorLineData) { + String deviceCode = datum.getString("device_code"); + int deviceMode = datum.getIntValue("mode"); + + JSONObject row = new JSONObject(); + row.put("equipment", deviceCode); + if (datum.getIntValue("error") != 0) { + row.put("status", 4); + } else { + row.put("status", this.deviceModeToDictStatus(deviceMode)); + } + + JSONArray rowData = new JSONArray(); + row.put("data", rowData); + + JSONObject rowDatum = new JSONObject(); + rowDatum.put("key", "点位"); + rowDatum.put("value", datum.getString("point_name")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "载具号"); + rowDatum.put("value", datum.getString("vehicle_code")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "物料号"); + rowDatum.put("value", datum.getString("material_number")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "物料名称"); + rowDatum.put("value", datum.getString("material_name")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "数量"); + rowDatum.put("value", datum.getIntValue("qty")+ "块"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "组盘时间"); + rowDatum.put("value", datum.getString("create_time")); + rowData.add(rowDatum); + + conveyorLine.add(row); + } + + // 桁架 + JSONArray gantryRobot = new JSONArray(); + dry.put("gantryRobot", gantryRobot); + List gantryRobotData = deviceData.stream().map(o -> (JSONObject) o).filter(o -> "6".equals(o.getString("device_model")) || "8".equals(o.getString("device_model"))).sorted((o1, o2) -> Integer.compare(o1.getIntValue("productivity"), o2.getIntValue("productivity"))).collect(Collectors.toList()); + for (JSONObject datum : gantryRobotData) { + String deviceCode = datum.getString("device_code"); + int deviceStatus = datum.getIntValue("status"); + + JSONObject row = new JSONObject(); + row.put("equipment", deviceCode); + row.put("status", this.deviceStatusToDictStatus(deviceStatus)); + + JSONArray rowData = new JSONArray(); + row.put("data", rowData); + + JSONObject rowDatum = new JSONObject(); + rowDatum.put("key", datum.getString("device_name")); + rowDatum.put("value", this.deviceStatusToChinese(deviceStatus)); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "开机时间"); + rowDatum.put("value", datum.getString("open_time")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "待机时间"); + rowDatum.put("value", datum.getIntValue("standby_time") / 3600 + "小时"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "生产时间"); + rowDatum.put("value", datum.getIntValue("production_time") / 3600 + "小时"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "故障时间"); + rowDatum.put("value", datum.getIntValue("error_time") / 3600 + "小时"); + rowData.add(rowDatum); + + gantryRobot.add(row); + } + + // 窑 + JSONArray kiln = new JSONArray(); + dry.put("kiln", kiln); + List kilnData = deviceData.stream().map(o -> (JSONObject) o).filter(o -> "7".equals(o.getString("device_model"))).sorted((o1, o2) -> Integer.compare(o1.getIntValue("productivity"), o2.getIntValue("productivity"))).collect(Collectors.toList()); + List toadyOutKiln = WQL.getWO("DASHBOARD").addParam("flag", "6").process().getResultJSONArray(0).stream().map(o -> (JSONObject) o).collect(Collectors.toList()); + for (JSONObject datum : kilnData) { + String deviceCode = datum.getString("device_code"); + int deviceStatus = datum.getIntValue("status"); + + JSONObject row = new JSONObject(); + row.put("equipment", deviceCode); + row.put("status", this.deviceStatusToDictStatus(deviceStatus)); + + JSONArray rowData = new JSONArray(); + row.put("data", rowData); + + JSONObject rowDatum = new JSONObject(); + rowDatum.put("key", datum.getString("device_name")); + rowDatum.put("value", this.deviceStatusToChinese(deviceStatus)); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "开机时间"); + rowDatum.put("value", datum.getString("open_time")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "待机时间"); + rowDatum.put("value", datum.getIntValue("standby_time") / 3600 + "小时"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "生产时间"); + rowDatum.put("value", datum.getIntValue("production_time") / 3600 + "小时"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "故障时间"); + rowDatum.put("value", datum.getIntValue("error_time") / 3600 + "小时"); + rowData.add(rowDatum); + + row.put("table", toadyOutKiln.stream().filter(o -> deviceCode.equals(o.getString("device_code"))).collect(Collectors.toList())); + + kiln.add(row); + } + + // 回车道 + JSONArray emptyVehicleConveyorLine = new JSONArray(); + dry.put("emptyVehicleConveyorLine", emptyVehicleConveyorLine); + + // 冷却道 + JSONArray coolingConveyorLine = new JSONArray(); + dry.put("coolingConveyorLine", coolingConveyorLine); + List coolingConveyorLineData = deviceData.stream().map(o -> (JSONObject) o).filter(o -> "13".equals(o.getString("device_model"))).sorted((o1, o2) -> Integer.compare(o1.getIntValue("productivity"), o2.getIntValue("productivity"))).collect(Collectors.toList()); + for (JSONObject datum : coolingConveyorLineData) { + String deviceCode = datum.getString("device_code"); + int deviceStatus = datum.getIntValue("status"); + + JSONObject row = new JSONObject(); + row.put("equipment", deviceCode); + row.put("status", this.deviceStatusToDictStatus(deviceStatus)); + + JSONArray rowData = new JSONArray(); + row.put("data", rowData); + + JSONObject rowDatum = new JSONObject(); + rowDatum.put("key", datum.getString("device_name")); + rowDatum.put("value", this.deviceStatusToChinese(deviceStatus)); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "开机时间"); + rowDatum.put("value", datum.getString("open_time")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "待机时间"); + rowDatum.put("value", datum.getIntValue("standby_time") / 3600 + "小时"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "生产时间"); + rowDatum.put("value", datum.getIntValue("production_time") / 3600 + "小时"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "故障时间"); + rowDatum.put("value", datum.getIntValue("error_time") / 3600 + "小时"); + rowData.add(rowDatum); + + coolingConveyorLine.add(row); + } + + // 窑后货架------------------------------------------------------------------------------------------------------ + JSONObject backWarehouse = new JSONObject(); + result.put("backWarehouse", backWarehouse); + + // 窑后货位 + storageLocation = new JSONArray(); + backWarehouse.put("storageLocation", storageLocation); + storageLocationData = pointData.stream().map(o -> (JSONObject) o).filter(o -> Region.YHHJ.value().equals(o.getString("region_code")) && "1".contains(o.getString("point_type"))).sorted((o1, o2) -> Integer.compare(o1.getIntValue("sort_seq"), o2.getIntValue("sort_seq"))).collect(Collectors.toList()); + for (JSONObject datum : storageLocationData) { + String deviceCode = datum.getString("device_code"); + int deviceMode = datum.getIntValue("mode"); + + JSONObject row = new JSONObject(); + row.put("equipment", deviceCode); + if (datum.getIntValue("error") != 0) { + row.put("status", 4); + } else { + row.put("status", this.deviceModeToDictStatus(deviceMode)); + } + + JSONArray rowData = new JSONArray(); + row.put("data", rowData); + + JSONObject rowDatum = new JSONObject(); + rowDatum.put("key", "点位"); + rowDatum.put("value", datum.getString("point_name")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "载具号"); + rowDatum.put("value", datum.getString("vehicle_code")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "物料号"); + rowDatum.put("value", datum.getString("material_number")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "物料名称"); + rowDatum.put("value", datum.getString("material_name")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "数量"); + rowDatum.put("value", datum.getIntValue("qty")+ "块"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "组盘时间"); + rowDatum.put("value", datum.getString("create_time")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "入窑时间"); + rowDatum.put("value", datum.getString("in_kiln_time")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "窑"); + rowDatum.put("value", datum.getString("device_name")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "出窑时间"); + rowDatum.put("value", datum.getString("out_kiln_time")); + rowData.add(rowDatum); + + storageLocation.add(row); + } + + // 分拣区-------------------------------------------------------------------------------------------------------- + JSONObject sort = new JSONObject(); + result.put("sort", sort); + + // 拆垛对接位 + loadLocation = new JSONArray(); + sort.put("loadLocation", loadLocation); + loadLocationData = pointData.stream().map(o -> (JSONObject) o).filter(o -> Region.FJ.value().equals(o.getString("region_code")) && "1".contains(o.getString("point_type"))).sorted((o1, o2) -> Integer.compare(o1.getIntValue("sort_seq"), o2.getIntValue("sort_seq"))).collect(Collectors.toList()); + for (JSONObject datum : loadLocationData) { + String deviceCode = datum.getString("device_code"); + int deviceMode = datum.getIntValue("mode"); + + JSONObject row = new JSONObject(); + row.put("equipment", deviceCode); + if (datum.getIntValue("error") != 0) { + row.put("status", 4); + } else { + row.put("status", this.deviceModeToDictStatus(deviceMode)); + } + + JSONArray rowData = new JSONArray(); + row.put("data", rowData); + + JSONObject rowDatum = new JSONObject(); + rowDatum.put("key", "点位"); + rowDatum.put("value", datum.getString("point_name")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "载具号"); + rowDatum.put("value", datum.getString("vehicle_code")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "物料号"); + rowDatum.put("value", datum.getString("material_number")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "物料名称"); + rowDatum.put("value", datum.getString("material_name")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "数量"); + rowDatum.put("value", datum.getIntValue("qty")+ "块"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "组盘时间"); + rowDatum.put("value", datum.getString("create_time")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "入窑时间"); + rowDatum.put("value", datum.getString("in_kiln_time")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "窑"); + rowDatum.put("value", datum.getString("device_name")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "出窑时间"); + rowDatum.put("value", datum.getString("out_kiln_time")); + rowData.add(rowDatum); + + loadLocation.add(row); + } + + // 分拣拆垛机械手 + JSONArray depalletizingRobot = new JSONArray(); + sort.put("depalletizingRobot", depalletizingRobot); + List depalletizingRobotData = deviceData.stream().map(o -> (JSONObject) o).filter(o -> "9".equals(o.getString("device_model"))).sorted((o1, o2) -> Integer.compare(o1.getIntValue("productivity"), o2.getIntValue("productivity"))).collect(Collectors.toList()); + for (JSONObject datum : depalletizingRobotData) { + String deviceCode = datum.getString("device_code"); + int deviceStatus = datum.getIntValue("status"); + List todayProduction = allDeviceTodayProduction.stream().map(o -> (JSONObject) o).filter(o -> deviceCode.equals(o.getString("device_code"))).collect(Collectors.toList()); + + JSONObject row = new JSONObject(); + row.put("equipment", deviceCode); + row.put("status", this.deviceStatusToDictStatus(deviceStatus)); + + JSONArray rowData = new JSONArray(); + row.put("data", rowData); + + JSONObject rowDatum = new JSONObject(); + rowDatum.put("key", datum.getString("device_name")); + rowDatum.put("value", this.deviceStatusToChinese(deviceStatus)); + rowData.add(rowDatum); + + List currentMaterial = WorkOrders.stream().map(o -> ((JSONObject) o)).filter(o -> deviceCode.equals(o.getString("device_code"))).map(o -> o.getString("material_number")).collect(Collectors.toList()); + rowDatum = new JSONObject(); + rowDatum.put("key", "当前生产"); + rowDatum.put("value", currentMaterial.isEmpty() ? "" : currentMaterial.get(0)); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "今日已生产"); + rowDatum.put("value", todayProduction.stream().mapToDouble(o -> o.getDoubleValue("weight")).sum() + "千克"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "开机时间"); + rowDatum.put("value", datum.getString("open_time")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "待机时间"); + rowDatum.put("value", datum.getIntValue("standby_time") / 3600 + "小时"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "生产时间"); + rowDatum.put("value", datum.getIntValue("production_time") / 3600 + "小时"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "故障时间"); + rowDatum.put("value", datum.getIntValue("error_time") / 3600 + "小时"); + rowData.add(rowDatum); + + row.put("table", todayProduction); + + depalletizingRobot.add(row); + } + + // 分拣码垛机械手 + palletizingRobot = new JSONArray(); + sort.put("palletizingRobot", palletizingRobot); + palletizingRobotData = deviceData.stream().map(o -> (JSONObject) o).filter(o -> "10".equals(o.getString("device_model"))).sorted((o1, o2) -> Integer.compare(o1.getIntValue("productivity"), o2.getIntValue("productivity"))).collect(Collectors.toList()); + for (JSONObject datum : palletizingRobotData) { + String deviceCode = datum.getString("device_code"); + int deviceStatus = datum.getIntValue("status"); + + JSONObject row = new JSONObject(); + row.put("equipment", deviceCode); + row.put("status", this.deviceStatusToDictStatus(deviceStatus)); + + JSONArray rowData = new JSONArray(); + row.put("data", rowData); + + JSONObject rowDatum = new JSONObject(); + rowDatum.put("key", datum.getString("device_name")); + rowDatum.put("value", this.deviceStatusToChinese(deviceStatus)); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "开机时间"); + rowDatum.put("value", datum.getString("open_time")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "待机时间"); + rowDatum.put("value", datum.getIntValue("standby_time") / 3600 + "小时"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "生产时间"); + rowDatum.put("value", datum.getIntValue("production_time") / 3600 + "小时"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "故障时间"); + rowDatum.put("value", datum.getIntValue("error_time") / 3600 + "小时"); + rowData.add(rowDatum); + + row.put("table", new ArrayList<>()); + + palletizingRobot.add(row); + } + + // 码垛对接位 + unloadLocation = new JSONArray(); + sort.put("unloadLocation", unloadLocation); + unloadLocationData = pointData.stream().map(o -> (JSONObject) o).filter(o -> Region.FJ.value().equals(o.getString("region_code")) && "2".contains(o.getString("point_type"))).sorted((o1, o2) -> Integer.compare(o1.getIntValue("sort_seq"), o2.getIntValue("sort_seq"))).collect(Collectors.toList()); + for (JSONObject datum : unloadLocationData) { + String deviceCode = datum.getString("device_code"); + int deviceMode = datum.getIntValue("mode"); + + JSONObject row = new JSONObject(); + row.put("equipment", deviceCode); + if (datum.getIntValue("error") != 0) { + row.put("status", 4); + } else { + row.put("status", this.deviceModeToDictStatus(deviceMode)); + } + + JSONArray rowData = new JSONArray(); + row.put("data", rowData); + + JSONObject rowDatum = new JSONObject(); + rowDatum.put("key", "点位"); + rowDatum.put("value", datum.getString("point_name")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "载具号"); + rowDatum.put("value", datum.getString("vehicle_code")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "物料号"); + rowDatum.put("value", row.getString("material_number")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "物料名称"); + rowDatum.put("value", datum.getString("material_name")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "数量"); + rowDatum.put("value", datum.getIntValue("qty")+ "块"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "组盘时间"); + rowDatum.put("value", datum.getString("create_time")); + rowData.add(rowDatum); + + unloadLocation.add(row); + } + + // 覆膜机 + JSONArray laminatingMachine = new JSONArray(); + sort.put("laminatingMachine", laminatingMachine); + List laminatingMachineData = deviceData.stream().map(o -> (JSONObject) o).filter(o -> "14".equals(o.getString("device_model"))).sorted((o1, o2) -> Integer.compare(o1.getIntValue("productivity"), o2.getIntValue("productivity"))).collect(Collectors.toList()); + for (JSONObject datum : laminatingMachineData) { + String deviceCode = datum.getString("device_code"); + int deviceMode = datum.getIntValue("mode"); + + JSONObject row = new JSONObject(); + row.put("equipment", deviceCode); + if (datum.getIntValue("error") != 0) { + row.put("status", 4); + } else { + row.put("status", this.deviceModeToDictStatus(deviceMode)); + } + + JSONArray rowData = new JSONArray(); + row.put("data", rowData); + + JSONObject rowDatum = new JSONObject(); + rowDatum.put("key", datum.getString("device_name")); + rowDatum.put("value", this.deviceModeToChinese(deviceMode)); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "木托盘类型"); + rowDatum.put("value", datum.getIntValue("container_type")); + rowData.add(rowDatum); + + laminatingMachine.add(row); + } + + // 托盘输送线----------------------------------------------------------------------------------------------------- + JSONObject vehicleConveyorLine = new JSONObject(); + result.put("vehicleConveyorLine", vehicleConveyorLine); + + // 叠托机 + JSONArray trayStacker = new JSONArray(); + vehicleConveyorLine.put("trayStacker", trayStacker); + List trayStackerData = pointData.stream().map(o -> (JSONObject) o).filter(o -> Region.GTK.value().equals(o.getString("region_code")) && "4".contains(o.getString("point_type"))).sorted((o1, o2) -> Integer.compare(o1.getIntValue("sort_seq"), o2.getIntValue("sort_seq"))).collect(Collectors.toList()); + for (JSONObject datum : trayStackerData) { + String deviceCode = datum.getString("device_code"); + int deviceStatus = datum.getIntValue("status"); + + JSONObject row = new JSONObject(); + row.put("equipment", deviceCode); + row.put("status", this.deviceStatusToDictStatus(deviceStatus)); + + JSONArray rowData = new JSONArray(); + row.put("data", rowData); + + JSONObject rowDatum = new JSONObject(); + rowDatum.put("key", datum.getString("device_name")); + rowDatum.put("value", this.deviceStatusToChinese(deviceStatus)); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "托盘数量"); + rowDatum.put("value", datum.getString("container_qty")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "开机时间"); + rowDatum.put("value", datum.getString("open_time")); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "待机时间"); + rowDatum.put("value", datum.getIntValue("standby_time") / 3600 + "小时"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "生产时间"); + rowDatum.put("value", datum.getIntValue("production_time") / 3600 + "小时"); + rowData.add(rowDatum); + + rowDatum = new JSONObject(); + rowDatum.put("key", "故障时间"); + rowDatum.put("value", datum.getIntValue("error_time") / 3600 + "小时"); + rowData.add(rowDatum); + + row.put("table", new ArrayList<>()); + + trayStacker.add(row); + } + + // 输送线 + conveyorLine = new JSONArray(); + vehicleConveyorLine.put("conveyorLine", conveyorLine); + conveyorLineData = pointData.stream().map(o -> (JSONObject) o).filter(o -> Region.GTK.value().equals(o.getString("region_code")) && "123".contains(o.getString("point_type"))).sorted((o1, o2) -> Integer.compare(o1.getIntValue("sort_seq"), o2.getIntValue("sort_seq"))).collect(Collectors.toList()); + for (JSONObject datum : conveyorLineData) { + String deviceCode = datum.getString("device_code"); + int deviceMode = datum.getIntValue("mode"); + + JSONObject row = new JSONObject(); + row.put("equipment", deviceCode); + if (datum.getIntValue("error") != 0) { + row.put("status", 4); + } else { + row.put("status", this.deviceModeToDictStatus(deviceMode)); + } + + JSONArray rowData = new JSONArray(); + row.put("data", rowData); + + JSONObject rowDatum = new JSONObject(); + rowDatum.put("key", "点位"); + rowDatum.put("value", datum.getString("point_name")); + rowData.add(rowDatum); + + conveyorLine.add(row); + } + + // 拆盘机 + JSONArray trayDestacker = new JSONArray(); + vehicleConveyorLine.put("trayDestacker", trayDestacker); + return result; } + + private int deviceStatusToDictStatus(int status) { + switch (status) { + case 0: + return 3; + case 1: + return 2; + case 2: + return 1; + case 3: + return 4; + default: + return status; + } + } + + private String deviceStatusToChinese(int status) { + switch (status) { + case 0: + return "停机"; + case 1: + return "暂停"; + case 2: + return "运行"; + case 3: + return "故障"; + default: + return "未知"; + } + } + + private int deviceModeToDictStatus(int mode) { + switch (mode) { + case 0: + return 3; + case 2: + return 2; + default: + return 1; + } + } + + private String deviceModeToChinese(int mode) { + switch (mode) { + case 0: + return "停机"; + case 2: + return "暂停"; + default: + return "运行"; + } + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/dashboard/wql/DASHBOARD.wql b/lms/nladmin-system/src/main/java/org/nl/wms/dashboard/wql/DASHBOARD.wql index 167ddda..a843a47 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/dashboard/wql/DASHBOARD.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/dashboard/wql/DASHBOARD.wql @@ -71,3 +71,86 @@ ENDSELECT ENDQUERY ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + p.point_code AS device_code, + p.point_name, + p.point_status, + p.region_code, + p.point_type, + p.vehicle_type, + p.vehicle_code, + p.sort_seq, + vd.qty, + vd.weight, + vd.stand_status, + vd.create_time, + mb.material_number, + mb.material_name, + d.device_name, + vd.in_kiln_time, + vd.out_kiln_time + FROM + sch_base_point p + LEFT JOIN st_ivt_vehicle_detail vd ON p.vd_id = vd.vd_id + LEFT JOIN md_me_materialbase mb ON vd.material_id = mb.material_id + LEFT JOIN pdm_bi_device d ON vd.kiln_number = d.device_code + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "4" + QUERY + SELECT + wo.device_code, + mb.material_number + FROM + pdm_bd_workorder wo + LEFT JOIN md_me_materialbase mb ON wo.material_id = mb.material_id + WHERE + wo.is_delete = '0' + AND wo.order_status = '3' + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "5" + QUERY + SELECT + wo.device_code, + mb.material_name, + wo.kh, + SUM(wod.weight) AS weight, + SUM(wod.qty) AS qty + FROM + pdm_bd_work_order_daily wod + LEFT JOIN pdm_bd_workorder wo ON wod.workorder_id = wo.workorder_id + LEFT JOIN md_me_materialbase mb ON wo.material_id = mb.material_id + WHERE + TO_DAYS(wod.date) = TO_DAYS(NOW()) + GROUP BY + wod.workorder_id, TO_DAYS(wod.date) + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "6" + QUERY + SELECT + vd.qty, + mb.material_name, + wo.kh, + wo.device_code + FROM + st_ivt_vehicle_detail vd + LEFT JOIN md_me_materialbase mb ON vd.material_id = mb.material_id + LEFT JOIN pdm_bd_workorder wo ON vd.workorder_id = wo.workorder_id + WHERE + vd.is_delete = '0' + AND vd.vehicle_type = '2' + AND TO_DAYS(vd.out_kiln_time) = TO_DAYS(NOW()) + ENDSELECT + ENDQUERY + ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java index ec256f5..ddfd475 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java @@ -221,4 +221,12 @@ public class AcsToWmsController { public ResponseEntity fjNeed(@RequestBody JSONObject param) { return ResponseEntity.ok(acsToWmsService.fjNeed(param)); } + + @PostMapping("/equipmentFailure") + @Log("设备故障") + @ApiOperation("设备故障") + @SaIgnore + public void equipmentFailure(@RequestBody JSONObject param) { + acsToWmsService.equipmentFailure(param); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java index 8e0f862..f0f07ee 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java @@ -116,4 +116,6 @@ public interface AcsToWmsService { JSONObject fjCallEmpty(JSONObject param); JSONObject fjNeed(JSONObject param); + + void equipmentFailure(JSONObject param); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index ab25271..0218ed0 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -1098,9 +1098,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { regionIn.put("id", IdUtil.getSnowflake(1L, 1L).nextId()); regionIn.put("cCode", CodeUtil.getNewCode("IN_STORE_CODE")); regionIn.put("dDate", DateUtil.now()); - regionIn.put("cVouchType", RegionInType.BCPRK.label()); + regionIn.put("cVouchType", RegionInType.WGRK.label()); regionIn.put("cMocode", dd); - regionIn.put("cInvCode", detail.getString("material_number")); + String materialNumber = detail.getString("material_number"); + if (materialNumber.startsWith("W")) { + materialNumber = "F" + materialNumber.substring(1); + } + regionIn.put("cInvCode", materialNumber); regionIn.put("iQuantity", String.format("%.3f", detail.getDoubleValue("weight") / 1000)); regionIn.put("iNum", detail.getIntValue("qty")); regionIn.put("iinvexchrate", String.format("%.5f", detail.getDoubleValue("dz") / 1000)); @@ -1177,9 +1181,13 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { regionIn.put("id", IdUtil.getSnowflake(1L, 1L).nextId()); regionIn.put("cCode", CodeUtil.getNewCode("IN_STORE_CODE")); regionIn.put("dDate", DateUtil.now()); - regionIn.put("cVouchType", RegionInType.BCPRK.label()); + regionIn.put("cVouchType", RegionInType.WGRK.label()); regionIn.put("cMocode", dd); - regionIn.put("cInvCode", detail.getString("material_number")); + String materialNumber = detail.getString("material_number"); + if (materialNumber.startsWith("W")) { + materialNumber = "F" + materialNumber.substring(1); + } + regionIn.put("cInvCode", materialNumber); regionIn.put("iQuantity", String.format("%.3f", detail.getDoubleValue("weight2") / 1000)); regionIn.put("iNum", detail.getIntValue("qty2")); regionIn.put("iinvexchrate", String.format("%.5f", detail.getDoubleValue("dz") / 1000)); @@ -1256,4 +1264,16 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { result.put("message", "反馈成功!"); return result; } + + @Override + public void equipmentFailure(JSONObject param) { + String deviceCode = param.getString("device_code"); + if (StrUtil.isNotBlank(deviceCode)) { + JSONObject dn = new JSONObject(); + dn.put("data_id", IdUtil.getSnowflake().nextId()); + dn.put("device_code", deviceCode); + dn.put("failure_time", DateUtil.now()); + WQLObject.getWQLObject("das_device_number").insert(dn); + } + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/rest/PdaController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/rest/PdaController.java index ac8f07c..4649995 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/rest/PdaController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/rest/PdaController.java @@ -89,13 +89,7 @@ public class PdaController { throw new BadRequestException("载具编码不能为空!"); } int qty = param.getIntValue("qty"); - if (qty == 0) { - throw new BadRequestException("数量不能为零!"); - } double weight = param.getDoubleValue("weight"); - if (weight == 0) { - throw new BadRequestException("重量不能为零!"); - } pdaService.sendMaterial(point_code, vehicle_code, qty, weight, param.toJSONString()); return PdaUtils.buildSuccessResultJSON(null); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/WorkorderServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/WorkorderServiceImpl.java index ebb7d51..a06e3bd 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/WorkorderServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/service/impl/WorkorderServiceImpl.java @@ -696,10 +696,10 @@ public class WorkorderServiceImpl implements WorkordeService { workOrder.put("qualified_qty", workOrderDailyList.stream().mapToInt(o -> ((JSONObject) o).getIntValue("qualified_qty")).sum()); workOrder.put("unqualified_qty", workOrderDailyList.stream().mapToInt(o -> ((JSONObject) o).getIntValue("unqualified_qty")).sum()); workOrder.put("avg_piece_weight", workOrderDailyList.stream().mapToDouble(o -> ((JSONObject) o).getDoubleValue("avg_piece_weight")).sum() / workOrderDailyList.size()); - workOrder.put("order_status", WorkOrderEnum.ORDER_STATUS_STOP.value()); - TaskUtils.addACSUpdateColum(workOrder); - workOrderTable.update(workOrder); } + workOrder.put("order_status", WorkOrderEnum.ORDER_STATUS_STOP.value()); + TaskUtils.addACSUpdateColum(workOrder); + workOrderTable.update(workOrder); } @Override @@ -722,9 +722,9 @@ public class WorkorderServiceImpl implements WorkordeService { workOrder.put("qualified_qty", workOrderDailyList.stream().mapToInt(o -> ((JSONObject) o).getIntValue("qualified_qty")).sum()); workOrder.put("unqualified_qty", workOrderDailyList.stream().mapToInt(o -> ((JSONObject) o).getIntValue("unqualified_qty")).sum()); workOrder.put("avg_piece_weight", workOrderDailyList.stream().mapToDouble(o -> ((JSONObject) o).getDoubleValue("avg_piece_weight")).sum() / workOrderDailyList.size()); - workOrder.put("order_status", WorkOrderEnum.ORDER_STATUS_FINISH.value()); - TaskUtils.addACSUpdateColum(workOrder); - workOrderTable.update(workOrder); } + workOrder.put("order_status", WorkOrderEnum.ORDER_STATUS_FINISH.value()); + TaskUtils.addACSUpdateColum(workOrder); + workOrderTable.update(workOrder); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoUpdateWorkOrder.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoUpdateWorkOrder.java new file mode 100644 index 0000000..0c0617f --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoUpdateWorkOrder.java @@ -0,0 +1,101 @@ +package org.nl.wms.sch.manage; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.basedata.eum.TrueOrFalse; +import org.nl.wms.ext.acs.service.WmsToAcsService; +import org.nl.wms.sch.task.util.TaskUtils; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; +import org.springframework.stereotype.Component; + +import java.util.concurrent.TimeUnit; + +/** + * @author zhangjiangwei + */ +@Slf4j +@RequiredArgsConstructor +@Component("autoUpdateWorkOrder") +@SuppressWarnings("unused") +public class AutoUpdateWorkOrder { + + private final WmsToAcsService wmsToAcsService; + + private final RedissonClient redissonClient; + + @SneakyThrows + public void run() { + RLock lock = redissonClient.getFairLock("autoUpdateWorkOrder"); + boolean tryLock = false; + try { + tryLock = lock.tryLock(0, TimeUnit.SECONDS); + if (tryLock) { + + JSONArray wo = WQL.getWO("MANAGE_QUERY").addParam("flag", "3").process().getResultJSONArray(0); + + JSONObject responseBody = wmsToAcsService.getDeviceStatus(wo); + if ("200".equals(responseBody.getString("status"))) { + JSONArray data = responseBody.getJSONArray("data"); + if (ObjectUtil.isNotEmpty(data)) { + WQLObject wodTable = WQLObject.getWQLObject("pdm_bd_work_order_daily"); + String today = DateUtil.today(); + + for (int i = 0; i < data.size(); i++) { + JSONObject datum = data.getJSONObject(i); + + long workOrderId = datum.getLongValue("workorder_id"); + JSONObject wod = wodTable.query("workorder_id = " + workOrderId + " AND date = '" + today + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(wod)) { + wod = new JSONObject(); + wod.put("id", IdUtil.getSnowflake().nextId()); + wod.put("date", today); + wod.put("workorder_id", workOrderId); + wod.put("qty", datum.getIntValue("qty")); + wod.put("qualified_qty", datum.getIntValue("qualified_qty")); + wod.put("unqualified_qty", datum.getIntValue("unqualified_qty")); + wod.put("weight", datum.getDoubleValue("weight")); + wod.put("avg_piece_weight", datum.getDoubleValue("avg_piece_weight") / 1000); + TaskUtils.addAutoCreateColum(wod); + wodTable.insert(wod); + } else { + if (TrueOrFalse.TRUE.value().equals(wod.getString("is_report"))) { + wod.put("qty", datum.getIntValue("qty") + wod.getIntValue("qty")); + wod.put("qualified_qty", datum.getIntValue("qualified_qty") + wod.getIntValue("qualified_qty")); + wod.put("unqualified_qty", datum.getIntValue("unqualified_qty") + wod.getIntValue("unqualified_qty")); + wod.put("weight", datum.getDoubleValue("weight") + wod.getIntValue("weight")); + wod.put("avg_piece_weight", datum.getDoubleValue("avg_piece_weight") / 1000); + TaskUtils.addAutoUpdateColum(wod); + wodTable.update(wod); + } else { + wod.put("qty", datum.getIntValue("qty")); + wod.put("qualified_qty", datum.getIntValue("qualified_qty")); + wod.put("unqualified_qty", datum.getIntValue("unqualified_qty")); + wod.put("weight", datum.getDoubleValue("weight")); + wod.put("avg_piece_weight", datum.getDoubleValue("avg_piece_weight") / 1000); + TaskUtils.addAutoUpdateColum(wod); + wodTable.update(wod); + } + } + } + } + } + } + } catch (Exception e) { + log.error("auto update work order error !", e); + } finally { + if (tryLock) { + lock.unlock(); + } + } + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoUpdateWorkOrderDaily.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoUpdateWorkOrderDaily.java deleted file mode 100644 index 691d67c..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoUpdateWorkOrderDaily.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.nl.wms.sch.manage; - -/** - * @author zhangjiangwei - */ -public class AutoUpdateWorkOrderDaily { -} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/wql/MANAGE_QUERY.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/wql/MANAGE_QUERY.wql index 2ee9e65..42b4bb5 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/wql/MANAGE_QUERY.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/wql/MANAGE_QUERY.wql @@ -69,3 +69,19 @@ ENDSELECT ENDQUERY ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + wo.workorder_id, + d.device_code + FROM + pdm_bd_workorder wo + LEFT JOIN pdm_bi_device d ON wo.device_id = d.device_id + WHERE + wo.is_delete = '0' + AND wo.order_status = '3' + AND d.region_code IN ('YZ', 'FJ') + ENDSELECT + ENDQUERY + ENDIF diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/util/TaskUtils.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/util/TaskUtils.java index c1af36c..3d85538 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/util/TaskUtils.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/task/util/TaskUtils.java @@ -164,4 +164,10 @@ public class TaskUtils { row.put("create_name", SecurityUtils.getCurrentNickName()); row.put("create_time", DateUtil.now()); } + + public static void addAutoCreateColum(JSONObject row) { + row.put("create_id", AutoCreate.id); + row.put("create_name", AutoCreate.nick_name); + row.put("create_time", DateUtil.now()); + } } diff --git a/lms/nladmin-system/src/main/resources/config/application.yml b/lms/nladmin-system/src/main/resources/config/application.yml index 942ceff..6f01423 100644 --- a/lms/nladmin-system/src/main/resources/config/application.yml +++ b/lms/nladmin-system/src/main/resources/config/application.yml @@ -2,7 +2,7 @@ spring: freemarker: check-template-location: false profiles: - active: prod + active: dev jackson: time-zone: GMT+8 data: diff --git a/lms/nladmin-system/src/test/java/org/nl/test/PointTest.java b/lms/nladmin-system/src/test/java/org/nl/test/PointTest.java index 6f1dbd4..1ea0aa7 100644 --- a/lms/nladmin-system/src/test/java/org/nl/test/PointTest.java +++ b/lms/nladmin-system/src/test/java/org/nl/test/PointTest.java @@ -2,6 +2,7 @@ package org.nl.test; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.junit.Test; import org.junit.runner.RunWith; @@ -9,6 +10,9 @@ import org.nl.modules.wql.core.bean.WQLObject; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; +import java.util.List; +import java.util.stream.Collectors; + /** * @author zhangjiangwei * @date 2023/03/02 16:54 @@ -19,26 +23,13 @@ public class PointTest { @Test public void test01() { - JSONObject point = new JSONObject(); - WQLObject point_table = WQLObject.getWQLObject("sch_base_point"); - String now = DateUtil.now(); - for (int i = 1; i <= 9; i++) { - if (i == 7) { - continue; - } - point.put("point_id", IdUtil.getSnowflake(1L, 1L).nextId()); - point.put("point_code", "YJ" + String.format("%02d", i) + "SL01"); - point.put("point_name", "压机" + i + "上料位"); - point.put("point_type", "2"); - point.put("region_id", 1695713335233875968L); - point.put("region_code", "YZ"); - point.put("region_name", "压制区"); - point.put("device_code", "YJ" + String.format("%02d", i)); - point.put("lock_type", "1"); - point.put("create_id", 1); - point.put("create_name", "管理员"); - point.put("create_time", now); - point_table.insert(point); + JSONArray jsonArray = WQLObject.getWQLObject("sch_base_point").query("region_code = 'YHHJ'").getResultJSONArray(0); + List list = jsonArray.stream().sorted((o1, o2) -> Integer.compare(((JSONObject) o1).getIntValue("sort_seq"), ((JSONObject) o2).getIntValue("sort_seq"))).collect(Collectors.toList()); + JSONArray a1 = new JSONArray(); + for (Object o : list) { + a1.add(o); } + + System.out.println(a1); } } diff --git a/lms/nladmin-ui/src/views/wms/pdm/device/index.vue b/lms/nladmin-ui/src/views/wms/pdm/device/index.vue index 9e34361..6f55847 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/device/index.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/device/index.vue @@ -70,9 +70,6 @@ /> - - - @@ -123,11 +120,6 @@ {{ dict.label.pdm_device_type[scope.row.device_model] }} -