From 5de2fde1fcc2dc4299fa4a9da40258270453fd16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=B1=9F=E7=8E=AE?= Date: Mon, 25 Sep 2023 17:52:12 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E5=88=86=E6=8B=A3=E4=BD=9C=E4=B8=9A?= =?UTF-8?q?=E7=9B=91=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nl/modules/wql/core/bean/ResultBean.java | 2 +- .../dashboard/rest/DashboardController.java | 7 + .../dashboard/service/DashboardService.java | 137 ++++++++++++++++-- .../org/nl/wms/dashboard/wql/DASHBOARD.wql | 70 ++++++++- .../service/impl/WorkorderServiceImpl.java | 2 +- 5 files changed, 202 insertions(+), 16 deletions(-) diff --git a/lms/nladmin-system/src/main/java/org/nl/modules/wql/core/bean/ResultBean.java b/lms/nladmin-system/src/main/java/org/nl/modules/wql/core/bean/ResultBean.java index 62bb50f..7a09c65 100644 --- a/lms/nladmin-system/src/main/java/org/nl/modules/wql/core/bean/ResultBean.java +++ b/lms/nladmin-system/src/main/java/org/nl/modules/wql/core/bean/ResultBean.java @@ -230,7 +230,7 @@ public class ResultBean implements Serializable, Cloneable { rows = new ArrayList(); } JSONArray jrows = this.rows2jsonarray(rows); - JSONObject jrow = null; + JSONObject jrow = new JSONObject(); if (jrows.size() > 0) { jrow = jrows.getJSONObject(0); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/dashboard/rest/DashboardController.java b/lms/nladmin-system/src/main/java/org/nl/wms/dashboard/rest/DashboardController.java index 5110ccb..e002e5e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/dashboard/rest/DashboardController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/dashboard/rest/DashboardController.java @@ -51,4 +51,11 @@ public class DashboardController { public ResponseEntity warehouseMonitor(){ return new ResponseEntity<>(dashboardService.warehouseMonitor(), HttpStatus.OK); } + + @PostMapping("/sortProductionMonitor") + @Log("分拣作业监控") + @ApiOperation("分拣作业监控") + public ResponseEntity sortProductionMonitor(){ + return new ResponseEntity<>(dashboardService.sortProductionMonitor(), HttpStatus.OK); + } } 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 f885484..95d4113 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 @@ -577,7 +577,7 @@ public class DashboardService { rowDatum = new JSONObject(); rowDatum.put("key", "数量"); - rowDatum.put("value", datum.getIntValue("qty")+ "块"); + rowDatum.put("value", datum.getIntValue("qty") + "块"); rowData.add(rowDatum); rowDatum = new JSONObject(); @@ -634,7 +634,7 @@ public class DashboardService { rowDatum = new JSONObject(); rowDatum.put("key", "数量"); - rowDatum.put("value", datum.getIntValue("qty")+ "块"); + rowDatum.put("value", datum.getIntValue("qty") + "块"); rowData.add(rowDatum); rowDatum = new JSONObject(); @@ -691,7 +691,7 @@ public class DashboardService { rowDatum = new JSONObject(); rowDatum.put("key", "数量"); - rowDatum.put("value", datum.getIntValue("qty")+ "块"); + rowDatum.put("value", datum.getIntValue("qty") + "块"); rowData.add(rowDatum); rowDatum = new JSONObject(); @@ -875,7 +875,7 @@ public class DashboardService { rowDatum = new JSONObject(); rowDatum.put("key", "数量"); - rowDatum.put("value", datum.getIntValue("qty")+ "块"); + rowDatum.put("value", datum.getIntValue("qty") + "块"); rowData.add(rowDatum); rowDatum = new JSONObject(); @@ -946,7 +946,7 @@ public class DashboardService { rowDatum = new JSONObject(); rowDatum.put("key", "数量"); - rowDatum.put("value", datum.getIntValue("qty")+ "块"); + rowDatum.put("value", datum.getIntValue("qty") + "块"); rowData.add(rowDatum); rowDatum = new JSONObject(); @@ -1109,7 +1109,7 @@ public class DashboardService { rowDatum = new JSONObject(); rowDatum.put("key", "数量"); - rowDatum.put("value", datum.getIntValue("qty")+ "块"); + rowDatum.put("value", datum.getIntValue("qty") + "块"); rowData.add(rowDatum); rowDatum = new JSONObject(); @@ -1257,9 +1257,9 @@ public class DashboardService { // 总量---------------------------------------------------------------------------------------------------------- JSONObject total = new JSONObject(); result.put("total", total); - total.put("pressWeight", String.format("%.2f", todayWorkOrderProduction.stream().filter(o -> Region.YZ.value().equals(((JSONObject) o).getString("region_code"))).mapToDouble(o -> ((JSONObject)o).getDoubleValue("weight")).sum() / 1000)); - total.put("dryWeight", String.format("%.2f", todayOutKiln.stream().mapToDouble(o -> ((JSONObject)o).getDoubleValue("weight")).sum() / 1000)); - total.put("sortWeight", String.format("%.2f", todayWorkOrderProduction.stream().filter(o -> Region.FJ.value().equals(((JSONObject) o).getString("region_code"))).mapToDouble(o -> ((JSONObject)o).getDoubleValue("weight")).sum() / 1000)); + total.put("pressWeight", String.format("%.2f", todayWorkOrderProduction.stream().filter(o -> Region.YZ.value().equals(((JSONObject) o).getString("region_code"))).mapToDouble(o -> ((JSONObject) o).getDoubleValue("weight")).sum() / 1000)); + total.put("dryWeight", String.format("%.2f", todayOutKiln.stream().mapToDouble(o -> ((JSONObject) o).getDoubleValue("weight")).sum() / 1000)); + total.put("sortWeight", String.format("%.2f", todayWorkOrderProduction.stream().filter(o -> Region.FJ.value().equals(((JSONObject) o).getString("region_code"))).mapToDouble(o -> ((JSONObject) o).getDoubleValue("weight")).sum() / 1000)); // 混碾生产------------------------------------------------------------------------------------------------------ JSONArray mixProduction = new JSONArray(); @@ -1281,10 +1281,10 @@ public class DashboardService { result.put("pressProduction", pressProduction); // 当日产量 - pressProduction.put("dailyProductionQty", String.format("%.2f", todayWorkOrderProduction.stream().filter(o -> Region.YZ.value().equals(((JSONObject) o).getString("region_code"))).mapToInt(o -> ((JSONObject)o).getIntValue("qty")).sum() / 10000.00)); + pressProduction.put("dailyProductionQty", String.format("%.2f", todayWorkOrderProduction.stream().filter(o -> Region.YZ.value().equals(((JSONObject) o).getString("region_code"))).mapToInt(o -> ((JSONObject) o).getIntValue("qty")).sum() / 10000.00)); // 当班产量 - pressProduction.put("dailyProductionWeight", String.format("%.2f", todayWorkOrderProduction.stream().filter(o -> Region.YZ.value().equals(((JSONObject) o).getString("region_code"))).mapToDouble(o -> ((JSONObject)o).getDoubleValue("weight")).sum() / 1000)); + pressProduction.put("dailyProductionWeight", String.format("%.2f", todayWorkOrderProduction.stream().filter(o -> Region.YZ.value().equals(((JSONObject) o).getString("region_code"))).mapToDouble(o -> ((JSONObject) o).getDoubleValue("weight")).sum() / 1000)); // 设备产量 JSONArray equipmentProduction = new JSONArray(); @@ -1463,7 +1463,7 @@ public class DashboardService { rowDatum = new JSONObject(); rowDatum.put("key", "数量"); - rowDatum.put("value", datum.getIntValue("qty")+ "块"); + rowDatum.put("value", datum.getIntValue("qty") + "块"); rowData.add(rowDatum); rowDatum = new JSONObject(); @@ -1510,7 +1510,7 @@ public class DashboardService { rowDatum = new JSONObject(); rowDatum.put("key", "数量"); - rowDatum.put("value", datum.getIntValue("qty")+ "块"); + rowDatum.put("value", datum.getIntValue("qty") + "块"); rowData.add(rowDatum); rowDatum = new JSONObject(); @@ -1581,6 +1581,117 @@ public class DashboardService { return result; } + /** + * 分拣作业监控 + * + * @return 分拣作业监控数据 + */ + public JSONObject sortProductionMonitor() { + JSONObject result = new JSONObject(); + + JSONArray fjWorkOrders = WQL.getWO("DASHBOARD").addParam("flag", "10").process().getResultJSONArray(0); + + List inProductionWorkOrder = fjWorkOrders.stream().map(o -> (JSONObject) o).filter(o -> "3".equals(o.getString("order_status"))).collect(Collectors.toList()); + JSONObject currentWorkOrder; + if (inProductionWorkOrder.isEmpty()) { + JSONObject current = new JSONObject(); + result.put("current", current); + currentWorkOrder = new JSONObject(); + current.put("workOrderCode", ""); + current.put("materialName", ""); + current.put("spec", ""); + current.put("qty", ""); + current.put("weight", ""); + current.put("orderCode", ""); + current.put("customer", ""); + current.put("vehicleType", ""); + current.put("hasHalf", ""); + } else { + JSONObject current = new JSONObject(); + result.put("current", current); + currentWorkOrder = inProductionWorkOrder.get(0); + current.put("workOrderCode", currentWorkOrder.getString("workorder_code")); + current.put("materialName", currentWorkOrder.getString("material_name")); + current.put("spec", currentWorkOrder.getString("gg")); + current.put("qty", currentWorkOrder.getString("plan_qty") + "块"); + current.put("weight", String.format("%.2f", currentWorkOrder.getDoubleValue("plan_weight") / 1000) + "吨"); + current.put("orderCode", currentWorkOrder.getString("dd")); + current.put("customer", currentWorkOrder.getString("kh")); + current.put("vehicleType", currentWorkOrder.getString("vehicle_type_name")); + JSONObject half = WQLObject.getWQLObject("st_ivt_vehicle_detail").query("is_delete = '0' AND is_full = '0' AND vehicle_type = '" + currentWorkOrder.getString("vehicle_type") + "' AND material_id = " + currentWorkOrder.getString("material_id")).uniqueResult(0); + if (ObjectUtil.isEmpty(half)) { + current.put("hasHalf", "否"); + } else { + current.put("hasHalf", "是"); + } + } + + JSONObject depalletize = new JSONObject(); + result.put("depalletize", depalletize); + JSONArray depalletizeWOD = WQLObject.getWQLObject("pdm_bd_work_order_daily").query("workorder_id = " + currentWorkOrder.getLongValue("workorder_id")).getResultJSONArray(0); + int completed = depalletizeWOD.stream().mapToInt(o -> ((JSONObject) o).getIntValue("qty")).sum(); + depalletize.put("completed", completed); + depalletize.put("uncompleted", Math.max(0, currentWorkOrder.getIntValue("plan_qty") - completed)); + + JSONObject palletize = new JSONObject(); + result.put("palletize", palletize); + JSONArray palletizeVD = WQLObject.getWQLObject("st_ivt_vehicle_detail").query("is_delete = '0' AND workorder_id = " + currentWorkOrder.getLongValue("workorder_id")).getResultJSONArray(0); + palletize.put("completed", palletizeVD.stream().mapToInt(o -> ((JSONObject) o).getIntValue("qty")).sum()); + palletize.put("uncompleted", 0); + + JSONArray depalletizedVehicle = new JSONArray(); + result.put("depalletizedVehicle", depalletizedVehicle); + JSONArray depalletizedVD = WQL.getWO("DASHBOARD").addParam("flag", "11").process().getResultJSONArray(0); + for (JSONObject vd : depalletizedVD.stream().map(o -> (JSONObject) o).collect(Collectors.toList())) { + JSONObject row = new JSONObject(); + row.put("datetime", vd.getString("update_time")); + row.put("vehicleCode", vd.getString("vehicle_code")); + row.put("materialName", vd.getString("material_name")); + row.put("qty", vd.getString("qty") + "块"); + row.put("weight", String.format("%.2f", vd.getDoubleValue("weight") / 1000) + "吨"); + depalletizedVehicle.add(row); + } + + JSONArray palletizedVehicle = new JSONArray(); + result.put("palletizedVehicle", palletizedVehicle); + JSONArray palletizedVD = WQL.getWO("DASHBOARD").addParam("flag", "12").process().getResultJSONArray(0); + for (JSONObject vd : palletizedVD.stream().map(o -> (JSONObject) o).collect(Collectors.toList())) { + JSONObject row = new JSONObject(); + row.put("datetime", vd.getString("create_time")); + row.put("vehicleCode", vd.getString("vehicle_code")); + row.put("materialName", vd.getString("material_name")); + row.put("qty", vd.getString("qty") + "块"); + row.put("weight", String.format("%.2f", vd.getDoubleValue("weight") / 1000) + "吨"); + palletizedVehicle.add(row); + } + + JSONArray residualWorkOrder = new JSONArray(); + result.put("residualWorkOrder", residualWorkOrder); + List otherWorkOrder = fjWorkOrders.stream().map(o -> (JSONObject) o).filter(o -> "1".equals(o.getString("order_status"))).collect(Collectors.toList()); + for (JSONObject workOrder : otherWorkOrder) { + JSONObject row = new JSONObject(); + row.put("workOrderCode", workOrder.getString("workorder_code")); + row.put("materialName", workOrder.getString("material_name")); + row.put("spec", workOrder.getString("gg")); + row.put("qty", workOrder.getString("plan_qty") + "块"); + row.put("weight", String.format("%.2f", workOrder.getDoubleValue("plan_weight") / 1000) + "吨"); + row.put("orderCode", workOrder.getString("dd")); + row.put("customer", workOrder.getString("kh")); + row.put("vehicleType", workOrder.getString("vehicle_type_name")); + row.put("createTime", workOrder.getString("create_time")); + row.put("hasHalf", ""); + JSONObject half = WQLObject.getWQLObject("st_ivt_vehicle_detail").query("is_delete = '0' AND is_full = '0' AND vehicle_type = '" + workOrder.getString("vehicle_type") + "' AND material_id = " + workOrder.getLongValue("material_id")).uniqueResult(0); + if (ObjectUtil.isEmpty(half)) { + row.put("hasHalf", "否"); + } else { + row.put("hasHalf", "是"); + } + residualWorkOrder.add(row); + } + + return result; + } + private int deviceStatusToDictStatus(int status) { switch (status) { case 0: 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 9301491..1e56d0d 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 @@ -14,6 +14,7 @@ ## 表字段对应输入参数 ################################################# 输入.flag TYPEAS s_string + 输入.workorder_id TYPEAS f_string [临时表] --这边列出来的临时表就会在运行期动态创建 @@ -206,7 +207,7 @@ ENDIF IF 输入.flag = "9" - QEURY + QUERY SELECT wo.workorder_code, d.device_name, @@ -235,3 +236,70 @@ ENDSELECT ENDQUERY ENDIF + + IF 输入.flag = "10" + QUERY + SELECT + wo.workorder_id, + wo.workorder_code, + mb.material_name, + wo.gg, + wo.plan_qty, + wo.plan_weight, + mb.dd, + wo.kh, + wo.vehicle_type, + dd.label AS vehicle_type_name, + mb.material_id, + wo.order_status, + wo.create_time + FROM + pdm_bd_workorder wo + LEFT JOIN md_me_materialbase mb ON wo.material_id = mb.material_id + LEFT JOIN sys_dict_detail dd ON wo.vehicle_type = dd.`value` AND dd.`name` = 'vehicle_type' + WHERE + wo.is_delete = '0' + AND wo.device_code = 'FJCDJXS01' + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "11" + QUERY + SELECT + vd.update_time, + vd.vehicle_code, + vd.qty, + vd.weight, + mb.material_name + FROM + st_ivt_vehicle_detail vd + LEFT JOIN md_me_materialbase mb ON vd.material_id = mb.material_id + WHERE + vd.is_delete = '1' + AND vd.vehicle_type = '2' + AND vd.out_kiln_time <> '' + AND TO_DAYS(vd.update_time) = TO_DAYS(NOW()) + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "12" + QUERY + SELECT + vd.create_time, + vd.vehicle_code, + vd.qty, + vd.weight, + mb.material_name + 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 wo.device_code = 'FJCDJXS01' + AND TO_DAYS(vd.create_time) = TO_DAYS(NOW()) + ENDSELECT + ENDQUERY + ENDIF 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 a06e3bd..07b3a6e 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 @@ -463,7 +463,7 @@ public class WorkorderServiceImpl implements WorkordeService { int qualifiedQty = row.getIntValue("qualified_qty"); int unqualifiedQty = row.getIntValue("unqualified_qty"); double weight = row.getDoubleValue("weight"); - this.reportWorkOrderDaily(workOrderId, qty, qualifiedQty, unqualifiedQty, weight, weight / qty); + this.reportWorkOrderDaily(workOrderId, qty, qualifiedQty, unqualifiedQty, weight, qty == 0 ? qty : weight / qty); // 汇总 JSONArray workOrderDailyList = WQLObject.getWQLObject("pdm_bd_work_order_daily").query("workorder_id = " + workOrderId).getResultJSONArray(0);