配粉设备大屏

This commit is contained in:
2022-07-27 14:34:51 +08:00
parent 3f8e4c5a6a
commit eedb75b75f
4 changed files with 595 additions and 0 deletions

View File

@@ -0,0 +1,95 @@
package org.nl.wms.ext.bigScreen.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.service.DeviceScreenService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequiredArgsConstructor
@Api(tags = "设备监控大屏")
@RequestMapping("/api/deviceScreen")
@Slf4j
public class DeviceScreenController {
private final DeviceScreenService deviceScreenService;
@PostMapping("/deviceStatus")
@Log("设备实时状态")
@ApiOperation("设备实时状态")
public ResponseEntity<Object> getData(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(deviceScreenService.deviceStatus(whereJson), HttpStatus.OK);
}
@PostMapping("/oeeAndTeep")
@Log("设备综合效率OEE&产能利用效率TEEP")
@ApiOperation("设备综合效率OEE&产能利用效率TEEP")
public ResponseEntity<Object> oeeAndTeep(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(deviceScreenService.oeeAndTeep(whereJson), HttpStatus.OK);
}
@PostMapping("/queryDeviceByWork")
@Log("运行设备大类产能比")
@ApiOperation("运行设备大类产能比")
public ResponseEntity<Object> queryDeviceByWork(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(deviceScreenService.queryDeviceByWork(whereJson), HttpStatus.OK);
}
@PostMapping("/deviceErrorNum")
@Log("设备TOP10故障次数")
@ApiOperation("设备TOP10故障次数")
public ResponseEntity<Object> deviceErrorNum(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(deviceScreenService.deviceErrorNum(whereJson), HttpStatus.OK);
}
@PostMapping("/deviceManage")
@Log("设备管理")
@ApiOperation("设备管理")
public ResponseEntity<Object> deviceManage(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(deviceScreenService.deviceManage(whereJson), HttpStatus.OK);
}
@PostMapping("/deviceCensus")
@Log("设备综合统计")
@ApiOperation("设备综合统计")
public ResponseEntity<Object> deviceCensus(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(deviceScreenService.deviceCensus(whereJson), HttpStatus.OK);
}
@PostMapping("/deviceErrorInfo")
@Log("设备报警信息")
@ApiOperation("设备报警信息")
public ResponseEntity<Object> deviceErrorInfo(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(deviceScreenService.deviceErrorInfo(whereJson), HttpStatus.OK);
}
@PostMapping("/deviceUseRate")
@Log("设备产能利用")
@ApiOperation("设备产能利用")
public ResponseEntity<Object> deviceUseRate(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(deviceScreenService.deviceUseRate(whereJson), HttpStatus.OK);
}
@PostMapping("/deviceStatusList")
@Log("设备状态列表")
@ApiOperation("设备状态列表")
public ResponseEntity<Object> deviceStatusList(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(deviceScreenService.deviceStatusList(whereJson), HttpStatus.OK);
}
@PostMapping("/errCensus")
@Log("近30天设备故障统计")
@ApiOperation("近30天设备故障统计")
public ResponseEntity<Object> errCensus(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(deviceScreenService.errCensus(whereJson), HttpStatus.OK);
}
}

View File

@@ -0,0 +1,25 @@
package org.nl.wms.ext.bigScreen.service;
import com.alibaba.fastjson.JSONObject;
public interface DeviceScreenService {
public JSONObject deviceStatus(JSONObject param);
public JSONObject oeeAndTeep(JSONObject param);
public JSONObject queryDeviceByWork(JSONObject param);
public JSONObject deviceErrorNum(JSONObject param);
public JSONObject deviceManage(JSONObject param);
public JSONObject deviceCensus(JSONObject param);
public JSONObject deviceErrorInfo(JSONObject param);
public JSONObject deviceUseRate(JSONObject param);
public JSONObject deviceStatusList(JSONObject param);
public JSONObject errCensus(JSONObject param);
}

View File

