From e41c6140f658d86bffa4814a977950046731c029 Mon Sep 17 00:00:00 2001 From: 18188916393 <2562295436@qq.com> Date: Wed, 27 Jul 2022 16:51:45 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=A4=A7=E5=B1=8F=20=EF=BC=8C=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E5=8F=8D=E9=A6=88=E8=BD=A6=E5=8F=B7=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0agv=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/nl/wms/basedata/st/wql/QLK01.wql | 26 ++ .../src/main/java/org/nl/wms/bigscreen/1.text | 0 .../main/java/org/nl/wms/bigscreen/ds_agv.xls | Bin 0 -> 146432 bytes .../product/rest/ProductController.java | 83 +++++ .../product/service/ProductService.java | 67 ++++ .../service/impl/ProductServiceImpl.java | 216 ++++++++++++ .../product/wql/BIGSCREENPRODUCT.wql | 329 ++++++++++++++++++ .../service/impl/DeviceScreenServiceImpl.java | 6 + .../src/main/java/org/nl/wms/pdm/wql/pdm.xls | Bin 255488 -> 255488 bytes .../nl/wms/sch/tasks/CallMaterialTask.java | 1 + .../nl/wms/sch/tasks/PointToPointTask.java | 1 + .../nl/wms/sch/tasks/SendMaterialTask.java | 1 + .../src/test/java/org/nl/Test3.java | 72 ++++ 13 files changed, 802 insertions(+) delete mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/1.text create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/ds_agv.xls create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/product/rest/ProductController.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/product/service/ProductService.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/product/service/impl/ProductServiceImpl.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/product/wql/BIGSCREENPRODUCT.wql diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QLK01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QLK01.wql index b6248d55..2ba88dab 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QLK01.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QLK01.wql @@ -15,6 +15,7 @@ ################################################# 输入.flag TYPEAS s_string 输入.material_code TYPEAS s_string + 输入.processroute_uuid TYPEAS s_string [临时表] --这边列出来的临时表就会在运行期动态创建 @@ -197,4 +198,29 @@ IF 输入.flag = "14" AND sys.sysdic_type = 'IF_WCS_DEVICESERIES' ENDSELECT ENDQUERY +ENDIF + + + +IF 输入.flag = "15" + QUERY + SELECT + * + FROM + PDM_BI_ProduceProcessRoute route + ENDSELECT + ENDQUERY +ENDIF + +IF 输入.flag = "16" + QUERY + SELECT + * + FROM + PDM_BI_ProduceProcessRoute route + LEFT JOIN PDM_BI_ProduceProcessRouteDtl dtl ON route.processroute_uuid = dtl.processroute_uuid + route.processroute_uuid = 输入.processroute_uuid + order by workprocedure_number + ENDSELECT + ENDQUERY ENDIF \ No newline at end of file diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/1.text b/mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/1.text deleted file mode 100644 index e69de29b..00000000 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/ds_agv.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/ds_agv.xls new file mode 100644 index 0000000000000000000000000000000000000000..155a4176e131815d14b6d47f41eb5b1d61607887 GIT binary patch literal 146432 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 cSyfqS<7#X^I4Bo(X4%+f>JgMI|KI!lFLw planReached(@RequestBody Map param) { + return new ResponseEntity<>(pdaBindingService.planReached(param), HttpStatus.OK); + } + @PostMapping("/productSchedule") + @Log("今日排产生产进度跟踪") + @ApiOperation("今日排产生产进度跟踪") + public ResponseEntity productSchedule(@RequestBody Map param) { + return new ResponseEntity<>(pdaBindingService.productSchedule(param), HttpStatus.OK); + } + @PostMapping("/output") + @Log("今日产量") + @ApiOperation("今日产量") + public ResponseEntity output(@RequestBody Map param) { + return new ResponseEntity<>(pdaBindingService.output(param), HttpStatus.OK); + } + + @PostMapping("/worksectionHarvest") + @Log("近一周工段产量") + @ApiOperation("近一周工段产量") + public ResponseEntity worksectionHarvest(@RequestBody Map param) { + return new ResponseEntity<>(pdaBindingService.worksectionHarvest(param), HttpStatus.OK); + } + @PostMapping("/topHarvest") + @Log("今日Top10产量") + @ApiOperation("今日Top10产量") + public ResponseEntity topHarvest(@RequestBody Map param) { + return new ResponseEntity<>(pdaBindingService.topHarvest(param), HttpStatus.OK); + } + @PostMapping("/monthHarvest") + @Log("30天产量走势") + @ApiOperation("30天产量走势") + public ResponseEntity monthHarvest(@RequestBody Map param) { + return new ResponseEntity<>(pdaBindingService.monthHarvest(param), HttpStatus.OK); + } + @PostMapping("/unfinishOrder") + @Log("今日未完成订单") + @ApiOperation("今日未完成订单") + public ResponseEntity unfinishOrder(@RequestBody Map param) { + return new ResponseEntity<>(pdaBindingService.unfinishOrder(param), HttpStatus.OK); + } + @PostMapping("/monthOrder") + @Log("30天生产订单分布") + @ApiOperation("30天生产订单分布") + public ResponseEntity monthOrder(@RequestBody Map param) { + return new ResponseEntity<>(pdaBindingService.monthOrder(param), HttpStatus.OK); + } + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/product/service/ProductService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/product/service/ProductService.java new file mode 100644 index 00000000..3bbfbc6e --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/product/service/ProductService.java @@ -0,0 +1,67 @@ +package org.nl.wms.bigscreen.product.service; + +import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.Map; +@Service +public interface ProductService { + /** + * 计划达成 + * @param param 条件 + * @return Map + * + */ + Map planReached(@RequestBody Map param); + /** + * 今日排产生产进度跟踪 + * @param param 条件 + * @return Map + * + */ + Map productSchedule(@RequestBody Map param); + /** + * 今日产量 + * @param param 条件 + * @return Map + * + */ + Map output(@RequestBody Map param); + /** + * 近一周工段产量 + * @param param 条件 + * @return Map + * + */ + Map worksectionHarvest(@RequestBody Map param); + /** + * 今日Top10产量 + * @param param 条件 + * @return Map + * + */ + Map topHarvest(@RequestBody Map param); + /** + * 30天产量走势 + * @param param 条件 + * @return Map + * + */ + Map monthHarvest(@RequestBody Map param); + /** + * 今日未完成订单 + * @param param 条件 + * @return Map + * + */ + Map unfinishOrder(@RequestBody Map param); + /** + * 30天生产订单分布 + * @param param 条件 + * @return Map + * + */ + Map monthOrder(@RequestBody Map param); + + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/product/service/impl/ProductServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/product/service/impl/ProductServiceImpl.java new file mode 100644 index 00000000..f2219b51 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/product/service/impl/ProductServiceImpl.java @@ -0,0 +1,216 @@ +package org.nl.wms.bigscreen.product.service.impl; + +import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.wms.bigscreen.product.service.ProductService; +import org.nl.wql.WQL; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.Map; + +@Service +@RequiredArgsConstructor +@Slf4j +public class ProductServiceImpl implements ProductService { + private String now = "2022-07-26 23:59:59"; + private String today = "2022-07-26"; + //一个月的开始时间 + DateTime beginMonthDateTime = DateUtil.offsetDay(DateUtil.parse(now), 30); + //一天的开始时间 + DateTime beginTimeOfDay = DateUtil.beginOfDay(DateUtil.parse(now)); + //一天的结束时间 + DateTime endTimeOfDay = DateUtil.endOfDay(DateUtil.parseDate(now)); + + @Override + public Map planReached(Map param) { + //计算当天的计划达成 + //01-弯头工段、02-综合工段、03-成品工段 + Map map = new HashMap(); + map.put("flag", "1"); + map.put("begin_time", beginTimeOfDay); + map.put("end_time", endTimeOfDay); + JSONArray dayResult = WQL.getWO("BIGSCREENPRODUCT").addParamMap(map).process().getResultJSONArray(0); + //计算一个月的计划达成 + map.put("begin_time", beginMonthDateTime); + JSONArray monthResult = WQL.getWO("BIGSCREENPRODUCT").addParamMap(map).process().getResultJSONArray(0); + 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) { + //今日排产生产进度跟踪 + Map map = new HashMap(); + map.put("flag", "2"); + map.put("begin_time", beginTimeOfDay); + map.put("end_time", endTimeOfDay); + JSONArray result = WQL.getWO("BIGSCREENPRODUCT").addParamMap(map).process().getResultJSONArray(0); + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "操作成功!"); + returnjo.put("result", result); + return returnjo; + } + + @Override + public Map output(Map param) { + JSONObject result = new JSONObject(); + Map map = new HashMap(); + // map.put("flag", "3"); + map.put("flag", "7"); + map.put("begin_time", beginTimeOfDay); + map.put("end_time", endTimeOfDay); + //统计产量方式一: 1 计算工单物料 2 计算每个物料清洗前一个工序 3拿着工序+物料 关联工单表 统计总数 + //1激光下料——推弯——清洗 + //2旋压-清洗 + //3盘管无屑下料-三通拉伸-镗孔-清洗 + //4直管无屑下料-镗孔-清洗 + //统计产量方式二: 只需要统计 推弯,旋压。镗孔 3个工序工单的数量 ('07','06','02') + JSONObject joo = WQL.getWO("BIGSCREENPRODUCT").addParamMap(map).process().uniqueResult(0); + result.put("real_qty", joo.getString("real_qty")); + result.put("plan_qty", joo.getString("plan_qty")); + result.put("finish_rate", joo.getString("finish_rate")); + //统计工单个数 + map.put("flag", "4"); + int sum_qty = WQL.getWO("BIGSCREENPRODUCT").addParamMap(map).process().uniqueResult(0).getIntValue("count"); + //统计延时工单 + map.put("now_time", now); + map.put("flag", "5"); + + int delayed_qty = WQL.getWO("BIGSCREENPRODUCT").addParamMap(map).process().uniqueResult(0).getIntValue("count"); + result.put("sum_qty", sum_qty); + result.put("delayed_qty", delayed_qty); + result.put("normal_qty", sum_qty - delayed_qty); + + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "操作成功!"); + returnjo.put("result", result); + return returnjo; + } + + + @Override + public Map worksectionHarvest(Map param) { + //近一周工段产量 + //获取一周的日期 + JSONArray dataArr = new JSONArray(); + JSONArray results = new JSONArray(); + for (int i = 1; i < 9; i++) { + DateTime dateTime = DateUtil.offsetDay(DateUtil.parse(now), -i); + dataArr.add(dateTime.toString().substring(0, 10)); + } + for (int i = 0; i < dataArr.size(); i++) { + JSONObject jo = new JSONObject(); + JSONObject datejo = dataArr.getJSONObject(i); + String date = datejo.get(i).toString(); + jo.put("date", date); + Map map = new HashMap(); + map.put("flag", "8"); + map.put("produce_date", date); + JSONArray arr = WQL.getWO("BIGSCREENPRODUCT").addParamMap(map).process().getResultJSONArray(0); + jo.put("data", arr); + results.add(jo); + } + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "操作成功!"); + returnjo.put("result", results); + return returnjo; + } + + @Override + public Map topHarvest(Map param) { + //今日Top10产量 + Map map = new HashMap(); + map.put("flag", "10"); + map.put("produce_date", today); + JSONArray results = WQL.getWO("BIGSCREENPRODUCT").addParamMap(map).process().getResultJSONArray(0); + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "操作成功!"); + returnjo.put("result", results); + return returnjo; + } + + @Override + public Map monthHarvest(Map param) { + //30天产量走势 + JSONArray dataArr = new JSONArray(); + JSONArray results = new JSONArray(); + for (int i = 1; i < 31; i++) { + DateTime dateTime = DateUtil.offsetDay(DateUtil.parse(now), -i); + dataArr.add(dateTime.toString().substring(0, 10)); + } + for (int i = 0; i < dataArr.size(); i++) { + JSONObject jo = new JSONObject(); + JSONObject datejo = dataArr.getJSONObject(i); + String date = datejo.get(i).toString(); + jo.put("date", date); + Map map = new HashMap(); + map.put("flag", "9"); + map.put("produce_date", date); + int real_qty = WQL.getWO("BIGSCREENPRODUCT").addParamMap(map).process().uniqueResult(0).getIntValue("real_qty"); + jo.put("real_qty", real_qty); + results.add(jo); + } + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "操作成功!"); + returnjo.put("result", results); + return returnjo; + } + + @Override + public Map unfinishOrder(Map param) { + Map map = new HashMap(); + map.put("flag", "11"); + map.put("produce_date", today); + JSONArray results = WQL.getWO("BIGSCREENPRODUCT").addParamMap(map).process().getResultJSONArray(0); + JSONObject returnjo = new JSONObject(); + returnjo.put("code", "1"); + returnjo.put("desc", "操作成功!"); + returnjo.put("result", results); + return returnjo; + } + + @Override + public Map monthOrder(Map param) { + //计算前9种物料产能 + Map map = new HashMap(); + map.put("flag", "12"); + map.put("produce_date", today); + JSONArray results = WQL.getWO("BIGSCREENPRODUCT").addParamMap(map).process().getResultJSONArray(0); + //计算所有的产能 + map.put("flag", "13"); + int sum_count = WQL.getWO("BIGSCREENPRODUCT").addParamMap(map).process().uniqueResult(0).getIntValue("real_qty"); + //前几种物料的总和 + int count_num_flag = 0; + //如果有9种物料则需要计算其他 + if (results.size() == 9) { + for (int i = 0; i < results.size(); i++) { + count_num_flag = count_num_flag + results.getJSONObject(i).getIntValue("real_qty"); + } + } + if (count_num_flag < sum_count) { + JSONObject joo = new JSONObject(); + joo.put("material_name", "其他"); + joo.put("real_qty", sum_count - count_num_flag); + results.add(joo); + } + 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/bigscreen/product/wql/BIGSCREENPRODUCT.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/product/wql/BIGSCREENPRODUCT.wql new file mode 100644 index 00000000..8f9ef9da --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/product/wql/BIGSCREENPRODUCT.wql @@ -0,0 +1,329 @@ +[交易说明] + 交易名: bom查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.workprocedure TYPEAS s_string + 输入.begin_time TYPEAS s_string + 输入.end_time TYPEAS s_string + 输入.now_time TYPEAS s_string + 输入.produce_date TYPEAS s_string + + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + QUERY + SELECT + workprocedure.worksection_type_scode, + sum( shiftorder.real_qty ) AS real_qty, + sum( shiftorder.plan_qty ) AS plan_qty , + convert(sum( shiftorder.real_qty )/sum( shiftorder.plan_qty ),DECIMAL(10,2))*100 as finish_rate + FROM + mps_bd_produceshiftorder shiftorder + LEFT JOIN pdm_bi_workprocedure workprocedure ON shiftorder.workprocedure_id = workprocedure.workprocedure_id + LEFT JOIN sys_dict_detail sys ON sys.VALUE= workprocedure.worksection_type_scode AND sys.dict_id = '87' + where + 1=1 + OPTION 输入.worksection_type_scode <> "" + workprocedure.worksection_type_scode = 输入.worksection_type_scode + ENDOPTION + OPTION 输入.begin_time <> "" + shiftorder.planproduceend_date >= 输入.begin_time + ENDOPTION + OPTION 输入.end_time <> "" + shiftorder.planproduceend_date <= 输入.end_time + ENDOPTION + GROUP BY + worksection_type_scode + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + shiftorder.produceorder_code, + shiftorder.plan_qty, + shiftorder.real_qty, + (shiftorder.plan_qty - shiftorder.real_qty) AS gap_qty, + CONVERT ( ( shiftorder.real_qty / shiftorder.plan_qty ), DECIMAL ( 10, 2 ) ) * 100 AS finish_rate + FROM + mps_bd_produceshiftorder shiftorder + where + 1=1 + OPTION 输入.begin_time <> "" + shiftorder.planproduceend_date >= 输入.begin_time + ENDOPTION + OPTION 输入.end_time <> "" + shiftorder.planproduceend_date <= 输入.end_time + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF + + + +IF 输入.flag = "3" + QUERY + SELECT + sum( shiftorder.real_qty ) AS real_qty, + sum( shiftorder.plan_qty ) AS plan_qty, + CONVERT ( sum( shiftorder.real_qty ) / sum( shiftorder.plan_qty ), DECIMAL ( 10, 2 ) ) * 100 AS finish_rate + FROM + mps_bd_produceshiftorder shiftorder + RIGHT JOIN ( + SELECT + route.material_id, + dtl.workprocedure_id + FROM + PDM_BI_ProductProcessRoute route + LEFT JOIN PDM_BI_ProductProcessRouteDtl dtl ON route.productprocess_id = dtl.productprocess_id + WHERE + route.material_id IN ( SELECT DISTINCT shiftorder.material_id FROM mps_bd_produceshiftorder shiftorder ) + AND dtl.nextworkprocedure_id = '1535144552481034240' + ) a ON a.material_id = shiftorder.material_id + AND a.workprocedure_id = shiftorder.workprocedure_id + where + 1=1 + OPTION 输入.begin_time <> "" + shiftorder.planproduceend_date >= 输入.begin_time + ENDOPTION + OPTION 输入.end_time <> "" + shiftorder.planproduceend_date <= 输入.end_time + ENDOPTION + ENDSELECT + ENDQUERY +ENDIF + + IF 输入.flag = "4" + QUERY + SELECT + count(*) as count + FROM + mps_bd_produceshiftorder shiftorder + where + 1=1 + OPTION 输入.begin_time <> "" + shiftorder.planproduceend_date >= 输入.begin_time + ENDOPTION + OPTION 输入.end_time <> "" + shiftorder.planproduceend_date <= 输入.end_time + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "5" + QUERY + SELECT + count(*) as count + FROM + mps_bd_produceshiftorder shiftorder + where + shiftorder.realproduceend_date > shiftorder.planproduceend_date + OPTION 输入.begin_time <> "" + shiftorder.planproduceend_date >= 输入.begin_time + ENDOPTION + OPTION 输入.end_time <> "" + shiftorder.planproduceend_date <= 输入.end_time + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF + + + IF 输入.flag = "7" + QUERY + SELECT + sum( real_qty ) AS real_qty, + sum( plan_qty ) AS plan_qty, + CONVERT ( sum( shiftorder.real_qty ) / sum( shiftorder.plan_qty ), DECIMAL ( 10, 2 ) ) * 100 AS finish_rate + FROM + mps_bd_produceshiftorder shiftorder + LEFT JOIN pdm_bi_workprocedure workprocedure ON workprocedure.workprocedure_id = shiftorder.workprocedure_id + WHERE + workprocedure.workprocedure_code IN ( '07', '06', '02' ) + OPTION 输入.begin_time <> "" + shiftorder.planproduceend_date >= 输入.begin_time + ENDOPTION + OPTION 输入.end_time <> "" + shiftorder.planproduceend_date <= 输入.end_time + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF + + +IF 输入.flag = "8" + QUERY + SELECT + workprocedure.worksection_type_scode, + sum( real_qty ) AS real_qty, + sum( plan_qty ) AS plan_qty, + CONVERT ( sum( shiftorder.real_qty ) / sum( shiftorder.plan_qty ), DECIMAL ( 10, 2 ) ) * 100 AS finish_rate + FROM + mps_bd_produceshiftorder shiftorder + LEFT JOIN pdm_bi_workprocedure workprocedure ON shiftorder.workprocedure_id = workprocedure.workprocedure_id + LEFT JOIN sys_dict_detail sys ON sys.VALUE= workprocedure.worksection_type_scode AND sys.dict_id = '87' + WHERE + workprocedure.workprocedure_code IN ( '07', '06', '02' ) + OPTION 输入.produce_date <> "" + shiftorder.produce_date >= 输入.produce_date + ENDOPTION + GROUP BY worksection_type_scode + ENDSELECT + ENDQUERY +ENDIF + +IF 输入.flag = "9" + QUERY + SELECT + sum( real_qty ) AS real_qty + FROM + mps_bd_produceshiftorder shiftorder + LEFT JOIN pdm_bi_workprocedure workprocedure ON shiftorder.workprocedure_id = workprocedure.workprocedure_id + LEFT JOIN sys_dict_detail sys ON sys.VALUE= workprocedure.worksection_type_scode AND sys.dict_id = '87' + WHERE + workprocedure.workprocedure_code IN ( '07', '06', '02' ) + OPTION 输入.produce_date <> "" + shiftorder.produce_date >= 输入.produce_date + ENDOPTION + GROUP BY worksection_type_scode + ENDSELECT + ENDQUERY +ENDIF + +IF 输入.flag = "10" + QUERY + SELECT + shiftorder.material_id, + material.material_code, + material.material_name, + sum( real_qty ) AS real_qty + FROM + mps_bd_produceshiftorder shiftorder + LEFT JOIN pdm_bi_workprocedure workprocedure ON shiftorder.workprocedure_id = workprocedure.workprocedure_id + LEFT JOIN sys_dict_detail sys ON sys.VALUE= workprocedure.worksection_type_scode AND sys.dict_id = '87' + left join md_me_materialbase material on material.material_id =shiftorder.material_id + WHERE + workprocedure.workprocedure_code IN ( '07', '06', '02' ) + OPTION 输入.produce_date <> "" + shiftorder.produce_date >= 输入.produce_date + ENDOPTION + GROUP BY + shiftorder.material_id, + material.material_code, + material.material_name + ORDER BY real_qty + LIMIT 0,10 + ENDSELECT + ENDQUERY +ENDIF + + +IF 输入.flag = "11" + QUERY + SELECT + shiftorder.produceorder_code, + shiftorder.material_id, + material.material_code, + material.material_name, + material.material_spec, + shiftorder. real_qty, + shiftorder.plan_qty, + shiftorder.plan_qty -shiftorder. real_qty as gap_qty, + curdate() as date + FROM + mps_bd_produceshiftorder shiftorder + LEFT JOIN pdm_bi_workprocedure workprocedure ON shiftorder.workprocedure_id = workprocedure.workprocedure_id + LEFT JOIN sys_dict_detail sys ON sys.VALUE= workprocedure.worksection_type_scode AND sys.dict_id = '87' + left join md_me_materialbase material on material.material_id =shiftorder.material_id + WHERE + workprocedure.workprocedure_code IN ( '07', '06', '02' ) + and shiftorder. real_qty < shiftorder.plan_qty + OPTION 输入.produce_date <> "" + shiftorder.produce_date >= 输入.produce_date + ENDOPTION + ENDSELECT + ENDQUERY +ENDIF + + +IF 输入.flag = "12" + QUERY + SELECT + shiftorder.material_id, + material.material_code, + material.material_name, + sum( real_qty ) AS real_qty + FROM + mps_bd_produceshiftorder shiftorder + LEFT JOIN pdm_bi_workprocedure workprocedure ON shiftorder.workprocedure_id = workprocedure.workprocedure_id + LEFT JOIN sys_dict_detail sys ON sys.VALUE= workprocedure.worksection_type_scode AND sys.dict_id = '87' + left join md_me_materialbase material on material.material_id =shiftorder.material_id + WHERE + workprocedure.workprocedure_code IN ( '07', '06', '02' ) + OPTION 输入.produce_date <> "" + shiftorder.produce_date >= 输入.produce_date + ENDOPTION + GROUP BY + shiftorder.material_id, + material.material_code, + material.material_name + ORDER BY real_qty + LIMIT 0,9 + ENDSELECT + ENDQUERY +ENDIF + +IF 输入.flag = "13" + QUERY + SELECT + sum( real_qty ) AS real_qty + FROM + mps_bd_produceshiftorder shiftorder + LEFT JOIN pdm_bi_workprocedure workprocedure ON shiftorder.workprocedure_id = workprocedure.workprocedure_id + LEFT JOIN sys_dict_detail sys ON sys.VALUE= workprocedure.worksection_type_scode AND sys.dict_id = '87' + left join md_me_materialbase material on material.material_id =shiftorder.material_id + WHERE + workprocedure.workprocedure_code IN ( '07', '06', '02' ) + OPTION 输入.produce_date <> "" + shiftorder.produce_date >= 输入.produce_date + ENDOPTION + + ENDSELECT + ENDQUERY +ENDIF \ No newline at end of file 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 f2a3ab02..6e583875 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 @@ -6,12 +6,18 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.nl.wms.ext.bigScreen.service.DeviceScreenService; import org.nl.wql.WQL; import org.nl.wql.core.bean.WQLObject; +import org.springframework.stereotype.Service; import java.util.Date; +@Service +@RequiredArgsConstructor +@Slf4j public class DeviceScreenServiceImpl implements DeviceScreenService { @Override public JSONObject deviceStatus(JSONObject param) { 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 5d61000fe9f410933544721a1d62be2b61096d54..2238c4664f97b41617cb1350af082d5bbf2ddffe 100644 GIT binary patch delta 46 zcmZoT!{2a*e?txnn}EZ)C*2D+7qM&;W@lkws3=X$Yu1-&*Oy=fVy5l-63iFR0sxOE B56b`m delta 46 zcmZoT!{2a*e?txno5JZ8nLJ&ai&(Y^vvV^r7@ArbH|tBZ>q{^KG1GQ^3FeDu0c)EM AOaK4? diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallMaterialTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallMaterialTask.java index 9279d4b8..db2bcb79 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallMaterialTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallMaterialTask.java @@ -41,6 +41,7 @@ public class CallMaterialTask extends AbstractAcsTask { //更新任务状态为执行中 jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode()); jsonTask.put("update_time", DateUtil.now()); + jsonTask.put("car_no", taskObj.getString("car_no")); taskTab.update(jsonTask); HashMap map = new HashMap(); map.put("bill_status", "40"); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointToPointTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointToPointTask.java index 678b3770..39685b24 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointToPointTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointToPointTask.java @@ -25,6 +25,7 @@ public class PointToPointTask extends AbstractAcsTask { //1:执行中,2:完成 ,3:acs取消 if (status.equals("1")) { map.put("task_status", "03"); + map.put("car_no", taskObj.getString("car_no")); } if (status.equals("2")) { map.put("lock_type", "00"); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendMaterialTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendMaterialTask.java index 5fc5504b..8b866203 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendMaterialTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SendMaterialTask.java @@ -50,6 +50,7 @@ public class SendMaterialTask extends AbstractAcsTask { //更新任务状态为执行中 jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode()); jsonTask.put("update_time", DateUtil.now()); + jsonTask.put("car_no", taskObj.getString("car_no")); taskTab.update(jsonTask); HashMap map = new HashMap(); map.put("update_optid", SecurityUtils.getCurrentUserId()); diff --git a/mes/hd/nladmin-system/src/test/java/org/nl/Test3.java b/mes/hd/nladmin-system/src/test/java/org/nl/Test3.java index 35f90c6e..d375bbd5 100644 --- a/mes/hd/nladmin-system/src/test/java/org/nl/Test3.java +++ b/mes/hd/nladmin-system/src/test/java/org/nl/Test3.java @@ -1,5 +1,6 @@ package org.nl; +import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; @@ -12,6 +13,7 @@ import org.nl.wql.WQL; import org.nl.wql.core.bean.WQLObject; import java.util.Calendar; +import java.util.Date; public class Test3 extends BaseTest { @Test @@ -1055,8 +1057,78 @@ public class Test3 extends BaseTest { joo.put("lock_type","00"); joo.put("material_height_type","1"); structtable.insert(joo); + } + } + //同步产品工艺路线 + @Test + public void PDM_BI_ProductProcessRoute() { + WQLObject routeTable = WQLObject.getWQLObject("PDM_BI_ProductProcessRoute"); + WQLObject dtlTable = WQLObject.getWQLObject("PDM_BI_ProductProcessRouteDtl"); + WQLObject materialTable = WQLObject.getWQLObject("md_me_materialbase"); + JSONArray ja = WQL.getWO("QLK01").setDbname("dataSource2").addParam("flag", "15").process().getResultJSONArray(0); + for (int i = 0; i < ja.size(); i++) { + JSONObject jo = ja.getJSONObject(i); + String processroute_uuid = jo.getString("processroute_uuid"); + JSONArray dtlja = WQL.getWO("QLK01").setDbname("dataSource2").addParam("processroute_uuid",processroute_uuid).addParam("flag", "16").process().getResultJSONArray(0); + for (int j = 0; j Date: Wed, 27 Jul 2022 16:58:56 +0800 Subject: [PATCH 2/2] no message --- .../bigScreen}/rest/ProductController.java | 5 +++-- .../bigScreen}/service/ProductService.java | 3 ++- .../service/impl/ProductServiceImpl.java | 4 ++-- .../bigScreen}/wql/BIGSCREENPRODUCT.wql | 0 .../{bigscreen => ext/bigScreen/wql}/ds_agv.xls | Bin .../src/main/resources/config/application-dev.yml | 14 ++++++++++++-- .../main/resources/config/application-prod.yml | 4 ++-- .../src/main/resources/config/application.yml | 2 +- 8 files changed, 22 insertions(+), 10 deletions(-) rename mes/hd/nladmin-system/src/main/java/org/nl/wms/{bigscreen/product => ext/bigScreen}/rest/ProductController.java (96%) rename mes/hd/nladmin-system/src/main/java/org/nl/wms/{bigscreen/product => ext/bigScreen}/service/ProductService.java (97%) rename mes/hd/nladmin-system/src/main/java/org/nl/wms/{bigscreen/product => ext/bigScreen}/service/impl/ProductServiceImpl.java (98%) rename mes/hd/nladmin-system/src/main/java/org/nl/wms/{bigscreen/product => ext/bigScreen}/wql/BIGSCREENPRODUCT.wql (100%) rename mes/hd/nladmin-system/src/main/java/org/nl/wms/{bigscreen => ext/bigScreen/wql}/ds_agv.xls (100%) diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/product/rest/ProductController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/rest/ProductController.java similarity index 96% rename from mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/product/rest/ProductController.java rename to mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/rest/ProductController.java index a022e30c..ed17cf3b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/product/rest/ProductController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/rest/ProductController.java @@ -1,5 +1,5 @@ -package org.nl.wms.bigscreen.product.rest; +package org.nl.wms.ext.bigScreen.rest; import io.swagger.annotations.Api; @@ -7,7 +7,8 @@ import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.annotation.Log; -import org.nl.wms.bigscreen.product.service.ProductService; + +import org.nl.wms.ext.bigScreen.service.ProductService; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/product/service/ProductService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/service/ProductService.java similarity index 97% rename from mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/product/service/ProductService.java rename to mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/service/ProductService.java index 3bbfbc6e..40530827 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/product/service/ProductService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/service/ProductService.java @@ -1,9 +1,10 @@ -package org.nl.wms.bigscreen.product.service; +package org.nl.wms.ext.bigScreen.service; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.RequestBody; import java.util.Map; + @Service public interface ProductService { /** diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/product/service/impl/ProductServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/service/impl/ProductServiceImpl.java similarity index 98% rename from mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/product/service/impl/ProductServiceImpl.java rename to mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/service/impl/ProductServiceImpl.java index f2219b51..19e8fd0c 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/product/service/impl/ProductServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/service/impl/ProductServiceImpl.java @@ -1,4 +1,4 @@ -package org.nl.wms.bigscreen.product.service.impl; +package org.nl.wms.ext.bigScreen.service.impl; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; @@ -6,7 +6,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.nl.wms.bigscreen.product.service.ProductService; +import org.nl.wms.ext.bigScreen.service.ProductService; import org.nl.wql.WQL; import org.springframework.stereotype.Service; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/product/wql/BIGSCREENPRODUCT.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/wql/BIGSCREENPRODUCT.wql similarity index 100% rename from mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/product/wql/BIGSCREENPRODUCT.wql rename to mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/wql/BIGSCREENPRODUCT.wql diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/ds_agv.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/wql/ds_agv.xls similarity index 100% rename from mes/hd/nladmin-system/src/main/java/org/nl/wms/bigscreen/ds_agv.xls rename to mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/bigScreen/wql/ds_agv.xls diff --git a/mes/hd/nladmin-system/src/main/resources/config/application-dev.yml b/mes/hd/nladmin-system/src/main/resources/config/application-dev.yml index 2ac642d6..34d80e13 100644 --- a/mes/hd/nladmin-system/src/main/resources/config/application-dev.yml +++ b/mes/hd/nladmin-system/src/main/resources/config/application-dev.yml @@ -1,5 +1,13 @@ server: port: 8010 + #海亮sqlserver +erp: + sqlserver: + enabled: false + jdbcurl: jdbc:sqlserver://192.168.81.156;DatabaseName=hllg + username: sa + password: root + #配置数据源 spring: @@ -9,9 +17,11 @@ spring: druid: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + #url: jdbc:log4jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false + url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false username: ${DB_USER:root} #password: ${DB_PWD:P@ssw0rd} + #password: ${DB_PWD:root} password: ${DB_PWD:Root.123456} # 初始连接数 initial-size: 5 @@ -163,5 +173,5 @@ jetcache: maxIdle: 200 maxTotal: 1000 uri: - - redis://47.111.78.178:6379 + - redis://localhost:6379 diff --git a/mes/hd/nladmin-system/src/main/resources/config/application-prod.yml b/mes/hd/nladmin-system/src/main/resources/config/application-prod.yml index c589404a..59ed99d8 100644 --- a/mes/hd/nladmin-system/src/main/resources/config/application-prod.yml +++ b/mes/hd/nladmin-system/src/main/resources/config/application-prod.yml @@ -8,7 +8,7 @@ spring: druid: db-type: com.alibaba.druid.pool.DruidDataSource driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.46.225}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.46.225}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false username: ${DB_USER:root} password: ${DB_PWD:123456} #password: ${DB_PWD:Root.123456} @@ -162,5 +162,5 @@ jetcache: maxIdle: 200 maxTotal: 1000 uri: - - redis://192.168.46.225:6379 + - redis://localhost:6379 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 0e75762b..334120a2 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: prod + active: dev jackson: time-zone: GMT+8 data: