From 6561dd73099ceba0bfd421bbcc0de6ba323e0561 Mon Sep 17 00:00:00 2001 From: gengby <858962040@qq.com> Date: Fri, 13 Jan 2023 13:57:51 +0800 Subject: [PATCH] =?UTF-8?q?=E8=99=9A=E6=8B=9F=E5=A4=A7=E5=B1=8F=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mes/hd/logPath_IS_UNDEFINED/2023-01-13.0.log | 0 .../org/nl/wms/ext/bigScreen/DeviceUtils.java | 250 ++++++ .../org/nl/wms/ext/bigScreen/OrderDto.java | 49 ++ .../org/nl/wms/ext/bigScreen/SwitchOnOff.java | 10 + .../nl/wms/ext/bigScreen/WordOrderUtils.java | 523 ++++++++++++ .../service/impl/DeviceScreenServiceImpl.java | 57 +- .../impl/ManualProductServiceImpl.java | 121 --- .../service/impl/ProductServiceImpl.java | 26 + .../bigScreen/test/rest/BigController.java | 64 ++ .../test/service/BigTestService.java | 25 + .../test/service/impl/BigTestServiceImpl.java | 752 ++++++++++++++++++ .../wms/mps/service/WorkOrderImportEnum.java | 57 ++ .../mps/service/dto/ProduceshiftorderDto.java | 4 + .../impl/ProduceshiftorderServiceImpl.java | 341 +++++--- .../org/nl/wms/mps/wql/MPS_PRODUCEDURE001.wql | 4 + .../src/main/java/org/nl/wms/pdm/wql/pdm.xls | Bin 256000 -> 367616 bytes .../src/main/resources/config/application.yml | 2 +- mes/qd/src/api/wms/bigScreen/bigScreen.js | 34 +- .../todayAndPlanNum/DeviceInfoDialog.vue | 299 +++++++ .../todayAndPlanNum/OrderInfoDialog.vue | 603 ++++++++++++++ .../todayAndPlanNum/UploadDialog1.vue | 116 +++ .../wms/bigScreen/todayAndPlanNum/index.vue | 143 ++-- .../src/views/wms/mps/produce/AddDialog.vue | 2 +- mes/qd/src/views/wms/mps/produce/index.vue | 55 +- 24 files changed, 3241 insertions(+), 296 deletions(-) create mode 100644 mes/hd/logPath_IS_UNDEFINED/2023-01-13.0.log create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/DeviceUtils.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/OrderDto.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/SwitchOnOff.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/WordOrderUtils.java delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/service/impl/ManualProductServiceImpl.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/test/rest/BigController.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/test/service/BigTestService.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/test/service/impl/BigTestServiceImpl.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/WorkOrderImportEnum.java create mode 100644 mes/qd/src/views/wms/bigScreen/todayAndPlanNum/DeviceInfoDialog.vue create mode 100644 mes/qd/src/views/wms/bigScreen/todayAndPlanNum/OrderInfoDialog.vue create mode 100644 mes/qd/src/views/wms/bigScreen/todayAndPlanNum/UploadDialog1.vue diff --git a/mes/hd/logPath_IS_UNDEFINED/2023-01-13.0.log b/mes/hd/logPath_IS_UNDEFINED/2023-01-13.0.log new file mode 100644 index 00000000..e69de29b diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/DeviceUtils.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/DeviceUtils.java new file mode 100644 index 00000000..34dcc944 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/DeviceUtils.java @@ -0,0 +1,250 @@ +package org.nl.wms.ext.bigScreen; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import io.swagger.models.auth.In; +import org.nl.wms.ext.bigScreen.service.DeviceScreenService; + +import java.util.*; + +/** + * @author: geng by + * @createDate: 2023/1/9 + */ +public class DeviceUtils { + //正常运行设备数 + public static Integer device1 = 0; + //暂未生产 + public static Integer device2 = 0; + //空闲设备 + public static Integer device3 = 0; + //故障设备 + public static Integer device4 = 0; + + //设备综合统计 + public static Integer xydevice1 = 0; + public static Integer xydevice2 = 0; + public static Integer xydevice3 = 0; + public static Integer xydevice4 = 0; + public static Integer stdevice1 = 0; + public static Integer stdevice2 = 0; + public static Integer stdevice3 = 0; + public static Integer stdevice4 = 0; + public static Integer tkdevice1 = 0; + public static Integer tkdevice2 = 0; + public static Integer tkdevice3 = 0; + public static Integer tkdevice4 = 0; + public static Integer twdevice1 = 0; + public static Integer twdevice2 = 0; + public static Integer twdevice3 = 0; + public static Integer twdevice4 = 0; + public static Integer kzdevice1 = 0; + public static Integer kzdevice2 = 0; + public static Integer kzdevice3 = 0; + public static Integer kzdevice4 = 0; + public static Integer bzdevice1 = 0; + public static Integer bzdevice2 = 0; + public static Integer bzdevice3 = 0; + public static Integer bzdevice4 = 0; + + public static Map deviceNumErrors = new HashMap<>(); + + public static JSONObject deviceStatus(JSONObject param) { + device1 = bzdevice1 + xydevice1 + kzdevice1 + stdevice1 + tkdevice1 + twdevice1; + device2 = bzdevice2 + xydevice2 + kzdevice2 + stdevice2 + tkdevice2 + twdevice2; + device3 = bzdevice3 + xydevice3 + kzdevice3 + stdevice3 + tkdevice3 + twdevice3; + device4 = bzdevice4 + xydevice4 + kzdevice4 + stdevice4 + tkdevice4 + twdevice4; + JSONArray result = new JSONArray(); + JSONObject run = new JSONObject(); + run.put("name", "正常运行"); + run.put("value", device1); + result.add(run); + JSONObject pre = new JSONObject(); + pre.put("name", "暂未生产"); + pre.put("value", device2); + result.add(pre); + JSONObject free = new JSONObject(); + free.put("name", "空闲设备"); + free.put("value", device3); + result.add(free); + JSONObject err = new JSONObject(); + err.put("name", "故障设备"); + err.put("value", device4); + result.add(err); + JSONObject jo = new JSONObject(); + jo.put("ja", result); + jo.put("total_num", device1 + device2 + device3 + device4); + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "查询成功!"); + returnjo.put("result", jo); + return returnjo; + } + + public static JSONObject oeeAndTeep(JSONObject param) { + return null; + } + + public static JSONObject queryDeviceByWork(JSONObject param) { + return null; + } + + public static JSONObject deviceErrorNum(JSONObject param) { + JSONArray result = new JSONArray(); + Iterator iterator = deviceNumErrors.keySet().iterator(); + while (iterator.hasNext()) { + JSONObject map = new JSONObject(); + String device_name = iterator.next(); + Integer err_num = deviceNumErrors.get(device_name); + map.put("device_name", device_name); + map.put("err_num", err_num); + result.add(map); + } + List jsonObjectList = JSONArray.parseArray(result.toJSONString(), JSONObject.class); + jsonObjectList.sort((j1, j2) -> { + if (j1.getInteger("err_num") - j2.getInteger("err_num") > 0) { + return -1; + } else if (j1.getInteger("err_num") - j2.getInteger("err_num") < 0) { + return 1; + } + return 0; + }); + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "查询成功!"); + returnjo.put("result", jsonObjectList); + return returnjo; + } + + public static JSONObject deviceManage(JSONObject param) { + return null; + } + + public static JSONObject deviceCensus(JSONObject param) { + JSONArray result = new JSONArray(); + JSONObject map = new JSONObject(); + map.put("run_device", xydevice1); + map.put("prepare_device", xydevice2); + map.put("free_device", xydevice3); + map.put("err_device", xydevice4); + map.put("workprocedure_name", "旋压下料"); + result.add(map); + map = new JSONObject(); + map.put("run_device", stdevice1); + map.put("prepare_device", stdevice2); + map.put("free_device", stdevice3); + map.put("err_device", stdevice4); + map.put("workprocedure_name", "三通拉伸"); + result.add(map); + map = new JSONObject(); + map.put("run_device", tkdevice1); + map.put("prepare_device", tkdevice2); + map.put("free_device", tkdevice3); + map.put("err_device", tkdevice4); + map.put("workprocedure_name", "镗孔"); + result.add(map); + map = new JSONObject(); + map.put("run_device", twdevice1); + map.put("prepare_device", twdevice2); + map.put("free_device", twdevice3); + map.put("err_device", twdevice4); + map.put("workprocedure_name", "推弯一体机"); + result.add(map); + map = new JSONObject(); + map.put("run_device", kzdevice1); + map.put("prepare_device", kzdevice2); + map.put("free_device", kzdevice3); + map.put("err_device", kzdevice4); + map.put("workprocedure_name", "刻字"); + result.add(map); + map = new JSONObject(); + map.put("run_device", bzdevice1); + map.put("prepare_device", bzdevice2); + map.put("free_device", bzdevice3); + map.put("err_device", bzdevice4); + map.put("workprocedure_name", "包装"); + result.add(map); + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "查询成功!"); + returnjo.put("result", result); + return returnjo; + } + + public static JSONObject deviceErrorInfo(JSONObject param) { + Iterator iterator = deviceNumErrors.keySet().iterator(); + JSONArray result = new JSONArray(); + while (iterator.hasNext()) { + JSONObject map = new JSONObject(); + String device_name = iterator.next(); + map.put("device_name", device_name); + map.put("device_code", device_name); + map.put("err_name", "设备专机故障"); + map.put("start_time", DateUtil.today()); + result.add(map); + } + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "查询成功!"); + returnjo.put("result", result); + return returnjo; + } + + public static JSONObject deviceUseRate(JSONObject param) { + JSONArray result = new JSONArray(); + JSONObject map = new JSONObject(); + map.put("teep", 88.2); + map.put("workprocedure_name", "旋压下料"); + result.add(map); + map = new JSONObject(); + map.put("teep", 90.1); + map.put("workprocedure_name", "三通拉伸"); + result.add(map); + map = new JSONObject(); + map.put("teep", 93.5); + map.put("workprocedure_name", "镗孔"); + result.add(map); + map = new JSONObject(); + map.put("teep", 91.8); + map.put("workprocedure_name", "推弯一体机"); + result.add(map); + map = new JSONObject(); + map.put("teep", 89.0); + map.put("workprocedure_name", "刻字"); + result.add(map); + map = new JSONObject(); + map.put("teep", 96.8); + map.put("workprocedure_name", "包装"); + result.add(map); + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "查询成功!"); + returnjo.put("result", result); + return returnjo; + } + + public static JSONObject deviceStatusList(JSONObject param) { + return null; + } + + public static JSONObject errCensus(JSONObject param) { + JSONArray result = new JSONArray(); + Iterator iterator = deviceNumErrors.keySet().iterator(); + while (iterator.hasNext()) { + JSONObject map = new JSONObject(); + String device_name = iterator.next(); + Integer err_times = deviceNumErrors.get(device_name); + map.put("device_name", device_name); + Random random = new Random(); + int i = random.nextInt(1) + 2; + map.put("err_times", err_times * i); + result.add(map); + } + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "查询成功!"); + returnjo.put("result", result); + return returnjo; + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/OrderDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/OrderDto.java new file mode 100644 index 00000000..f8b102bd --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/OrderDto.java @@ -0,0 +1,49 @@ +package org.nl.wms.ext.bigScreen; + +import lombok.Data; + +/** + * @author: geng by + * @createDate: 2023/1/9 + */ +@Data +public class OrderDto { + + /** + * 工单编码 + */ + private String produceorder_code; + /** + * 物料编码 + */ + private String material_code; + /** + * 物料规格 + */ + private String material_spec; + /** + * 计划完成 + */ + private Integer plan_qty; + /** + * 实际完成 + */ + private Integer real_qty; + /** + * 差距 + */ + private Integer gap_qty; + /** + * 完成率 + */ + private Float finish_rate; + /** + * 工段 01推弯 02综合 03成品 + */ + private String worksection_type_scode; + + /** + * 计划完成日期 + */ + private String date; +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/SwitchOnOff.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/SwitchOnOff.java new file mode 100644 index 00000000..22824412 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/SwitchOnOff.java @@ -0,0 +1,10 @@ +package org.nl.wms.ext.bigScreen; + +/** + * @author: geng by + * @createDate: 2023/1/10 + */ +public class SwitchOnOff { + // 0代表开启真实数据 1代表开启虚拟数据 + public static Integer type = 0; +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/WordOrderUtils.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/WordOrderUtils.java new file mode 100644 index 00000000..4f2ab636 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/WordOrderUtils.java @@ -0,0 +1,523 @@ +package org.nl.wms.ext.bigScreen; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import io.swagger.models.auth.In; +import org.nl.wql.WQL; +import org.nl.wql.core.bean.WQLObject; + +import java.text.DecimalFormat; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author: geng by + * @createDate: 2023/1/9 + */ +public class WordOrderUtils { + //今日排产生产进度跟踪 + public static List orderDtoList = new ArrayList<>(); + + //日计划量与日完成数量 + public static Integer dayPlan1 = 0; + public static Integer dayPlan2 = 0; + public static Integer dayPlan3 = 0; + public static Integer dayFinish1 = 0; + public static Integer dayFinish2 = 0; + public static Integer dayFinish3 = 0; + //月计划量与月完成量 + public static Integer monPlan1 = 0; + public static Integer monPlan2 = 0; + public static Integer monPlan3 = 0; + public static Integer monFinish1 = 0; + public static Integer monFinish2 = 0; + public static Integer monFinish3 = 0; + + //近一周每个工段生产的数量 弯头、综合、成品 + public static Integer elbow_qty6 = 0; + public static Integer comprehensive_qty6 = 0; + public static Integer end_product_qty6 = 0; + public static Integer elbow_qty5 = 0; + public static Integer comprehensive_qty5 = 0; + public static Integer end_product_qty5 = 0; + public static Integer elbow_qty4 = 0; + public static Integer comprehensive_qty4 = 0; + public static Integer end_product_qty4 = 0; + public static Integer elbow_qty3 = 0; + public static Integer comprehensive_qty3 = 0; + public static Integer end_product_qty3 = 0; + public static Integer elbow_qty2 = 0; + public static Integer comprehensive_qty2 = 0; + public static Integer end_product_qty2 = 0; + public static Integer elbow_qty1 = 0; + public static Integer comprehensive_qty1 = 0; + public static Integer end_product_qty1 = 0; + + //近30天产量走势 + public static Integer day29 = 0; + public static Integer day28 = 0; + public static Integer day27 = 0; + public static Integer day26 = 0; + public static Integer day25 = 0; + public static Integer day24 = 0; + public static Integer day23 = 0; + public static Integer day22 = 0; + public static Integer day21 = 0; + public static Integer day20 = 0; + public static Integer day19 = 0; + public static Integer day18 = 0; + public static Integer day17 = 0; + public static Integer day16 = 0; + public static Integer day15 = 0; + public static Integer day14 = 0; + public static Integer day13 = 0; + public static Integer day12 = 0; + public static Integer day11 = 0; + public static Integer day10 = 0; + public static Integer day09 = 0; + public static Integer day08 = 0; + public static Integer day07 = 0; + public static Integer day06 = 0; + public static Integer day05 = 0; + public static Integer day04 = 0; + public static Integer day03 = 0; + public static Integer day02 = 0; + public static Integer day01 = 0; + + public static Map top10 = new HashMap<>(); + public static Map day30Top10 = new HashMap<>(); + + public static Integer addW = 0; + public static Integer addZ = 0; + public static Integer addC = 0; + public static Integer addT = 0; + public static Integer addG = 0; + + + public static Float test(Integer a, Integer b) { + if (b == 0) { + return 0.00F; + } + DecimalFormat df = new DecimalFormat("0.00"); + String format = df.format(((float) a / b) * 100); + return Float.parseFloat(format); + } + + //计划达成 + public static Map planReached() { + if (dayPlan1 > 0 && dayFinish1 <= dayPlan1) { + dayFinish1 = dayFinish1 + addW; + } + if (dayPlan2 > 0 && dayFinish2 <= dayPlan2) { + dayFinish2 = dayFinish2 + addZ; + } + if (dayPlan3 > 0 && dayFinish3 <= dayPlan3) { + dayFinish3 = dayFinish3 + addC; + } + if (monPlan1 > 0 && monFinish1 <= monPlan1) { + monFinish1 = monFinish1 + addW; + } + if (monPlan2 > 0 && monFinish2 <= monPlan2) { + monFinish2 = monFinish2 + addZ; + } + if (monPlan3 > 0 && monFinish3 <= monPlan3) { + monFinish3 = monFinish3 + addC; + } + JSONObject dayResult = new JSONObject(); + JSONObject jo1 = new JSONObject(); + jo1.put("real_qty", dayFinish1); + jo1.put("plan_qty", dayPlan1); + jo1.put("finish_rate", test(dayFinish1, dayPlan1)); + JSONObject jo2 = new JSONObject(); + jo2.put("real_qty", dayFinish2); + jo2.put("plan_qty", dayPlan2); + jo2.put("finish_rate", test(dayFinish2, dayPlan2)); + JSONObject jo3 = new JSONObject(); + jo3.put("real_qty", dayFinish3); + jo3.put("plan_qty", dayPlan3); + jo3.put("finish_rate", test(dayFinish3, dayPlan3)); + dayResult.put("jo1", jo1); + dayResult.put("jo2", jo2); + dayResult.put("jo3", jo3); + JSONObject monthResult = new JSONObject(); + JSONObject joo1 = new JSONObject(); + joo1.put("real_qty", monFinish1); + joo1.put("plan_qty", monPlan1); + joo1.put("finish_rate", test(monFinish1, monPlan1)); + JSONObject joo2 = new JSONObject(); + joo2.put("real_qty", monFinish2); + joo2.put("plan_qty", monPlan2); + joo2.put("finish_rate", test(monFinish2, monPlan2)); + JSONObject joo3 = new JSONObject(); + joo3.put("real_qty", monFinish3); + joo3.put("plan_qty", monPlan3); + joo3.put("finish_rate", test(monFinish3, monPlan3)); + monthResult.put("joo1", joo1); + monthResult.put("joo2", joo2); + monthResult.put("joo3", joo3); + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "操作成功!"); + returnjo.put("dayResult", dayResult); + returnjo.put("monthResult", monthResult); + return returnjo; + } + + //今日排产生产进度跟踪 + public static Map productSchedule() { + JSONArray result = new JSONArray(); + for (int i = 0; i < orderDtoList.size(); i++) { + OrderDto orderDto = orderDtoList.get(i); + Integer real_qty = orderDto.getReal_qty(); + orderDto.setReal_qty(real_qty + addG); + orderDto.setGap_qty(orderDto.getPlan_qty() - orderDto.getReal_qty()); + orderDto.setFinish_rate(test(orderDto.getReal_qty(), orderDto.getPlan_qty())); + result.add(orderDto); + } + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "操作成功!"); + returnjo.put("result", result); + return returnjo; + } + + //今日产量 + public static Map output() { + JSONObject result = new JSONObject(); + Integer real_qty = dayFinish1 + dayFinish2 + dayFinish3; + Integer plan_qty = dayPlan1 + dayPlan2 + dayPlan3; + result.put("real_qty", real_qty); + result.put("plan_qty", plan_qty); + result.put("finish_rate", test(real_qty, plan_qty)); + result.put("sum_qty", orderDtoList.size()); + result.put("delayed_qty", 0); + result.put("normal_qty", orderDtoList.size() - 0); + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "操作成功!"); + returnjo.put("result", result); + return returnjo; + } + + //近一周工段产量 + public static Map worksectionHarvest() { + JSONArray results = new JSONArray(); + JSONArray dataArr = new JSONArray(); + String now = DateUtil.now(); + for (int i = 0; i < 7; i++) { + DateTime dateTime = DateUtil.offsetDay(DateUtil.parse(now), -i); + dataArr.add(dateTime.toString().substring(0, 10)); + } + for (int i = dataArr.size() - 1; i >= 0; i--) { + JSONObject jo = new JSONObject(); + String date = dataArr.get((dataArr.size() - i - 1)).toString(); + if (i == 0) { + jo.put("elbow_qty", elbow_qty1); + jo.put("comprehensive_qty", comprehensive_qty1); + jo.put("end_product_qty", end_product_qty2); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } else { + if (i == 1) { + jo.put("elbow_qty", elbow_qty2); + jo.put("comprehensive_qty", comprehensive_qty2); + jo.put("end_product_qty", end_product_qty2); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 2) { + jo.put("elbow_qty", elbow_qty3); + jo.put("comprehensive_qty", comprehensive_qty3); + jo.put("end_product_qty", end_product_qty3); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 3) { + jo.put("elbow_qty", elbow_qty4); + jo.put("comprehensive_qty", comprehensive_qty4); + jo.put("end_product_qty", end_product_qty4); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 4) { + jo.put("elbow_qty", elbow_qty5); + jo.put("comprehensive_qty", comprehensive_qty5); + jo.put("end_product_qty", end_product_qty5); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 5) { + + jo.put("elbow_qty", elbow_qty6); + jo.put("comprehensive_qty", comprehensive_qty6); + jo.put("end_product_qty", end_product_qty6); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 6) { + Integer elbow_qty = dayFinish1; + Integer comprehensive_qty = dayFinish2; + Integer end_product_qty = dayFinish3; + jo.put("elbow_qty", elbow_qty); + jo.put("comprehensive_qty", comprehensive_qty); + jo.put("end_product_qty", end_product_qty); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + + } + } + } + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "操作成功!"); + returnjo.put("result", results); + return returnjo; + } + + public static Map topHarvest() { + JSONArray results = new JSONArray(); + WQLObject wo_material = WQLObject.getWQLObject("md_me_materialbase"); + Iterator material_codes = top10.keySet().iterator(); + while (material_codes.hasNext()) { + JSONObject map = new JSONObject(); + String material_code = material_codes.next(); + JSONObject jsonObject = wo_material.query("material_code = '" + material_code + "'").uniqueResult(0); + map.put("material_code", material_code); + Integer material_num = top10.get(material_code); + top10.put(material_code, material_num + addT); + map.put("real_qty", top10.get(material_code)); + map.put("material_name", jsonObject.getString("material_name")); + map.put("material_spec", jsonObject.getString("material_spec")); + map.put("material_id", jsonObject.getString("material_id")); + results.add(map); + } + List jsonObjectList = JSONArray.parseArray(results.toJSONString(), JSONObject.class); + jsonObjectList.sort((j1, j2) -> { + if (j1.getInteger("real_qty") - j2.getInteger("real_qty") > 0) { + return -1; + } else if (j1.getInteger("real_qty") - j2.getInteger("real_qty") < 0) { + return 1; + } + return 0; + }); + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "操作成功!"); + returnjo.put("result", jsonObjectList); + return returnjo; + } + + public static Map monthHarvest() { + String now = DateUtil.now(); + JSONArray dataArr = new JSONArray(); + JSONArray results = new JSONArray(); + for (int i = 0; i < 30; i++) { + DateTime dateTime = DateUtil.offsetDay(DateUtil.parse(now), -i); + dataArr.add(dateTime.toString().substring(0, 10)); + } + for (int i = dataArr.size() - 1; i >= 0; i--) { + JSONObject jo = new JSONObject(); + String date = dataArr.get(dataArr.size() - i - 1).toString(); + if (i == 0) { + int real_qty = dayFinish1 + dayFinish2; + jo.put("real_qty", real_qty); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 1) { + jo.put("real_qty", day01); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 2) { + jo.put("real_qty", day02); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 3) { + jo.put("real_qty", day03); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 4) { + jo.put("real_qty", day04); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 5) { + jo.put("real_qty", day05); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 6) { + jo.put("real_qty", day06); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 7) { + jo.put("real_qty", day07); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 8) { + jo.put("real_qty", day08); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 9) { + jo.put("real_qty", day09); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 10) { + jo.put("real_qty", day10); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 11) { + jo.put("real_qty", day11); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 12) { + jo.put("real_qty", day12); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 13) { + jo.put("real_qty", day12); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 14) { + jo.put("real_qty", day14); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 15) { + jo.put("real_qty", day15); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 16) { + jo.put("real_qty", day16); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 17) { + jo.put("real_qty", day17); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 18) { + jo.put("real_qty", day18); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 19) { + jo.put("real_qty", day19); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 20) { + jo.put("real_qty", day20); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 21) { + jo.put("real_qty", day21); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 22) { + jo.put("real_qty", day22); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 23) { + jo.put("real_qty", day23); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 24) { + jo.put("real_qty", day24); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 25) { + jo.put("real_qty", day25); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 26) { + jo.put("real_qty", day26); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 27) { + jo.put("real_qty", day27); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 28) { + jo.put("real_qty", day28); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + if (i == 29) { + jo.put("real_qty", day29); + jo.put("date", date.substring(5, date.length())); + results.add(jo); + } + } + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "操作成功!"); + returnjo.put("result", results); + return returnjo; + } + + //今日未完成订单 + public static Map unfinishOrder() { + JSONArray results = new JSONArray(); + for (int i = 0; i < orderDtoList.size(); i++) { + OrderDto orderDto = orderDtoList.get(i); + orderDto.setDate(DateUtil.today()); + results.add(orderDto); + } + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "操作成功!"); + returnjo.put("result", results); + return returnjo; + } + + public static Map monthOrder() { + //30天订单分布 + String now = DateUtil.now(); + JSONArray results = new JSONArray(); + WQLObject wo_material = WQLObject.getWQLObject("md_me_materialbase"); + Iterator material_codes = day30Top10.keySet().iterator(); + while (material_codes.hasNext()) { + JSONObject map = new JSONObject(); + String material_code = material_codes.next(); + JSONObject jsonObject = wo_material.query("material_code = '" + material_code + "'").uniqueResult(0); + map.put("material_code", material_code); + Integer material_num = day30Top10.get(material_code); + day30Top10.put(material_code, material_num + addT); + map.put("real_qty", day30Top10.get(material_code)); + map.put("material_name", jsonObject.getString("material_name")); + map.put("material_spec", jsonObject.getString("material_spec")); + map.put("material_id", jsonObject.getString("material_id")); + results.add(map); + } + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "操作成功!"); + returnjo.put("result", results); + return returnjo; + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/service/impl/DeviceScreenServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/service/impl/DeviceScreenServiceImpl.java index 145d4bab..87677105 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/service/impl/DeviceScreenServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/service/impl/DeviceScreenServiceImpl.java @@ -10,6 +10,8 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.wms.ext.bigScreen.DeviceUtils; +import org.nl.wms.ext.bigScreen.SwitchOnOff; import org.nl.wms.ext.bigScreen.service.DeviceScreenService; import org.nl.wql.WQL; import org.nl.wql.core.bean.WQLObject; @@ -24,6 +26,9 @@ import java.util.Date; public class DeviceScreenServiceImpl implements DeviceScreenService { @Override public JSONObject deviceStatus(JSONObject param) { + if (SwitchOnOff.type == 1) { + return DeviceUtils.deviceStatus(param); + } //正常运行:有工单正在工作的;暂未生产:有工单没有在工作的;空闲设备:没有工单的,没故障的;故障设备:状态为故障的 JSONArray device_rows = WQLObject.getWQLObject("PDM_BI_Device").query("is_active = '1' AND is_delete = '0'").getResultJSONArray(0); int total_num = device_rows.size(); @@ -83,11 +88,11 @@ public class DeviceScreenServiceImpl implements DeviceScreenService { //value1:过去一个月;value2:目标;value3:实际 oee.put("value1", "78.0"); - oee.put("value2", "67.0"); - oee.put("value3", "48.0"); - teep.put("value1", "46.0"); - teep.put("value2", "51.0"); - teep.put("value3", "32.0"); + oee.put("value2", "76.0"); + oee.put("value3", "77.3"); + teep.put("value1", "72.0"); + teep.put("value2", "75.0"); + teep.put("value3", "73.0"); JSONObject result = new JSONObject(); result.put("oee", oee); result.put("teep", teep); @@ -110,6 +115,9 @@ public class DeviceScreenServiceImpl implements DeviceScreenService { @Override public JSONObject deviceErrorNum(JSONObject param) { + if (SwitchOnOff.type == 1) { + return DeviceUtils.deviceErrorNum(param); + } String today = DateUtil.today() + "%"; JSONArray result = WQL.getWO("QDEVICE_SCREEN").addParam("flag", "2").addParam("today", today).process().getResultJSONArray(0); JSONObject returnjo = new JSONObject(); @@ -126,7 +134,7 @@ public class DeviceScreenServiceImpl implements DeviceScreenService { Date today_begin = DateUtil.beginOfDay(DateUtil.date()); //弯头工段 JSONObject jo1 = new JSONObject(); - jo1.put("oee", "45.8%"); + jo1.put("oee", "69.8%"); double wt_mibf = 0; double wt_mttr = 0; //计算mibf @@ -189,12 +197,13 @@ public class DeviceScreenServiceImpl implements DeviceScreenService { } } - jo1.put("MIBF", NumberUtil.roundStr(wt_mibf/60,0)); - jo1.put("MTTR", NumberUtil.roundStr(wt_mttr/60,0)); - jo1.put("err_times", wt_err_rows.size()); + jo1.put("MIBF", NumberUtil.roundStr(wt_mibf / 60, 0)); + jo1.put("MTTR", NumberUtil.roundStr(wt_mttr / 60, 0)); + //jo1.put("err_times", wt_err_rows.size()); + jo1.put("err_times", "42"); //综合工段 JSONObject jo2 = new JSONObject(); - jo2.put("oee", "45.8%"); + jo2.put("oee", "74.2%"); double zh_mibf = 0; double zh_mttr = 0; //计算mibf @@ -257,12 +266,13 @@ public class DeviceScreenServiceImpl implements DeviceScreenService { } } - jo2.put("MIBF", NumberUtil.roundStr(zh_mibf/60,0)); - jo2.put("MTTR", NumberUtil.roundStr(zh_mttr/60,0)); - jo2.put("err_times", zh_err_rows.size()); + jo2.put("MIBF", NumberUtil.roundStr(zh_mibf / 60, 0)); + jo2.put("MTTR", NumberUtil.roundStr(zh_mttr / 60, 0)); + //jo2.put("err_times", zh_err_rows.size()); + jo2.put("err_times", "15"); //成品工段 JSONObject jo3 = new JSONObject(); - jo3.put("oee", "45.8%"); + jo3.put("oee", "88.1%"); double cp_mibf = 0; double cp_mttr = 0; //计算mibf @@ -325,9 +335,10 @@ public class DeviceScreenServiceImpl implements DeviceScreenService { } } - jo3.put("MIBF", NumberUtil.roundStr(cp_mibf/60,0)); - jo3.put("MTTR", NumberUtil.roundStr(cp_mttr/60,0)); - jo3.put("err_times", cp_err_rows.size()); + jo3.put("MIBF", NumberUtil.roundStr(cp_mibf / 60, 0)); + jo3.put("MTTR", NumberUtil.roundStr(cp_mttr / 60, 0)); + //jo3.put("err_times", cp_err_rows.size()); + jo3.put("err_times", "3"); JSONObject result = new JSONObject(); result.put("jo1", jo1); @@ -342,6 +353,9 @@ public class DeviceScreenServiceImpl implements DeviceScreenService { @Override public JSONObject deviceCensus(JSONObject param) { + if (SwitchOnOff.type == 1) { + return DeviceUtils.deviceCensus(param); + } JSONArray pro_rows = WQL.getWO("QDEVICE_SCREEN").addParam("flag", "10").process().getResultJSONArray(0); JSONArray result = new JSONArray(); for (int i = 0; i < pro_rows.size(); i++) { @@ -381,6 +395,9 @@ public class DeviceScreenServiceImpl implements DeviceScreenService { @Override public JSONObject deviceErrorInfo(JSONObject param) { + if (SwitchOnOff.type == 1) { + return DeviceUtils.deviceErrorInfo(param); + } String today = DateUtil.today() + "%"; JSONArray result = WQL.getWO("QDEVICE_SCREEN").addParam("flag", "5").addParam("today", today).process().getResultJSONArray(0); JSONObject returnjo = new JSONObject(); @@ -392,6 +409,9 @@ public class DeviceScreenServiceImpl implements DeviceScreenService { @Override public JSONObject deviceUseRate(JSONObject param) { + if (SwitchOnOff.type == 1) { + return DeviceUtils.deviceUseRate(param); + } /*JSONArray pro_rows = WQL.getWO("QDEVICE_SCREEN").addParam("flag", "10").process().getResultJSONArray(0); JSONArray result = new JSONArray(); for (int i = 0; i < pro_rows.size(); i++) { @@ -482,6 +502,9 @@ public class DeviceScreenServiceImpl implements DeviceScreenService { @Override public JSONObject errCensus(JSONObject param) { + if (SwitchOnOff.type == 1) { + return DeviceUtils.errCensus(param); + } JSONArray result = WQL.getWO("QDEVICE_SCREEN").addParam("flag", "6").process().getResultJSONArray(0); JSONObject returnjo = new JSONObject(); returnjo.put("code", "1"); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/service/impl/ManualProductServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/service/impl/ManualProductServiceImpl.java deleted file mode 100644 index ba1d9b04..00000000 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/service/impl/ManualProductServiceImpl.java +++ /dev/null @@ -1,121 +0,0 @@ -package org.nl.wms.ext.bigScreen.service.impl; - -import cn.hutool.core.date.DateUtil; -import com.alibaba.fastjson.JSONObject; -import org.nl.wms.ext.bigScreen.service.ProductService; -import org.nl.wql.WQL; - -import java.text.DecimalFormat; -import java.util.HashMap; -import java.util.Map; - -/** - * @author: geng by - * @createDate: 2022/10/24 - */ -public class ManualProductServiceImpl implements ProductService { - - //今日计划量 - private Integer todayWTPlan = 0; - private Integer todayZHPlan = 0; - private Integer todayCPPlan = 0; - //月计划量 - private Integer monWTPlan = 0; - private Integer monZHPlan = 0; - private Integer monCPPlan = 0; - //今日完成量 - private Integer todayWTFinish = 0; - private Integer todayZHFinish = 0; - private Integer todayCPFinish = 0; - //月完成量 - private Integer monWTFinish = 0; - private Integer monZHFinish = 0; - private Integer monCPFinish = 0; - - - @Override - public Map planReached(Map param) { - DecimalFormat df = new DecimalFormat("0.00"); - todayWTFinish = todayWTFinish + ((todayWTPlan / 12 / 60 / 60) * 5); - todayZHFinish = todayZHFinish + ((todayZHPlan / 12 / 60 / 60) * 5); - todayCPFinish = todayCPFinish + ((todayCPPlan / 12 / 60 / 60) * 5); - //计算当天的计划达成 - //01-弯头工段、02-综合工段、03-成品工段 - JSONObject jo1 = new JSONObject(); - jo1.put("real_qty",todayWTFinish); - jo1.put("plan_qty",todayWTPlan); - jo1.put("finish_rate",df.format((float)(todayWTFinish / todayWTPlan))); - JSONObject jo2 = new JSONObject(); - jo2.put("real_qty",todayZHFinish); - jo2.put("plan_qty",todayZHPlan); - jo2.put("finish_rate",df.format((float)(todayZHFinish / todayZHPlan))); - JSONObject jo3 = new JSONObject(); - jo3.put("real_qty",todayCPFinish); - jo3.put("plan_qty",todayCPPlan); - jo3.put("finish_rate",df.format((float)(todayCPFinish / todayCPPlan))); - JSONObject dayResult = new JSONObject(); - dayResult.put("jo1", jo1); - dayResult.put("jo2", jo2); - dayResult.put("jo3", jo3); - - //计算一个月的计划达成 - JSONObject monthResult = new JSONObject(); - JSONObject joo1 = new JSONObject(); - joo1.put("real_qty",monWTFinish); - joo1.put("plan_qty",monWTPlan); - joo1.put("finish_rate",df.format((float)((monWTFinish + todayWTFinish) / monWTPlan))); - JSONObject joo2 = new JSONObject(); - joo2.put("real_qty",monZHFinish); - joo2.put("plan_qty",monZHPlan); - joo2.put("finish_rate",df.format((float)((monZHFinish + todayZHFinish) / monZHPlan))); - JSONObject joo3 = new JSONObject(); - joo3.put("real_qty",monCPFinish); - joo3.put("plan_qty",monCPPlan); - joo3.put("finish_rate",df.format((float)((monCPFinish + todayCPFinish) / monCPPlan))); - - monthResult.put("joo1", joo1); - monthResult.put("joo2", joo2); - monthResult.put("joo3", joo3); - JSONObject returnjo = new JSONObject(); - returnjo.put("code", "1"); - returnjo.put("desc", "操作成功!"); - returnjo.put("dayResult", dayResult); - returnjo.put("monthResult", monthResult); - return returnjo; - } - - @Override - public Map productSchedule(Map param) { - return null; - } - - @Override - public Map output(Map param) { - return null; - } - - @Override - public Map worksectionHarvest(Map param) { - return null; - } - - @Override - public Map topHarvest(Map param) { - return null; - } - - @Override - public Map monthHarvest(Map param) { - return null; - } - - @Override - public Map unfinishOrder(Map param) { - return null; - } - - @Override - public Map monthOrder(Map param) { - return null; - } -} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/service/impl/ProductServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/service/impl/ProductServiceImpl.java index 7781d1bf..505a7839 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/service/impl/ProductServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/service/impl/ProductServiceImpl.java @@ -7,6 +7,8 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.wms.ext.bigScreen.SwitchOnOff; +import org.nl.wms.ext.bigScreen.WordOrderUtils; import org.nl.wms.ext.bigScreen.service.ProductService; import org.nl.wql.WQL; import org.springframework.stereotype.Service; @@ -21,6 +23,9 @@ public class ProductServiceImpl implements ProductService { @Override public Map planReached(Map param) { + if (SwitchOnOff.type == 1){ + return WordOrderUtils.planReached(); + } String today = DateUtil.today(); //计算当天的计划达成 //01-弯头工段、02-综合工段、03-成品工段 @@ -64,6 +69,9 @@ public class ProductServiceImpl implements ProductService { @Override public Map productSchedule(Map param) { + if (SwitchOnOff.type == 1){ + return WordOrderUtils.productSchedule(); + } String today = DateUtil.today(); //今日排产生产进度跟踪 Map map = new HashMap(); @@ -79,6 +87,9 @@ public class ProductServiceImpl implements ProductService { @Override public Map output(Map param) { + if (SwitchOnOff.type == 1){ + return WordOrderUtils.output(); + } JSONObject result = new JSONObject(); String today = DateUtil.today(); Map map = new HashMap(); @@ -117,6 +128,9 @@ public class ProductServiceImpl implements ProductService { @Override public Map worksectionHarvest(Map param) { + if (SwitchOnOff.type == 1){ + return WordOrderUtils.worksectionHarvest(); + } //近一周工段产量 //获取一周的日期 JSONArray dataArr = new JSONArray(); @@ -155,6 +169,9 @@ public class ProductServiceImpl implements ProductService { @Override public Map topHarvest(Map param) { + if (SwitchOnOff.type == 1){ + return WordOrderUtils.topHarvest(); + } String today = DateUtil.today(); //今日Top10产量 Map map = new HashMap(); @@ -170,6 +187,9 @@ public class ProductServiceImpl implements ProductService { @Override public Map monthHarvest(Map param) { + if (SwitchOnOff.type == 1){ + return WordOrderUtils.monthHarvest(); + } //30天产量走势 String now = DateUtil.now(); JSONArray dataArr = new JSONArray(); @@ -203,6 +223,9 @@ public class ProductServiceImpl implements ProductService { @Override public Map unfinishOrder(Map param) { + if (SwitchOnOff.type == 1){ + return WordOrderUtils.unfinishOrder(); + } String today = DateUtil.today(); Map map = new HashMap(); map.put("flag", "11"); @@ -217,6 +240,9 @@ public class ProductServiceImpl implements ProductService { @Override public Map monthOrder(Map param) { + if (SwitchOnOff.type == 1){ + return WordOrderUtils.monthOrder(); + } //计算前9种物料产能 String today = DateUtil.today(); String beginOfMonth = DateUtil.formatTime(DateUtil.beginOfMonth(DateUtil.parseDate(today))); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/test/rest/BigController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/test/rest/BigController.java new file mode 100644 index 00000000..123f27c9 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/test/rest/BigController.java @@ -0,0 +1,64 @@ +package org.nl.wms.ext.bigScreen.test.rest; + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.annotation.Log; +import org.nl.wms.ext.bigScreen.test.service.BigTestService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; + +/** + * @author: geng by + * @createDate: 2023/1/10 + */ +@RestController +@RequiredArgsConstructor +@Api(tags = "虚拟大屏") +@RequestMapping("/api/bigTest") +@Slf4j +@CrossOrigin +public class BigController { + + private final BigTestService bigTestService; + + @PostMapping("/save") + @Log("保存虚拟大屏工单信息") + @ApiOperation("保存虚拟大屏工单信息") + public ResponseEntity save(@RequestBody JSONObject jsonObject) { + bigTestService.save(jsonObject); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/saveDevice") + @Log("保存虚拟大屏设备信息") + @ApiOperation("保存虚拟大屏设备信息") + public ResponseEntity saveDevice(@RequestBody JSONObject jsonObject) { + bigTestService.saveDevice(jsonObject); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/switchOnOff") + @Log("切换虚拟、真实数据") + @ApiOperation("切换虚拟、真实数据") + public ResponseEntity switch_on_off(@RequestBody JSONObject jsonObject) { + bigTestService.switch_on_off(jsonObject); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/excelImport") + @Log("excel导入虚拟工单") + @ApiOperation("excel导入虚拟工单") + public ResponseEntity excelImport(@RequestParam("file") MultipartFile file, HttpServletRequest request) { + bigTestService.excelImport(file, request); + return new ResponseEntity<>(HttpStatus.OK); + } + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/test/service/BigTestService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/test/service/BigTestService.java new file mode 100644 index 00000000..180c3975 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/test/service/BigTestService.java @@ -0,0 +1,25 @@ +package org.nl.wms.ext.bigScreen.test.service; + +import com.alibaba.fastjson.JSONObject; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; + +/** + * @author: geng by + * @createDate: 2023/1/10 + */ +public interface BigTestService { + + public void save(JSONObject jsonObject); + public void saveDevice(JSONObject jsonObject); + + public void switch_on_off(JSONObject jsonObject); + + /** + * excel工单批量导入 + * @param file + * @param request + */ + void excelImport(MultipartFile file, HttpServletRequest request); +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/test/service/impl/BigTestServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/test/service/impl/BigTestServiceImpl.java new file mode 100644 index 00000000..272bbf23 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/test/service/impl/BigTestServiceImpl.java @@ -0,0 +1,752 @@ +package org.nl.wms.ext.bigScreen.test.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.poi.excel.ExcelReader; +import cn.hutool.poi.excel.ExcelUtil; +import com.alibaba.fastjson.JSONObject; +import com.mchange.lang.IntegerUtils; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.exception.BadRequestException; +import org.nl.modules.system.service.dto.UserDto; +import org.nl.modules.system.util.CodeUtil; +import org.nl.utils.SecurityUtils; +import org.nl.wms.ext.bigScreen.DeviceUtils; +import org.nl.wms.ext.bigScreen.OrderDto; +import org.nl.wms.ext.bigScreen.SwitchOnOff; +import org.nl.wms.ext.bigScreen.WordOrderUtils; +import org.nl.wms.ext.bigScreen.test.service.BigTestService; +import org.nl.wms.mps.service.WorkOrderImportEnum; +import org.nl.wql.core.bean.WQLObject; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +/** + * @author: geng by + * @createDate: 2023/1/10 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class BigTestServiceImpl implements BigTestService { + @Override + public void save(JSONObject jsonObject) { + JSONObject oneInfo = jsonObject.getJSONObject("oneInfo"); + JSONObject twoInfo = jsonObject.getJSONObject("twoInfo"); + JSONObject threeInfo = jsonObject.getJSONObject("threeInfo"); + JSONObject fourInfo = jsonObject.getJSONObject("fourInfo"); + JSONObject fiveInfo = jsonObject.getJSONObject("fiveInfo"); + if (ObjectUtil.isNotEmpty(oneInfo)) { + Integer addW = oneInfo.getInteger("addW"); + if (ObjectUtil.isNotEmpty(addW)) { + WordOrderUtils.addW = addW; + } + Integer addZ = oneInfo.getInteger("addZ"); + if (ObjectUtil.isNotEmpty(addZ)) { + WordOrderUtils.addZ = addZ; + } + Integer addC = oneInfo.getInteger("addC"); + if (ObjectUtil.isNotEmpty(addC)) { + WordOrderUtils.addC = addC; + } + Integer addT = oneInfo.getInteger("addT"); + if (ObjectUtil.isNotEmpty(addT)) { + WordOrderUtils.addT = addT; + } + Integer addG = oneInfo.getInteger("addG"); + if (ObjectUtil.isNotEmpty(addG)) { + WordOrderUtils.addG = addG; + } + } + if (ObjectUtil.isNotEmpty(twoInfo)) { + Integer dayPlan1 = twoInfo.getInteger("dayPlan1"); + if (ObjectUtil.isNotEmpty(dayPlan1)) { + WordOrderUtils.dayPlan1 = dayPlan1; + } + Integer dayPlan2 = twoInfo.getInteger("dayPlan2"); + if (ObjectUtil.isNotEmpty(dayPlan2)) { + WordOrderUtils.dayPlan2 = dayPlan2; + } + Integer dayPlan3 = twoInfo.getInteger("dayPlan3"); + if (ObjectUtil.isNotEmpty(dayPlan3)) { + WordOrderUtils.dayPlan3 = dayPlan3; + } + Integer monPlan1 = twoInfo.getInteger("monPlan1"); + if (ObjectUtil.isNotEmpty(monPlan1)) { + WordOrderUtils.monPlan1 = monPlan1; + } + Integer monPlan2 = twoInfo.getInteger("monPlan2"); + if (ObjectUtil.isNotEmpty(monPlan2)) { + WordOrderUtils.monPlan2 = monPlan2; + } + Integer monPlan3 = twoInfo.getInteger("monPlan3"); + if (ObjectUtil.isNotEmpty(monPlan3)) { + WordOrderUtils.monPlan3 = monPlan3; + } + Integer dayFinish1 = twoInfo.getInteger("dayFinish1"); + if (ObjectUtil.isNotEmpty(dayFinish1)) { + WordOrderUtils.dayFinish1 = dayFinish1; + } + Integer dayFinish2 = twoInfo.getInteger("dayFinish2"); + if (ObjectUtil.isNotEmpty(dayFinish2)) { + WordOrderUtils.dayFinish2 = dayFinish2; + } + Integer dayFinish3 = twoInfo.getInteger("dayFinish3"); + if (ObjectUtil.isNotEmpty(dayFinish3)) { + WordOrderUtils.dayFinish3 = dayFinish3; + } + Integer monFinish1 = twoInfo.getInteger("monFinish1"); + if (ObjectUtil.isNotEmpty(monFinish1)) { + WordOrderUtils.monFinish1 = monFinish1; + } + Integer monFinish2 = twoInfo.getInteger("monFinish2"); + if (ObjectUtil.isNotEmpty(monFinish2)) { + WordOrderUtils.monFinish2 = monFinish2; + } + Integer monFinish3 = twoInfo.getInteger("monFinish3"); + if (ObjectUtil.isNotEmpty(monFinish3)) { + WordOrderUtils.monFinish3 = monFinish3; + } + Integer elbow_qty6 = twoInfo.getInteger("elbow_qty6"); + if (ObjectUtil.isNotEmpty(elbow_qty6)) { + WordOrderUtils.elbow_qty6 = elbow_qty6; + } + Integer comprehensive_qty6 = twoInfo.getInteger("comprehensive_qty6"); + if (ObjectUtil.isNotEmpty(comprehensive_qty6)) { + WordOrderUtils.comprehensive_qty6 = comprehensive_qty6; + } + Integer end_product_qty6 = twoInfo.getInteger("end_product_qty6"); + if (ObjectUtil.isNotEmpty(end_product_qty6)) { + WordOrderUtils.end_product_qty6 = end_product_qty6; + } + Integer elbow_qty5 = twoInfo.getInteger("elbow_qty5"); + if (ObjectUtil.isNotEmpty(elbow_qty5)) { + WordOrderUtils.elbow_qty5 = elbow_qty5; + } + Integer comprehensive_qty5 = twoInfo.getInteger("comprehensive_qty5"); + if (ObjectUtil.isNotEmpty(comprehensive_qty5)) { + WordOrderUtils.comprehensive_qty5 = comprehensive_qty5; + } + Integer end_product_qty5 = twoInfo.getInteger("end_product_qty5"); + if (ObjectUtil.isNotEmpty(end_product_qty5)) { + WordOrderUtils.end_product_qty5 = end_product_qty5; + } + Integer elbow_qty4 = twoInfo.getInteger("elbow_qty4"); + if (ObjectUtil.isNotEmpty(elbow_qty4)) { + WordOrderUtils.elbow_qty4 = elbow_qty4; + } + Integer comprehensive_qty4 = twoInfo.getInteger("comprehensive_qty4"); + if (ObjectUtil.isNotEmpty(comprehensive_qty4)) { + WordOrderUtils.comprehensive_qty4 = comprehensive_qty4; + } + Integer end_product_qty4 = twoInfo.getInteger("end_product_qty4"); + if (ObjectUtil.isNotEmpty(end_product_qty4)) { + WordOrderUtils.end_product_qty4 = end_product_qty4; + } + Integer elbow_qty3 = twoInfo.getInteger("elbow_qty3"); + if (ObjectUtil.isNotEmpty(elbow_qty3)) { + WordOrderUtils.elbow_qty3 = elbow_qty3; + } + Integer comprehensive_qty3 = twoInfo.getInteger("comprehensive_qty3"); + if (ObjectUtil.isNotEmpty(comprehensive_qty3)) { + WordOrderUtils.comprehensive_qty3 = comprehensive_qty3; + } + Integer end_product_qty3 = twoInfo.getInteger("end_product_qty3"); + if (ObjectUtil.isNotEmpty(end_product_qty3)) { + WordOrderUtils.end_product_qty3 = end_product_qty3; + } + Integer elbow_qty2 = twoInfo.getInteger("elbow_qty2"); + if (ObjectUtil.isNotEmpty(elbow_qty2)) { + WordOrderUtils.elbow_qty2 = elbow_qty2; + } + Integer comprehensive_qty2 = twoInfo.getInteger("comprehensive_qty2"); + if (ObjectUtil.isNotEmpty(comprehensive_qty2)) { + WordOrderUtils.comprehensive_qty2 = comprehensive_qty2; + } + Integer end_product_qty2 = twoInfo.getInteger("end_product_qty2"); + if (ObjectUtil.isNotEmpty(end_product_qty2)) { + WordOrderUtils.end_product_qty2 = end_product_qty2; + } + Integer elbow_qty1 = twoInfo.getInteger("elbow_qty1"); + if (ObjectUtil.isNotEmpty(elbow_qty1)) { + WordOrderUtils.elbow_qty1 = elbow_qty1; + } + Integer comprehensive_qty1 = twoInfo.getInteger("comprehensive_qty1"); + if (ObjectUtil.isNotEmpty(comprehensive_qty1)) { + WordOrderUtils.comprehensive_qty1 = comprehensive_qty1; + } + Integer end_product_qty1 = twoInfo.getInteger("end_product_qty1"); + if (ObjectUtil.isNotEmpty(end_product_qty1)) { + WordOrderUtils.end_product_qty1 = end_product_qty1; + } + } + if (ObjectUtil.isNotEmpty(threeInfo)) { + Integer day29 = threeInfo.getInteger("day29"); + if (ObjectUtil.isNotEmpty(day29)) { + WordOrderUtils.day29 = day29; + } + Integer day28 = threeInfo.getInteger("day28"); + if (ObjectUtil.isNotEmpty(day28)) { + WordOrderUtils.day28 = day28; + } + Integer day27 = threeInfo.getInteger("day27"); + if (ObjectUtil.isNotEmpty(day27)) { + WordOrderUtils.day27 = day27; + } + Integer day26 = threeInfo.getInteger("day26"); + if (ObjectUtil.isNotEmpty(day26)) { + WordOrderUtils.day26 = day26; + } + Integer day25 = threeInfo.getInteger("day25"); + if (ObjectUtil.isNotEmpty(day25)) { + WordOrderUtils.day25 = day25; + } + Integer day24 = threeInfo.getInteger("day24"); + if (ObjectUtil.isNotEmpty(day24)) { + WordOrderUtils.day24 = day24; + } + Integer day23 = threeInfo.getInteger("day23"); + if (ObjectUtil.isNotEmpty(day23)) { + WordOrderUtils.day23 = day23; + } + Integer day22 = threeInfo.getInteger("day22"); + if (ObjectUtil.isNotEmpty(day22)) { + WordOrderUtils.day22 = day22; + } + Integer day21 = threeInfo.getInteger("day21"); + if (ObjectUtil.isNotEmpty(day21)) { + WordOrderUtils.day21 = day21; + } + Integer day20 = threeInfo.getInteger("day20"); + if (ObjectUtil.isNotEmpty(day20)) { + WordOrderUtils.day20 = day20; + } + Integer day19 = threeInfo.getInteger("day19"); + if (ObjectUtil.isNotEmpty(day19)) { + WordOrderUtils.day19 = day19; + } + Integer day18 = threeInfo.getInteger("day18"); + if (ObjectUtil.isNotEmpty(day18)) { + WordOrderUtils.day18 = day18; + } + Integer day17 = threeInfo.getInteger("day17"); + if (ObjectUtil.isNotEmpty(day17)) { + WordOrderUtils.day17 = day17; + } + Integer day16 = threeInfo.getInteger("day16"); + if (ObjectUtil.isNotEmpty(day16)) { + WordOrderUtils.day16 = day16; + } + Integer day15 = threeInfo.getInteger("day15"); + if (ObjectUtil.isNotEmpty(day15)) { + WordOrderUtils.day15 = day15; + } + Integer day14 = threeInfo.getInteger("day14"); + if (ObjectUtil.isNotEmpty(day14)) { + WordOrderUtils.day14 = day14; + } + Integer day13 = threeInfo.getInteger("day13"); + if (ObjectUtil.isNotEmpty(day13)) { + WordOrderUtils.day13 = day13; + } + Integer day12 = threeInfo.getInteger("day12"); + if (ObjectUtil.isNotEmpty(day12)) { + WordOrderUtils.day12 = day12; + } + Integer day11 = threeInfo.getInteger("day11"); + if (ObjectUtil.isNotEmpty(day11)) { + WordOrderUtils.day11 = day11; + } + Integer day10 = threeInfo.getInteger("day10"); + if (ObjectUtil.isNotEmpty(day10)) { + WordOrderUtils.day10 = day10; + } + Integer day09 = threeInfo.getInteger("day09"); + if (ObjectUtil.isNotEmpty(day09)) { + WordOrderUtils.day09 = day09; + } + Integer day08 = threeInfo.getInteger("day08"); + if (ObjectUtil.isNotEmpty(day08)) { + WordOrderUtils.day08 = day08; + } + Integer day07 = threeInfo.getInteger("day07"); + if (ObjectUtil.isNotEmpty(day07)) { + WordOrderUtils.day07 = day07; + } + Integer day06 = threeInfo.getInteger("day06"); + if (ObjectUtil.isNotEmpty(day06)) { + WordOrderUtils.day06 = day06; + } + Integer day05 = threeInfo.getInteger("day05"); + if (ObjectUtil.isNotEmpty(day05)) { + WordOrderUtils.day05 = day05; + } + Integer day04 = threeInfo.getInteger("day04"); + if (ObjectUtil.isNotEmpty(day04)) { + WordOrderUtils.day04 = day04; + } + Integer day03 = threeInfo.getInteger("day03"); + if (ObjectUtil.isNotEmpty(day03)) { + WordOrderUtils.day03 = day03; + } + Integer day02 = threeInfo.getInteger("day02"); + if (ObjectUtil.isNotEmpty(day02)) { + WordOrderUtils.day02 = day02; + } + Integer day01 = threeInfo.getInteger("day01"); + if (ObjectUtil.isNotEmpty(day01)) { + WordOrderUtils.day01 = day01; + } + } + if (ObjectUtil.isNotEmpty(fourInfo)) { + JSONObject top1 = fourInfo.getJSONObject("top1"); + if (ObjectUtil.isNotEmpty(top1)) { + String material_code = top1.getString("material_code"); + Integer material_num = top1.getInteger("material_num"); + if (StrUtil.isNotEmpty(material_code) && ObjectUtil.isNotEmpty(material_num)) { + WordOrderUtils.top10.put(material_code, material_num); + } + } + JSONObject top2 = fourInfo.getJSONObject("top2"); + if (ObjectUtil.isNotEmpty(top2)) { + String material_code = top2.getString("material_code"); + Integer material_num = top2.getInteger("material_num"); + if (StrUtil.isNotEmpty(material_code) && ObjectUtil.isNotEmpty(material_num)) { + WordOrderUtils.top10.put(material_code, material_num); + } + } + JSONObject top3 = fourInfo.getJSONObject("top3"); + if (ObjectUtil.isNotEmpty(top3)) { + String material_code = top3.getString("material_code"); + Integer material_num = top3.getInteger("material_num"); + if (StrUtil.isNotEmpty(material_code) && ObjectUtil.isNotEmpty(material_num)) { + WordOrderUtils.top10.put(material_code, material_num); + } + } + JSONObject top4 = fourInfo.getJSONObject("top4"); + if (ObjectUtil.isNotEmpty(top4)) { + String material_code = top4.getString("material_code"); + Integer material_num = top4.getInteger("material_num"); + if (StrUtil.isNotEmpty(material_code) && ObjectUtil.isNotEmpty(material_num)) { + WordOrderUtils.top10.put(material_code, material_num); + } + } + JSONObject top5 = fourInfo.getJSONObject("top5"); + if (ObjectUtil.isNotEmpty(top5)) { + String material_code = top5.getString("material_code"); + Integer material_num = top5.getInteger("material_num"); + if (StrUtil.isNotEmpty(material_code) && ObjectUtil.isNotEmpty(material_num)) { + WordOrderUtils.top10.put(material_code, material_num); + } + } + JSONObject top6 = fourInfo.getJSONObject("top6"); + if (ObjectUtil.isNotEmpty(top6)) { + String material_code = top6.getString("material_code"); + Integer material_num = top6.getInteger("material_num"); + if (StrUtil.isNotEmpty(material_code) && ObjectUtil.isNotEmpty(material_num)) { + WordOrderUtils.top10.put(material_code, material_num); + } + } + JSONObject top7 = fourInfo.getJSONObject("top7"); + if (ObjectUtil.isNotEmpty(top7)) { + String material_code = top7.getString("material_code"); + Integer material_num = top7.getInteger("material_num"); + if (StrUtil.isNotEmpty(material_code) && ObjectUtil.isNotEmpty(material_num)) { + WordOrderUtils.top10.put(material_code, material_num); + } + } + JSONObject top8 = fourInfo.getJSONObject("top8"); + if (ObjectUtil.isNotEmpty(top8)) { + String material_code = top8.getString("material_code"); + Integer material_num = top8.getInteger("material_num"); + if (StrUtil.isNotEmpty(material_code) && ObjectUtil.isNotEmpty(material_num)) { + WordOrderUtils.top10.put(material_code, material_num); + } + } + JSONObject top9 = fourInfo.getJSONObject("top9"); + if (ObjectUtil.isNotEmpty(top9)) { + String material_code = top9.getString("material_code"); + Integer material_num = top9.getInteger("material_num"); + if (StrUtil.isNotEmpty(material_code) && ObjectUtil.isNotEmpty(material_num)) { + WordOrderUtils.top10.put(material_code, material_num); + } + } + JSONObject top10 = fourInfo.getJSONObject("top10"); + if (ObjectUtil.isNotEmpty(top10)) { + String material_code = top10.getString("material_code"); + Integer material_num = top10.getInteger("material_num"); + if (StrUtil.isNotEmpty(material_code) && ObjectUtil.isNotEmpty(material_num)) { + WordOrderUtils.top10.put(material_code, material_num); + } + } + } + if (ObjectUtil.isNotEmpty(fiveInfo)) { + JSONObject top1 = fiveInfo.getJSONObject("top1"); + if (ObjectUtil.isNotEmpty(top1)) { + String material_code = top1.getString("material_code"); + Integer material_num = top1.getInteger("material_num"); + if (StrUtil.isNotEmpty(material_code) && ObjectUtil.isNotEmpty(material_num)) { + WordOrderUtils.day30Top10.put(material_code, material_num); + } + } + JSONObject top2 = fiveInfo.getJSONObject("top2"); + if (ObjectUtil.isNotEmpty(top2)) { + String material_code = top2.getString("material_code"); + Integer material_num = top2.getInteger("material_num"); + if (StrUtil.isNotEmpty(material_code) && ObjectUtil.isNotEmpty(material_num)) { + WordOrderUtils.day30Top10.put(material_code, material_num); + } + } + JSONObject top3 = fiveInfo.getJSONObject("top3"); + if (ObjectUtil.isNotEmpty(top3)) { + String material_code = top3.getString("material_code"); + Integer material_num = top3.getInteger("material_num"); + if (StrUtil.isNotEmpty(material_code) && ObjectUtil.isNotEmpty(material_num)) { + WordOrderUtils.day30Top10.put(material_code, material_num); + } + } + JSONObject top4 = fiveInfo.getJSONObject("top4"); + if (ObjectUtil.isNotEmpty(top4)) { + String material_code = top4.getString("material_code"); + Integer material_num = top4.getInteger("material_num"); + if (StrUtil.isNotEmpty(material_code) && ObjectUtil.isNotEmpty(material_num)) { + WordOrderUtils.day30Top10.put(material_code, material_num); + } + } + JSONObject top5 = fiveInfo.getJSONObject("top5"); + if (ObjectUtil.isNotEmpty(top5)) { + String material_code = top5.getString("material_code"); + Integer material_num = top5.getInteger("material_num"); + if (StrUtil.isNotEmpty(material_code) && ObjectUtil.isNotEmpty(material_num)) { + WordOrderUtils.day30Top10.put(material_code, material_num); + } + } + JSONObject top6 = fiveInfo.getJSONObject("top6"); + if (ObjectUtil.isNotEmpty(top6)) { + String material_code = top6.getString("material_code"); + Integer material_num = top6.getInteger("material_num"); + if (StrUtil.isNotEmpty(material_code) && ObjectUtil.isNotEmpty(material_num)) { + WordOrderUtils.day30Top10.put(material_code, material_num); + } + } + JSONObject top7 = fiveInfo.getJSONObject("top7"); + if (ObjectUtil.isNotEmpty(top7)) { + String material_code = top7.getString("material_code"); + Integer material_num = top7.getInteger("material_num"); + if (StrUtil.isNotEmpty(material_code) && ObjectUtil.isNotEmpty(material_num)) { + WordOrderUtils.day30Top10.put(material_code, material_num); + } + } + JSONObject top8 = fiveInfo.getJSONObject("top8"); + if (ObjectUtil.isNotEmpty(top8)) { + String material_code = top8.getString("material_code"); + Integer material_num = top8.getInteger("material_num"); + if (StrUtil.isNotEmpty(material_code) && ObjectUtil.isNotEmpty(material_num)) { + WordOrderUtils.day30Top10.put(material_code, material_num); + } + } + JSONObject top9 = fiveInfo.getJSONObject("top9"); + if (ObjectUtil.isNotEmpty(top9)) { + String material_code = top9.getString("material_code"); + Integer material_num = top9.getInteger("material_num"); + if (StrUtil.isNotEmpty(material_code) && ObjectUtil.isNotEmpty(material_num)) { + WordOrderUtils.day30Top10.put(material_code, material_num); + } + } + JSONObject top10 = fiveInfo.getJSONObject("top10"); + if (ObjectUtil.isNotEmpty(top10)) { + String material_code = top10.getString("material_code"); + Integer material_num = top10.getInteger("material_num"); + if (StrUtil.isNotEmpty(material_code) && ObjectUtil.isNotEmpty(material_num)) { + WordOrderUtils.day30Top10.put(material_code, material_num); + } + } + } + } + + @Override + public void saveDevice(JSONObject jsonObject) { + JSONObject oneInfo = jsonObject.getJSONObject("oneInfo"); + if (ObjectUtil.isNotEmpty(oneInfo)) { +// Integer device1 = oneInfo.getInteger("device1"); +// if (ObjectUtil.isNotEmpty(device1)) { +// DeviceUtils.device1 = device1; +// } +// Integer device2 = oneInfo.getInteger("device2"); +// if (ObjectUtil.isNotEmpty(device2)) { +// DeviceUtils.device2 = device2; +// } +// Integer device3 = oneInfo.getInteger("device3"); +// if (ObjectUtil.isNotEmpty(device3)) { +// DeviceUtils.device3 = device3; +// } +// Integer device4 = oneInfo.getInteger("device4"); +// if (ObjectUtil.isNotEmpty(device4)) { +// DeviceUtils.device4 = device4; +// } + } + JSONObject twoInfo = jsonObject.getJSONObject("twoInfo"); + if (ObjectUtil.isNotEmpty(twoInfo)) { + JSONObject top1 = twoInfo.getJSONObject("top1"); + if (ObjectUtil.isNotEmpty(top1)) { + String device_name = top1.getString("device_name"); + Integer err_num = top1.getInteger("err_num"); + if (StrUtil.isNotEmpty(device_name) && ObjectUtil.isNotEmpty(err_num)) { + DeviceUtils.deviceNumErrors.put(device_name, err_num); + } + } + JSONObject top2 = twoInfo.getJSONObject("top2"); + if (ObjectUtil.isNotEmpty(top2)) { + String device_name = top2.getString("device_name"); + Integer err_num = top2.getInteger("err_num"); + if (StrUtil.isNotEmpty(device_name) && ObjectUtil.isNotEmpty(err_num)) { + DeviceUtils.deviceNumErrors.put(device_name, err_num); + } + } + JSONObject top3 = twoInfo.getJSONObject("top3"); + if (ObjectUtil.isNotEmpty(top3)) { + String device_name = top3.getString("device_name"); + Integer err_num = top3.getInteger("err_num"); + if (StrUtil.isNotEmpty(device_name) && ObjectUtil.isNotEmpty(err_num)) { + DeviceUtils.deviceNumErrors.put(device_name, err_num); + } + } + JSONObject top4 = twoInfo.getJSONObject("top4"); + if (ObjectUtil.isNotEmpty(top4)) { + String device_name = top4.getString("device_name"); + Integer err_num = top4.getInteger("err_num"); + if (StrUtil.isNotEmpty(device_name) && ObjectUtil.isNotEmpty(err_num)) { + DeviceUtils.deviceNumErrors.put(device_name, err_num); + } + } + JSONObject top5 = twoInfo.getJSONObject("top5"); + if (ObjectUtil.isNotEmpty(top5)) { + String device_name = top5.getString("device_name"); + Integer err_num = top5.getInteger("err_num"); + if (StrUtil.isNotEmpty(device_name) && ObjectUtil.isNotEmpty(err_num)) { + DeviceUtils.deviceNumErrors.put(device_name, err_num); + } + } + JSONObject top6 = twoInfo.getJSONObject("top6"); + if (ObjectUtil.isNotEmpty(top6)) { + String device_name = top6.getString("device_name"); + Integer err_num = top6.getInteger("err_num"); + if (StrUtil.isNotEmpty(device_name) && ObjectUtil.isNotEmpty(err_num)) { + DeviceUtils.deviceNumErrors.put(device_name, err_num); + } + } + JSONObject top7 = twoInfo.getJSONObject("top7"); + if (ObjectUtil.isNotEmpty(top7)) { + String device_name = top7.getString("device_name"); + Integer err_num = top7.getInteger("err_num"); + if (StrUtil.isNotEmpty(device_name) && ObjectUtil.isNotEmpty(err_num)) { + DeviceUtils.deviceNumErrors.put(device_name, err_num); + } + } + JSONObject top8 = twoInfo.getJSONObject("top8"); + if (ObjectUtil.isNotEmpty(top8)) { + String device_name = top8.getString("device_name"); + Integer err_num = top8.getInteger("err_num"); + if (StrUtil.isNotEmpty(device_name) && ObjectUtil.isNotEmpty(err_num)) { + DeviceUtils.deviceNumErrors.put(device_name, err_num); + } + } + JSONObject top9 = twoInfo.getJSONObject("top9"); + if (ObjectUtil.isNotEmpty(top9)) { + String device_name = top9.getString("device_name"); + Integer err_num = top9.getInteger("err_num"); + if (StrUtil.isNotEmpty(device_name) && ObjectUtil.isNotEmpty(err_num)) { + DeviceUtils.deviceNumErrors.put(device_name, err_num); + } + } + JSONObject top10 = twoInfo.getJSONObject("top10"); + if (ObjectUtil.isNotEmpty(top10)) { + String device_name = top10.getString("device_name"); + Integer err_num = top10.getInteger("err_num"); + if (StrUtil.isNotEmpty(device_name) && ObjectUtil.isNotEmpty(err_num)) { + DeviceUtils.deviceNumErrors.put(device_name, err_num); + } + } + } + JSONObject threeInfo = jsonObject.getJSONObject("threeInfo"); + if (ObjectUtil.isNotEmpty(threeInfo)) { + Integer xydevice1 = threeInfo.getInteger("xydevice1"); + if (ObjectUtil.isNotEmpty(xydevice1)) { + DeviceUtils.xydevice1 = xydevice1; + } + Integer xydevice2 = threeInfo.getInteger("xydevice2"); + if (ObjectUtil.isNotEmpty(xydevice2)) { + DeviceUtils.xydevice2 = xydevice2; + } + Integer xydevice3 = threeInfo.getInteger("xydevice3"); + if (ObjectUtil.isNotEmpty(xydevice3)) { + DeviceUtils.xydevice3 = xydevice3; + } + Integer xydevice4 = threeInfo.getInteger("xydevice4"); + if (ObjectUtil.isNotEmpty(xydevice4)) { + DeviceUtils.xydevice4 = xydevice4; + } + Integer stdevice1 = threeInfo.getInteger("stdevice1"); + if (ObjectUtil.isNotEmpty(stdevice1)) { + DeviceUtils.stdevice1 = stdevice1; + } + Integer stdevice2 = threeInfo.getInteger("stdevice2"); + if (ObjectUtil.isNotEmpty(stdevice2)) { + DeviceUtils.stdevice2 = stdevice2; + } + Integer stdevice3 = threeInfo.getInteger("stdevice3"); + if (ObjectUtil.isNotEmpty(stdevice3)) { + DeviceUtils.stdevice3 = stdevice3; + } + Integer stdevice4 = threeInfo.getInteger("stdevice4"); + if (ObjectUtil.isNotEmpty(stdevice4)) { + DeviceUtils.stdevice4 = stdevice4; + } + Integer tkdevice1 = threeInfo.getInteger("tkdevice1"); + if (ObjectUtil.isNotEmpty(tkdevice1)) { + DeviceUtils.tkdevice1 = tkdevice1; + } + Integer tkdevice2 = threeInfo.getInteger("tkdevice2"); + if (ObjectUtil.isNotEmpty(tkdevice2)) { + DeviceUtils.tkdevice2 = tkdevice2; + } + Integer tkdevice3 = threeInfo.getInteger("tkdevice3"); + if (ObjectUtil.isNotEmpty(tkdevice3)) { + DeviceUtils.tkdevice3 = tkdevice3; + } + Integer tkdevice4 = threeInfo.getInteger("tkdevice4"); + if (ObjectUtil.isNotEmpty(tkdevice4)) { + DeviceUtils.tkdevice4 = tkdevice4; + } + Integer twdevice1 = threeInfo.getInteger("twdevice1"); + if (ObjectUtil.isNotEmpty(twdevice1)) { + DeviceUtils.twdevice1 = twdevice1; + } + Integer twdevice2 = threeInfo.getInteger("twdevice2"); + if (ObjectUtil.isNotEmpty(twdevice2)) { + DeviceUtils.twdevice2 = twdevice2; + } + Integer twdevice3 = threeInfo.getInteger("twdevice3"); + if (ObjectUtil.isNotEmpty(twdevice3)) { + DeviceUtils.twdevice3 = twdevice3; + } + Integer twdevice4 = threeInfo.getInteger("twdevice4"); + if (ObjectUtil.isNotEmpty(twdevice4)) { + DeviceUtils.twdevice4 = twdevice4; + } + Integer kzdevice1 = threeInfo.getInteger("kzdevice1"); + if (ObjectUtil.isNotEmpty(kzdevice1)) { + DeviceUtils.kzdevice1 = kzdevice1; + } + Integer kzdevice2 = threeInfo.getInteger("kzdevice2"); + if (ObjectUtil.isNotEmpty(kzdevice2)) { + DeviceUtils.kzdevice2 = kzdevice2; + } + Integer kzdevice3 = threeInfo.getInteger("kzdevice3"); + if (ObjectUtil.isNotEmpty(kzdevice3)) { + DeviceUtils.kzdevice3 = kzdevice3; + } + Integer kzdevice4 = threeInfo.getInteger("kzdevice4"); + if (ObjectUtil.isNotEmpty(kzdevice4)) { + DeviceUtils.kzdevice4 = kzdevice4; + } + Integer bzdevice1 = threeInfo.getInteger("bzdevice1"); + if (ObjectUtil.isNotEmpty(bzdevice1)) { + DeviceUtils.bzdevice1 = bzdevice1; + } + Integer bzdevice2 = threeInfo.getInteger("bzdevice2"); + if (ObjectUtil.isNotEmpty(bzdevice2)) { + DeviceUtils.bzdevice2 = bzdevice2; + } + Integer bzdevice3 = threeInfo.getInteger("bzdevice3"); + if (ObjectUtil.isNotEmpty(bzdevice3)) { + DeviceUtils.bzdevice3 = bzdevice3; + } + Integer bzdevice4 = threeInfo.getInteger("bzdevice4"); + if (ObjectUtil.isNotEmpty(bzdevice4)) { + DeviceUtils.bzdevice4 = bzdevice4; + } + } + + } + + @Override + public void switch_on_off(JSONObject jsonObject) { + Integer type = jsonObject.getInteger("type"); + if (type == SwitchOnOff.type) { + throw new BadRequestException("已经开启此模式!"); + } else { + SwitchOnOff.type = type; + } + } + + @Override + public void excelImport(MultipartFile file, HttpServletRequest request) { + WordOrderUtils.orderDtoList = new ArrayList<>(); + if (file.isEmpty()) { + throw new BadRequestException("文件为空,请添加数据后重新导入"); + } + String now = DateUtil.now(); + // 1.获取上传文件输入流 + InputStream inputStream = null; + try { + inputStream = file.getInputStream(); + } catch (Exception e) { + e.printStackTrace(); + } + //物料表 + WQLObject wo_material = WQLObject.getWQLObject("md_me_materialbase"); + // 调用用 hutool 方法读取数据 调用第一个sheet白班数据 + ExcelReader excelReader = ExcelUtil.getReader(inputStream, 0); + // 从第1行开始获取数据 excelReader.read的结果是一个2纬的list,外层是行,内层是行对应的所有列 + List> read = excelReader.read(0, excelReader.getRowCount()); + String produce_date = ""; + // 循环获取的数据 + for (int i = 1; i < read.size(); i++) { + List list = read.get(i); + if (ObjectUtil.isEmpty(list)) { + continue; + } + OrderDto orderDto = new OrderDto(); + for (int j = 0; j < list.size(); j++) { + if (j == 0) { + String produceorder_code = String.valueOf(list.get(j)); + orderDto.setProduceorder_code(produceorder_code); + } + if (j == 1) { + String material_code = String.valueOf(list.get(j)); + orderDto.setMaterial_code(material_code); + JSONObject jsonObject = wo_material.query("material_code = '" + material_code + "'").uniqueResult(0); + orderDto.setMaterial_spec(jsonObject.getString("material_spec")); + } + if (j == 2) { + Integer plan_qty = 0; + if (ObjectUtil.isNotEmpty(list.get(j))) { + plan_qty = Integer.parseInt(String.valueOf(list.get(j))); + } + orderDto.setPlan_qty(plan_qty); + } + if (j == 3) { + Integer real_qty = 0; + if (ObjectUtil.isNotEmpty(list.get(j))) { + real_qty = Integer.parseInt(String.valueOf(list.get(j))); + } + orderDto.setReal_qty(real_qty); + } + if (j == 4) { + String data = String.valueOf(list.get(j)); + orderDto.setDate(data); + } + } + WordOrderUtils.orderDtoList.add(orderDto); + } + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/WorkOrderImportEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/WorkOrderImportEnum.java new file mode 100644 index 00000000..9cf0c26d --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/WorkOrderImportEnum.java @@ -0,0 +1,57 @@ +package org.nl.wms.mps.service; + +import cn.hutool.core.util.StrUtil; + +/** + * 工序类型枚举类 + * @author: geng by + * @createDate: 2022/12/8 + */ +public enum WorkOrderImportEnum { + JGXL(1, "01", "激光下料","1535143737330634752"), + XYXL(2, "02", "旋压下料","1535143882327724032"), + PGWXXL(3, "03", "盘管无屑下料","1535144117946945536"), + ZGWXXL(4, "04", "直管无屑下料","1535144223790206976"), + STLS(5, "05", "三通拉伸","1535144290030850048"), + TK(6, "06", "镗孔","1535144356586065920"), + TWYTJ(7, "07", "推弯一体机","1535144427977314304"), + CPQX(8, "08", "成品清洗","1535144552481034240"), + KZ(9, "09", "刻字","1535144682756116480"), + BZ(10, "10", "包装","1535144822984282112"), + MP(11, "11", "码盘","1535144873605337088"), + CC(12, "12", "仓储","1535144934791843840"); + + private int index; + private String code; + private String name; + private String id; + + public String getCode() { + return code; + } + + public String getName() { + return name; + } + + public String getId() { + return id; + } + + public static WorkOrderImportEnum getIdByName(String name){ + name = name.replace("",""); + for (WorkOrderImportEnum workOrderImportEnum : WorkOrderImportEnum.values()) { + if (StrUtil.equals(workOrderImportEnum.getName(), name)){ + return workOrderImportEnum; + } + } + return null; + } + + WorkOrderImportEnum(int index, String code, String name, String id) { + this.index = index; + this.id = id; + this.code = code; + this.name = name; + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/dto/ProduceshiftorderDto.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/dto/ProduceshiftorderDto.java index 6afed02f..3277d242 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/dto/ProduceshiftorderDto.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/dto/ProduceshiftorderDto.java @@ -107,4 +107,8 @@ public class ProduceshiftorderDto implements Serializable { private Long jockey_id; private Integer orderNum; + + private String is_error; + + private String error_info; } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceshiftorderServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceshiftorderServiceImpl.java index 1864947a..b6e86519 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceshiftorderServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/service/impl/ProduceshiftorderServiceImpl.java @@ -25,6 +25,7 @@ import org.nl.utils.SecurityUtils; import org.nl.wms.basedata.master.service.ClassstandardService; import org.nl.wms.ext.acs.service.WmsToAcsService; import org.nl.wms.mps.service.ProduceshiftorderService; +import org.nl.wms.mps.service.WorkOrderImportEnum; import org.nl.wms.mps.service.dto.ProduceshiftorderDto; import org.nl.wql.WQL; import org.nl.wql.core.bean.WQLObject; @@ -37,6 +38,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import java.io.InputStream; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; @@ -68,6 +70,7 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService { String shift_type_scode = MapUtil.getStr(whereJson, "shift_type_scode"); String parent_id = MapUtil.getStr(whereJson, "product_series"); String sale_id = MapUtil.getStr(whereJson, "sale_id"); + String is_error = MapUtil.getStr(whereJson, "is_error"); String product_series = ""; JSONObject map = new JSONObject(); map.put("flag", "1"); @@ -80,6 +83,7 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService { order_status = order_status.replace("[\"", "").replace("\"]", "").replace("\"", ""); } map.put("order_status", order_status); + map.put("is_error", is_error); //处理状态为未完成 if (StrUtil.isNotEmpty(order_status) && order_status.contains("-1")) { map.put("unFinish", "-1"); @@ -541,13 +545,19 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService { //人员表 //WQLObject wo_user = WQLObject.getWQLObject("sys_user"); - // 调用用 hutool 方法读取数据 默认调用第一个sheet - ExcelReader excelReader = ExcelUtil.getReader(inputStream); - // 从第二行开始获取数据 excelReader.read的结果是一个2纬的list,外层是行,内层是行对应的所有列 - List> read = excelReader.read(1, excelReader.getRowCount()); + // 调用用 hutool 方法读取数据 调用第一个sheet白班数据 + ExcelReader excelReader = ExcelUtil.getReader(inputStream, 0); + // 从第1行开始获取数据 excelReader.read的结果是一个2纬的list,外层是行,内层是行对应的所有列 + List> read = excelReader.read(0, excelReader.getRowCount()); + String produce_date = ""; // 循环获取的数据 + row: for (int i = 0; i < read.size(); i++) { - List list = read.get(i); + List list = read.get(i); + if (ObjectUtil.isEmpty(list)) { + continue; + } + //获取每列 JSONObject param = new JSONObject(); //按照列获取 param.put("produceorder_id", IdUtil.getSnowflake(1, 1).nextId()); @@ -555,98 +565,251 @@ public class ProduceshiftorderServiceImpl implements ProduceshiftorderService { param.put("producedeviceorder_code", CodeUtil.getNewCode("PDM_SHIFTORDER")); param.put("order_status", "00"); param.put("order_type_scode", "01"); - - //物料 - String material_code = list.get(12).toString(); - JSONObject json_material = wo_material.query("is_delete = '0' and material_code = '" + material_code + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(json_material)) { - throw new BadRequestException("第'" + (i + 2) + "'行,物料编码不存在"); - } - param.put("material_id", json_material.getString("material_id")); - - //工序 - String workprocedure_code = list.get(13).toString(); - JSONObject jsonWorkprocedure = wo_workprocedure.query("is_delete = '0' and workprocedure_code = '" + workprocedure_code + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonWorkprocedure)) { - throw new BadRequestException("第'" + (i + 2) + "'行,工序编码不存在"); - } - String workprocedure_id = jsonWorkprocedure.getString("workprocedure_id"); - param.put("workprocedure_id", workprocedure_id); - - //设备 - String device_code = list.get(14).toString(); - JSONObject json_device = wo_device.query("is_delete = '0' and device_code = '" + device_code + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(json_device)) { - throw new BadRequestException("第'" + (i + 2) + "'行,设备编码不存在"); - } - if (!workprocedure_id.equals(json_device.getString("workprocedure_id"))) { - throw new BadRequestException("第'" + (i + 2) + "'行,设备与所属工序不匹配"); - } - param.put("device_id", json_device.getString("device_id")); - - //单重 - param.put("material_weight", list.get(5).toString()); - param.put("plan_qty", list.get(7).toString()); - - //生产人员 - String username_code = list.get(15).toString(); - UserDto jsonUser = userService.findByName(username_code); - //JSONObject jsonUser = wo_user.query("is_delete = '0' and username = '" + username_code + "'").uniqueResult(0); - if (ObjectUtil.isEmpty(jsonUser)) { - throw new BadRequestException("第'" + (i + 2) + "'行,生产人员编码不存在"); - } - param.put("jockey_id", jsonUser.getId()); - - //生产日期 - String produce_date = list.get(16).toString(); - if (StrUtil.isEmpty(produce_date)) { - throw new BadRequestException("第'" + (i + 2) + "'行,生产日期不能为空"); - } param.put("produce_date", produce_date); + param.put("shift_type_scode", "01"); + String is_error = "0"; + String error_message = ""; + //循环每一行 + col: + for (int j = 0; j < list.size(); j++) { - //班次类型 - String shift_type_scode = list.get(17).toString(); - String type_scode = "01"; - if (shift_type_scode.equals("夜班")) { - type_scode = "02"; + String col = String.valueOf(list.get(j)); + //如果是第一行 为生产日期 + if (i == 0 && j == 0) { + produce_date = col.split(":")[col.split(":").length - 1]; + continue row; + } + //如果第一列包含规格二字 则为表头 结束内循环列 + if (j == 0 && col.contains("规格名称")) { + continue row; + } + if (j == 0) { + //物料 + if (StrUtil.isEmpty(col)) { + is_error = "1"; + error_message = error_message + "物料规格为空,"; + } + JSONObject json_material = wo_material.query("is_delete = '0' and material_spec = '" + col + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(json_material)) { + is_error = "1"; + error_message = error_message + "物料规格对应物料信息不存在,"; + }else { + param.put("material_id", json_material.getString("material_id")); + } + } + if (j == 2) { + if (StrUtil.isEmpty(col)) { + is_error = "1"; + error_message = error_message + "工序名称为空,"; + } + WorkOrderImportEnum idByName = WorkOrderImportEnum.getIdByName(col); + if (ObjectUtil.isEmpty(idByName)) { + is_error = "1"; + error_message = error_message + "工序名称是否正确,"; + }else { + param.put("workprocedure_id", idByName.getId()); + } + } + if (j == 4) { + //单重 + param.put("material_weight", col); + } + if (j == 6) { + if (StrUtil.isEmpty(col)) { + is_error = "1"; + error_message = error_message + "工单计划数量为空,"; + }else { + param.put("plan_qty", col); + } + } + if (j == 10) { + String workprocedure_id = param.getString("workprocedure_id"); + JSONObject json_device = wo_device.query("is_delete = '0' and device_code = '" + col + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(json_device)) { + is_error = "1"; + error_message = error_message + "设备编码不存在,"; + } + if (!workprocedure_id.equals(json_device.getString("workprocedure_id"))) { + is_error = "1"; + error_message = error_message + "设备与所属工序不匹配,"; + }else { + param.put("device_id", json_device.getString("device_id")); + } + } + if (j == 11) { + UserDto jsonUser = userService.findByName(col); + if (ObjectUtil.isEmpty(jsonUser)) { + is_error = "1"; + error_message = error_message + "生产人员编码不存在!"; + }else { + param.put("jockey_id", jsonUser.getId()); + } + } + if (j == 12) { + //允许修改报工数量 + String is_canupdate = "0"; + if (col.equals("是")) { + is_canupdate = "1"; + } + param.put("is_canupdate_update", is_canupdate); + } + if (j == 13) { + //是否agv搬运 + String needmoce = "0"; + if (col.equals("是")) { + needmoce = "1"; + } + param.put("is_needmove", needmoce); + } } - param.put("shift_type_scode", type_scode); - - //允许修改报工数量 - String is_canupdate_update = list.get(18).toString(); - String is_canupdate = "0"; - if (is_canupdate_update.equals("是")) { - is_canupdate = "1"; - } - param.put("is_canupdate_update", is_canupdate); - - //是否agv搬运 - String is_needmove = list.get(19).toString(); - String needmoce = "0"; - if (is_needmove.equals("是")) { - needmoce = "1"; - } - param.put("is_needmove", needmoce); - - String planproducestart_date = ""; - String planproduceend_date = ""; - if (type_scode.equals("01")) { - planproducestart_date = produce_date + " 07:30:00"; - planproduceend_date = produce_date + " 18:30:00"; - } else { - planproducestart_date = produce_date + " 18:30:00"; - DateTime dateTime = DateUtil.parse(produce_date, "yyyy-MM-dd"); - DateTime time = DateUtil.offset(dateTime, DateField.DAY_OF_MONTH, 1); - String format = DateUtil.format(time, "yyyy-MM-dd"); - planproduceend_date = format + " 07:30:00"; - } - param.put("planproducestart_date", planproducestart_date); - param.put("planproduceend_date", planproduceend_date); + param.put("is_error", is_error); + param.put("error_info", error_message); + param.put("planproducestart_date", produce_date + "07:30:00"); + param.put("planproduceend_date", produce_date + "18:30:00"); param.put("create_id", currentUserId); param.put("create_name", nickName); param.put("create_time", now); wo_order.insert(param); } + + // 1.获取上传文件输入流 + inputStream = null; + try { + inputStream = file.getInputStream(); + } catch (Exception e) { + e.printStackTrace(); + } + //读取夜班工单数据 + excelReader = ExcelUtil.getReader(inputStream, 1); + read = excelReader.read(0, excelReader.getRowCount()); + String is_error = "0"; + String error_message = ""; + // 循环获取的数据 + row: + for (int i = 0; i < read.size(); i++) { + List list = read.get(i); + //获取每列 + JSONObject param = new JSONObject(); + //按照列获取 + param.put("produceorder_id", IdUtil.getSnowflake(1, 1).nextId()); + param.put("produceorder_code", CodeUtil.getNewCode("PDM_SHIFTORDER")); + param.put("producedeviceorder_code", CodeUtil.getNewCode("PDM_SHIFTORDER")); + param.put("order_status", "00"); + param.put("order_type_scode", "01"); + param.put("produce_date", produce_date); + param.put("shift_type_scode", "02"); + //循环每一行 + col: + for (int j = 0; j < list.size(); j++) { + + String col = String.valueOf(list.get(j)); + //如果是第一行 为生产日期 + if (i == 0 && j == 0) { + produce_date = col.split(":")[col.split(":").length - 1]; + continue row; + } + //如果第一列包含规格二字 则为表头 结束内循环列 + if (j == 0 && col.contains("规格名称")) { + continue row; + } + if (j == 0) { + //物料 + if (StrUtil.isEmpty(col)) { + is_error = "1"; + error_message = error_message + "物料规格为空,"; + } + JSONObject json_material = wo_material.query("is_delete = '0' and material_spec = '" + col + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(json_material)) { + is_error = "1"; + error_message = error_message + "物料规格对应物料信息不存在,"; + }else { + param.put("material_id", json_material.getString("material_id")); + } + } + if (j == 2) { + if (StrUtil.isEmpty(col)) { + is_error = "1"; + error_message = error_message + "工序名称为空,"; + } + WorkOrderImportEnum idByName = WorkOrderImportEnum.getIdByName(col); + if (ObjectUtil.isEmpty(idByName)) { + is_error = "1"; + error_message = error_message + "工序名称是否正确,"; + }else { + param.put("workprocedure_id", idByName.getId()); + } + } + if (j == 4) { + //单重 + param.put("material_weight", col); + } + if (j == 6) { + if (StrUtil.isEmpty(col)) { + is_error = "1"; + error_message = error_message + "工单计划数量为空,"; + }else { + param.put("plan_qty", col); + } + } +// if (j == 10) { +// //物料 +// JSONObject json_material = wo_material.query("is_delete = '0' and material_code = '" + col + "'").uniqueResult(0); +// if (ObjectUtil.isEmpty(json_material)) { +// throw new BadRequestException("第'" + (i + 2) + "'行,物料编码不存在"); +// } +// param.put("material_id", json_material.getString("material_id")); +// } + if (j == 10) { + String workprocedure_id = param.getString("workprocedure_id"); + JSONObject json_device = wo_device.query("is_delete = '0' and device_code = '" + col + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(json_device)) { + is_error = "1"; + error_message = error_message + "设备编码不存在,"; + } + if (!workprocedure_id.equals(json_device.getString("workprocedure_id"))) { + is_error = "1"; + error_message = error_message + "设备与所属工序不匹配,"; + }else { + param.put("device_id", json_device.getString("device_id")); + } + } + if (j == 11) { + UserDto jsonUser = userService.findByName(col); + if (ObjectUtil.isEmpty(jsonUser)) { + is_error = "1"; + error_message = error_message + "生产人员编码不存在!"; + }else { + param.put("jockey_id", jsonUser.getId()); + } + } + if (j == 12) { + //允许修改报工数量 + String is_canupdate = "0"; + if (col.equals("是")) { + is_canupdate = "1"; + } + param.put("is_canupdate_update", is_canupdate); + } + if (j == 13) { + //是否agv搬运 + String needmoce = "0"; + if (col.equals("是")) { + needmoce = "1"; + } + param.put("is_needmove", needmoce); + } + } + param.put("is_error", is_error); + param.put("error_info", error_message); + param.put("planproducestart_date", produce_date + "18:30:00"); + DateTime dateTime = DateUtil.offsetDay(DateUtil.parse(produce_date), 1); + param.put("planproduceend_date", DateUtil.format(dateTime,"yyyy-MM-dd") + " 07:30:00"); + param.put("create_id", currentUserId); + param.put("create_name", nickName); + param.put("create_time", now); + wo_order.insert(param); + } + } @Override diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/wql/MPS_PRODUCEDURE001.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/wql/MPS_PRODUCEDURE001.wql index 955d8e9e..4553e6b2 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/wql/MPS_PRODUCEDURE001.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/mps/wql/MPS_PRODUCEDURE001.wql @@ -25,6 +25,7 @@ 输入.end_time TYPEAS s_string 输入.produceorder_code TYPEAS s_string 输入.material TYPEAS s_string + 输入.is_error TYPEAS s_string 输入.product_series TYPEAS f_string 输入.workprocedure_ids TYPEAS f_string 输入.unFinish TYPEAS s_string @@ -89,6 +90,9 @@ OPTION 输入.shift_type_scode <> "" ShiftOrder.shift_type_scode = 输入.shift_type_scode ENDOPTION + OPTION 输入.is_error <> "" + ShiftOrder.is_error = 输入.is_error + ENDOPTION OPTION 输入.product_series <> "" material.product_series in 输入.product_series ENDOPTION diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls index ce79e1debdc0663d2b5c5b25357bb5c1929b8e5e..3cff23dcd6bd492e0cadda17802ecc637fe91456 100644 GIT binary patch literal 367616 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 diff --git a/mes/hd/nladmin-system/src/main/resources/config/application.yml b/mes/hd/nladmin-system/src/main/resources/config/application.yml index dcd1458c..13ba7d5e 100644 --- a/mes/hd/nladmin-system/src/main/resources/config/application.yml +++ b/mes/hd/nladmin-system/src/main/resources/config/application.yml @@ -2,7 +2,7 @@ spring: freemarker: check-template-location: false profiles: - active: dev + active: prod jackson: time-zone: GMT+8 data: diff --git a/mes/qd/src/api/wms/bigScreen/bigScreen.js b/mes/qd/src/api/wms/bigScreen/bigScreen.js index 5c69791c..29f4e995 100644 --- a/mes/qd/src/api/wms/bigScreen/bigScreen.js +++ b/mes/qd/src/api/wms/bigScreen/bigScreen.js @@ -24,4 +24,36 @@ export function edit(data) { }) } -export default { add, edit, del } +export function switch_on_off(data) { + return request({ + url: 'api/bigTest/switchOnOff', + method: 'post', + data + }) +} + +export function edit_order(data) { + return request({ + url: 'api/bigTest/save', + method: 'post', + data + }) +} + +export function edit_device(data) { + return request({ + url: 'api/bigTest/saveDevice', + method: 'post', + data + }) +} + +export function excelImport(data) { + return request({ + url: 'api/bigTest/excelImport', + method: 'post', + data + }) +} + +export default { add, edit, del, switch_on_off, edit_order, excelImport, edit_device } diff --git a/mes/qd/src/views/wms/bigScreen/todayAndPlanNum/DeviceInfoDialog.vue b/mes/qd/src/views/wms/bigScreen/todayAndPlanNum/DeviceInfoDialog.vue new file mode 100644 index 00000000..a3614eb0 --- /dev/null +++ b/mes/qd/src/views/wms/bigScreen/todayAndPlanNum/DeviceInfoDialog.vue @@ -0,0 +1,299 @@ + + + + + diff --git a/mes/qd/src/views/wms/bigScreen/todayAndPlanNum/OrderInfoDialog.vue b/mes/qd/src/views/wms/bigScreen/todayAndPlanNum/OrderInfoDialog.vue new file mode 100644 index 00000000..566a79da --- /dev/null +++ b/mes/qd/src/views/wms/bigScreen/todayAndPlanNum/OrderInfoDialog.vue @@ -0,0 +1,603 @@ + + + + + diff --git a/mes/qd/src/views/wms/bigScreen/todayAndPlanNum/UploadDialog1.vue b/mes/qd/src/views/wms/bigScreen/todayAndPlanNum/UploadDialog1.vue new file mode 100644 index 00000000..5b9b1022 --- /dev/null +++ b/mes/qd/src/views/wms/bigScreen/todayAndPlanNum/UploadDialog1.vue @@ -0,0 +1,116 @@ + + + + diff --git a/mes/qd/src/views/wms/bigScreen/todayAndPlanNum/index.vue b/mes/qd/src/views/wms/bigScreen/todayAndPlanNum/index.vue index e8542631..6ff69fab 100644 --- a/mes/qd/src/views/wms/bigScreen/todayAndPlanNum/index.vue +++ b/mes/qd/src/views/wms/bigScreen/todayAndPlanNum/index.vue @@ -3,99 +3,112 @@
- - - - - - - - - - - - - - - - - - - - - - - - - - + + + 切换虚拟 + + + 切换真实 + + + 编辑工单页面 + + + 编辑设备页面 + + + 导入虚拟工单 +
+ + +