@@ -0,0 +1,330 @@
package org.nl.wms.ext.bigScreen.service.impl;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.nl.wms.ext.bigScreen.service.DeviceScreenService;
import org.nl.wql.WQL;
import org.nl.wql.core.bean.WQLObject;
import java.util.Date;
public class DeviceScreenServiceImpl implements DeviceScreenService {
@Override
public JSONObject deviceStatus(JSONObject 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();
int run_device = 0;
int prepare_device = 0;
int free_device = 0;
int err_device = 0;
JSONObject result = new JSONObject();
result.put("total_num", total_num);
result.put("run_device", run_device);
result.put("prepare_device", prepare_device);
result.put("free_device", free_device);
result.put("err_device", err_device);
JSONObject returnjo = new JSONObject();
returnjo.put("code", "1");
returnjo.put("desc", "查询成功!");
returnjo.put("result", result);
return returnjo;
}
@Override
public JSONObject oeeAndTeep(JSONObject param) {
JSONObject oee = new JSONObject();
JSONObject teep = new JSONObject();
//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%");
JSONObject result = new JSONObject();
result.put("oee", oee);
result.put("teep", teep);
JSONObject returnjo = new JSONObject();
returnjo.put("code", "1");
returnjo.put("desc", "查询成功!");
returnjo.put("result", result);
return returnjo;
}
@Override
public JSONObject queryDeviceByWork(JSONObject param) {
JSONArray result = WQL.getWO("QDEVICE_SCREEN").addParam("flag", "1").process().getResultJSONArray(0);
JSONObject returnjo = new JSONObject();
returnjo.put("code", "1");
returnjo.put("desc", "查询成功!");
returnjo.put("result", result);
return returnjo;
}
@Override
public JSONObject deviceErrorNum(JSONObject param) {
JSONArray result = WQL.getWO("QDEVICE_SCREEN").addParam("flag", "2").process().getResultJSONArray(0);
JSONObject returnjo = new JSONObject();
returnjo.put("code", "1");
returnjo.put("desc", "查询成功!");
returnjo.put("result", result);
return returnjo;
}
@Override
public JSONObject deviceManage(JSONObject param) {
String today = DateUtil.today()+"%";
Date today_begin = DateUtil.beginOfDay(DateUtil.date());
//弯头工段
JSONObject jo1 = new JSONObject();
jo1.put("oee", "45.8%");
double wt_mibf = 0;
double wt_mttr = 0;
//计算mibf
JSONArray wt_run_rows = WQL.getWO("QDEVICE_SCREEN").addParam("flag", "3").addParam("worksection_type_scode", "01").addParam("today", today).process().getResultJSONArray(0);
for (int i = 0; i < wt_run_rows.size(); i++) {
JSONObject device = wt_run_rows.getJSONObject(i);
String start_time = device.getString("start_time");
String end_time = device.getString("end_time");
if (start_time.startsWith(today) && StrUtil.isNotEmpty(end_time)) {
Date date1 = DateUtil.parse(start_time);
Date date2 = DateUtil.parse(end_time);
long between = DateUtil.between(date1, date2, DateUnit.HOUR);
wt_mibf += between;
}
if (start_time.startsWith(today) && StrUtil.isEmpty(end_time)) {
Date date1 = DateUtil.parse(start_time);
Date date2 = DateUtil.date();
long between = DateUtil.between(date1, date2, DateUnit.HOUR);
wt_mibf += between;
}
if (!start_time.startsWith(today) && StrUtil.isEmpty(end_time)) {
Date date2 = DateUtil.date();
long between = DateUtil.between(today_begin, date2, DateUnit.HOUR);
wt_mibf += between;
}
if (!start_time.startsWith(today) && StrUtil.isNotEmpty(end_time)) {
Date date2 = DateUtil.parse(end_time);
long between = DateUtil.between(today_begin, date2, DateUnit.HOUR);
wt_mibf += between;
}
}
//计算mmttr
JSONArray wt_err_rows = WQL.getWO("QDEVICE_SCREEN").addParam("flag", "4").addParam("worksection_type_scode", "01").addParam("today", today).process().getResultJSONArray(0);
for (int i = 0; i < wt_err_rows.size(); i++) {
JSONObject device = wt_err_rows.getJSONObject(i);
String start_time = device.getString("start_time");
String end_time = device.getString("end_time");
if (start_time.startsWith(today) && StrUtil.isNotEmpty(end_time)) {
Date date1 = DateUtil.parse(start_time);
Date date2 = DateUtil.parse(end_time);
long between = DateUtil.between(date1, date2, DateUnit.HOUR);
wt_mttr += between;
}
if (start_time.startsWith(today) && StrUtil.isEmpty(end_time)) {
Date date1 = DateUtil.parse(start_time);
Date date2 = DateUtil.date();
long between = DateUtil.between(date1, date2, DateUnit.HOUR);
wt_mttr += between;
}
if (!start_time.startsWith(today) && StrUtil.isEmpty(end_time)) {
Date date2 = DateUtil.date();
long between = DateUtil.between(today_begin, date2, DateUnit.HOUR);
wt_mttr += between;
}
if (!start_time.startsWith(today) && StrUtil.isNotEmpty(end_time)) {
Date date2 = DateUtil.parse(end_time);
long between = DateUtil.between(today_begin, date2, DateUnit.HOUR);
wt_mttr += between;
}
}
jo1.put("MIBF", wt_mibf);
jo1.put("MTTR", wt_mttr);
jo1.put("err_times", wt_err_rows.size());
//综合工段
JSONObject jo2 = new JSONObject();
jo2.put("oee", "45.8%");
double zh_mibf = 0;
double zh_mttr = 0;
//计算mibf
JSONArray zh_run_rows = WQL.getWO("QDEVICE_SCREEN").addParam("flag", "3").addParam("worksection_type_scode", "01").addParam("today", today).process().getResultJSONArray(0);
for (int i = 0; i < zh_run_rows.size(); i++) {
JSONObject device = zh_run_rows.getJSONObject(i);
String start_time = device.getString("start_time");
String end_time = device.getString("end_time");
if (start_time.startsWith(today) && StrUtil.isNotEmpty(end_time)) {
Date date1 = DateUtil.parse(start_time);
Date date2 = DateUtil.parse(end_time);
long between = DateUtil.between(date1, date2, DateUnit.HOUR);
wt_mibf += between;
}
if (start_time.startsWith(today) && StrUtil.isEmpty(end_time)) {
Date date1 = DateUtil.parse(start_time);
Date date2 = DateUtil.date();
long between = DateUtil.between(date1, date2, DateUnit.HOUR);
wt_mibf += between;
}
if (!start_time.startsWith(today) && StrUtil.isEmpty(end_time)) {
Date date2 = DateUtil.date();
long between = DateUtil.between(today_begin, date2, DateUnit.HOUR);
wt_mibf += between;
}
if (!start_time.startsWith(today) && StrUtil.isNotEmpty(end_time)) {
Date date2 = DateUtil.parse(end_time);
long between = DateUtil.between(today_begin, date2, DateUnit.HOUR);
wt_mibf += between;
}
}
//计算mmttr
JSONArray zh_err_rows = WQL.getWO("QDEVICE_SCREEN").addParam("flag", "4").addParam("worksection_type_scode", "01").addParam("today", today).process().getResultJSONArray(0);
for (int i = 0; i < zh_err_rows.size(); i++) {
JSONObject device = zh_err_rows.getJSONObject(i);
String start_time = device.getString("start_time");
String end_time = device.getString("end_time");
if (start_time.startsWith(today) && StrUtil.isNotEmpty(end_time)) {
Date date1 = DateUtil.parse(start_time);
Date date2 = DateUtil.parse(end_time);
long between = DateUtil.between(date1, date2, DateUnit.HOUR);
wt_mttr += between;
}
if (start_time.startsWith(today) && StrUtil.isEmpty(end_time)) {
Date date1 = DateUtil.parse(start_time);
Date date2 = DateUtil.date();
long between = DateUtil.between(date1, date2, DateUnit.HOUR);
wt_mttr += between;
}
if (!start_time.startsWith(today) && StrUtil.isEmpty(end_time)) {
Date date2 = DateUtil.date();
long between = DateUtil.between(today_begin, date2, DateUnit.HOUR);
wt_mttr += between;
}
if (!start_time.startsWith(today) && StrUtil.isNotEmpty(end_time)) {
Date date2 = DateUtil.parse(end_time);
long between = DateUtil.between(today_begin, date2, DateUnit.HOUR);
wt_mttr += between;
}
}
jo2.put("MIBF", zh_mibf);
jo2.put("MTTR", zh_mttr);
jo2.put("err_times", zh_err_rows.size());
//成品工段
JSONObject jo3 = new JSONObject();
jo3.put("oee", "45.8%");
double cp_mibf = 0;
double cp_mttr = 0;
//计算mibf
JSONArray cp_run_rows = WQL.getWO("QDEVICE_SCREEN").addParam("flag", "3").addParam("worksection_type_scode", "01").addParam("today", today).process().getResultJSONArray(0);
for (int i = 0; i < cp_run_rows.size(); i++) {
JSONObject device = cp_run_rows.getJSONObject(i);
String start_time = device.getString("start_time");
String end_time = device.getString("end_time");
if (start_time.startsWith(today) && StrUtil.isNotEmpty(end_time)) {
Date date1 = DateUtil.parse(start_time);
Date date2 = DateUtil.parse(end_time);
long between = DateUtil.between(date1, date2, DateUnit.HOUR);
wt_mibf += between;
}
if (start_time.startsWith(today) && StrUtil.isEmpty(end_time)) {
Date date1 = DateUtil.parse(start_time);
Date date2 = DateUtil.date();
long between = DateUtil.between(date1, date2, DateUnit.HOUR);
wt_mibf += between;
}
if (!start_time.startsWith(today) && StrUtil.isEmpty(end_time)) {
Date date2 = DateUtil.date();
long between = DateUtil.between(today_begin, date2, DateUnit.HOUR);
wt_mibf += between;
}
if (!start_time.startsWith(today) && StrUtil.isNotEmpty(end_time)) {
Date date2 = DateUtil.parse(end_time);
long between = DateUtil.between(today_begin, date2, DateUnit.HOUR);
wt_mibf += between;
}
}
//计算mmttr
JSONArray cp_err_rows = WQL.getWO("QDEVICE_SCREEN").addParam("flag", "4").addParam("worksection_type_scode", "01").addParam("today", today).process().getResultJSONArray(0);
for (int i = 0; i < cp_err_rows.size(); i++) {
JSONObject device = cp_err_rows.getJSONObject(i);
String start_time = device.getString("start_time");
String end_time = device.getString("end_time");
if (start_time.startsWith(today) && StrUtil.isNotEmpty(end_time)) {
Date date1 = DateUtil.parse(start_time);
Date date2 = DateUtil.parse(end_time);
long between = DateUtil.between(date1, date2, DateUnit.HOUR);
wt_mttr += between;
}
if (start_time.startsWith(today) && StrUtil.isEmpty(end_time)) {
Date date1 = DateUtil.parse(start_time);
Date date2 = DateUtil.date();
long between = DateUtil.between(date1, date2, DateUnit.HOUR);
wt_mttr += between;
}
if (!start_time.startsWith(today) && StrUtil.isEmpty(end_time)) {
Date date2 = DateUtil.date();
long between = DateUtil.between(today_begin, date2, DateUnit.HOUR);
wt_mttr += between;
}
if (!start_time.startsWith(today) && StrUtil.isNotEmpty(end_time)) {
Date date2 = DateUtil.parse(end_time);
long between = DateUtil.between(today_begin, date2, DateUnit.HOUR);
wt_mttr += between;
}
}
jo3.put("MIBF", cp_mibf);
jo3.put("MTTR", cp_mttr);
jo3.put("err_times", cp_err_rows.size());
JSONObject result = new JSONObject();
result.put("jo1",jo1);
result.put("jo2",jo2);
result.put("jo3",jo3);
JSONObject returnjo = new JSONObject();
returnjo.put("code", "1");
returnjo.put("desc", "查询成功!");
returnjo.put("result", result);
return returnjo;
}
@Override
public JSONObject deviceCensus(JSONObject param) {
return null;
}
@Override
public JSONObject deviceErrorInfo(JSONObject param) {
String today = DateUtil.today()+"%";
JSONArray result = WQL.getWO("QDEVICE_SCREEN").addParam("flag", "5").addParam("today",today).process().getResultJSONArray(0);
JSONObject returnjo = new JSONObject();
returnjo.put("code", "1");
returnjo.put("desc", "查询成功!");
returnjo.put("result", result);
return returnjo;
}
@Override
public JSONObject deviceUseRate(JSONObject param) {
return null;
}
@Override
public JSONObject deviceStatusList(JSONObject param) {
return null;
}
@Override
public JSONObject errCensus(JSONObject param) {
return null;
}
}

