add:增加固化室错误代码解析。

This commit is contained in:
2024-09-27 14:34:22 +08:00
parent 9b15f6cb76
commit da421665ea
7 changed files with 150 additions and 71 deletions

View File

@@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSONObject;
import lombok.Data; import lombok.Data;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.nl.acs.device.domain.Device; import org.nl.acs.device.domain.Device;
import org.nl.acs.device_driver.DeviceDriver; import org.nl.acs.device_driver.DeviceDriver;
import org.nl.acs.device_driver.RouteableDeviceDriver; import org.nl.acs.device_driver.RouteableDeviceDriver;
@@ -16,7 +15,11 @@ import org.nl.acs.ext.wms.service.AcsToWmsService;
import org.nl.acs.monitor.DeviceStageMonitor; import org.nl.acs.monitor.DeviceStageMonitor;
import org.nl.config.SpringContextHolder; import org.nl.config.SpringContextHolder;
import org.openscada.opc.lib.da.Server; import org.openscada.opc.lib.da.Server;
import java.util.*;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import static org.nl.common.utils.StringUtils.handleErrorCode; import static org.nl.common.utils.StringUtils.handleErrorCode;
/** /**
@@ -185,8 +188,8 @@ public class GuhuashiSiteDeviceDriver extends AbstractOpcDeviceDriver implements
//todo 错误码转换 //todo 错误码转换
request.setType("3"); request.setType("3");
request.setState(String.valueOf(VD7046)); request.setState(String.valueOf(VD7046));
//String ghsErrorCode = "10001000000010000001000010001000"; String binaryCode = Integer.toBinaryString(VD7046);
String ghsErrorMessages = handleErrorCode(String.valueOf(VD7046), AcsDefineEnum.GHS_ERROR_STATUS); String ghsErrorMessages = handleErrorCode(binaryCode, "GHS");
request.setState(ghsErrorMessages); request.setState(ghsErrorMessages);
//有故障 //有故障
request.setCurrent_status(AcsDefineEnum.IS_NOTANDYES.code("")); request.setCurrent_status(AcsDefineEnum.IS_NOTANDYES.code(""));

View File

@@ -24,7 +24,6 @@ import nl.basjes.parse.useragent.UserAgentAnalyzer;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.nl.acs.enums.AcsDefineEnum; import org.nl.acs.enums.AcsDefineEnum;
import org.nl.config.ElAdminProperties; import org.nl.config.ElAdminProperties;
import org.nl.config.SpringContextHolder;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.net.InetAddress; import java.net.InetAddress;
@@ -253,25 +252,42 @@ public class StringUtils {
} }
} }
public static String handleErrorCode(String errorCode, AcsDefineEnum deviceEnum) { public static String handleErrorCode(String errorCode, String deviceType) {
AcsDefineEnum errorType;
List<String> errorMessages = new ArrayList<>(); List<String> errorMessages = new ArrayList<>();
// if (errorCode.length() != 32) { switch (deviceType) {
// throw new RuntimeException("错误代码必须是32位"); //取货完成
// } case "GHS":
for (int i = 0; i < errorCode.length(); i++) { errorType = AcsDefineEnum.GHS_ERROR_STATUS;
char bit = errorCode.charAt(i); break;
if (bit == '1') { //放货完成
String errorNumber = String.valueOf(i + 1); case "TBX":
String errorMessage = deviceEnum.getErrorMessage(errorNumber); errorType = AcsDefineEnum.IS_NOTANDYES;
if (org.apache.commons.lang3.StringUtils.isNotBlank(errorMessage)) { break;
errorMessages.add(errorMessage); default:
errorType = null;
break;
}
if (errorType != null) {
for (int i = 0; i < errorCode.length(); i++) {
// 从右往左索引从0开始所以需要加1
if (errorCode.charAt(errorCode.length() - 1 - i) == '1') {
// 获取对应的错误信息
String errorMessage = errorType.getErrorMessage(String.valueOf(i + 1));
if (!errorMessage.isEmpty()) {
errorMessages.add(errorMessage);
}
} }
} }
} if (ObjectUtils.isNotEmpty(errorMessages)) {
if (ObjectUtils.isNotEmpty(errorMessages)) { return String.join(", ", errorMessages);
return String.join(", ", errorMessages); } else {
return "";
}
} else { } else {
return ""; return "";
} }
} }
} }

View File

@@ -31,6 +31,7 @@ import java.util.Map;
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/api/param") @RequestMapping("/api/param")
@SaIgnore
class SysParamController { class SysParamController {
@Autowired @Autowired
@@ -43,6 +44,16 @@ class SysParamController {
return new ResponseEntity<>(TableDataInfo.build(paramService.queryPage(whereJson, page)), HttpStatus.OK); return new ResponseEntity<>(TableDataInfo.build(paramService.queryPage(whereJson, page)), HttpStatus.OK);
} }
@PostMapping("/getValueByCode1")
@Log("查询系统参数")
@ApiOperation("查询系统参数")
//@SaCheckPermission("param:list")
public ResponseEntity<Object> query(){
return null;
}
@PostMapping @PostMapping
@Log("新增系统参数") @Log("新增系统参数")
@ApiOperation("新增系统参数") @ApiOperation("新增系统参数")

View File

@@ -18,8 +18,8 @@ public enum AcsDefineEnum {
//agv状态 1-关机2-运行中3-交通管制4-任务等待5-充电中6-故障中7-低电量 //agv状态 1-关机2-运行中3-交通管制4-任务等待5-充电中6-故障中7-低电量
AGV_STATUS(MapOf.of("关机", "1", "运行中", "2", "交通管制", "3", "任务等待", "4", "充电中", "5", "故障中", "6", "低电量", "7")), AGV_STATUS(MapOf.of("关机", "1", "运行中", "2", "交通管制", "3", "任务等待", "4", "充电中", "5", "故障中", "6", "低电量", "7")),
//RGV状态 1-空闲 2-任务执行中 3-充电 4-故障 5-未知 6-不可利用 //RGV状态 1-空闲 2-工作中 3-手动 4-下线
RGV_STATUS(MapOf.of("1","IDLE","2","EXECUTING","3","CHARGING","4","ERROR","5","UNKNOWN","6","UNAVAILABLE")), RGV_STATUS(MapOf.of("1","IDLE","2","WORK","3","UNAVAIL","4","OFFLINE")),
//载具类型 //载具类型
VEHICLE_TYPE(MapOf.of("普涂", "1", "连涂", "2")), VEHICLE_TYPE(MapOf.of("普涂", "1", "连涂", "2")),

View File

@@ -18,6 +18,8 @@ public class TaskInfo extends ErrorData {
private String material_name; private String material_name;
private String material_spec; private String material_spec;
private String qty; private String qty;
private String type;
private String material_qty;
private String vehicle_type; private String vehicle_type;
private String vehicle_code; private String vehicle_code;
private String task_type; private String task_type;

View File

@@ -1,5 +1,6 @@
package org.nl.wms.cockpit.service.impl; package org.nl.wms.cockpit.service.impl;
import cn.hutool.core.date.StopWatch;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
@@ -151,6 +152,7 @@ public class CockpitServiceImpl implements CockpitService {
item1.put("plan_qty", "100"); item1.put("plan_qty", "100");
item1.put("real_qty", "0"); item1.put("real_qty", "0");
item1.put("point_name", "普涂线01"); item1.put("point_name", "普涂线01");
item1.put("device_code", "LTX01");
item1.put("workorder_status", "生产中"); item1.put("workorder_status", "生产中");
today_work.add(item1); today_work.add(item1);
} }
@@ -187,7 +189,7 @@ public class CockpitServiceImpl implements CockpitService {
CompletableFuture<List<Map<String, Object>>> task10 = CompletableFuture.supplyAsync(() -> cockpitMapper.faultAlarm(), pool); CompletableFuture<List<Map<String, Object>>> task10 = CompletableFuture.supplyAsync(() -> cockpitMapper.faultAlarm(), pool);
task10.thenAccept((result) -> { task10.thenAccept((result) -> {
//测试数据,上线后删除 //测试数据,上线后删除
faultAlarmDefault(result, "TS_GHS02"); faultAlarmDefault(result, "GHS01");
getHomeInfo.put("fault_alarm", result); getHomeInfo.put("fault_alarm", result);
}).exceptionally((e) -> { }).exceptionally((e) -> {
log.error("实时故障告警: {}", e.getMessage(), e); log.error("实时故障告警: {}", e.getMessage(), e);
@@ -198,7 +200,7 @@ public class CockpitServiceImpl implements CockpitService {
CompletableFuture<JSONArray> task11 = CompletableFuture.supplyAsync(() -> cockpitMapper.monthlyFaultStatistics(), pool); CompletableFuture<JSONArray> task11 = CompletableFuture.supplyAsync(() -> cockpitMapper.monthlyFaultStatistics(), pool);
task11.thenAccept((result) -> { task11.thenAccept((result) -> {
//测试数据,上线后删除 //测试数据,上线后删除
monthlyFaultStatisticsDefault(result, "TS_GHS02"); monthlyFaultStatisticsDefault(result, "GHS01");
getHomeInfo.put("monthly_fault_statistics", result); getHomeInfo.put("monthly_fault_statistics", result);
}).exceptionally((e) -> { }).exceptionally((e) -> {
log.error("近30日故障统计: {}", e.getMessage(), e); log.error("近30日故障统计: {}", e.getMessage(), e);
@@ -286,22 +288,23 @@ public class CockpitServiceImpl implements CockpitService {
JSONArray today_work = cockpitMapper.todayTbTask(); JSONArray today_work = cockpitMapper.todayTbTask();
if (ObjectUtil.isEmpty(today_work)) { if (ObjectUtil.isEmpty(today_work)) {
JSONObject item1 = new JSONObject(); JSONObject item1 = new JSONObject();
item1.put("workorder_code", "test_240712002"); item1.put("workorder_code", "TS_240712002");
item1.put("material_name", "13.2正"); item1.put("material_name", "13.2正");
item1.put("plan_qty", "100"); item1.put("plan_qty", "100");
item1.put("real_qty", "0"); item1.put("real_qty", "0");
item1.put("point_name", "连涂线01"); item1.put("point_name", "连涂线01");
item1.put("device_code", "LTX01");
item1.put("workorder_status", "就绪"); item1.put("workorder_status", "就绪");
today_work.add(item1); today_work.add(item1);
} }
//实时故障告警 //实时故障告警
List<Map<String, Object>> fault_alarm = cockpitMapper.FaultTime("TBX"); List<Map<String, Object>> fault_alarm = cockpitMapper.FaultTime("TBX");
//测试数据,上线后删除 //测试数据,上线后删除
faultAlarmDefault(fault_alarm, "TS_LTX02"); faultAlarmDefault(fault_alarm, "LTX01");
//近30日故障统计 //近30日故障统计
JSONArray monthly_fault_statistics = cockpitMapper.FaultTotal("TBX"); JSONArray monthly_fault_statistics = cockpitMapper.FaultTotal("TBX");
//测试数据,上线后删除 //测试数据,上线后删除
monthlyFaultStatisticsDefault(monthly_fault_statistics, "TS_LTX02"); monthlyFaultStatisticsDefault(monthly_fault_statistics, "LTX01");
List<Map<String, Object>> monthly_produce_statistics = cockpitMapper.getTbxMonthlyStatistics(); List<Map<String, Object>> monthly_produce_statistics = cockpitMapper.getTbxMonthlyStatistics();
List<Map<String, Object>> tbxMonthlyStatistics = new ArrayList<>(); List<Map<String, Object>> tbxMonthlyStatistics = new ArrayList<>();
for (int i = 0; i < 30; i++) { for (int i = 0; i < 30; i++) {
@@ -364,35 +367,36 @@ public class CockpitServiceImpl implements CockpitService {
@Override @Override
public JSONObject getGhsInfo() { public JSONObject getGhsInfo() {
JSONObject getGhsInfo = new JSONObject(); JSONObject getGhsInfo = new JSONObject();
StopWatch stopWatch = new StopWatch();
stopWatch.start();
//固化汇总 //固化汇总
JSONArray curing_summary = cockpitMapper.curingSummary(); JSONArray curing_summary = cockpitMapper.curingSummary();
stopWatch.stop();
System.out.println("查询固化汇总花费时间---= totalTime = " + stopWatch.getTotalTimeMillis());
StopWatch stopWatch1 = new StopWatch();
stopWatch1.start();
//30天固化统计
List<Map<String, Object>> monthly_gh_qty = cockpitMapper.getGhsQty("30"); List<Map<String, Object>> monthly_gh_qty = cockpitMapper.getGhsQty("30");
List<Map<String, Object>> monthly_gh_qty_default = new ArrayList<>(); List<Map<String, Object>> monthly_gh_qty_default = new ArrayList<>();
getWeekWorkStatistics(monthly_gh_qty, monthly_gh_qty_default, "GH", 30); getWeekWorkStatistics(monthly_gh_qty, monthly_gh_qty_default, "GH", 30);
stopWatch1.stop();
System.out.println("查询30天固化统计花费时间---= totalTime = " + stopWatch1.getTotalTimeMillis());
StopWatch stopWatch2 = new StopWatch();
stopWatch2.start();
//今日固化任务 //今日固化任务
List<Map<String, Object>> gh_material_summary = new ArrayList<>(); List<Map<String, Object>> gh_material_summary = new ArrayList<>();
CompletableFuture<List<TaskInfo>> task3 = CompletableFuture.supplyAsync(() -> { List<TaskInfo> taskInfos = getTasks(RegionCodeConstant.CURING_ZONE);
List<TaskInfo> tasks = new ArrayList<>(); if (ObjectUtil.isNotEmpty(taskInfos)) {
try {
tasks = getTasks(RegionCodeConstant.CURING_ZONE);
} catch (Exception e) {
TaskInfo taskInfo = new TaskInfo();
taskInfo.setError_info(e.toString());
tasks.add(taskInfo);
}
return tasks;
}, pool);
List<TaskInfo> taskInfos = task3.join();
if (ObjectUtil.isNotEmpty(taskInfos )){
taskInfos.forEach(r -> { taskInfos.forEach(r -> {
if (r.getError_info() != null) { Map<String, Object> item = new HashMap<>();
Map<String, Object> item = new HashMap<>(); item.put("material_name", r.getMaterial_name());
item.put("material_name", r.getMaterial_name()); item.put("material_spec", r.getMaterial_spec());
item.put("material_spec", r.getMaterial_spec()); item.put("qty", r.getMaterial_qty());
item.put("qty", r.getQty()); item.put("type", r.getType());
item.put("type", r.getTask_type()); gh_material_summary.add(item);
gh_material_summary.add(item);
}
}); });
} else { } else {
//测试数据,上线后删除 //测试数据,上线后删除
@@ -409,19 +413,36 @@ public class CockpitServiceImpl implements CockpitService {
gh_material_summary.add(item1); gh_material_summary.add(item1);
gh_material_summary.add(item2); gh_material_summary.add(item2);
} }
stopWatch2.stop();
System.out.println("今日固化任务统计花费时间---= totalTime = " + stopWatch2.getTotalTimeMillis());
StopWatch stopWatch3 = new StopWatch();
stopWatch3.start();
//实时故障告警 //实时故障告警
List<Map<String, Object>> fault_alarm = cockpitMapper.FaultTime("GH"); List<Map<String, Object>> fault_alarm = cockpitMapper.FaultTime("GH");
//测试数据,上线后删除 faultAlarmDefault(fault_alarm, "GHS01");
faultAlarmDefault(fault_alarm, "TS_GHS02"); stopWatch3.stop();
System.out.println("查询实时故障告警花费时间---= totalTime = " + stopWatch3.getTotalTimeMillis());
StopWatch stopWatch4 = new StopWatch();
stopWatch4.start();
//近30日故障统计 //近30日故障统计
JSONArray monthly_fault_statistics = cockpitMapper.FaultTotal("GH"); JSONArray monthly_fault_statistics = cockpitMapper.FaultTotal("GH");
//测试数据,上线后删除 //测试数据,上线后删除
monthlyFaultStatisticsDefault(monthly_fault_statistics, "TS_GHS02"); monthlyFaultStatisticsDefault(monthly_fault_statistics, "GHS01");
stopWatch4.stop();
System.out.println("查询近30日故障统计花费时间---= totalTime = " + stopWatch4.getTotalTimeMillis());
getGhsInfo.put("curing_summary", curing_summary); getGhsInfo.put("curing_summary", curing_summary);
getGhsInfo.put("monthly_gh_qty", monthly_gh_qty_default); getGhsInfo.put("monthly_gh_qty", monthly_gh_qty_default);
getGhsInfo.put("gh_material_summary", gh_material_summary); getGhsInfo.put("gh_material_summary", gh_material_summary);
getGhsInfo.put("fault_alarm", fault_alarm); getGhsInfo.put("fault_alarm", fault_alarm);
getGhsInfo.put("monthly_fault_statistics", monthly_fault_statistics); getGhsInfo.put("monthly_fault_statistics", monthly_fault_statistics);
return getGhsInfo; return getGhsInfo;
} }
@@ -510,7 +531,7 @@ public class CockpitServiceImpl implements CockpitService {
//测试数据,上线后删除 //测试数据,上线后删除
if (ObjectUtil.isEmpty(monthly_fault_statistics)) { if (ObjectUtil.isEmpty(monthly_fault_statistics)) {
JSONObject item = new JSONObject(); JSONObject item = new JSONObject();
item.put("region_name", "TS_GHS"); item.put("region_name", "GHS");
item.put("alarm_qty", "1"); item.put("alarm_qty", "1");
monthly_fault_statistics.add(item); monthly_fault_statistics.add(item);
} }
@@ -525,8 +546,12 @@ public class CockpitServiceImpl implements CockpitService {
* 设备ui * 设备ui
*/ */
@Override @Override
public JSONObject equipmentInfo(String deviceCode) { public JSONObject equipmentInfo(String code) {
if (StringUtils.isBlank(code)) {
throw new RuntimeException("设备编号不能为空");
}
JSONObject res = new JSONObject(); JSONObject res = new JSONObject();
String deviceCode = code.toUpperCase();
SchBasePoint point = pointService.getById(deviceCode); SchBasePoint point = pointService.getById(deviceCode);
String type = point != null ? point.getRegion_code() : RegionCodeConstant.VEHICLEINFO; String type = point != null ? point.getRegion_code() : RegionCodeConstant.VEHICLEINFO;
List<SchBasePoint> points; List<SchBasePoint> points;
@@ -600,7 +625,7 @@ public class CockpitServiceImpl implements CockpitService {
List<Map<String, Object>> tb_real_qty = cockpitMapper.getTxQty("30", "TBX"); List<Map<String, Object>> tb_real_qty = cockpitMapper.getTxQty("30", "TBX");
List<Map<String, Object>> tb_real_qty_default = new ArrayList<>(); List<Map<String, Object>> tb_real_qty_default = new ArrayList<>();
getWeekWorkStatistics(tb_real_qty, tb_real_qty_default, "TBX", 30); getWeekWorkStatistics(tb_real_qty, tb_real_qty_default, "TBX", 30);
res.put("production_month ", tb_real_qty_default); res.put("production_month", tb_real_qty_default);
break; break;
case RegionCodeConstant.CURING_ZONE: case RegionCodeConstant.CURING_ZONE:
//固化室,需要显示整个设备+内部位置明细 //固化室,需要显示整个设备+内部位置明细
@@ -648,8 +673,8 @@ public class CockpitServiceImpl implements CockpitService {
List<Map<String, Object>> gh_real_qty = cockpitMapper.getGhsQty("30"); List<Map<String, Object>> gh_real_qty = cockpitMapper.getGhsQty("30");
List<Map<String, Object>> gh_real_qty_default = new ArrayList<>(); List<Map<String, Object>> gh_real_qty_default = new ArrayList<>();
getWeekWorkStatistics(gh_real_qty, gh_real_qty_default, "GHS", 30); getWeekWorkStatistics(gh_real_qty, gh_real_qty_default, "GHS", 30);
res.put("production_month ", gh_real_qty_default); res.put("production_month", gh_real_qty_default);
res.put("current_tasks ", current_tasks); res.put("current_tasks", current_tasks);
res.put("details", ghsArray); res.put("details", ghsArray);
break; break;
case RegionCodeConstant.EMPTY_TEMPORARY_STORAGE_AREA: case RegionCodeConstant.EMPTY_TEMPORARY_STORAGE_AREA:

View File

@@ -331,7 +331,8 @@
m.material_name AS material_name, m.material_name AS material_name,
w.plan_qty, w.plan_qty,
w.real_qty, w.real_qty,
w.point_name, w.point_name ,
w.point_code as device_code,
w.workorder_status w.workorder_status
FROM `pdm_bd_workorder` w FROM `pdm_bd_workorder` w
LEFT JOIN md_base_material m ON m.material_id = w.material_id LEFT JOIN md_base_material m ON m.material_id = w.material_id
@@ -521,6 +522,7 @@
w.plan_qty, w.plan_qty,
w.real_qty, w.real_qty,
w.point_name, w.point_name,
w.point_code as device_code,
w.workorder_status w.workorder_status
FROM FROM
`pdm_bd_workorder` w `pdm_bd_workorder` w
@@ -529,22 +531,42 @@
w.workorder_status=3 w.workorder_status=3
And DATE(w.create_time)=CURDATE() And DATE(w.create_time)=CURDATE()
</select> </select>
<select id="FaultTime1" resultType="java.util.HashMap">
SELECT
d1.device_code,
d1.failure_info AS fault_cause,
d1.failure_time AS alarm_time
FROM
das_device_fault d1
WHERE
d1.failure_time = (
SELECT MAX(d2.failure_time)
FROM das_device_fault d2
WHERE d2.device_code = d1.device_code
AND d2.region_code = #{region_code}
)
AND d1.region_code = #{region_code}
And d1.current_status=1
</select>
<select id="FaultTime" resultType="java.util.HashMap"> <select id="FaultTime" resultType="java.util.HashMap">
SELECT SELECT
d1.device_code, d1.device_code,
d1.failure_info AS fault_cause, d1.failure_info AS fault_cause,
d1.failure_time AS alarm_time d1.failure_time AS alarm_time
FROM FROM
das_device_fault d1 das_device_fault d1
WHERE JOIN
d1.failure_time = ( (SELECT
SELECT MAX(d2.failure_time) device_code,
FROM das_device_fault d2 MAX(failure_time) AS max_failure_time
WHERE d2.device_code = d1.device_code FROM
AND d2.region_code = #{region_code} das_device_fault
) WHERE
AND d1.region_code = #{region_code} region_code = #{region_code} GROUP BY device_code) d2
And d1.current_status=1 ON d1.device_code = d2.device_code AND d1.failure_time = d2.max_failure_time
WHERE
d1.region_code = #{region_code}
AND d1.current_status = 1;
</select> </select>
<select id="FaultTotal" resultType="com.alibaba.fastjson.JSONObject"> <select id="FaultTotal" resultType="com.alibaba.fastjson.JSONObject">
SELECT SELECT