From 5c3197722b44067a041b3e7390592840a0ecf63a Mon Sep 17 00:00:00 2001 From: liuxy Date: Fri, 9 Sep 2022 16:11:20 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=A4=A7=E5=B1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rest/DeviceBigScreenController.java | 72 +++ .../service/DeviceBigScreenService.java | 48 ++ .../impl/DeviceBigScreenServiceImpl.java | 469 ++++++++++++++++++ .../bigscreen/wql/EM_DEVICEBIGSCREEN_01.wql | 178 +++++++ .../bigscreen/wql/EM_DEVICEBIGSCREEN_02.wql | 116 +++++ .../bigscreen/wql/EM_DEVICEBIGSCREEN_03.wql | 130 +++++ 6 files changed, 1013 insertions(+) create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/bigscreen/rest/DeviceBigScreenController.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/bigscreen/service/DeviceBigScreenService.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/bigscreen/service/impl/DeviceBigScreenServiceImpl.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/bigscreen/wql/EM_DEVICEBIGSCREEN_01.wql create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/bigscreen/wql/EM_DEVICEBIGSCREEN_02.wql create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/bigscreen/wql/EM_DEVICEBIGSCREEN_03.wql diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/bigscreen/rest/DeviceBigScreenController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/bigscreen/rest/DeviceBigScreenController.java new file mode 100644 index 00000000..05b17041 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/bigscreen/rest/DeviceBigScreenController.java @@ -0,0 +1,72 @@ +package org.nl.wms.sb.bigscreen.rest; + +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.sb.bigscreen.service.DeviceBigScreenService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@Api(tags = "设备管理综合查询") +@RequestMapping("/api/deviceBigScreen") +@Slf4j +public class DeviceBigScreenController { + + private final DeviceBigScreenService deviceBigScreenService; + + @PostMapping("/getDeviceTime") + @Log("设备每日开机时长") + @ApiOperation("设备每日开机时长") + public ResponseEntity getDeviceTime(){ + return new ResponseEntity<>(deviceBigScreenService.getDeviceTime(),HttpStatus.OK); + } + + @PostMapping("/getDeviceNumber") + @Log("设备数量") + @ApiOperation("设备数量") + public ResponseEntity getDeviceNumber(){ + return new ResponseEntity<>(deviceBigScreenService.getDeviceNumber(),HttpStatus.OK); + } + + @PostMapping("/getDeviceFault") + @Log("年故障类别") + @ApiOperation("年故障类别") + public ResponseEntity getDeviceFault(){ + return new ResponseEntity<>(deviceBigScreenService.getDeviceFault(),HttpStatus.OK); + } + + @PostMapping("/getDeviceRunStatus") + @Log("设备运行状态") + @ApiOperation("设备运行状态") + public ResponseEntity getDeviceRunStatus(){ + return new ResponseEntity<>(deviceBigScreenService.getDeviceRunStatus(),HttpStatus.OK); + } + + @PostMapping("/getDeviceYearStatus") + @Log("设备年计划保养状态") + @ApiOperation("设备年计划保养状态") + public ResponseEntity getDeviceYearStatus(){ + return new ResponseEntity<>(deviceBigScreenService.getDeviceYearStatus(),HttpStatus.OK); + } + + @PostMapping("/getDeviceYearMainPlan") + @Log("设备年保养计划监控") + @ApiOperation("设备年保养计划监控") + public ResponseEntity getDeviceYearMainPlan(){ + return new ResponseEntity<>(deviceBigScreenService.getDeviceYearMainPlan(),HttpStatus.OK); + } + + @PostMapping("/getDeviceGroupStatus") + @Log("近30天班组情况") + @ApiOperation("近30天班组情况") + public ResponseEntity getDeviceGroupStatus(){ + return new ResponseEntity<>(deviceBigScreenService.getDeviceGroupStatus(),HttpStatus.OK); + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/bigscreen/service/DeviceBigScreenService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/bigscreen/service/DeviceBigScreenService.java new file mode 100644 index 00000000..413e21a8 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/bigscreen/service/DeviceBigScreenService.java @@ -0,0 +1,48 @@ +package org.nl.wms.sb.bigscreen.service; + +import com.alibaba.fastjson.JSONObject; + +public interface DeviceBigScreenService { + + /** + * 设备每日开机时长 + * @return JSONObject + */ + JSONObject getDeviceTime(); + + /** + * 设备数量 + * @return JSONObject + */ + JSONObject getDeviceNumber(); + + /** + * 年故障类别 + * @return JSONObject + */ + JSONObject getDeviceFault(); + + /** + * 设备运行状态 + * @return JSONObject + */ + JSONObject getDeviceRunStatus(); + + /** + * 设备年计划保养状态 + * @return JSONObject + */ + JSONObject getDeviceYearStatus(); + + /** + * 设备年保养计划监控 + * @return JSONObject + */ + JSONObject getDeviceYearMainPlan(); + + /** + * 近30天班组情况 + * @return JSONObject + */ + JSONObject getDeviceGroupStatus(); +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/bigscreen/service/impl/DeviceBigScreenServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/bigscreen/service/impl/DeviceBigScreenServiceImpl.java new file mode 100644 index 00000000..17fd4253 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/bigscreen/service/impl/DeviceBigScreenServiceImpl.java @@ -0,0 +1,469 @@ +package org.nl.wms.sb.bigscreen.service.impl; + +import cn.hutool.core.date.DateUnit; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.wms.sb.bigscreen.service.DeviceBigScreenService; +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 DeviceBigScreenServiceImpl implements DeviceBigScreenService { + + @Override + public JSONObject getDeviceTime() { + /* 查询设备运行记录表 + * 1.获取当前日期 - 前14天的日期 + * 2.根据日期查询每个部门当前日期的总时长 + */ + JSONObject map = new JSONObject(); + JSONObject resultJson = new JSONObject(); + JSONObject resultData = new JSONObject(); + JSONArray resultArr = new JSONArray(); + + // 1.1获取当前日期 - 前14天的日期 + String now = DateUtil.now(); + for (int i = 0; i < 14; i++) { + JSONObject json = new JSONObject(); + String run_date = DateUtil.offsetDay(DateUtil.parse(now), -i).toString().substring(0, 10); + // 棒料事业部:H900000 矿用合金事业部:H800000 型材事业部:H400000 混合料厂:H1300000 武汉运营保障部:H1200200 精密零件事业部:H1000000 + map.put("flag", "1"); + map.put("run_date", run_date); + map.put("dept_code", "H900000"); + // 1.2查询棒料事业部总时长 + JSONObject json_bl = WQL.getWO("EM_DEVICEBIGSCREEN_01").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(json_bl)) { + json.put("dept_name_bl", NumberUtil.round(NumberUtil.div(json_bl.getString("run_times"), "60"), 1).toString()); + } else { + json.put("dept_name_bl", "0"); + } + + // 1.3查询矿用合金事业部总时长 + map.put("dept_code", "H800000"); + JSONObject json_ky = WQL.getWO("EM_DEVICEBIGSCREEN_01").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(json_ky)) { + json.put("dept_name_ky", NumberUtil.round(NumberUtil.div(json_ky.getString("run_times"), "60"), 1).toString()); + } else { + json.put("dept_name_ky", "0"); + } + + // 1.4查询型材事业部总时长 + map.put("dept_code", "H400000"); + JSONObject json_xc = WQL.getWO("EM_DEVICEBIGSCREEN_01").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(json_xc)) { + json.put("dept_name_xc", NumberUtil.round(NumberUtil.div(json_xc.getString("run_times"), "60"), 1).toString()); + } else { + json.put("dept_name_xc", "0"); + } + + // 1.5查询混合料厂总时长 + map.put("dept_code", "H1300000"); + JSONObject json_hh = WQL.getWO("EM_DEVICEBIGSCREEN_01").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(json_hh)) { + json.put("dept_name_hh", NumberUtil.round(NumberUtil.div(json_hh.getString("run_times"), "60"), 1).toString()); + } else { + json.put("dept_name_hh", "0"); + } + + // 1.6查询武汉运营保障部总时长 + map.put("dept_code", "H1200200"); + JSONObject json_wh = WQL.getWO("EM_DEVICEBIGSCREEN_01").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(json_wh)) { + json.put("dept_name_wh", NumberUtil.round(NumberUtil.div(json_wh.getString("run_times"), "60"), 1).toString()); + } else { + json.put("dept_name_wh", "0"); + } + + // 1.7查询精密零件事业部总时长 + map.put("dept_code", "H1000000"); + JSONObject json_jm = WQL.getWO("EM_DEVICEBIGSCREEN_01").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(json_jm)) { + json.put("dept_name_jm", NumberUtil.round(NumberUtil.div(json_jm.getString("run_times"), "60"), 1).toString()); + } else { + json.put("dept_name_jm", "0"); + } + // 当前日期 + json.put("device_date", run_date); + + resultArr.add(json); + } + resultData.put("device_time_arr", resultArr); + + resultJson.put("srb", resultData); + resultJson.put("code", "1"); + resultJson.put("desc", "查询成功"); + + return resultJson; + } + + @Override + public JSONObject getDeviceNumber() { + /* 查询设备档案表 + * 1.获取总设备台数和在用台数 + * 2.获取6个部门各有多少台数 + */ + WQLObject fileTab = WQLObject.getWQLObject("EM_BI_EquipmentFile"); // 设备档案表 + + JSONObject resultJson = new JSONObject(); + JSONObject resultData = new JSONObject(); + JSONArray resultArr = new JSONArray(); + + // 1.获取总设备台数:未报废的、未删除 + JSONArray allArr = fileTab.query("status NOT IN ('90','91') and is_delete ='0'").getResultJSONArray(0); + resultData.put("device_all_num", String.valueOf(allArr.size())); + // 2.获取在用台数 + JSONArray useArr = fileTab.query("status = '10' and is_delete ='0'").getResultJSONArray(0); + resultData.put("device_use_num", String.valueOf(useArr.size())); + + // 3.1获取各个部门的台数: + // 棒料事业部:H900000 矿用合金事业部:H800000 型材事业部:H400000 混合料厂:H1300000 武汉运营保障部:H1200200 精密零件事业部:H1000000 + JSONObject map = new JSONObject(); + map.put("flag", "2"); + + // 3.2 棒料事业部 + map.put("dept_code", "H900000"); + JSONObject num_bl = WQL.getWO("EM_DEVICEBIGSCREEN_01").addParamMap(map).process().uniqueResult(0); + JSONObject json_bl = new JSONObject(); + json_bl.put("dept_name", "棒料事业部"); + json_bl.put("device_num", num_bl.getString("num")); + resultArr.add(json_bl); + + // 3.3 矿用合金事业部 + map.put("dept_code", "H800000"); + JSONObject num_ky = WQL.getWO("EM_DEVICEBIGSCREEN_01").addParamMap(map).process().uniqueResult(0); + JSONObject json_ky = new JSONObject(); + json_ky.put("dept_name", "矿用合金事业部"); + json_ky.put("device_num", num_ky.getString("num")); + resultArr.add(json_ky); + + // 3.4 型材事业部 + map.put("dept_code", "H400000"); + JSONObject num_xc = WQL.getWO("EM_DEVICEBIGSCREEN_01").addParamMap(map).process().uniqueResult(0); + JSONObject json_xc = new JSONObject(); + json_xc.put("dept_name", "型材事业部"); + json_xc.put("device_num", num_xc.getString("num")); + resultArr.add(json_xc); + + // 3.5 混合料厂 + map.put("dept_code", "H1300000"); + JSONObject num_hh = WQL.getWO("EM_DEVICEBIGSCREEN_01").addParamMap(map).process().uniqueResult(0); + JSONObject json_hh = new JSONObject(); + json_hh.put("dept_name", "混合料厂"); + json_hh.put("device_num", num_hh.getString("num")); + resultArr.add(json_hh); + + // 3.6 武汉运营保障部 + map.put("dept_code", "H1200200"); + JSONObject num_wh = WQL.getWO("EM_DEVICEBIGSCREEN_01").addParamMap(map).process().uniqueResult(0); + JSONObject json_wh = new JSONObject(); + json_wh.put("dept_name", "武汉运营保障部"); + json_wh.put("device_num", num_wh.getString("num")); + resultArr.add(json_wh); + + // 3.7 精密零件事业部 + map.put("dept_code", "H1000000"); + JSONObject num_jm = WQL.getWO("EM_DEVICEBIGSCREEN_01").addParamMap(map).process().uniqueResult(0); + JSONObject json_jm = new JSONObject(); + json_jm.put("dept_name", "精密零件事业部"); + json_jm.put("device_num", num_jm.getString("num")); + resultArr.add(json_jm); + + resultData.put("device_all_arr", resultArr); + + resultJson.put("srb", resultData); + resultJson.put("code", "1"); + resultJson.put("desc", "查询成功"); + return resultJson; + } + + @Override + public JSONObject getDeviceFault() { + /* 查询报修单 + * 1.故障前10且未删除,并已通过的报修单 + */ + JSONObject resultJson = new JSONObject(); + JSONObject resultData = new JSONObject(); + + JSONArray arr = WQL.getWO("EM_DEVICEBIGSCREEN_01").addParam("flag", "3").process().getResultJSONArray(0); + resultData.put("device_fault_arr", arr); + + resultJson.put("srb", resultData); + resultJson.put("code", "1"); + resultJson.put("desc", "查询成功"); + return resultJson; + } + + @Override + public JSONObject getDeviceRunStatus() { + /* + * 查询档案表 + * 1.查询档案表中的设备状态台数 + */ + JSONObject resultJson = new JSONObject(); + JSONObject resultData = new JSONObject(); + JSONArray resultArr = new JSONArray(); + + // 1.根据部门分组 + JSONArray deptArr = WQL.getWO("EM_DEVICEBIGSCREEN_01").addParam("flag", "4").process().getResultJSONArray(0); + + for (int i = 0; i < deptArr.size(); i++) { + JSONObject json = deptArr.getJSONObject(i); + + JSONObject jsonObject = new JSONObject(); + jsonObject.put("dept_name", json.getString("name")); + // 2.根据部门找到对应的状态台数 + JSONObject map = new JSONObject(); + map.put("flag", "5"); + map.put("dept_code", json.getString("code")); + + // 正常台数 + map.put("status", "10"); + JSONObject normal_num = WQL.getWO("EM_DEVICEBIGSCREEN_01").addParamMap(map).process().uniqueResult(0); + jsonObject.put("normal_num", normal_num.getString("num")); + + // 故障台数 + map.put("status", "20"); + JSONObject fault_num = WQL.getWO("EM_DEVICEBIGSCREEN_01").addParamMap(map).process().uniqueResult(0); + jsonObject.put("fault_num", fault_num.getString("num")); + + // 委外台数 + map.put("status", "30"); + JSONObject out_num = WQL.getWO("EM_DEVICEBIGSCREEN_01").addParamMap(map).process().uniqueResult(0); + jsonObject.put("out_num", out_num.getString("num")); + + // 保养台数 + map.put("status", "40"); + JSONObject main_num = WQL.getWO("EM_DEVICEBIGSCREEN_01").addParamMap(map).process().uniqueResult(0); + jsonObject.put("main_num", main_num.getString("num")); + + resultArr.add(jsonObject); + } + resultData.put("device_run_arr", resultArr); + + resultJson.put("srb", resultData); + resultJson.put("code", "1"); + resultJson.put("desc", "查询成功"); + + return resultJson; + } + + @Override + public JSONObject getDeviceYearStatus() { + /* + * 查询保养计划单 + * 1.查询保养计划为年计划的保养计划 + * 2.完成率:已保养台数/需保养台数 + */ + JSONObject resultJson = new JSONObject(); + JSONObject resultData = new JSONObject(); + JSONArray resultArr = new JSONArray(); + + // 1.根据部门分组 + JSONArray deptArr = WQL.getWO("EM_DEVICEBIGSCREEN_02").addParam("flag", "1").process().getResultJSONArray(0); + for (int i = 0; i < deptArr.size(); i++) { + JSONObject json = deptArr.getJSONObject(i); + + JSONObject jsonObject = new JSONObject(); + jsonObject.put("dept_name", json.getString("name")); + // 2.根据部门code查询对应的保养台数,未保养台数等 + JSONObject map = new JSONObject(); + map.put("flag", "2"); + map.put("dept_code", json.getString("code")); + + // 需保养台数: 开始日期和计划日期都为空 + JSONObject need_num = WQL.getWO("EM_DEVICEBIGSCREEN_02").addParamMap(map).process().uniqueResult(0); + jsonObject.put("need_num", need_num.getString("num")); + + // 已保养台数:开始日期和计划日期都不为空 + map.put("flag", "3"); + JSONObject end_num = WQL.getWO("EM_DEVICEBIGSCREEN_02").addParamMap(map).process().uniqueResult(0); + jsonObject.put("end_num", end_num.getString("num")); + + // 在保养台数:开始日期不能为空,结束日期为空 + map.put("flag", "4"); + JSONObject begin_num = WQL.getWO("EM_DEVICEBIGSCREEN_02").addParamMap(map).process().uniqueResult(0); + jsonObject.put("begin_num", begin_num.getString("num")); + + // 未保养台数 = 需保养台数 + jsonObject.put("not_num", jsonObject.getString("need_num")); + + // 完成率:已保养台数/需保养台数 + String div = NumberUtil.div(jsonObject.getShort("end_num"), jsonObject.getShort("need_num")).toString(); + jsonObject.put("confirm_rate", NumberUtil.round(NumberUtil.mul(div, "100"), 2)); + + resultArr.add(jsonObject); + } + resultData.put("device_year_arr", resultArr); + + resultJson.put("srb", resultData); + resultJson.put("code", "1"); + resultJson.put("desc", "查询成功"); + + return resultJson; + } + + @Override + public JSONObject getDeviceYearMainPlan() { + /* + * 查询保养单明细 + */ + JSONObject resultJson = new JSONObject(); + JSONObject resultData = new JSONObject(); + + JSONArray arr = WQL.getWO("EM_DEVICEBIGSCREEN_01").addParam("flag", "7").process().getResultJSONArray(0); + for (int i = 0; i < arr.size(); i++) { + JSONObject json = arr.getJSONObject(i); + // 保养倒计时: 计划日期 - 当前日期 + Date date1 = DateUtil.parse(DateUtil.today()); // 当前日期 + Date date2 = DateUtil.parse(json.getString("plan_time")); // 计划日期 + long betweenDay = DateUtil.between(date1, date2, DateUnit.HOUR, false); + json.put("main_time", String.valueOf(betweenDay)); + + // 延期时间: ( 计划日期 - 实际结束时间 ) 为负数则为延期 + String real_end_date = json.getString("real_end_date"); + if (ObjectUtil.isNotEmpty(real_end_date)) { + Date date3 = DateUtil.parse(real_end_date); // 实际结束时间 + long betweenDay2 = DateUtil.between(date3, date2, DateUnit.DAY, false); + if (betweenDay2 < 0) { + json.put("putoff_time", String.valueOf(betweenDay2)+ "天"); + json.put("remark", "延期"); + } + } + } + resultData.put("device_year_arr", arr); + + resultJson.put("srb", resultData); + resultJson.put("code", "1"); + resultJson.put("desc", "查询成功"); + return resultJson; + } + + @Override + public JSONObject getDeviceGroupStatus() { + /* + * 查询档案表 + * 1.根据使用班组进行分组 + * 2.查询每个班组有多少台设备(未删除) + * 3.MTBF:运行时间/故障次数(运行时间查运行记录表,故障次数查报修单)备注:此班组的所有设备 + * 4.MTTR:故障时间/故障次数(故障时间查运行记录表) 备注:此班组的所有设备 + * 5.OEE: + * (生产时间-准备时间-故障时间-工装调整时间)/(生产时间-准备时间-工装调整时间) * + * 单个产品生产时间*生产总量/ + * (生产时间-准备时间-故障时间-工装调整时间)* + * (生产总量-不合格数)/生产总量 + * 备注:此班组的所有设备;单个产品生产时间:设备档案表取此设备理论节拍 + * 6.总维修时间:报修完成时间-报修时间(都查报修单) 备注:此班组的所有设备 + */ + JSONObject resultJson = new JSONObject(); + JSONObject resultData = new JSONObject(); + JSONArray resultArr = new JSONArray(); + + // 1.根据使用班组进行分组 + JSONArray useArr = WQL.getWO("EM_DEVICEBIGSCREEN_03").addParam("flag", "1").process().getResultJSONArray(0); + // 2.查询每个班组有多少台设备 + for (int i = 0; i < useArr.size(); i++) { + JSONObject jsonUse = useArr.getJSONObject(i); + JSONObject json = new JSONObject(); + json.put("group_name", jsonUse.getString("name")); + + JSONObject map = new JSONObject(); + map.put("flag", "2"); + map.put("dept_code", jsonUse.getString("code")); + + // 每个班组中的所有设备 + JSONArray deviceArr = WQL.getWO("EM_DEVICEBIGSCREEN_03").addParamMap(map).process().getResultJSONArray(0); + + // 3.查询每台设备近三十天的运行情况 + String begin_time = DateUtil.offsetDay(DateUtil.parse(DateUtil.now()), -30).toString().substring(0, 10); + String end_time = DateUtil.today(); + + String run_time_all = "0"; // 所有设备总运行时间 + String error_num_all = "0"; // 所有设备总故障次数 + String error_time_all = "0"; // 所有设备总故障时间 + String oee_all = "0"; // 所有设备总oee + String device_all_time = "0"; // 所有设备的维修时间 + + for (int j = 0; j < deviceArr.size(); j++) { + JSONObject jsonDevice = deviceArr.getJSONObject(j); + map.put("flag","3"); + map.put("begin_time",begin_time); + map.put("end_time",end_time); + map.put("devicerecord_id",jsonDevice.getString("devicerecord_id")); + + // 查询单台30天中平均每天的运行指标 + JSONObject jsonRun = WQL.getWO("EM_DEVICEBIGSCREEN_03").addParamMap(map).process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonRun)) { + run_time_all = NumberUtil.add(run_time_all,jsonRun.getString("run_times")).toString(); + error_time_all = NumberUtil.add(error_time_all,jsonRun.getString("error_times")).toString(); + oee_all = NumberUtil.add(oee_all,jsonRun.getString("oee_value")).toString(); + } + + // 查询单台30天当中的故障次数 + map.put("flag","4"); + JSONObject jsonErrorNum = WQL.getWO("EM_DEVICEBIGSCREEN_03").addParamMap(map).process().uniqueResult(0); + error_num_all = NumberUtil.add(error_num_all,jsonErrorNum.getString("num")).toString(); + + map.put("flag","5"); + // 查询单台30天当中的报修单 + String one_all_time = "0"; // 一台设备30天的维修时间 + JSONArray jsonReArr = WQL.getWO("EM_DEVICEBIGSCREEN_03").addParamMap(map).process().getResultJSONArray(0); + for (int k = 0; k < jsonReArr.size(); k++) { + JSONObject jsonObject = jsonReArr.getJSONObject(k); + + Date date_finish_time = DateUtil.parse(jsonObject.getString("finish_time")); // 报修完成时间 + Date date_create_time = DateUtil.parse(jsonObject.getString("create_time")); // 报修时间 + // 一台设备一天的维修时间 + long one_day_time = DateUtil.between(date_create_time, date_finish_time, DateUnit.HOUR, false); + + one_all_time = NumberUtil.add(one_all_time,String.valueOf(one_day_time)).toString(); + } + device_all_time = NumberUtil.add(device_all_time,one_all_time).toString(); + } + + // 4.计算MTBF:运行时间/故障次数 + try { + String device_mtbf = NumberUtil.div(run_time_all, error_num_all).toString(); + json.put("device_mtbf", NumberUtil.round(device_mtbf, 2).toString()); + } catch (Exception e){ + json.put("device_mtbf", "0"); + } + + // 5.计算MTTR:故障时间/故障次数 + try { + String device_mttr = NumberUtil.div(error_time_all, error_num_all).toString(); + json.put("device_mttr", NumberUtil.round(device_mttr, 2).toString()); + } catch (Exception e){ + json.put("device_mttr", "0"); + } + + // 6.计算平均OEE: 所有设备OEE / 设备台数 + try { + String oee = NumberUtil.div(oee_all, String.valueOf(deviceArr.size())).toString(); + json.put("device_oee", NumberUtil.round(oee, 2).toString()); + } catch (Exception e){ + json.put("device_oee", "0"); + } + + // 7.维修时间 + json.put("device_time", device_all_time); + + resultArr.add(json); + } + resultData.put("device_group_arr", resultArr); + + resultJson.put("srb", resultData); + resultJson.put("code", "1"); + resultJson.put("desc", "查询成功"); + return resultJson; + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/bigscreen/wql/EM_DEVICEBIGSCREEN_01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/bigscreen/wql/EM_DEVICEBIGSCREEN_01.wql new file mode 100644 index 00000000..0a3cecad --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/bigscreen/wql/EM_DEVICEBIGSCREEN_01.wql @@ -0,0 +1,178 @@ +[交易说明] + 交易名: 设备大屏查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.run_date TYPEAS s_string + 输入.dept_code TYPEAS s_string + 输入.status TYPEAS s_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + QUERY + SELECT + sum(run.run_times) AS run_times, + max(dept.name) AS name + FROM + EM_BI_DeviceRunRecord run + LEFT JOIN EM_BI_EquipmentFile file ON file.devicerecord_id = run.devicerecord_id + LEFT JOIN sys_dept dept ON dept.dept_id = file.use_deptid + WHERE + dept.code = 输入.dept_code + AND run.run_date = 输入.run_date + + group by dept.code + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + count(file.devicerecord_id) AS num + FROM + EM_BI_EquipmentFile file + LEFT JOIN sys_dept dept ON dept.dept_id = file.use_deptid + WHERE + dept.code = 输入.dept_code + AND file.status NOT IN ('90','91') + AND file.is_delete = '0' + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + count(re.device_faultclass_id) AS device_fault_num, + class.device_faultclass_name AS device_fault_type + FROM + EM_BI_DeviceRepairRequest re + LEFT JOIN em_bi_devicefaultclass class ON class.device_faultclass_id = re.device_faultclass_id + WHERE + re.is_delete = '0' + AND re.is_passed = '1' + + group by re.device_faultclass_id + + ORDER BY device_fault_num DESC + + LIMIT 0,10 + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "4" + QUERY + SELECT + dept.code, + dept.name + FROM + EM_BI_EquipmentFile file + LEFT JOIN sys_dept dept ON dept.dept_id = file.use_deptid + WHERE + file.is_delete = '0' + AND file.status not in ('00','11','90','91') + + group by file.use_deptid + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "5" + QUERY + SELECT + count(file.devicerecord_id) AS num + FROM + EM_BI_EquipmentFile file + LEFT JOIN sys_dept dept ON dept.dept_id = file.use_deptid + WHERE + file.is_delete = '0' + AND dept.code = 输入.dept_code + AND file.status = 输入.status + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "6" + QUERY + SELECT + dept.code, + dept.name + FROM + EM_BI_DeviceMaintenancePlanMst mst + LEFT JOIN EM_BI_EquipmentFile file ON mst.devicerecord_id = file.devicerecord_id + LEFT JOIN sys_dept dept ON dept.dept_id = file.use_deptid + WHERE + mst.is_delete = '0' + AND mst.maintenancecycle = '01' + + group by file.use_deptid + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "7" + QUERY + SELECT + dept.name AS dept_name, + file.device_name, + file.device_code, + item.contents AS plan_content, + mst.plan_start_date AS plan_time, + mst.confirm_optname AS impl_name, + mst.real_start_date AS impl_time, + mst.remark, + mst.real_end_date + FROM + EM_BI_DeviceMaintenancePlanDtl dtl + LEFT JOIN EM_BI_DeviceMaintenanceItems item ON item.maint_item_id = dtl.maint_item_id + LEFT JOIN EM_BI_DeviceMaintenancePlanMst mst ON mst.maint_plan_id = dtl.maint_plan_id + LEFT JOIN EM_BI_EquipmentFile file ON mst.devicerecord_id = file.devicerecord_id + LEFT JOIN sys_dept dept ON dept.dept_id = file.use_deptid + WHERE + mst.is_delete = '0' + AND mst.maintenancecycle = '01' + + ENDSELECT + ENDQUERY + ENDIF \ No newline at end of file diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/bigscreen/wql/EM_DEVICEBIGSCREEN_02.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/bigscreen/wql/EM_DEVICEBIGSCREEN_02.wql new file mode 100644 index 00000000..be064048 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/bigscreen/wql/EM_DEVICEBIGSCREEN_02.wql @@ -0,0 +1,116 @@ +[交易说明] + 交易名: 设备大屏查询-计划保养状态查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.dept_code TYPEAS s_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + QUERY + SELECT + dept.code, + dept.name + FROM + EM_BI_DeviceMaintenancePlanMst mst + LEFT JOIN EM_BI_EquipmentFile file ON mst.devicerecord_id = file.devicerecord_id + LEFT JOIN sys_dept dept ON dept.dept_id = file.use_deptid + WHERE + mst.is_delete = '0' + AND mst.maintenancecycle = '01' + + group by file.use_deptid + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + count(mst.maint_plan_id) AS num + FROM + EM_BI_DeviceMaintenancePlanMst mst + LEFT JOIN EM_BI_EquipmentFile file ON mst.devicerecord_id = file.devicerecord_id + LEFT JOIN sys_dept dept ON dept.dept_id = file.use_deptid + WHERE + mst.is_delete = '0' + AND mst.maintenancecycle = '01' + AND dept.code = 输入.dept_code + AND mst.real_start_date is null + AND mst.real_end_date is null + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + count(mst.maint_plan_id) AS num + FROM + EM_BI_DeviceMaintenancePlanMst mst + LEFT JOIN EM_BI_EquipmentFile file ON mst.devicerecord_id = file.devicerecord_id + LEFT JOIN sys_dept dept ON dept.dept_id = file.use_deptid + WHERE + mst.is_delete = '0' + AND mst.maintenancecycle = '01' + AND dept.code = 输入.dept_code + AND mst.real_start_date is not null + AND mst.real_end_date is not null + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "4" + QUERY + SELECT + count(mst.maint_plan_id) AS num + FROM + EM_BI_DeviceMaintenancePlanMst mst + LEFT JOIN EM_BI_EquipmentFile file ON mst.devicerecord_id = file.devicerecord_id + LEFT JOIN sys_dept dept ON dept.dept_id = file.use_deptid + WHERE + mst.is_delete = '0' + AND mst.maintenancecycle = '01' + AND dept.code = 输入.dept_code + AND mst.real_start_date is not null + AND mst.real_end_date is null + + ENDSELECT + ENDQUERY + ENDIF \ No newline at end of file diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/bigscreen/wql/EM_DEVICEBIGSCREEN_03.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/bigscreen/wql/EM_DEVICEBIGSCREEN_03.wql new file mode 100644 index 00000000..7a5b04e3 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sb/bigscreen/wql/EM_DEVICEBIGSCREEN_03.wql @@ -0,0 +1,130 @@ +[交易说明] + 交易名: 设备大屏查询-近30天班组情况 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.begin_time TYPEAS s_string + 输入.end_time TYPEAS s_string + 输入.dept_code TYPEAS s_string + 输入.devicerecord_id TYPEAS s_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + QUERY + SELECT + dept.code, + dept.name + FROM + EM_BI_EquipmentFile file + LEFT JOIN sys_dept dept ON dept.dept_id = file.use_groupid + WHERE + file.is_delete = '0' + AND file.status not in ('90','91') + + group by file.use_groupid + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + file.* + FROM + EM_BI_EquipmentFile file + LEFT JOIN sys_dept dept ON dept.dept_id = file.use_groupid + WHERE + file.is_delete = '0' + AND file.status not in ('90','91') + AND dept.code = 输入.dept_code + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + ROUND(sum(run.run_times),2) AS run_times, + ROUND(sum(run.prepare_times),2) AS prepare_times, + ROUND(sum(run.error_times),2) AS error_times, + ROUND(sum(run.adjust_times),2) AS adjust_times, + ROUND(sum(run.product_qty),2) AS product_qty, + ROUND(sum(run.nok_qty),2) AS nok_qty, + ROUND(sum(run.oee_value),2) AS oee_value + FROM + EM_BI_DeviceRunRecord run + LEFT JOIN EM_BI_EquipmentFile file ON run.devicerecord_id = file.devicerecord_id + WHERE + run.devicerecord_id = 输入.devicerecord_id + AND ( run.run_date BETWEEN 输入.begin_time AND 输入.end_time) + + group by run.devicerecord_id + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "4" + QUERY + SELECT + count(re.request_id) AS num + FROM + EM_BI_DeviceRepairRequest re + WHERE + re.devicerecord_id = 输入.devicerecord_id + AND re.is_delete = '0' + AND ( re.fault_time BETWEEN 输入.begin_time AND 输入.end_time) + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "5" + QUERY + SELECT + re.* + FROM + EM_BI_DeviceRepairRequest re + WHERE + re.devicerecord_id = 输入.devicerecord_id + AND re.is_delete = '0' + AND ( re.fault_time BETWEEN 输入.begin_time AND 输入.end_time) + + ENDSELECT + ENDQUERY + ENDIF \ No newline at end of file