View File

@@ -0,0 +1,145 @@
[交易说明]
交易名: 物料分页查询
所属模块:
功能简述:
版权所有:
表引用:
版本经历:
[数据库]
--指定数据库为空采用默认值默认为db.properties中列出的第一个库
[IO定义]
#################################################
## 表字段对应输入参数
#################################################
输入.flag TYPEAS s_string
输入.worksection_type_scode TYPEAS s_string
输入.today TYPEAS s_string
[临时表]
--这边列出来的临时表就会在运行期动态创建
[临时变量]
--所有中间过程变量均可在此处定义
[业务过程]
##########################################
# 1、输入输出检查 #
##########################################
##########################################
# 2、主过程前处理 #
##########################################
##########################################
# 3、业务主过程 #
##########################################
IF 输入.flag = "1"
QUERY
SELECT
MAX( productivity ) AS max_productivity,
MIN( productivity ) AS min_productivity,
ROUND( SUM( productivity )/ COUNT( device_id ), 3 ) AS ave_productivity,
MAX(pro.workprocedure_name) AS workprocedure_name
FROM
pdm_bi_device device
LEFT JOIN pdm_bi_workprocedure pro ON pro.workprocedure_id = device.workprocedure_id
WHERE
device.is_active = '1'
AND
device.is_delete = '0'
GROUP BY
device.workprocedure_id
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "2"
QUERY
SELECT
COUNT(run.device_id) AS err_num,
MAX(device.device_name) AS device_name
FROM
pdm_bi_devicerunstatusrecord run
LEFT JOIN pdm_bi_device device ON device.device_id = run.device_id
GROUP BY
run.device_id
LIMIT 10
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "3"
QUERY
SELECT
device.device_id,
run.start_time,
run.end_time
FROM
pdm_bi_device device
LEFT JOIN pdm_bi_workprocedure pro ON pro.workprocedure_id = device.workprocedure_id
INNER JOIN pdm_bi_devicerunstatusrecord run ON run.device_id = device.device_id
WHERE
pro.worksection_type_scode = 输入.worksection_type_scode
AND (
run.start_time LIKE 输入.today
OR run.end_time LIKE 输入.today
OR run.end_time IS NULL
OR run.end_time = ''
)
AND run.status_type = '03'
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "4"
QUERY
SELECT
device.device_id,
run.start_time,
run.end_time
FROM
pdm_bi_device device
LEFT JOIN pdm_bi_workprocedure pro ON pro.workprocedure_id = device.workprocedure_id
INNER JOIN pdm_bi_devicerunstatusrecord run ON run.device_id = device.device_id
WHERE
pro.worksection_type_scode = 输入.worksection_type_scode
AND (
run.start_time LIKE 输入.today
OR run.end_time LIKE 输入.today
OR run.end_time IS NULL
OR run.end_time = ''
)
AND run.status_type = '05'
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "5"
QUERY
SELECT
run.start_time,
device.device_code,
device.device_name,
err.err_name
FROM
pdm_bi_devicerunstatusrecord run
LEFT JOIN pdm_bi_devicerunerrorlink err ON err.err_status_id = run.err_status_id
LEFT JOIN pdm_bi_device device ON run.device_id = device.device_id
WHERE
run.status_type = '05'
AND
run.start_time like 输入.today
ENDSELECT
ENDQUERY
ENDIF