add:新增超威大屏接口。
This commit is contained in:
@@ -0,0 +1,67 @@
|
|||||||
|
package org.nl.acs.enums;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.nl.acs.utils.MapOf;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* acs状态枚举
|
||||||
|
*
|
||||||
|
* @author gbx
|
||||||
|
* @since 2024-01-31
|
||||||
|
*/
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Getter
|
||||||
|
public enum AcsDefineEnum {
|
||||||
|
|
||||||
|
//agv状态 1-关机2-运行中3-交通管制4-任务等待5-充电中6-故障中7-低电量
|
||||||
|
AGV_STATUS(MapOf.of("关机", "1", "运行中", "2", "交通管制", "3", "任务等待", "4", "充电中", "5", "故障中", "6", "低电量", "7")),
|
||||||
|
|
||||||
|
//RGV状态 1-空闲 2-工作中 3-手动 4-下线
|
||||||
|
RGV_STATUS(MapOf.of("1","IDLE","2","WORK","3","UNAVAIL","4","OFFLINE")),
|
||||||
|
|
||||||
|
//载具类型
|
||||||
|
VEHICLE_TYPE(MapOf.of("普涂", "1", "连涂", "2")),
|
||||||
|
|
||||||
|
//是否
|
||||||
|
IS_USED(MapOf.of("启用", "1", "未启用", "0"));
|
||||||
|
|
||||||
|
|
||||||
|
private Map<String, String> code;
|
||||||
|
|
||||||
|
public String code(String desc) {
|
||||||
|
String code = this.getCode().get(desc);
|
||||||
|
if (StringUtils.isNotEmpty(code)) {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
throw new RuntimeException(this.name() + "对应类型" + desc + "未定义");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long longCode(String desc) {
|
||||||
|
String code = this.getCode().get(desc);
|
||||||
|
if (StringUtils.isNotEmpty(code)) {
|
||||||
|
return Long.valueOf(code);
|
||||||
|
}
|
||||||
|
throw new RuntimeException(this.name() + "对应类型" + desc + "未定义");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String check(String code) {
|
||||||
|
for (Map.Entry<String, String> entry : this.getCode().entrySet()) {
|
||||||
|
if (entry.getValue().equals(code)) {
|
||||||
|
return entry.getValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new RuntimeException(this.name() + "对应类型" + code + "未定义");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String check1(String code) {
|
||||||
|
for (Map.Entry<String, String> entry : this.getCode().entrySet()) {
|
||||||
|
if (entry.getValue().equals(code)) {
|
||||||
|
return entry.getKey();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new RuntimeException(this.name() + "对应类型" + code + "未定义");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package org.nl.acs.utils;
|
||||||
|
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @author ZZQ
|
||||||
|
* @Date 2022/11/29 2:55 下午
|
||||||
|
*/
|
||||||
|
public class MapOf implements Serializable {
|
||||||
|
|
||||||
|
public static <K> HashMap of(K... key) {
|
||||||
|
HashMap map = new HashMap<>();
|
||||||
|
for (int i = 0; i < (key.length & ~1); i = i + 2) {
|
||||||
|
map.put(key[i], key[i + 1]);
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,289 @@
|
|||||||
|
package org.nl.quartz.task;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.nl.acs.agv.server.ZheDaAgvService;
|
||||||
|
import org.nl.acs.device.domain.Device;
|
||||||
|
import org.nl.acs.device_driver.basedriver.cw_site.CwSiteDeviceDriver;
|
||||||
|
import org.nl.acs.device_driver.basedriver.standard_autodoor.StandardAutodoorDeviceDriver;
|
||||||
|
import org.nl.acs.device_driver.basedriver.standard_inspect_site.StandardInspectSiteDeviceDriver;
|
||||||
|
import org.nl.acs.instruction.service.InstructionService;
|
||||||
|
import org.nl.acs.opc.DeviceAppService;
|
||||||
|
import org.nl.common.utils.RedisUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.text.DecimalFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 自动同步设备状态
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class SyncDeviceStatus {
|
||||||
|
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
ZheDaAgvService agvService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RedisUtils redisUtils;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private DeviceAppService deviceAppService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private InstructionService instructionService;
|
||||||
|
|
||||||
|
public void run() throws Exception {
|
||||||
|
device();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void device() {
|
||||||
|
long startTime = System.currentTimeMillis();
|
||||||
|
try {
|
||||||
|
//总数
|
||||||
|
Integer a1_count = 0;
|
||||||
|
//正常运行
|
||||||
|
Long a1_item1 = 0L;
|
||||||
|
//暂未生产
|
||||||
|
Long a1_item2 = 0L;
|
||||||
|
//空闲设备
|
||||||
|
Long a1_item3 = 0L;
|
||||||
|
//故障设备
|
||||||
|
Long a1_item4 = 0L;
|
||||||
|
Integer a2_count = 0;
|
||||||
|
Long a2_item1 = 0L;
|
||||||
|
Long a2_item2 = 0L;
|
||||||
|
Long a2_item3 = 0L;
|
||||||
|
Long a2_item4 = 0L;
|
||||||
|
JSONArray tbxList1 = new JSONArray();
|
||||||
|
JSONArray tbxList2 = new JSONArray();
|
||||||
|
JSONArray ghsList1 = new JSONArray();
|
||||||
|
JSONArray ghsList2 = new JSONArray();
|
||||||
|
List<JSONObject> siteList = new ArrayList<>();
|
||||||
|
//JSONArray agvList = new JSONArray();
|
||||||
|
log.info("自动线程开始查询agv设备状态");
|
||||||
|
List<Device> deviceList = deviceAppService.findAllDevice();
|
||||||
|
for (Device device : deviceList) {
|
||||||
|
if (device.getDeviceDriver() instanceof StandardInspectSiteDeviceDriver) {
|
||||||
|
if (StringUtils.isNotBlank(device.getOpc_server_id())) {
|
||||||
|
StandardInspectSiteDeviceDriver tbx = (StandardInspectSiteDeviceDriver) device.getDeviceDriver();
|
||||||
|
JSONObject json = new JSONObject();
|
||||||
|
json.put("device_code", tbx.getDeviceCode());
|
||||||
|
if (tbx.getError() == 0) {
|
||||||
|
//0:脱机,1:故障,2:待机,3:运行中
|
||||||
|
//0:无货,3:有货
|
||||||
|
getDeviceMode(tbx.getMode(), json);
|
||||||
|
} else {
|
||||||
|
json.put("mode", "1");
|
||||||
|
}
|
||||||
|
//区分车间
|
||||||
|
if (tbx.getDeviceCode().replaceAll("[^0-9]", "").startsWith("0")) {
|
||||||
|
json.put("workshop_code", "A1");
|
||||||
|
tbxList1.add(json);
|
||||||
|
} else {
|
||||||
|
json.put("workshop_code", "A2");
|
||||||
|
tbxList2.add(json);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) {
|
||||||
|
if (StringUtils.isNotBlank(device.getOpc_server_id())) {
|
||||||
|
StandardAutodoorDeviceDriver ghs = (StandardAutodoorDeviceDriver) device.getDeviceDriver();
|
||||||
|
JSONObject json = new JSONObject();
|
||||||
|
json.put("device_code", ghs.getDeviceCode());
|
||||||
|
if (ghs.getError() == 0) {
|
||||||
|
//0:脱机,1:故障,2:待机,3:运行中
|
||||||
|
getDeviceMode(ghs.getMode(), json);
|
||||||
|
//json.put("mode", ghs.getMode() == 0 ? "0" : "3");
|
||||||
|
} else {
|
||||||
|
json.put("mode", "1");
|
||||||
|
}
|
||||||
|
if (Integer.parseInt(ghs.getDeviceCode().replaceAll("[^0-9]", "")) < 11) {
|
||||||
|
json.put("workshop_code", "A1");
|
||||||
|
ghsList1.add(json);
|
||||||
|
} else {
|
||||||
|
json.put("workshop_code", "A2");
|
||||||
|
ghsList2.add(json);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (device.getDeviceDriver() instanceof CwSiteDeviceDriver) {
|
||||||
|
if (StringUtils.isNotBlank(device.getOpc_server_id())) {
|
||||||
|
CwSiteDeviceDriver site = (CwSiteDeviceDriver) device.getDeviceDriver();
|
||||||
|
JSONObject json = new JSONObject();
|
||||||
|
json.put("device_code", site.getDeviceCode());
|
||||||
|
json.put("workshop_code", "A1");
|
||||||
|
if (site.getError() == 0) {
|
||||||
|
//0:脱机,1:故障,2:待机,3:运行中
|
||||||
|
getDeviceMode(site.getMode(), json);
|
||||||
|
//json.put("mode", site.getMode() == 0 ? "0" : "3");
|
||||||
|
} else {
|
||||||
|
json.put("mode", "1");
|
||||||
|
}
|
||||||
|
siteList.add(json);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// else if (device.getDeviceDriver() instanceof AgvNdcOneDeviceDriver) {
|
||||||
|
// AgvNdcOneDeviceDriver agvNdcOneDeviceDriver = (AgvNdcOneDeviceDriver) device.getDeviceDriver();
|
||||||
|
// JSONObject json = new JSONObject();
|
||||||
|
// json.put("device_code", device.getDevice_code());
|
||||||
|
// json.put("device_name", device.getDevice_name());
|
||||||
|
// json.put("device_status", agvNdcOneDeviceDriver.getStatus());
|
||||||
|
// json.put("energyLevel", agvNdcOneDeviceDriver.getElectric_qty());
|
||||||
|
// json.put("positionX", agvNdcOneDeviceDriver.getX());
|
||||||
|
// json.put("positionY", agvNdcOneDeviceDriver.getY());
|
||||||
|
// json.put("positionAngle", agvNdcOneDeviceDriver.getAngle());
|
||||||
|
// agvList.add(json);
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
List<JSONObject> bpList = siteList.stream()
|
||||||
|
.filter(r -> r.getString("device_code").contains("BP"))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
redisUtils.set("tbxList1", tbxList1);
|
||||||
|
redisUtils.set("tbxList2", tbxList2);
|
||||||
|
redisUtils.set("ghsList1", ghsList1);
|
||||||
|
redisUtils.set("ghsList2", ghsList2);
|
||||||
|
redisUtils.set("bpjList", bpList);
|
||||||
|
tbxList1.addAll(ghsList1);
|
||||||
|
tbxList1.addAll(bpList);
|
||||||
|
JSONArray a1 = new JSONArray();
|
||||||
|
JSONArray a2 = new JSONArray();
|
||||||
|
getDeviceCountAndPercentage(tbxList1, a1);
|
||||||
|
tbxList2.addAll(ghsList2);
|
||||||
|
getDeviceCountAndPercentage(tbxList2, a2);
|
||||||
|
redisUtils.set("deviceA1", a1);
|
||||||
|
redisUtils.set("deviceA2", a2);
|
||||||
|
//正极板缓存区出库对接位,正极板空架回收对接位
|
||||||
|
List<JSONObject> zjbKjHswList = siteList.stream()
|
||||||
|
.filter(r -> r.getString("device_code").contains("ZJBHCQCKDJW") || r.getString("device_code").contains("ZJBKJHSDJW"))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
redisUtils.set("zjbKjHswList", zjbKjHswList);
|
||||||
|
//负极板空架对接位
|
||||||
|
List<JSONObject> fjbKjDjwList = siteList.stream()
|
||||||
|
.filter(r -> r.getString("device_code").contains("FJBKJDJW"))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
redisUtils.set("fjbKjDjwList", fjbKjDjwList);
|
||||||
|
//正极板对接位
|
||||||
|
List<JSONObject> zjbDjwList = siteList.stream()
|
||||||
|
.filter(r -> r.getString("device_code").contains("ZJBDJW"))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
redisUtils.set("zjbDjwList", zjbDjwList);
|
||||||
|
// if (ObjectUtil.isNotEmpty(agv)) {
|
||||||
|
// List<String> deviceCodes = agv.stream()
|
||||||
|
// .map(r -> {
|
||||||
|
// String deviceCode = ((JSONObject) r).getString("device_code");
|
||||||
|
// if (StringUtils.isNotBlank(deviceCode)) {
|
||||||
|
// return deviceCode.substring(deviceCode.length() - 1);
|
||||||
|
// } else {
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
// .filter(Objects::nonNull)
|
||||||
|
// .collect(Collectors.toList());
|
||||||
|
// if (ObjectUtil.isNotEmpty(deviceCodes)) {
|
||||||
|
// List<InstructionMybatis> instructionList = instructionService.list(new LambdaQueryWrapper<InstructionMybatis>().in(InstructionMybatis::getCarno, deviceCodes).lt(InstructionMybatis::getInstruction_status, 2).eq(InstructionMybatis::getIs_delete, 0));
|
||||||
|
// if (ObjectUtil.isNotEmpty(instructionList)) {
|
||||||
|
// Map<String, String> taskCodeToTaskIdMap = instructionList.stream()
|
||||||
|
// .filter(instruction -> StringUtils.isNotBlank(instruction.getExt_task_id()))
|
||||||
|
// .collect(Collectors.toMap(
|
||||||
|
// InstructionMybatis::getInstruction_code,
|
||||||
|
// InstructionMybatis::getExt_task_id
|
||||||
|
// ));
|
||||||
|
// agv.forEach(r -> {
|
||||||
|
// JSONObject Item = (JSONObject) r;
|
||||||
|
// String taskId = taskCodeToTaskIdMap.get(Item.getString("task_code"));
|
||||||
|
// Item.put("task_id", "");
|
||||||
|
// if (StringUtils.isNotBlank(taskId)) {
|
||||||
|
// Item.put("task_id", taskId);
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
//redisUtils.set("agvList", agvList);
|
||||||
|
log.trace("自动上报驱动状态,完毕耗时{}", System.currentTimeMillis() - startTime);
|
||||||
|
} catch (Exception e) {
|
||||||
|
//log.error("自动线程开始查询AGV设备,自动上报驱动状态失败{}{}", e, e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void getDeviceCountAndPercentage(JSONArray deviceList, JSONArray result) {
|
||||||
|
Integer a1_count;
|
||||||
|
Long a1_item3;
|
||||||
|
Long a1_item1;
|
||||||
|
Long a1_item2;
|
||||||
|
Long a1_item4;
|
||||||
|
//0:脱机,1:故障,2:待机,3:运行中
|
||||||
|
a1_count = deviceList.size();
|
||||||
|
JSONObject item1 = new JSONObject();
|
||||||
|
item1.put("count", a1_count);
|
||||||
|
result.add(item1);
|
||||||
|
a1_item1 = deviceList.stream()
|
||||||
|
.map(JSONObject.class::cast)
|
||||||
|
.filter(r -> "3".equals(r.getString("mode")))
|
||||||
|
.count();
|
||||||
|
JSONObject item2 = new JSONObject();
|
||||||
|
item2.put("count", a1_item1.toString());
|
||||||
|
item2.put("name", "正常运行");
|
||||||
|
// 计算百分比
|
||||||
|
double a1Item1Percentage = (double) a1_item1 / a1_count * 100;
|
||||||
|
String a1Item1Percentages = new DecimalFormat("0.00").format(a1Item1Percentage) + "%";
|
||||||
|
item2.put("percent", a1Item1Percentages);
|
||||||
|
result.add(item2);
|
||||||
|
a1_item2 = deviceList.stream()
|
||||||
|
.map(JSONObject.class::cast)
|
||||||
|
.filter(r -> "2".equals(r.getString("mode")))
|
||||||
|
.count();
|
||||||
|
JSONObject item3 = new JSONObject();
|
||||||
|
item3.put("count", a1_item2.toString());
|
||||||
|
item3.put("name", "暂未生产");
|
||||||
|
// 计算百分比
|
||||||
|
double a1Item2Percentage = (double) a1_item2 / a1_count * 100;
|
||||||
|
String a1Item2Percentages = new DecimalFormat("0.00").format(a1Item2Percentage) + "%";
|
||||||
|
item3.put("percent", a1Item2Percentages);
|
||||||
|
result.add(item3);
|
||||||
|
a1_item3 = deviceList.stream()
|
||||||
|
.map(JSONObject.class::cast)
|
||||||
|
.filter(r -> "0".equals(r.getString("mode")))
|
||||||
|
.count();
|
||||||
|
JSONObject item4 = new JSONObject();
|
||||||
|
item4.put("count", a1_item3.toString());
|
||||||
|
item4.put("name", "空闲设备");
|
||||||
|
// 计算百分比
|
||||||
|
double a1Item3Percentage = (double) a1_item3 / a1_count * 100;
|
||||||
|
String a1Item3Percentages = new DecimalFormat("0.00").format(a1Item3Percentage) + "%";
|
||||||
|
item4.put("percent", a1Item3Percentages);
|
||||||
|
result.add(item4);
|
||||||
|
a1_item4 = deviceList.stream()
|
||||||
|
.map(JSONObject.class::cast)
|
||||||
|
.filter(r -> "1".equals(r.getString("mode")))
|
||||||
|
.count();
|
||||||
|
JSONObject item5 = new JSONObject();
|
||||||
|
item5.put("count", a1_item4.toString());
|
||||||
|
item5.put("name", "故障设备");
|
||||||
|
// 计算百分比
|
||||||
|
double a1Item4Percentage = (double) a1_item4 / a1_count * 100;
|
||||||
|
String a1Item4Percentages = new DecimalFormat("0.00").format(a1Item4Percentage) + "%";
|
||||||
|
item5.put("percent", a1Item4Percentages);
|
||||||
|
result.add(item5);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void getDeviceMode(Integer mode, JSONObject json) {
|
||||||
|
if (mode == 0) {
|
||||||
|
json.put("mode", "0");
|
||||||
|
} else if (mode == 2) {
|
||||||
|
json.put("mode", "2");
|
||||||
|
} else {
|
||||||
|
json.put("mode", "3");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -7,10 +7,9 @@ spring:
|
|||||||
db-type: com.alibaba.druid.pool.DruidDataSource
|
db-type: com.alibaba.druid.pool.DruidDataSource
|
||||||
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
|
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
|
||||||
# url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:stand_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
|
# url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:stand_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
|
||||||
url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:cw_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
|
url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.10.10}:${DB_PORT:3306}/${DB_NAME:cw_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&useOldAliasMetadataBehavior=true
|
||||||
username: ${DB_USER:root}
|
username: ${DB_USER:root}
|
||||||
# password: ${DB_PWD:Root.123456}
|
password: ${DB_PWD:123456789}
|
||||||
password: ${DB_PWD:123456}
|
|
||||||
# 初始连接数
|
# 初始连接数
|
||||||
initial-size: 5
|
initial-size: 5
|
||||||
# 最小连接数
|
# 最小连接数
|
||||||
@@ -71,7 +70,7 @@ spring:
|
|||||||
baseline-on-migrate: true
|
baseline-on-migrate: true
|
||||||
redis:
|
redis:
|
||||||
#数据库索引
|
#数据库索引
|
||||||
database: ${REDIS_DB:2}
|
database: ${REDIS_DB:5}
|
||||||
host: ${REDIS_HOST:127.0.0.1}
|
host: ${REDIS_HOST:127.0.0.1}
|
||||||
port: ${REDIS_PORT:6379}
|
port: ${REDIS_PORT:6379}
|
||||||
# password: ${REDIS_PWD:}
|
# password: ${REDIS_PWD:}
|
||||||
@@ -169,7 +168,7 @@ sa-token:
|
|||||||
token-session-check-login: false
|
token-session-check-login: false
|
||||||
alone-redis:
|
alone-redis:
|
||||||
# Redis数据库索引(默认为0)
|
# Redis数据库索引(默认为0)
|
||||||
database: 2
|
database: 5
|
||||||
# Redis服务器地址
|
# Redis服务器地址
|
||||||
host: 127.0.0.1
|
host: 127.0.0.1
|
||||||
# Redis服务器连接端口
|
# Redis服务器连接端口
|
||||||
|
|||||||
@@ -98,6 +98,11 @@
|
|||||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||||
<version>${sa-token.version}</version>
|
<version>${sa-token.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.dromara.dynamictp</groupId>
|
||||||
|
<artifactId>dynamic-tp-spring-boot-starter-adapter-webserver</artifactId>
|
||||||
|
<version>1.1.7</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cn.dev33</groupId>
|
<groupId>cn.dev33</groupId>
|
||||||
<artifactId>sa-token-sso</artifactId>
|
<artifactId>sa-token-sso</artifactId>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaIgnore;
|
|||||||
import com.alicp.jetcache.anno.config.EnableCreateCacheAnnotation;
|
import com.alicp.jetcache.anno.config.EnableCreateCacheAnnotation;
|
||||||
import com.alicp.jetcache.anno.config.EnableMethodCache;
|
import com.alicp.jetcache.anno.config.EnableMethodCache;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
|
import org.dromara.dynamictp.core.spring.EnableDynamicTp;
|
||||||
import org.mybatis.spring.annotation.MapperScan;
|
import org.mybatis.spring.annotation.MapperScan;
|
||||||
import org.nl.config.SpringContextHolder;
|
import org.nl.config.SpringContextHolder;
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
@@ -35,6 +36,7 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
@EnableMethodCache(basePackages = "org.nl")
|
@EnableMethodCache(basePackages = "org.nl")
|
||||||
@EnableCreateCacheAnnotation
|
@EnableCreateCacheAnnotation
|
||||||
@MapperScan("org.nl.**.mapper")
|
@MapperScan("org.nl.**.mapper")
|
||||||
|
@EnableDynamicTp
|
||||||
public class AppRun {
|
public class AppRun {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package org.nl.common.base;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 异常信息
|
||||||
|
*
|
||||||
|
* @author gbx
|
||||||
|
* @since 2024-01-04
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ErrorData {
|
||||||
|
private String error_info;
|
||||||
|
}
|
||||||
@@ -17,6 +17,7 @@ package org.nl.config.thread;
|
|||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
|
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.scheduling.annotation.AsyncConfigurer;
|
import org.springframework.scheduling.annotation.AsyncConfigurer;
|
||||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||||
@@ -67,4 +68,35 @@ public class AsyncTaskExecutePool implements AsyncConfigurer {
|
|||||||
log.error("exception method:"+method.getName());
|
log.error("exception method:"+method.getName());
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 线程池配置
|
||||||
|
* @return java.util.concurrent.Executor
|
||||||
|
* @author gbx
|
||||||
|
* @since 2023-06-16
|
||||||
|
*/
|
||||||
|
@Bean(name = "taskExecutor")
|
||||||
|
public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
|
||||||
|
ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
|
||||||
|
// 核心线程池大小
|
||||||
|
threadPoolTaskExecutor.setCorePoolSize(config.getCorePoolSize());
|
||||||
|
// 最大线程数
|
||||||
|
threadPoolTaskExecutor.setMaxPoolSize(config.getMaxPoolSize());
|
||||||
|
// 队列容量
|
||||||
|
threadPoolTaskExecutor.setQueueCapacity(config.getQueueCapacity());
|
||||||
|
// 活跃时间
|
||||||
|
threadPoolTaskExecutor.setKeepAliveSeconds(config.getKeepAliveSeconds());
|
||||||
|
// 主线程等待子线程执行时间
|
||||||
|
threadPoolTaskExecutor.setAwaitTerminationSeconds(config.getAwaitTerminationSeconds());
|
||||||
|
// threadPoolTaskExecutor.setAwaitTerminationSeconds(30);
|
||||||
|
// 线程名字前缀
|
||||||
|
threadPoolTaskExecutor.setThreadNamePrefix("test-thread-");
|
||||||
|
// RejectedExecutionHandler:当pool已经达到max-size的时候,如何处理新任务
|
||||||
|
// CallerRunsPolicy:不在新线程中执行任务,而是由调用者所在的线程来执行
|
||||||
|
threadPoolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
|
||||||
|
// 初始化
|
||||||
|
threadPoolTaskExecutor.initialize();
|
||||||
|
return threadPoolTaskExecutor;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,4 +36,5 @@ public class AsyncTaskProperties {
|
|||||||
private int keepAliveSeconds;
|
private int keepAliveSeconds;
|
||||||
|
|
||||||
private int queueCapacity;
|
private int queueCapacity;
|
||||||
|
private int awaitTerminationSeconds;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,12 @@
|
|||||||
package org.nl.config.thread;
|
package org.nl.config.thread;
|
||||||
|
|
||||||
|
|
||||||
|
import org.dromara.dynamictp.core.support.DynamicTp;
|
||||||
import org.nl.config.SpringContextHolder;
|
import org.nl.config.SpringContextHolder;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.context.annotation.Primary;
|
||||||
|
|
||||||
import java.util.concurrent.ArrayBlockingQueue;
|
import java.util.concurrent.ArrayBlockingQueue;
|
||||||
import java.util.concurrent.ThreadPoolExecutor;
|
import java.util.concurrent.ThreadPoolExecutor;
|
||||||
@@ -27,7 +32,10 @@ import java.util.concurrent.TimeUnit;
|
|||||||
* @author Zheng Jie
|
* @author Zheng Jie
|
||||||
* @date 2019年10月31日18:16:47
|
* @date 2019年10月31日18:16:47
|
||||||
*/
|
*/
|
||||||
|
@Configuration
|
||||||
public class ThreadPoolExecutorUtil {
|
public class ThreadPoolExecutorUtil {
|
||||||
|
@Autowired
|
||||||
|
private AsyncTaskProperties asyncTaskProperties;
|
||||||
|
|
||||||
public static ThreadPoolExecutor getPoll(){
|
public static ThreadPoolExecutor getPoll(){
|
||||||
AsyncTaskProperties properties = SpringContextHolder.getBean(AsyncTaskProperties.class);
|
AsyncTaskProperties properties = SpringContextHolder.getBean(AsyncTaskProperties.class);
|
||||||
@@ -40,4 +48,18 @@ public class ThreadPoolExecutorUtil {
|
|||||||
new TheadFactoryName()
|
new TheadFactoryName()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
@Primary
|
||||||
|
@DynamicTp("el-thread")
|
||||||
|
public ThreadPoolExecutor threadPoolExecutor() {
|
||||||
|
return new ThreadPoolExecutor(
|
||||||
|
asyncTaskProperties.getCorePoolSize(),
|
||||||
|
asyncTaskProperties.getMaxPoolSize(),
|
||||||
|
asyncTaskProperties.getKeepAliveSeconds(),
|
||||||
|
TimeUnit.SECONDS,
|
||||||
|
new ArrayBlockingQueue<>(asyncTaskProperties.getQueueCapacity()),
|
||||||
|
new TheadFactoryName()
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,67 @@
|
|||||||
|
package org.nl.wms.cockpit;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.nl.config.MapOf;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* acs状态枚举
|
||||||
|
*
|
||||||
|
* @author gbx
|
||||||
|
* @since 2024-01-31
|
||||||
|
*/
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Getter
|
||||||
|
public enum AcsDefineEnum {
|
||||||
|
|
||||||
|
//agv状态 1-关机2-运行中3-交通管制4-任务等待5-充电中6-故障中7-低电量
|
||||||
|
AGV_STATUS(MapOf.of("关机", "1", "运行中", "2", "交通管制", "3", "任务等待", "4", "充电中", "5", "故障中", "6", "低电量", "7")),
|
||||||
|
|
||||||
|
//RGV状态 1-空闲 2-工作中 3-手动 4-下线
|
||||||
|
RGV_STATUS(MapOf.of("1","IDLE","2","WORK","3","UNAVAIL","4","OFFLINE")),
|
||||||
|
|
||||||
|
//载具类型
|
||||||
|
VEHICLE_TYPE(MapOf.of("普涂", "1", "连涂", "2")),
|
||||||
|
|
||||||
|
//是否
|
||||||
|
IS_USED(MapOf.of("启用", "1", "未启用", "0"));
|
||||||
|
|
||||||
|
|
||||||
|
private Map<String, String> code;
|
||||||
|
|
||||||
|
public String code(String desc) {
|
||||||
|
String code = this.getCode().get(desc);
|
||||||
|
if (StringUtils.isNotEmpty(code)) {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
throw new RuntimeException(this.name() + "对应类型" + desc + "未定义");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long longCode(String desc) {
|
||||||
|
String code = this.getCode().get(desc);
|
||||||
|
if (StringUtils.isNotEmpty(code)) {
|
||||||
|
return Long.valueOf(code);
|
||||||
|
}
|
||||||
|
throw new RuntimeException(this.name() + "对应类型" + desc + "未定义");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String check(String code) {
|
||||||
|
for (Map.Entry<String, String> entry : this.getCode().entrySet()) {
|
||||||
|
if (entry.getValue().equals(code)) {
|
||||||
|
return entry.getValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new RuntimeException(this.name() + "对应类型" + code + "未定义");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String check1(String code) {
|
||||||
|
for (Map.Entry<String, String> entry : this.getCode().entrySet()) {
|
||||||
|
if (entry.getValue().equals(code)) {
|
||||||
|
return entry.getKey();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new RuntimeException(this.name() + "对应类型" + code + "未定义");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
package org.nl.wms.cockpit.controller;
|
||||||
|
|
||||||
|
import cn.dev33.satoken.annotation.SaIgnore;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.nl.common.logging.annotation.Log;
|
||||||
|
import org.nl.wms.cockpit.service.CockpitService;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: gbx
|
||||||
|
* @Description: 天能数字孪生接口
|
||||||
|
* @Date: 2024/10/18
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@Api(tags = "数字孪生")
|
||||||
|
@RequestMapping("/api/chaoWei")
|
||||||
|
@Slf4j
|
||||||
|
@SaIgnore
|
||||||
|
public class CockpitController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CockpitService cockpitService;
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping("/allDeviceStatus")
|
||||||
|
@Log("秒级接口")
|
||||||
|
@ApiOperation("秒级接口")
|
||||||
|
public ResponseEntity<Object> allDeviceStatus() {
|
||||||
|
return new ResponseEntity<>(cockpitService.allDeviceStatus(), HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping("/getHomeInfo")
|
||||||
|
@Log("获取首页总览信息")
|
||||||
|
@ApiOperation("获取首页总览信息")
|
||||||
|
public ResponseEntity<Object> getHomeInfo() {
|
||||||
|
return new ResponseEntity<>(cockpitService.getHomeInfo(), HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package org.nl.wms.cockpit.service;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: gbx
|
||||||
|
* @Description:
|
||||||
|
* @Date: 2024/10/18
|
||||||
|
*/
|
||||||
|
public interface CockpitService {
|
||||||
|
|
||||||
|
|
||||||
|
JSONObject allDeviceStatus();
|
||||||
|
|
||||||
|
|
||||||
|
HashMap<String, Object> getHomeInfo();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package org.nl.wms.cockpit.service.dao;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设备故障表
|
||||||
|
*
|
||||||
|
* @author gbx
|
||||||
|
* @since 2024-01-12
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@TableName("das_device_fault")
|
||||||
|
public class DasDeviceFault implements Serializable {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@TableId(value = "data_id", type = IdType.NONE)
|
||||||
|
private String data_id;
|
||||||
|
|
||||||
|
private String region_code;
|
||||||
|
|
||||||
|
private String device_code;
|
||||||
|
|
||||||
|
private String failure_time;
|
||||||
|
|
||||||
|
private String failure_info;
|
||||||
|
|
||||||
|
private String current_status;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package org.nl.wms.cockpit.service.dao;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import org.nl.common.base.ErrorData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author gbx
|
||||||
|
* @since 2024-01-08
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class DayData extends ErrorData {
|
||||||
|
private String item_name;
|
||||||
|
private String item_qty;
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package org.nl.wms.cockpit.service.dao;
|
||||||
|
|
||||||
|
import io.swagger.models.auth.In;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import org.nl.common.base.ErrorData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 点位
|
||||||
|
*
|
||||||
|
* @author gbx
|
||||||
|
* @since 2024-01-11
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class PointInfo {
|
||||||
|
private String device_code;
|
||||||
|
private String workshop_code;
|
||||||
|
private String region_code;
|
||||||
|
private Integer move;
|
||||||
|
private Integer row_num;
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
package org.nl.wms.cockpit.service.dao;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import org.nl.common.base.ErrorData;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生产目标
|
||||||
|
*
|
||||||
|
* @author gbx
|
||||||
|
* @since 2024-01-07
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class TargetAchievement extends ErrorData {
|
||||||
|
//接口文档待修改
|
||||||
|
private BigDecimal expected_production = BigDecimal.valueOf(0);
|
||||||
|
private BigDecimal actual_production= BigDecimal.valueOf(0);;
|
||||||
|
private Integer percentage =0;
|
||||||
|
private String await_curing = "1";
|
||||||
|
private String curing = "1";
|
||||||
|
private String complete = "1";
|
||||||
|
private String material_name = "1";
|
||||||
|
private String vehicle_type = "1";
|
||||||
|
private String create_time = "1";
|
||||||
|
private TbxTargetAchievement tbxTargetAchievement;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public static class TbxTargetAchievement extends ErrorData {
|
||||||
|
//接口文档待修改
|
||||||
|
private TargetAchievement lt_production;
|
||||||
|
private TargetAchievement pt_production;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package org.nl.wms.cockpit.service.dao;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import org.nl.common.base.ErrorData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务
|
||||||
|
*
|
||||||
|
* @author gbx
|
||||||
|
* @since 2024-01-11
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class TaskInfo extends ErrorData {
|
||||||
|
private String car_no;
|
||||||
|
private String point_code;
|
||||||
|
private String point_code1;
|
||||||
|
private String point_code2;
|
||||||
|
private String material_name;
|
||||||
|
private String material_spec;
|
||||||
|
private String qty;
|
||||||
|
private String type;
|
||||||
|
private Integer task_status;
|
||||||
|
private String material_qty;
|
||||||
|
private String vehicle_type;
|
||||||
|
private String vehicle_code;
|
||||||
|
private String task_type;
|
||||||
|
}
|
||||||
@@ -0,0 +1,638 @@
|
|||||||
|
package org.nl.wms.cockpit.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.nl.common.utils.RedisUtils;
|
||||||
|
import org.nl.wms.cockpit.service.CockpitService;
|
||||||
|
import org.nl.wms.cockpit.service.dao.PointInfo;
|
||||||
|
import org.nl.wms.cockpit.service.dao.TaskInfo;
|
||||||
|
import org.nl.wms.cockpit.service.mapper.CockpitMapper;
|
||||||
|
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||||
|
import org.nl.wms.sch.point.service.impl.SchBasePointServiceImpl;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.concurrent.ThreadPoolExecutor;
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: gbx
|
||||||
|
* @Description:
|
||||||
|
* @Date: 2024/10/18
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@Slf4j
|
||||||
|
@EnableScheduling
|
||||||
|
public class CockpitServiceImpl implements CockpitService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private CockpitMapper cockpitMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
@Qualifier("threadPoolExecutor")
|
||||||
|
private ThreadPoolExecutor pool;
|
||||||
|
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SchBasePointServiceImpl schBasePoint;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RedisUtils redisUtils;
|
||||||
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM-dd");
|
||||||
|
LocalDate today = LocalDate.now();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 总览
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public HashMap<String, Object> getHomeInfo() {
|
||||||
|
HashMap<String, Object> getHomeInfo = new HashMap<>();
|
||||||
|
//设备运行状态
|
||||||
|
JSONObject device_status = new JSONObject();
|
||||||
|
//库存结构
|
||||||
|
JSONObject zc_storage_info = new JSONObject();
|
||||||
|
//状态信息
|
||||||
|
CompletableFuture<JSONObject> task1 = CompletableFuture.supplyAsync(() -> {
|
||||||
|
List<Map<String, Object>> result = cockpitMapper.statusInfo();
|
||||||
|
device_status.put("status_info", result);
|
||||||
|
return null;
|
||||||
|
}, pool);
|
||||||
|
task1.exceptionally((e) -> {
|
||||||
|
log.error("状态信息: {}", e.getMessage(), e);
|
||||||
|
device_status.put("status_info", null);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
//固化架信息
|
||||||
|
CompletableFuture<JSONObject> task2 = CompletableFuture.supplyAsync(() -> {
|
||||||
|
List<Map<String, Object>> result = cockpitMapper.storageInfo();
|
||||||
|
device_status.put("storage_info", result);
|
||||||
|
return null;
|
||||||
|
}, pool);
|
||||||
|
task2.exceptionally((e) -> {
|
||||||
|
log.error("固化架信息: {}", e.getMessage(), e);
|
||||||
|
device_status.put("storage_info", null);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
//暂存库库存结构
|
||||||
|
CompletableFuture<JSONObject> task3 = CompletableFuture.supplyAsync(() -> {
|
||||||
|
List<Map<String, Object>> result = cockpitMapper.getZcMaterialmsg();
|
||||||
|
zc_storage_info.put("material_info", result);
|
||||||
|
return null;
|
||||||
|
}, pool);
|
||||||
|
task3.exceptionally((e) -> {
|
||||||
|
log.error("暂存库库存结构: {}", e.getMessage(), e);
|
||||||
|
zc_storage_info.put("material_info", null);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
//库位使用占比
|
||||||
|
CompletableFuture<JSONObject> task4 = CompletableFuture.supplyAsync(() -> {
|
||||||
|
String result = cockpitMapper.percent();
|
||||||
|
zc_storage_info.put("percent", result);
|
||||||
|
return null;
|
||||||
|
}, pool);
|
||||||
|
task4.exceptionally((e) -> {
|
||||||
|
log.error("库位使用占比: {}", e.getMessage(), e);
|
||||||
|
getHomeInfo.put("percent", null);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
//生产任务目标达成
|
||||||
|
CompletableFuture<JSONObject> task5 = CompletableFuture.supplyAsync(() -> {
|
||||||
|
JSONObject result = cockpitMapper.getProductTarget();
|
||||||
|
getHomeInfo.put("target_achievement", result);
|
||||||
|
return null;
|
||||||
|
}, pool);
|
||||||
|
task5.exceptionally((e) -> {
|
||||||
|
log.error("获取生产任务目标达成: {}", e.getMessage(), e);
|
||||||
|
getHomeInfo.put("target_achievement", null);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
//生产汇总
|
||||||
|
CompletableFuture<JSONObject> task6 = CompletableFuture.supplyAsync(() -> {
|
||||||
|
JSONObject result = cockpitMapper.getProductionsummary();
|
||||||
|
List<Map<String, Object>> productionSummaryList = new ArrayList<>();
|
||||||
|
for (String itemName : Arrays.asList("1", "2", "3")) {
|
||||||
|
Map<String, Object> item = new HashMap<>();
|
||||||
|
item.put("item_name", itemName);
|
||||||
|
item.put("item_qty", "0");
|
||||||
|
productionSummaryList.add(item);
|
||||||
|
}
|
||||||
|
if (ObjectUtil.isNotEmpty(result)) {
|
||||||
|
productionSummaryList.forEach(item -> {
|
||||||
|
String key = item.get("item_name").toString().toLowerCase();
|
||||||
|
if (ObjectUtil.isNotEmpty(result.get(key))) {
|
||||||
|
item.put("item_qty", result.get(key).toString());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
getHomeInfo.put("production_summary", productionSummaryList);
|
||||||
|
return null;
|
||||||
|
}, pool);
|
||||||
|
task6.exceptionally((e) -> {
|
||||||
|
log.error("生产汇总: {}", e.getMessage(), e);
|
||||||
|
getHomeInfo.put("production_summary", null);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
//今日生产任务
|
||||||
|
CompletableFuture<List<Map<String, Object>>> task7 = CompletableFuture.supplyAsync(() -> {
|
||||||
|
List<Map<String, Object>> result = cockpitMapper.getTdWorkmsg();
|
||||||
|
// List<Map<String, Object>> today_work = new ArrayList<>();
|
||||||
|
// if (ObjectUtil.isEmpty(result)) {
|
||||||
|
// //测试数据,上线后删除
|
||||||
|
// Map<String, Object> item1 = new HashMap<>();
|
||||||
|
// item1.put("workorder_code", "240918001");
|
||||||
|
// item1.put("material_name", "TS_12Z中负");
|
||||||
|
// item1.put("plan_qty", "100");
|
||||||
|
// item1.put("real_qty", "0");
|
||||||
|
// item1.put("point_name", "普涂线01");
|
||||||
|
// item1.put("device_code", "LTX01");
|
||||||
|
// item1.put("workorder_status", "生产中");
|
||||||
|
// today_work.add(item1);
|
||||||
|
// }
|
||||||
|
getHomeInfo.put("today_work", result);
|
||||||
|
return null;
|
||||||
|
}, pool);
|
||||||
|
task7.exceptionally((e) -> {
|
||||||
|
log.error("今日生产任务: {}", e.getMessage(), e);
|
||||||
|
getHomeInfo.put("today_work", null);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
//固化一周生产
|
||||||
|
CompletableFuture<List<Map<String, Object>>> task8 = CompletableFuture.supplyAsync(() -> {
|
||||||
|
List<Map<String, Object>> result = cockpitMapper.getGhsQty("7");
|
||||||
|
List<Map<String, Object>> gh_real_qty_default = new ArrayList<>();
|
||||||
|
getWeekWorkStatistics(result, gh_real_qty_default, "GHS", 7);
|
||||||
|
getHomeInfo.put("ghs_produce", gh_real_qty_default);
|
||||||
|
return null;
|
||||||
|
}, pool);
|
||||||
|
task8.exceptionally((e) -> {
|
||||||
|
log.error("固化一周生产: {}", e.getMessage(), e);
|
||||||
|
getHomeInfo.put("ghs_produce", null);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
//涂板一周生产
|
||||||
|
CompletableFuture<List<Map<String, Object>>> task9 = CompletableFuture.supplyAsync(() -> {
|
||||||
|
List<Map<String, Object>> result = cockpitMapper.getTxQty("7", "TBX");
|
||||||
|
List<Map<String, Object>> tb_real_qty_default = new ArrayList<>();
|
||||||
|
getWeekWorkStatistics(result, tb_real_qty_default, "TBX", 7);
|
||||||
|
getHomeInfo.put("tbx_produce", tb_real_qty_default);
|
||||||
|
return null;
|
||||||
|
}, pool);
|
||||||
|
task9.exceptionally((e) -> {
|
||||||
|
log.error("涂板一周生产: {}", e.getMessage(), e);
|
||||||
|
getHomeInfo.put("tbx_produce", null);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
//实时故障告警
|
||||||
|
CompletableFuture<List<Map<String, Object>>> task10 = CompletableFuture.supplyAsync(() -> {
|
||||||
|
List<Map<String, Object>> result = cockpitMapper.faultAlarm();
|
||||||
|
//测试数据,上线后删除
|
||||||
|
//faultAlarmDefault(result, "GHS01");
|
||||||
|
getHomeInfo.put("fault_alarm", result);
|
||||||
|
return null;
|
||||||
|
}, pool);
|
||||||
|
task10.exceptionally((e) -> {
|
||||||
|
log.error("实时故障告警: {}", e.getMessage(), e);
|
||||||
|
getHomeInfo.put("fault_alarm", null);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
//近30日故障统计
|
||||||
|
CompletableFuture<JSONArray> task11 = CompletableFuture.supplyAsync(() -> {
|
||||||
|
JSONArray result = cockpitMapper.monthlyFaultStatistics();
|
||||||
|
getHomeInfo.put("monthly_fault_statistics", result);
|
||||||
|
return null;
|
||||||
|
}, pool);
|
||||||
|
task11.exceptionally((e) -> {
|
||||||
|
log.error("近30日故障统计: {}", e.getMessage(), e);
|
||||||
|
getHomeInfo.put("monthly_fault_statistics", null);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
//设备报警前十
|
||||||
|
CompletableFuture<List<Map<String, Object>>> task12 = CompletableFuture.supplyAsync(() -> cockpitMapper.ghStatistics(), pool);
|
||||||
|
task12.thenAccept((result) -> {
|
||||||
|
getHomeInfo.put("gh_statistics", result);
|
||||||
|
}).exceptionally((e) -> {
|
||||||
|
log.error("设备报警前十: {}", e.getMessage(), e);
|
||||||
|
getHomeInfo.put("gh_statistics", null);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
CompletableFuture<Void> allQuery = CompletableFuture.allOf(task1, task2, task3, task4, task5, task6, task7, task8, task9, task10, task11, task12);
|
||||||
|
CompletableFuture<HashMap<String, Object>> future = allQuery.thenApply((result) -> getHomeInfo).exceptionally((e) -> {
|
||||||
|
log.error(e.getMessage(), e);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
future.join();
|
||||||
|
getHomeInfo.put("device_status", device_status);
|
||||||
|
getHomeInfo.put("zc_storage_info", zc_storage_info);
|
||||||
|
return getHomeInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 秒级接口
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public JSONObject allDeviceStatus() {
|
||||||
|
JSONObject jsonObject = new JSONObject();
|
||||||
|
//涂板线
|
||||||
|
CompletableFuture<List<Map<String, Object>>> task1 = CompletableFuture.supplyAsync(() -> {
|
||||||
|
// todo 初始化点位所在排信息
|
||||||
|
// List<SchBasePoint> list = schBasePoint.list(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getIs_used, 1));
|
||||||
|
// List<SchBasePoint> list1 = list.stream().filter(r -> "HCQ1".equals(r.getRegion_code()) || "HCQ2".equals(r.getRegion_code()) || "HCQ3".equals(r.getRegion_code()) || "HCQ4".equals(r.getRegion_code()) || "HCQ5".equals(r.getRegion_code()) || "HCQ7".equals(r.getRegion_code())).collect(Collectors.toList());
|
||||||
|
// for (SchBasePoint r : list1) {
|
||||||
|
// if (r.getRow_num() == 0) {
|
||||||
|
// LambdaUpdateWrapper<SchBasePoint> updateWrapper = new LambdaUpdateWrapper<SchBasePoint>()
|
||||||
|
// .eq(SchBasePoint::getPoint_code, r.getPoint_code());
|
||||||
|
// String pointId = r.getPoint_code().substring(5, 9);
|
||||||
|
// updateWrapper.set(SchBasePoint::getRow_num, Integer.parseInt(pointId));
|
||||||
|
// schBasePoint.update(null, updateWrapper);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// todo 未对接的涂板线数据
|
||||||
|
JSONObject tbx01 = new JSONObject();
|
||||||
|
tbx01.put("mode", "0");
|
||||||
|
tbx01.put("device_code", "TBX0001");
|
||||||
|
tbx01.put("workshop_code", "A1");
|
||||||
|
JSONObject tbx02 = new JSONObject();
|
||||||
|
tbx02.put("mode", "0");
|
||||||
|
tbx02.put("device_code", "TBX0002");
|
||||||
|
tbx02.put("workshop_code", "A1");
|
||||||
|
JSONArray tbx1 = (JSONArray) redisUtils.get("tbxList1");
|
||||||
|
tbx1.add(tbx01);
|
||||||
|
tbx1.add(tbx02);
|
||||||
|
List<JSONObject> tbxList1 = getSortedList(tbx1);
|
||||||
|
if (ObjectUtil.isNotEmpty(tbxList1)) {
|
||||||
|
jsonObject.put("1", tbxList1);
|
||||||
|
} else {
|
||||||
|
jsonObject.put("1", new JSONArray());
|
||||||
|
}
|
||||||
|
JSONArray tbx2 = (JSONArray) redisUtils.get("tbxList2");
|
||||||
|
List<JSONObject> tbxList2 = getSortedList(tbx2);
|
||||||
|
if (ObjectUtil.isNotEmpty(tbxList2)) {
|
||||||
|
jsonObject.put("9", tbxList2);
|
||||||
|
} else {
|
||||||
|
jsonObject.put("9", new JSONArray());
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}, pool);
|
||||||
|
task1.exceptionally((e) -> {
|
||||||
|
log.error("读取涂板线设备缓存信息: {}", e.getMessage(), e);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
CompletableFuture<List<Map<String, Object>>> task2 = CompletableFuture.supplyAsync(() -> {
|
||||||
|
JSONArray ghs1 = (JSONArray) redisUtils.get("ghsList1");
|
||||||
|
List<JSONObject> ghsList1 = getSortedList(ghs1);
|
||||||
|
JSONArray ghs2 = (JSONArray) redisUtils.get("ghsList2");
|
||||||
|
List<JSONObject> ghsList2 = getSortedList(ghs2);
|
||||||
|
if (ObjectUtil.isNotEmpty(ghsList1)) {
|
||||||
|
jsonObject.put("2", ghsList1);
|
||||||
|
} else {
|
||||||
|
jsonObject.put("2", new JSONArray());
|
||||||
|
}
|
||||||
|
if (ObjectUtil.isNotEmpty(ghsList2)) {
|
||||||
|
jsonObject.put("11", ghsList2);
|
||||||
|
} else {
|
||||||
|
jsonObject.put("11", new JSONArray());
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}, pool);
|
||||||
|
task2.exceptionally((e) -> {
|
||||||
|
log.error("读取固化室设备缓存信息: {}", e.getMessage(), e);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
CompletableFuture<List<Map<String, Object>>> task3 = CompletableFuture.supplyAsync(() -> {
|
||||||
|
JSONArray bpjList = (JSONArray) redisUtils.get("bpjList");
|
||||||
|
List<JSONObject> bpjList1 = getSortedList(bpjList);
|
||||||
|
if (ObjectUtil.isNotEmpty(bpjList1)) {
|
||||||
|
jsonObject.put("7", bpjList1);
|
||||||
|
} else {
|
||||||
|
jsonObject.put("7", new JSONArray());
|
||||||
|
}
|
||||||
|
JSONArray deviceA1 = (JSONArray) redisUtils.get("deviceA1");
|
||||||
|
JSONArray deviceA2 = (JSONArray) redisUtils.get("deviceA2");
|
||||||
|
jsonObject.put("17", deviceA1);
|
||||||
|
jsonObject.put("19", deviceA2);
|
||||||
|
return null;
|
||||||
|
}, pool);
|
||||||
|
task3.exceptionally((e) -> {
|
||||||
|
log.error("读取包片机设备缓存信息: {}", e.getMessage(), e);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
CompletableFuture<List<Map<String, Object>>> task4 = CompletableFuture.supplyAsync(() -> {
|
||||||
|
//正极板空架回收位
|
||||||
|
JSONArray zjbKjHswList = (JSONArray) redisUtils.get("zjbKjHswList");
|
||||||
|
List<JSONObject> zjbKjHswList1 = getSortedList(zjbKjHswList);
|
||||||
|
//负极板空架回收位
|
||||||
|
JSONArray fjbKjDjwList = (JSONArray) redisUtils.get("fjbKjDjwList");
|
||||||
|
List<JSONObject> fjbKjDjwList1 = getSortedList(fjbKjDjwList);
|
||||||
|
//正极板对接位
|
||||||
|
JSONArray zjbDjwList = (JSONArray) redisUtils.get("zjbDjwList");
|
||||||
|
List<JSONObject> zjbDjwList1 = getSortedList(zjbDjwList);
|
||||||
|
if (ObjectUtil.isNotEmpty(zjbKjHswList1)) {
|
||||||
|
jsonObject.put("13", zjbKjHswList1);
|
||||||
|
} else {
|
||||||
|
jsonObject.put("13", new JSONArray());
|
||||||
|
}
|
||||||
|
if (ObjectUtil.isNotEmpty(fjbKjDjwList1)) {
|
||||||
|
jsonObject.put("14", fjbKjDjwList1);
|
||||||
|
} else {
|
||||||
|
jsonObject.put("14", new JSONArray());
|
||||||
|
}
|
||||||
|
if (ObjectUtil.isNotEmpty(zjbDjwList1)) {
|
||||||
|
jsonObject.put("15", zjbDjwList1);
|
||||||
|
} else {
|
||||||
|
jsonObject.put("15", new JSONArray());
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}, pool);
|
||||||
|
task4.exceptionally((e) -> {
|
||||||
|
log.error("读取包片机设备缓存信息: {}", e.getMessage(), e);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
CompletableFuture<JSONArray> task5 = CompletableFuture.supplyAsync(() -> {
|
||||||
|
JSONArray jsonArray = cockpitMapper.getZCList();
|
||||||
|
List<PointInfo> pointInfoList = jsonArray.stream()
|
||||||
|
.map(r -> JSON.parseObject(r.toString(), PointInfo.class))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
//正极板空固化架缓存区A1
|
||||||
|
List<PointInfo> hcq6 = pointInfoList.stream().filter(r -> "HCQ6".equals(r.getRegion_code())).sorted(Comparator.comparing(PointInfo::getRow_num)).collect(Collectors.toList());
|
||||||
|
AtomicReference<List<PointInfo>> list1 = new AtomicReference<>();
|
||||||
|
CompletableFuture<List<Map<String, Object>>> task01 = CompletableFuture.supplyAsync(() -> {
|
||||||
|
//边负极板缓存区
|
||||||
|
List<PointInfo> hcq1 = pointInfoList.stream().filter(r -> "HCQ3".equals(r.getRegion_code())).collect(Collectors.toList());
|
||||||
|
list1.set(getPointInfoList(hcq1));
|
||||||
|
return null;
|
||||||
|
}, pool);
|
||||||
|
AtomicReference<List<PointInfo>> list2 = new AtomicReference<>();
|
||||||
|
CompletableFuture<List<Map<String, Object>>> task02 = CompletableFuture.supplyAsync(() -> {
|
||||||
|
//边负极板缓存区
|
||||||
|
//负极板缓存区
|
||||||
|
List<PointInfo> hcq2 = pointInfoList.stream().filter(r -> "HCQ2".equals(r.getRegion_code())).collect(Collectors.toList());
|
||||||
|
list2.set(getPointInfoList(hcq2));
|
||||||
|
return null;
|
||||||
|
}, pool);
|
||||||
|
AtomicReference<List<PointInfo>> list3 = new AtomicReference<>();
|
||||||
|
CompletableFuture<List<Map<String, Object>>> task03 = CompletableFuture.supplyAsync(() -> {
|
||||||
|
//负极板空架缓存区
|
||||||
|
List<PointInfo> hcq3 = pointInfoList.stream().filter(r -> "HCQ1".equals(r.getRegion_code())).collect(Collectors.toList());
|
||||||
|
list3.set(getPointInfoList(hcq3));
|
||||||
|
return null;
|
||||||
|
}, pool);
|
||||||
|
AtomicReference<List<PointInfo>> list4 = new AtomicReference<>();
|
||||||
|
CompletableFuture<List<Map<String, Object>>> task04 = CompletableFuture.supplyAsync(() -> {
|
||||||
|
//正极板缓存区
|
||||||
|
List<PointInfo> hcq4 = pointInfoList.stream().filter(r -> "HCQ4".equals(r.getRegion_code())).collect(Collectors.toList());
|
||||||
|
list4.set(getPointInfoList(hcq4));
|
||||||
|
return null;
|
||||||
|
}, pool);
|
||||||
|
AtomicReference<List<PointInfo>> list5 = new AtomicReference<>();
|
||||||
|
CompletableFuture<List<Map<String, Object>>> task05 = CompletableFuture.supplyAsync(() -> {
|
||||||
|
//正极板空固化架缓存区
|
||||||
|
List<PointInfo> hcq5 = pointInfoList.stream().filter(r -> "HCQ5".equals(r.getRegion_code())).collect(Collectors.toList());
|
||||||
|
list5.set(getPointInfoList(hcq5));
|
||||||
|
return null;
|
||||||
|
}, pool);
|
||||||
|
AtomicReference<List<PointInfo>> list7 = new AtomicReference<>();
|
||||||
|
CompletableFuture<List<Map<String, Object>>> task07 = CompletableFuture.supplyAsync(() -> {
|
||||||
|
//涂板线空固化架缓存区
|
||||||
|
List<PointInfo> hcq7 = pointInfoList.stream().filter(r -> "HCQ7".equals(r.getRegion_code())).collect(Collectors.toList());
|
||||||
|
list7.set(getPointInfoList(hcq7));
|
||||||
|
return null;
|
||||||
|
}, pool);
|
||||||
|
CompletableFuture<Void> allQuery = CompletableFuture.allOf(task01, task02, task03, task04, task05, task07);
|
||||||
|
CompletableFuture<JSONObject> future = allQuery.thenApply((result) -> jsonObject).exceptionally((e) -> {
|
||||||
|
log.error(e.getMessage(), e);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
future.join();
|
||||||
|
jsonObject.put("8", hcq6);
|
||||||
|
jsonObject.put("4", list1.get());
|
||||||
|
jsonObject.put("5", list2.get());
|
||||||
|
jsonObject.put("6", list3.get());
|
||||||
|
jsonObject.put("12", list4.get());
|
||||||
|
jsonObject.put("10", list5.get());
|
||||||
|
jsonObject.put("3", list7.get());
|
||||||
|
return null;
|
||||||
|
}, pool);
|
||||||
|
task5.exceptionally((e) -> {
|
||||||
|
log.error("库位详情{}", e.getMessage(), e);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
//今日生产任务
|
||||||
|
CompletableFuture<List<Map<String, Object>>> task6 = CompletableFuture.supplyAsync(() -> {
|
||||||
|
JSONArray a1 = new JSONArray();
|
||||||
|
JSONArray a2 = new JSONArray();
|
||||||
|
JSONObject tbx = new JSONObject();
|
||||||
|
JSONObject ghs = new JSONObject();
|
||||||
|
JSONObject tbx1 = new JSONObject();
|
||||||
|
JSONObject ghs1 = new JSONObject();
|
||||||
|
List<TaskInfo> result = cockpitMapper.getTodayTaskList();
|
||||||
|
if (ObjectUtil.isNotEmpty(result)) {
|
||||||
|
Integer[] tbInProduction = {0, 0};
|
||||||
|
Integer[] tbEndProduction = {0, 0};
|
||||||
|
Integer[] ghInProduction = {0, 0};
|
||||||
|
Integer[] ghEndProduction = {0, 0};
|
||||||
|
//生产中的涂板任务
|
||||||
|
List<TaskInfo> list1 = result.stream().filter(r -> r.getTask_status() < 5 && "MJXLTask".equals(r.getType())).collect(Collectors.toList());
|
||||||
|
extracted(list1, tbInProduction);
|
||||||
|
//生产完成的涂板任务
|
||||||
|
List<TaskInfo> list2 = result.stream().filter(r -> r.getTask_status() == 5 && "MJXLTask".equals(r.getType())).collect(Collectors.toList());
|
||||||
|
extracted(list2, tbEndProduction);
|
||||||
|
//生产中的固化任务
|
||||||
|
List<TaskInfo> list3 = result.stream().filter(r -> "GHSFMTask".equals(r.getType())).collect(Collectors.toList());
|
||||||
|
extracted(list3, ghInProduction);
|
||||||
|
//生产完成的固化任务
|
||||||
|
List<TaskInfo> list4 = result.stream().filter(r -> "GHSQHTask".equals(r.getType())).collect(Collectors.toList());
|
||||||
|
extracted(list4, ghEndProduction);
|
||||||
|
tbx.put("device_code", "涂板");
|
||||||
|
tbx.put("a", tbInProduction[0]);
|
||||||
|
tbx.put("b", tbEndProduction[0]);
|
||||||
|
a1.add(tbx);
|
||||||
|
tbx1.put("device_code", "涂板");
|
||||||
|
tbx1.put("a", tbInProduction[1]);
|
||||||
|
tbx1.put("b", tbEndProduction[1]);
|
||||||
|
a2.add(tbx1);
|
||||||
|
ghs.put("device_code", "固化");
|
||||||
|
ghs.put("a", ghInProduction[0]);
|
||||||
|
ghs.put("b", ghEndProduction[0]);
|
||||||
|
a1.add(ghs);
|
||||||
|
ghs1.put("device_code", "固化");
|
||||||
|
ghs1.put("a", ghInProduction[1]);
|
||||||
|
ghs1.put("b", ghEndProduction[1]);
|
||||||
|
a2.add(ghs1);
|
||||||
|
} else {
|
||||||
|
tbx.put("device_code", "涂板");
|
||||||
|
tbx.put("a", "0");
|
||||||
|
tbx.put("b", 0);
|
||||||
|
a1.add(tbx);
|
||||||
|
ghs.put("device_code", "固化");
|
||||||
|
ghs.put("a", "0");
|
||||||
|
ghs.put("b", 0);
|
||||||
|
a1.add(ghs);
|
||||||
|
tbx1.put("device_code", "涂板");
|
||||||
|
tbx1.put("a", "0");
|
||||||
|
tbx1.put("b", 0);
|
||||||
|
a2.add(tbx1);
|
||||||
|
ghs1.put("device_code", "固化");
|
||||||
|
ghs1.put("a", "0");
|
||||||
|
ghs1.put("b", 0);
|
||||||
|
a2.add(ghs1);
|
||||||
|
}
|
||||||
|
jsonObject.put("16", a1);
|
||||||
|
jsonObject.put("18", a2);
|
||||||
|
return null;
|
||||||
|
}, pool);
|
||||||
|
task6.exceptionally((e) -> {
|
||||||
|
log.error("今日生产任务: {}", e.getMessage(), e);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
//设备统计
|
||||||
|
// CompletableFuture<List<Map<String, Object>>> task7 = CompletableFuture.supplyAsync(() -> {
|
||||||
|
// JSONArray a1 = new JSONArray();
|
||||||
|
// JSONArray a2 = new JSONArray();
|
||||||
|
// //测试数据,上线后删除
|
||||||
|
// if (ObjectUtil.isEmpty(a1)) {
|
||||||
|
// JSONObject item1 = new JSONObject();
|
||||||
|
// item1.put("count", "401");
|
||||||
|
// a1.add(item1);
|
||||||
|
// JSONObject item2 = new JSONObject();
|
||||||
|
// item2.put("count", "350");
|
||||||
|
// item2.put("name", "正常运行");
|
||||||
|
// item2.put("percent", "87.28%");
|
||||||
|
// a1.add(item2);
|
||||||
|
// JSONObject item3 = new JSONObject();
|
||||||
|
// item3.put("count", "29");
|
||||||
|
// item3.put("name", "暂未生产");
|
||||||
|
// item3.put("percent", "0.07%");
|
||||||
|
// a1.add(item3);
|
||||||
|
// JSONObject item4 = new JSONObject();
|
||||||
|
// item4.put("count", "21");
|
||||||
|
// item4.put("name", "空闲设备");
|
||||||
|
// item4.put("percent", "0.05%");
|
||||||
|
// a1.add(item4);
|
||||||
|
// JSONObject item5 = new JSONObject();
|
||||||
|
// item5.put("count", "1");
|
||||||
|
// item5.put("name", "故障设备");
|
||||||
|
// item5.put("percent", "0.02%");
|
||||||
|
// a1.add(item5);
|
||||||
|
// JSONObject item01 = new JSONObject();
|
||||||
|
// item01.put("count", "439");
|
||||||
|
// a2.add(item01);
|
||||||
|
// JSONObject item02 = new JSONObject();
|
||||||
|
// item02.put("count", "321");
|
||||||
|
// item02.put("name", "正常运行");
|
||||||
|
// item02.put("percent", "73.12%");
|
||||||
|
// a2.add(item02);
|
||||||
|
// JSONObject item03 = new JSONObject();
|
||||||
|
// item03.put("count", "51");
|
||||||
|
// item03.put("name", "暂未生产");
|
||||||
|
// item03.put("percent", "11.61%");
|
||||||
|
// a2.add(item03);
|
||||||
|
// JSONObject item04 = new JSONObject();
|
||||||
|
// item04.put("count", "60");
|
||||||
|
// item04.put("name", "空闲设备");
|
||||||
|
// item04.put("percent", "13.66%");
|
||||||
|
// a2.add(item04);
|
||||||
|
// JSONObject item05 = new JSONObject();
|
||||||
|
// item05.put("count", "7");
|
||||||
|
// item05.put("name", "故障设备");
|
||||||
|
// item05.put("percent", "0.01%");
|
||||||
|
// a2.add(item05);
|
||||||
|
// }
|
||||||
|
// jsonObject.put("17", a1);
|
||||||
|
// jsonObject.put("19", a2);
|
||||||
|
// return null;
|
||||||
|
// }, pool);
|
||||||
|
// task7.exceptionally((e) -> {
|
||||||
|
// log.error("今日生产任务: {}", e.getMessage(), e);
|
||||||
|
// return null;
|
||||||
|
// });
|
||||||
|
CompletableFuture<Void> allQuery = CompletableFuture.allOf(task1, task2, task3, task4, task5, task6);
|
||||||
|
CompletableFuture<JSONObject> future = allQuery.thenApply((result) -> jsonObject).exceptionally((e) -> {
|
||||||
|
log.error(e.getMessage(), e);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
future.join();
|
||||||
|
return jsonObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void extracted(List<TaskInfo> list, Integer[] production) {
|
||||||
|
list.stream()
|
||||||
|
.peek(taskInfo -> {
|
||||||
|
if (StringUtils.isBlank(taskInfo.getPoint_code1()) && StringUtils.isNotBlank(taskInfo.getPoint_code2())) {
|
||||||
|
taskInfo.setPoint_code1(taskInfo.getPoint_code2());
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.forEach(taskInfo -> {
|
||||||
|
int vehicleCount = taskInfo.getVehicle_code().split(",").length;
|
||||||
|
if ("A1".equals(taskInfo.getPoint_code1())) {
|
||||||
|
production[0] += vehicleCount;
|
||||||
|
} else {
|
||||||
|
production[1] += vehicleCount;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<JSONObject> getSortedList(JSONArray jsonArray) {
|
||||||
|
return jsonArray.stream()
|
||||||
|
.map(JSONObject.class::cast)
|
||||||
|
.sorted(Comparator.comparing(json -> json.getString("device_code")))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<PointInfo> getPointInfoList(List<PointInfo> pointInfoList) {
|
||||||
|
Map<Integer, List<PointInfo>> groupedByRowNum = pointInfoList.stream()
|
||||||
|
.collect(Collectors.groupingBy(PointInfo::getRow_num));
|
||||||
|
List<PointInfo> result = groupedByRowNum.entrySet().stream()
|
||||||
|
.map(r -> {
|
||||||
|
List<PointInfo> groupList = r.getValue();
|
||||||
|
PointInfo point = groupList.get(0);
|
||||||
|
if (groupList.stream().anyMatch(g -> g.getMove() == 3)) {
|
||||||
|
point.setMove(3);
|
||||||
|
} else {
|
||||||
|
point.setMove(0);
|
||||||
|
}
|
||||||
|
return point;
|
||||||
|
}).sorted(Comparator.comparing(PointInfo::getRow_num))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void getWeekWorkStatistics(List<Map<String, Object>> gh_real_qty, List<Map<String, Object>> tb_real_qty_default, String region_name, Integer days) {
|
||||||
|
for (int i = 0; i < days; i++) {
|
||||||
|
Map<String, Object> item = new HashMap<>();
|
||||||
|
item.put("region_name", region_name);
|
||||||
|
item.put("total_qty", "0");
|
||||||
|
item.put("date", today.minusDays(i).format(formatter));
|
||||||
|
tb_real_qty_default.add(item);
|
||||||
|
}
|
||||||
|
Map<String, BigDecimal> ghRealQtyMap = gh_real_qty.stream()
|
||||||
|
.collect(Collectors.toMap(
|
||||||
|
item -> (String) item.get("date"),
|
||||||
|
item -> (BigDecimal) item.get("total_qty")
|
||||||
|
));
|
||||||
|
tb_real_qty_default.forEach(tbItem -> {
|
||||||
|
String date = (String) tbItem.get("date");
|
||||||
|
if (ghRealQtyMap.containsKey(date)) {
|
||||||
|
tbItem.put("total_qty", ghRealQtyMap.get(date));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,151 @@
|
|||||||
|
package org.nl.wms.cockpit.service.mapper;
|
||||||
|
import com.alibaba.fastjson.JSONArray;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import org.apache.ibatis.annotations.Insert;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.nl.wms.cockpit.service.dao.DasDeviceFault;
|
||||||
|
import org.nl.wms.cockpit.service.dao.DayData;
|
||||||
|
import org.nl.wms.cockpit.service.dao.TargetAchievement;
|
||||||
|
import org.nl.wms.cockpit.service.dao.TaskInfo;
|
||||||
|
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: gbx
|
||||||
|
* @Description:
|
||||||
|
* @Date: 2024/10/18
|
||||||
|
*/
|
||||||
|
public interface CockpitMapper {
|
||||||
|
/**
|
||||||
|
* 获取最近n条工单数据
|
||||||
|
*
|
||||||
|
* @param deviceCode
|
||||||
|
* @param number
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<TargetAchievement> getDeviceLimitOrders(@Param("deviceCode") String deviceCode, @Param("number") int number);
|
||||||
|
|
||||||
|
|
||||||
|
List<DayData> getTemporaryStorage();
|
||||||
|
|
||||||
|
|
||||||
|
List<TaskInfo> getTemporaryInTask();
|
||||||
|
|
||||||
|
|
||||||
|
List<TaskInfo> getTemporaryOutTask();
|
||||||
|
|
||||||
|
|
||||||
|
TargetAchievement getCompletionPercent(@Param("regionCode") String regionCode, @Param("vehicleType") String vehicleType, @Param("days") Integer days);
|
||||||
|
|
||||||
|
|
||||||
|
List<TargetAchievement> getWorkOrders(@Param("regionCode") String regionCode, @Param("days") Integer days);
|
||||||
|
|
||||||
|
List<Map<String, Object>> getCurrentTasks(@Param("deviceCodes") List<String> deviceCodes);
|
||||||
|
|
||||||
|
JSONObject getCurrentTask(@Param("taskId") String taskId);
|
||||||
|
|
||||||
|
List<TargetAchievement> getGhActualProduction(@Param("days") Integer days);
|
||||||
|
|
||||||
|
|
||||||
|
List<TaskInfo> getTodayTaskList();
|
||||||
|
|
||||||
|
|
||||||
|
JSONObject getFaultsForDevice(@Param("deviceCode") String deviceCode);
|
||||||
|
|
||||||
|
|
||||||
|
List<DayData> getGhCuringSummary();
|
||||||
|
|
||||||
|
@Insert("INSERT INTO das_device_fault (data_id,region_code, device_code, failure_time, failure_info) " +
|
||||||
|
"VALUES (#{data_id},#{region_code}, #{device_code}, #{failure_time}, #{failure_info})")
|
||||||
|
int insertDeviceFault(DasDeviceFault deviceFault);
|
||||||
|
|
||||||
|
|
||||||
|
JSONObject getVehicleGroupInfo(String vehicleCode, String vehicleType);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 固化室详情
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
JSONArray getGHSInteriorList();
|
||||||
|
|
||||||
|
|
||||||
|
JSONArray getSSXInteriorList();
|
||||||
|
|
||||||
|
JSONArray getZCList();
|
||||||
|
|
||||||
|
JSONArray getKJList();
|
||||||
|
|
||||||
|
//目前是获取当天的错误数据
|
||||||
|
JSONArray getError();
|
||||||
|
|
||||||
|
//获取生产中的工单数据
|
||||||
|
JSONObject getProductTarget();
|
||||||
|
|
||||||
|
//获取暂存库库存信息
|
||||||
|
List<Map<String, Object>> getZcMaterialmsg();
|
||||||
|
|
||||||
|
//获取暂存库库存信息
|
||||||
|
JSONObject getProductionsummary();
|
||||||
|
|
||||||
|
|
||||||
|
//库位使用占比
|
||||||
|
String percent();
|
||||||
|
|
||||||
|
//获取今日创建的每一条工单的信息
|
||||||
|
List<Map<String, Object>> getTdWorkmsg();
|
||||||
|
|
||||||
|
//7天涂板实际生产
|
||||||
|
List<Map<String, Object>> getTxQty(String days, String region);
|
||||||
|
|
||||||
|
//7天固化室实际生产
|
||||||
|
List<Map<String, Object>> getGhsQty(String days);
|
||||||
|
|
||||||
|
//获取连涂普涂月统计数
|
||||||
|
List<Map<String, Object>> getTbxMonthlyStatistics();
|
||||||
|
|
||||||
|
//查询所传设备当前生产的工单信息
|
||||||
|
JSONObject getDeviceWorker(String devicecode);
|
||||||
|
|
||||||
|
//根据所传的物料id获取物料名称
|
||||||
|
String getMaterialName(String material_id);
|
||||||
|
|
||||||
|
//根据所传设备得到该设备日产量
|
||||||
|
JSONArray getProductionDay(String devicecode);
|
||||||
|
|
||||||
|
//根据所传设备得到该设备班产量
|
||||||
|
JSONArray getProductionTeam(@Param("deviceCode") String devicecode,@Param("dateType") Integer dateType);
|
||||||
|
|
||||||
|
//根据所传设备得到该设备30天生产记录
|
||||||
|
List<Map<String, Object>> getProductionHistory(String devicecode);
|
||||||
|
//今日生产连涂生产
|
||||||
|
JSONObject ltProduction();
|
||||||
|
//今日生产普涂生产
|
||||||
|
JSONObject ptProduction();
|
||||||
|
//今日涂板任务
|
||||||
|
JSONArray todayTbTask();
|
||||||
|
//实时故障告警
|
||||||
|
List<Map<String, Object>> FaultTime(String region_code);
|
||||||
|
//进30日故障统计
|
||||||
|
JSONArray FaultTotal(String region_code);
|
||||||
|
//固化汇总
|
||||||
|
JSONArray curingSummary();
|
||||||
|
//暂存库
|
||||||
|
JSONObject temporaryStorage();
|
||||||
|
//暂存区库存
|
||||||
|
JSONArray inventory();
|
||||||
|
//状态信息
|
||||||
|
List<Map<String, Object>> statusInfo();
|
||||||
|
//固化架信息
|
||||||
|
List<Map<String, Object>> storageInfo();
|
||||||
|
//实时故障告警
|
||||||
|
List<Map<String, Object>> faultAlarm();
|
||||||
|
//进30日故障统计
|
||||||
|
JSONArray monthlyFaultStatistics();
|
||||||
|
//设备报警前十
|
||||||
|
List<Map<String, Object>> ghStatistics();
|
||||||
|
//货位货位信息
|
||||||
|
JSONArray taskInfo();
|
||||||
|
}
|
||||||
@@ -0,0 +1,782 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="org.nl.wms.cockpit.service.mapper.CockpitMapper">
|
||||||
|
<select id="getDeviceLimitOrders" resultType="org.nl.wms.cockpit.service.dao.TargetAchievement">
|
||||||
|
SELECT
|
||||||
|
w.plan_qty,
|
||||||
|
w.real_qty,
|
||||||
|
m.material_name
|
||||||
|
FROM
|
||||||
|
`pdm_bd_workorder` w
|
||||||
|
LEFT JOIN md_base_material m ON m.material_id = w.material_id
|
||||||
|
WHERE 1=1
|
||||||
|
AND w.is_delete = 0
|
||||||
|
<if test="deviceCode != null and deviceCode != ''">
|
||||||
|
AND w.point_code = #{deviceCode}
|
||||||
|
</if>
|
||||||
|
order by w.create_time desc
|
||||||
|
<if test="number != 0 ">
|
||||||
|
LIMIT #{number}
|
||||||
|
</if>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getWorkOrders" resultType="org.nl.wms.cockpit.service.dao.TargetAchievement">
|
||||||
|
SELECT
|
||||||
|
w.plan_qty AS expected_production,
|
||||||
|
w.real_qty AS actual_production,
|
||||||
|
w.vehicle_type,
|
||||||
|
w.create_time
|
||||||
|
FROM
|
||||||
|
`pdm_bd_workorder` w
|
||||||
|
WHERE 1=1
|
||||||
|
AND w.is_delete = 0
|
||||||
|
<if test="days != null and days != ''">
|
||||||
|
<![CDATA[
|
||||||
|
AND w.create_time >= DATE_SUB(CURDATE(), INTERVAL #{days} DAY)
|
||||||
|
AND w.create_time < CURDATE() + INTERVAL 1 DAY
|
||||||
|
]]>
|
||||||
|
</if>
|
||||||
|
<if test="regionCode != null and regionCode != ''">
|
||||||
|
AND w.region_code = #{regionCode}
|
||||||
|
</if>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
<select id="getGhActualProduction" resultType="org.nl.wms.cockpit.service.dao.TargetAchievement">
|
||||||
|
SELECT
|
||||||
|
g.material_qty AS actual_production,
|
||||||
|
t.task_id,
|
||||||
|
t.create_time
|
||||||
|
FROM
|
||||||
|
`sch_base_task` t
|
||||||
|
LEFT JOIN sch_base_vehiclematerialgroup g ON t.group_id = g.group_id
|
||||||
|
WHERE
|
||||||
|
1 = 1
|
||||||
|
AND t.is_delete = 0
|
||||||
|
AND t.config_code = 'GHSMLTask'
|
||||||
|
<if test="days != null and days != ''">
|
||||||
|
<![CDATA[
|
||||||
|
AND t.create_time >= DATE_SUB(CURDATE(), INTERVAL #{days} DAY)
|
||||||
|
AND t.create_time < CURDATE() + INTERVAL 1 DAY
|
||||||
|
]]>
|
||||||
|
</if>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getTodayTaskList" resultType="org.nl.wms.cockpit.service.dao.TaskInfo">
|
||||||
|
SELECT
|
||||||
|
t.config_code AS type,
|
||||||
|
t.task_status,
|
||||||
|
t.vehicle_code,
|
||||||
|
p1.workshop_code AS point_code1,
|
||||||
|
p2.workshop_code AS point_code2
|
||||||
|
FROM
|
||||||
|
sch_base_task t
|
||||||
|
LEFT JOIN sch_base_point p1 ON p1.point_code = t.point_code1
|
||||||
|
LEFT JOIN sch_base_point p2 ON p2.point_code = t.point_code2
|
||||||
|
WHERE
|
||||||
|
t.is_delete = 0
|
||||||
|
# AND DATE ( t.create_time )= CURDATE()
|
||||||
|
AND t.task_status<![CDATA[ < ]]> 6
|
||||||
|
AND (t.config_code = 'MJXLTask' OR t.config_code = 'GHSFMTask' OR t.config_code = 'GHSQHTask' );
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getCompletionPercent" resultType="org.nl.wms.cockpit.service.dao.TargetAchievement">
|
||||||
|
SELECT
|
||||||
|
SUM( plan_qty ) AS expected_production,
|
||||||
|
SUM( real_qty ) AS actual_production
|
||||||
|
FROM
|
||||||
|
pdm_bd_workorder
|
||||||
|
WHERE
|
||||||
|
is_delete = 0
|
||||||
|
<if test="days != null and days != ''">
|
||||||
|
<![CDATA[
|
||||||
|
AND create_time >= DATE_SUB(CURDATE(), INTERVAL #{days} DAY)
|
||||||
|
AND create_time < CURDATE() + INTERVAL 1 DAY
|
||||||
|
]]>
|
||||||
|
</if>
|
||||||
|
<if test="regionCode != null and regionCode != ''">
|
||||||
|
AND region_code = #{regionCode}
|
||||||
|
</if>
|
||||||
|
<if test="vehicleType != null and vehicleType != ''">
|
||||||
|
AND vehicle_type = #{vehicleType}
|
||||||
|
</if>
|
||||||
|
</select>
|
||||||
|
<select id="getCurrentTasks" resultType="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
g.vehicle_type,
|
||||||
|
g.pcsn,
|
||||||
|
g.material_qty,
|
||||||
|
m.material_name,
|
||||||
|
m.material_spec
|
||||||
|
FROM
|
||||||
|
sch_base_vehiclematerialgroup g
|
||||||
|
LEFT JOIN md_base_material m ON g.material_id = m.material_id
|
||||||
|
WHERE
|
||||||
|
g.vehicle_code IN (
|
||||||
|
SELECT
|
||||||
|
vehicle_code
|
||||||
|
FROM
|
||||||
|
sch_base_point
|
||||||
|
WHERE point_code IN
|
||||||
|
<foreach collection="deviceCodes" item="code" open="(" separator="," close=")">
|
||||||
|
#{code}
|
||||||
|
</foreach>
|
||||||
|
)
|
||||||
|
AND g.is_delete = '0'
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getCurrentTask" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
|
SELECT
|
||||||
|
t.task_code,
|
||||||
|
t.point_code1,
|
||||||
|
t.point_code2,
|
||||||
|
CASE
|
||||||
|
WHEN t.next_wait_point IS NULL THEN
|
||||||
|
"" ELSE ""
|
||||||
|
END AS next_wait_point,
|
||||||
|
t.vehicle_code,
|
||||||
|
g.vehicle_type,
|
||||||
|
m.material_name,
|
||||||
|
g.pcsn,
|
||||||
|
g.material_qty
|
||||||
|
FROM
|
||||||
|
sch_base_task t
|
||||||
|
LEFT JOIN sch_base_vehiclematerialgroup g ON g.group_id = t.group_id
|
||||||
|
LEFT JOIN md_base_material m ON m.material_id = g.material_id
|
||||||
|
WHERE t.task_id = #{taskId}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getFaultsForDevice" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
|
SELECT
|
||||||
|
COUNT(*) AS fault_total, CASE
|
||||||
|
WHEN COUNT(*) = 0 THEN 0
|
||||||
|
ELSE ROUND((COUNT(*) / 30.0) * 100, 0)
|
||||||
|
END AS fault_percentage
|
||||||
|
FROM
|
||||||
|
das_device_fault
|
||||||
|
WHERE
|
||||||
|
device_code = #{deviceCode}
|
||||||
|
AND failure_time >= NOW() - INTERVAL 30 DAY;
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getGhCuringSummary" resultType="org.nl.wms.cockpit.service.dao.DayData">
|
||||||
|
SELECT CASE
|
||||||
|
p.point_status
|
||||||
|
WHEN '3' THEN
|
||||||
|
'待固化'
|
||||||
|
WHEN '4' THEN
|
||||||
|
'固化中'
|
||||||
|
WHEN '5' THEN
|
||||||
|
'固化完毕'
|
||||||
|
ELSE ''
|
||||||
|
END AS item_name,
|
||||||
|
COUNT(p.point_type) AS item_qty
|
||||||
|
FROM `pdm_bd_workorder` w
|
||||||
|
LEFT JOIN sch_base_point p ON w.point_code = p.point_code
|
||||||
|
WHERE w.region_code = 'GH'
|
||||||
|
AND w.is_delete = 0
|
||||||
|
AND DATE_FORMAT(w.create_time, '%Y-%m-%d') = CURDATE()
|
||||||
|
GROUP BY p.point_status;
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
<select id="getTemporaryStorage" resultType="org.nl.wms.cockpit.service.dao.DayData">
|
||||||
|
SELECT p.point_code,
|
||||||
|
m.material_name item_name,
|
||||||
|
g.material_qty item_qty
|
||||||
|
FROM `sch_base_point` p
|
||||||
|
RIGHT JOIN sch_base_vehiclematerialgroup g ON p.point_code = g.point_code
|
||||||
|
LEFT JOIN md_base_material m ON g.material_id = m.material_id
|
||||||
|
WHERE p.region_code = 'ZC'
|
||||||
|
AND g.group_bind_material_status = 2
|
||||||
|
AND DATE_FORMAT(g.update_time, '%Y-%m-%d') = CURDATE()
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
<select id="getTemporaryInTask" resultType="org.nl.wms.cockpit.service.dao.TaskInfo">
|
||||||
|
SELECT g.point_code,
|
||||||
|
g.vehicle_code,
|
||||||
|
CASE
|
||||||
|
g.vehicle_type
|
||||||
|
WHEN 1 THEN
|
||||||
|
"普涂"
|
||||||
|
ELSE "连涂"
|
||||||
|
END AS vehicle_type,
|
||||||
|
m.material_name,
|
||||||
|
"出库" AS task_type
|
||||||
|
FROM `sch_base_vehiclematerialgroup` g
|
||||||
|
LEFT JOIN md_base_material m ON g.material_id = m.material_id
|
||||||
|
WHERE g.region_code = 'ZC'
|
||||||
|
AND g.group_bind_material_status = 3
|
||||||
|
AND DATE_FORMAT(g.update_time, '%Y-%m-%d') = CURDATE()
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
<select id="getTemporaryOutTask" resultType="org.nl.wms.cockpit.service.dao.TaskInfo">
|
||||||
|
SELECT p.point_code,
|
||||||
|
m.material_name,
|
||||||
|
g.vehicle_code,
|
||||||
|
CASE
|
||||||
|
g.vehicle_type
|
||||||
|
WHEN 1 THEN
|
||||||
|
"普涂"
|
||||||
|
ELSE "连涂"
|
||||||
|
END AS vehicle_type,
|
||||||
|
"出库" as type
|
||||||
|
FROM `sch_base_point` p
|
||||||
|
RIGHT JOIN sch_base_vehiclematerialgroup g ON p.point_code = g.point_code
|
||||||
|
LEFT JOIN md_base_material m ON g.material_id = m.material_id
|
||||||
|
WHERE p.region_code = 'ZC'
|
||||||
|
AND group_bind_material_status = 2
|
||||||
|
AND DATE_FORMAT(p.update_time, '%Y-%m-%d') = CURDATE()
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
<select id="getVehicleGroupInfo" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
|
SELECT vg.vehicle_type
|
||||||
|
, vg.vehicle_code
|
||||||
|
, ma.material_name
|
||||||
|
, ma.material_code
|
||||||
|
,vg.material_qty AS qty
|
||||||
|
,vg.pcsn
|
||||||
|
FROM sch_base_vehiclematerialgroup vg
|
||||||
|
LEFT JOIN md_base_material ma ON vg.material_id = ma.material_id
|
||||||
|
WHERE 1 = 1
|
||||||
|
<if test="vehicleCode != null">
|
||||||
|
AND vg.vehicle_code = #{vehicleCode}
|
||||||
|
</if>
|
||||||
|
<if test="vehicleType != null">
|
||||||
|
AND vg.vehicle_type = #{vehicleType}
|
||||||
|
</if>
|
||||||
|
AND vg.is_delete = '0'
|
||||||
|
</select>
|
||||||
|
<select id="getGHSInteriorList" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
|
SELECT CAST(point_status - 1 AS SIGNED) AS move,
|
||||||
|
point_code AS device_code,
|
||||||
|
point_name AS device_name,
|
||||||
|
IF(LENGTH(vehicle_type) > 0, vehicle_type, '0') AS vehicle_type,
|
||||||
|
parent_point_code AS device
|
||||||
|
FROM `sch_base_point`
|
||||||
|
WHERE region_code = 'GH'
|
||||||
|
AND point_type = '2'
|
||||||
|
</select>
|
||||||
|
<select id="getSSXInteriorList" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
|
SELECT
|
||||||
|
CAST( point_status - 1 AS SIGNED ) AS move,
|
||||||
|
point_code AS device_code,
|
||||||
|
point_name AS device_name,
|
||||||
|
"1" AS mode,
|
||||||
|
"0" AS error,
|
||||||
|
"1" AS device_status,
|
||||||
|
parent_point_code AS device,
|
||||||
|
CASE
|
||||||
|
vehicle_type
|
||||||
|
WHEN 1 THEN
|
||||||
|
"1"
|
||||||
|
WHEN 2 THEN
|
||||||
|
"2" ELSE "0"
|
||||||
|
END AS vehicle_type
|
||||||
|
FROM
|
||||||
|
`sch_base_point`
|
||||||
|
WHERE
|
||||||
|
region_code = 'KJZC'
|
||||||
|
AND point_type IN ('1', '3', '4')
|
||||||
|
</select>
|
||||||
|
<select id="getZCList" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
|
SELECT
|
||||||
|
workshop_code,
|
||||||
|
region_code,
|
||||||
|
CASE
|
||||||
|
vehicle_qty
|
||||||
|
WHEN 0 THEN 0
|
||||||
|
WHEN 1 THEN 3 ELSE 0
|
||||||
|
END AS move,
|
||||||
|
point_code AS device_code,
|
||||||
|
row_num
|
||||||
|
FROM
|
||||||
|
`sch_base_point`
|
||||||
|
where is_used =1
|
||||||
|
and region_code in ('HCQ1','HCQ2','HCQ3','HCQ4','HCQ5','HCQ6','HCQ7')
|
||||||
|
order by row_num
|
||||||
|
</select>
|
||||||
|
<select id="getKJList" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
|
SELECT CAST(point_status - 1 AS SIGNED) AS move,
|
||||||
|
point_code AS device_code,
|
||||||
|
vehicle_type,
|
||||||
|
point_name AS device_name
|
||||||
|
FROM `sch_base_point`
|
||||||
|
WHERE region_code = 'KJW'
|
||||||
|
</select>
|
||||||
|
<select id="getError" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
|
SELECT *
|
||||||
|
FROM das_device_fault
|
||||||
|
WHERE failure_time LIKE CONCAT(CURDATE(), '%');
|
||||||
|
</select>
|
||||||
|
<select id="getProductTarget" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
|
SELECT
|
||||||
|
COUNT(*) AS await_curing,
|
||||||
|
SUM(plan_qty) AS expected_production,
|
||||||
|
SUM(real_qty) AS actual_production,
|
||||||
|
ROUND(SUM(real_qty) * 1.0 / NULLIF(SUM(plan_qty), 0)) AS percentage
|
||||||
|
FROM
|
||||||
|
pdm_bd_workorder
|
||||||
|
WHERE
|
||||||
|
workorder_status = 3;
|
||||||
|
</select>
|
||||||
|
<select id="getZcMaterialmsg" resultType="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
m.material_name AS item_name,
|
||||||
|
m.standard_qty AS item_qty
|
||||||
|
FROM `sch_base_point` p
|
||||||
|
RIGHT JOIN sch_base_vehiclematerialgroup g ON p.vehicle_code = g.vehicle_code
|
||||||
|
LEFT JOIN md_base_material m ON g.material_id = m.material_id
|
||||||
|
WHERE p.region_code = 'ZC'
|
||||||
|
AND p.vehicle_code IS NOT NULL
|
||||||
|
</select>
|
||||||
|
<select id="getProductionsummary" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
|
SELECT
|
||||||
|
SUM(CASE WHEN region_code LIKE 'TBX%' THEN real_qty ELSE 0 END) AS '1',
|
||||||
|
SUM(CASE WHEN region_code LIKE 'GH%' THEN real_qty ELSE 0 END) AS '2',
|
||||||
|
SUM(CASE WHEN region_code LIKE 'ZC%' THEN real_qty ELSE 0 END) AS '3'
|
||||||
|
FROM
|
||||||
|
`pdm_bd_workorder`
|
||||||
|
WHERE
|
||||||
|
workorder_status = 3
|
||||||
|
AND DATE(create_time) = CURDATE();
|
||||||
|
</select>
|
||||||
|
<select id="getTdWorkmsg" resultType="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
w.workorder_code,
|
||||||
|
m.material_name AS material_name,
|
||||||
|
w.plan_qty,
|
||||||
|
w.real_qty,
|
||||||
|
w.point_name ,
|
||||||
|
w.point_code as device_code,
|
||||||
|
w.workorder_status
|
||||||
|
FROM `pdm_bd_workorder` w
|
||||||
|
LEFT JOIN md_base_material m ON m.material_id = w.material_id
|
||||||
|
WHERE DATE(w.update_time) = CURDATE()
|
||||||
|
</select>
|
||||||
|
<select id="getTxQty" resultType="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
DATE_FORMAT(create_time,'%Y-%m-%d') AS date,
|
||||||
|
SUM(real_qty) AS total_qty,
|
||||||
|
#{region} AS region_name
|
||||||
|
FROM
|
||||||
|
pdm_bd_workorder
|
||||||
|
WHERE
|
||||||
|
create_time >= CURDATE() - INTERVAL #{days} DAY
|
||||||
|
AND region_code=#{region}
|
||||||
|
GROUP BY
|
||||||
|
DATE_FORMAT(create_time,'%Y-%m-%d')
|
||||||
|
ORDER BY
|
||||||
|
date;
|
||||||
|
</select>
|
||||||
|
<select id="getGhsQty" resultType="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
DATE_FORMAT(create_time,'%Y-%m-%d') AS date,
|
||||||
|
SUM(material_qty) AS total_qty,
|
||||||
|
'GHS' AS region_name
|
||||||
|
FROM
|
||||||
|
sch_base_vehiclematerialgroup
|
||||||
|
WHERE
|
||||||
|
create_time >= CURDATE() - INTERVAL #{days} DAY
|
||||||
|
AND region_code='GH'
|
||||||
|
GROUP BY
|
||||||
|
DATE_FORMAT(create_time,'%Y-%m-%d')
|
||||||
|
ORDER BY
|
||||||
|
date;
|
||||||
|
</select>
|
||||||
|
<select id="getTbxMonthlyStatistics" resultType="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
DATE_FORMAT( create_time, '%m-%d' ) AS date,
|
||||||
|
SUM( real_qty ) AS total_qty,
|
||||||
|
'LT' AS region_name
|
||||||
|
FROM
|
||||||
|
pdm_bd_workorder
|
||||||
|
WHERE
|
||||||
|
create_time >= CURDATE() - INTERVAL 30 DAY
|
||||||
|
AND point_code LIKE 'LT%'
|
||||||
|
GROUP BY
|
||||||
|
DATE_FORMAT( create_time, '%Y-%m-%d' ) UNION ALL
|
||||||
|
SELECT
|
||||||
|
DATE_FORMAT( create_time, '%m-%d' ) AS DATE,
|
||||||
|
SUM( real_qty ) AS total_qty,
|
||||||
|
'PT' AS region_name
|
||||||
|
FROM
|
||||||
|
pdm_bd_workorder
|
||||||
|
WHERE
|
||||||
|
create_time >= CURDATE() - INTERVAL 30 DAY
|
||||||
|
AND point_code LIKE 'PT%'
|
||||||
|
GROUP BY
|
||||||
|
DATE_FORMAT( create_time, '%Y-%m-%d' )
|
||||||
|
ORDER BY
|
||||||
|
DATE;
|
||||||
|
</select>
|
||||||
|
<select id="getDeviceWorker" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
|
SELECT *
|
||||||
|
FROM
|
||||||
|
`pdm_bd_workorder` w
|
||||||
|
WHERE
|
||||||
|
w.workorder_status=3
|
||||||
|
And w.point_code= #{devicecode}
|
||||||
|
</select>
|
||||||
|
<select id="getMaterialName" resultType="java.lang.String">
|
||||||
|
SELECT
|
||||||
|
material_name
|
||||||
|
FROM
|
||||||
|
`md_base_material` m
|
||||||
|
WHERE
|
||||||
|
m.material_id= #{material_id}
|
||||||
|
</select>
|
||||||
|
<select id="getProductionDay" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
|
SELECT
|
||||||
|
w.plan_qty,
|
||||||
|
w.real_qty,
|
||||||
|
(w.plan_qty - w.real_qty) AS remain_qty,
|
||||||
|
CASE
|
||||||
|
WHEN w.plan_qty = 0 AND w.real_qty = 0 THEN 0
|
||||||
|
WHEN w.plan_qty = 0 THEN 100
|
||||||
|
ELSE ROUND((w.real_qty * 1.0 / w.plan_qty) * 100, 0)
|
||||||
|
END AS percentage,
|
||||||
|
m.material_spec,
|
||||||
|
m.material_name,
|
||||||
|
g.pcsn
|
||||||
|
FROM
|
||||||
|
pdm_bd_workorder w
|
||||||
|
LEFT JOIN md_base_material m ON m.material_id = w.material_id
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT p1.workorder_code, p1.pcsn
|
||||||
|
FROM sch_base_vehiclematerialgroup p1
|
||||||
|
INNER JOIN (
|
||||||
|
SELECT workorder_code, MIN(group_id) AS min_group_id
|
||||||
|
FROM sch_base_vehiclematerialgroup
|
||||||
|
GROUP BY workorder_code
|
||||||
|
) p2 ON p1.workorder_code = p2.workorder_code AND p1.group_id = p2.min_group_id
|
||||||
|
) g ON g.workorder_code = w.workorder_code
|
||||||
|
WHERE
|
||||||
|
w.point_code = #{devicecode};
|
||||||
|
# AND DATE(w.create_time) = CURDATE()
|
||||||
|
</select>
|
||||||
|
<select id="getProductionTeam" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
|
SELECT
|
||||||
|
w.plan_qty,
|
||||||
|
w.real_qty,
|
||||||
|
(w.plan_qty - w.real_qty) AS remain_qty,
|
||||||
|
CASE
|
||||||
|
WHEN w.plan_qty = 0 AND w.real_qty = 0 THEN 0
|
||||||
|
WHEN w.plan_qty = 0 THEN 100
|
||||||
|
ELSE ROUND((w.real_qty * 1.0 / w.plan_qty) * 100, 0)
|
||||||
|
END AS percentage,
|
||||||
|
m.material_spec,
|
||||||
|
m.material_name,
|
||||||
|
g.pcsn
|
||||||
|
FROM
|
||||||
|
pdm_bd_workorder w
|
||||||
|
LEFT JOIN md_base_material m ON m.material_id = w.material_id
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT p1.workorder_code, p1.pcsn
|
||||||
|
FROM sch_base_vehiclematerialgroup p1
|
||||||
|
INNER JOIN (
|
||||||
|
SELECT workorder_code, MIN(group_id) AS min_group_id
|
||||||
|
FROM sch_base_vehiclematerialgroup
|
||||||
|
GROUP BY workorder_code
|
||||||
|
) p2 ON p1.workorder_code = p2.workorder_code AND p1.group_id = p2.min_group_id
|
||||||
|
) g ON g.workorder_code = w.workorder_code
|
||||||
|
WHERE
|
||||||
|
w.point_code = #{deviceCode}
|
||||||
|
AND <choose>
|
||||||
|
<when test="dateType == 1">
|
||||||
|
w.create_time BETWEEN CONCAT(DATE(NOW()), ' 07:00:00') AND CONCAT(DATE(NOW()), ' 18:00:00')
|
||||||
|
</when>
|
||||||
|
<when test="dateType == 2">
|
||||||
|
w.create_time BETWEEN CONCAT(DATE(NOW()), ' 18:30:00') AND CONCAT(DATE_ADD(DATE(NOW()), INTERVAL 1 DAY), ' 06:30:00')
|
||||||
|
</when>
|
||||||
|
<otherwise>
|
||||||
|
1 = 1
|
||||||
|
</otherwise>
|
||||||
|
</choose>
|
||||||
|
</select>
|
||||||
|
<select id="ltProduction" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
|
SELECT
|
||||||
|
SUM(w.plan_qty) AS plan_production,
|
||||||
|
SUM(w.real_qty) AS actual_production,
|
||||||
|
ROUND(SUM(w.real_qty) / SUM(w.plan_qty) * 100) AS percentage
|
||||||
|
FROM
|
||||||
|
`pdm_bd_workorder` w
|
||||||
|
WHERE
|
||||||
|
w.workorder_status = 3
|
||||||
|
AND DATE(w.create_time) = CURDATE()
|
||||||
|
AND point_code LIKE 'LT%';
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="getProductionHistory" resultType="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
SUM(w.plan_qty) AS plan_production,
|
||||||
|
SUM(w.real_qty) AS actual_production,
|
||||||
|
ROUND(SUM(w.real_qty) / SUM(w.plan_qty) * 100) AS percentage
|
||||||
|
FROM
|
||||||
|
`pdm_bd_workorder` w
|
||||||
|
WHERE
|
||||||
|
w.workorder_status = 3
|
||||||
|
AND DATE(w.create_time) = CURDATE()
|
||||||
|
AND point_code LIKE 'LT%';
|
||||||
|
</select>
|
||||||
|
<select id="ptProduction" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
|
SELECT
|
||||||
|
SUM(w.plan_qty) AS plan_production,
|
||||||
|
SUM(w.real_qty) AS actual_production,
|
||||||
|
ROUND(SUM(w.real_qty) / SUM(w.plan_qty) * 100) AS percentage
|
||||||
|
FROM
|
||||||
|
`pdm_bd_workorder` w
|
||||||
|
WHERE
|
||||||
|
w.workorder_status=3
|
||||||
|
And DATE(w.create_time)=CURDATE()
|
||||||
|
And point_code LIKE 'PT%'
|
||||||
|
</select>
|
||||||
|
<select id="todayTbTask" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
|
SELECT
|
||||||
|
w.workorder_code,
|
||||||
|
m.material_name,
|
||||||
|
w.plan_qty,
|
||||||
|
w.real_qty,
|
||||||
|
w.point_name,
|
||||||
|
w.point_code as device_code,
|
||||||
|
w.workorder_status
|
||||||
|
FROM
|
||||||
|
`pdm_bd_workorder` w
|
||||||
|
LEFT JOIN md_base_material m ON m.material_id = w.material_id
|
||||||
|
WHERE
|
||||||
|
w.workorder_status=3
|
||||||
|
And DATE(w.create_time)=CURDATE()
|
||||||
|
</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
|
||||||
|
d1.device_code,
|
||||||
|
d1.failure_info AS fault_cause,
|
||||||
|
d1.failure_time AS alarm_time
|
||||||
|
FROM
|
||||||
|
das_device_fault d1
|
||||||
|
JOIN
|
||||||
|
(SELECT
|
||||||
|
device_code,
|
||||||
|
MAX(failure_time) AS max_failure_time
|
||||||
|
FROM
|
||||||
|
das_device_fault
|
||||||
|
WHERE
|
||||||
|
region_code = #{region_code} GROUP BY device_code) d2
|
||||||
|
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 id="FaultTotal" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
|
SELECT
|
||||||
|
device_code,
|
||||||
|
COUNT(*) AS alarm_qty
|
||||||
|
FROM
|
||||||
|
das_device_fault
|
||||||
|
WHERE
|
||||||
|
region_code = #{region_code}
|
||||||
|
And current_status=1
|
||||||
|
GROUP BY
|
||||||
|
device_code;
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="curingSummary" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
|
SELECT
|
||||||
|
CASE
|
||||||
|
WHEN p.point_status = 1 THEN '待机'
|
||||||
|
WHEN p.point_status = 2 THEN '工艺进行中'
|
||||||
|
WHEN p.point_status = 3 THEN '进板中'
|
||||||
|
WHEN p.point_status = 4 THEN '出板中'
|
||||||
|
WHEN p.point_status = 5 THEN '故障'
|
||||||
|
END AS item_name,
|
||||||
|
COUNT(*) AS item_qty
|
||||||
|
FROM
|
||||||
|
`sch_base_point` p
|
||||||
|
WHERE
|
||||||
|
p.region_code = 'GH'
|
||||||
|
AND p.point_type = 1
|
||||||
|
GROUP BY
|
||||||
|
p.point_status;
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="temporaryStorage" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
|
SELECT
|
||||||
|
SUM( CASE WHEN region_code = 'ZC' THEN 1 ELSE 0 END ) AS total,
|
||||||
|
SUM( CASE WHEN point_status = 2 THEN 1 ELSE 0 END ) AS free,
|
||||||
|
SUM( CASE WHEN region_code = 'KJW' AND point_status = 0 THEN 1 ELSE 0 END ) AS empty_num,
|
||||||
|
ROUND( SUM( CASE WHEN point_status = 2 THEN 1 ELSE 0 END ) * 1.0 / NULLIF( SUM( CASE WHEN region_code = 'ZC' THEN 1 ELSE 0 END ), 0 ) * 100, 0)
|
||||||
|
AS percentage
|
||||||
|
FROM
|
||||||
|
sch_base_point
|
||||||
|
WHERE
|
||||||
|
region_code = 'ZC'
|
||||||
|
OR region_code = 'KJW';
|
||||||
|
</select>
|
||||||
|
<select id="percent" resultType="java.lang.String">
|
||||||
|
SELECT
|
||||||
|
ROUND(SUM(CASE WHEN point_status = 2 THEN 1 ELSE 0 END) * 1.0 /
|
||||||
|
NULLIF(SUM(CASE WHEN region_code = 'ZC' THEN 1 ELSE 0 END), 0) * 100, 0) AS percentage
|
||||||
|
FROM
|
||||||
|
sch_base_point
|
||||||
|
WHERE
|
||||||
|
region_code = 'ZC';
|
||||||
|
</select>
|
||||||
|
<select id="statusInfo" resultType="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
CASE
|
||||||
|
WHEN p.is_used = true THEN 1
|
||||||
|
ELSE 0
|
||||||
|
END AS item_name,
|
||||||
|
COUNT(*) AS item_qty
|
||||||
|
FROM
|
||||||
|
`sch_base_point` p
|
||||||
|
GROUP BY
|
||||||
|
item_name;
|
||||||
|
</select>
|
||||||
|
<select id="storageInfo" resultType="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
p.point_status AS item_name,
|
||||||
|
COUNT(*) AS item_qty
|
||||||
|
FROM
|
||||||
|
`sch_base_point` p
|
||||||
|
WHERE p.region_code = 'GH'
|
||||||
|
AND p.point_type=2
|
||||||
|
GROUP BY
|
||||||
|
p.point_status;
|
||||||
|
</select>
|
||||||
|
<select id="faultAlarm1" resultType="java.util.HashMap">
|
||||||
|
WITH RankedFaults AS (
|
||||||
|
SELECT
|
||||||
|
device_code AS device_name,
|
||||||
|
failure_info AS fault_cause,
|
||||||
|
failure_time AS alarm_time,
|
||||||
|
ROW_NUMBER() OVER (PARTITION BY device_code ORDER BY failure_time DESC) AS rn
|
||||||
|
FROM das_device_fault
|
||||||
|
WHERE current_status = 1
|
||||||
|
)
|
||||||
|
SELECT
|
||||||
|
device_name,
|
||||||
|
fault_cause,
|
||||||
|
alarm_time
|
||||||
|
FROM RankedFaults
|
||||||
|
WHERE rn = 1;
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="faultAlarm" resultType="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
CASE
|
||||||
|
d.failure_info
|
||||||
|
WHEN '1024' THEN
|
||||||
|
'过载'
|
||||||
|
WHEN '1' THEN
|
||||||
|
'网络超时'
|
||||||
|
WHEN '512' THEN
|
||||||
|
'信号丢失'
|
||||||
|
ELSE '其他'
|
||||||
|
END AS fault_cause,
|
||||||
|
d.device_code AS device_name,
|
||||||
|
d.failure_time AS alarm_time
|
||||||
|
FROM
|
||||||
|
das_device_fault d
|
||||||
|
INNER JOIN (
|
||||||
|
SELECT
|
||||||
|
device_code,
|
||||||
|
MAX(failure_time) AS max_time
|
||||||
|
FROM
|
||||||
|
das_device_fault
|
||||||
|
WHERE
|
||||||
|
current_status = 1
|
||||||
|
GROUP BY
|
||||||
|
device_code
|
||||||
|
) m ON d.device_code = m.device_code
|
||||||
|
AND d.failure_time = m.max_time
|
||||||
|
WHERE
|
||||||
|
d.current_status = 1;
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="monthlyFaultStatistics" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
|
SELECT
|
||||||
|
region_code AS region_name,
|
||||||
|
COUNT(*) AS alarm_qty
|
||||||
|
FROM
|
||||||
|
das_device_fault
|
||||||
|
GROUP BY
|
||||||
|
region_code;
|
||||||
|
</select>
|
||||||
|
<select id="ghStatistics" resultType="java.util.HashMap">
|
||||||
|
SELECT
|
||||||
|
device_name,
|
||||||
|
error_number
|
||||||
|
FROM (
|
||||||
|
SELECT
|
||||||
|
device_code AS device_name,
|
||||||
|
COUNT(*) AS error_number
|
||||||
|
FROM
|
||||||
|
das_device_fault
|
||||||
|
GROUP BY
|
||||||
|
device_code
|
||||||
|
) AS device_errors
|
||||||
|
ORDER BY
|
||||||
|
error_number DESC
|
||||||
|
LIMIT 10;
|
||||||
|
</select>
|
||||||
|
<select id="inventory" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
|
<![CDATA[
|
||||||
|
SELECT
|
||||||
|
m.material_name AS material_name,
|
||||||
|
SUM(g.material_qty) AS quantity
|
||||||
|
FROM
|
||||||
|
sch_base_point p
|
||||||
|
RIGHT JOIN sch_base_vehiclematerialgroup g ON p.vehicle_code = g.vehicle_code
|
||||||
|
LEFT JOIN md_base_material m ON g.material_id = m.material_id
|
||||||
|
WHERE
|
||||||
|
p.region_code = 'ZC'
|
||||||
|
AND p.point_status = 2
|
||||||
|
AND p.vehicle_code IS NOT NULL
|
||||||
|
AND p.vehicle_code <> ''
|
||||||
|
GROUP BY
|
||||||
|
m.material_name;
|
||||||
|
]]>
|
||||||
|
</select>
|
||||||
|
<select id="taskInfo" resultType="com.alibaba.fastjson.JSONObject">
|
||||||
|
<![CDATA[
|
||||||
|
SELECT
|
||||||
|
p.point_code AS device_code,
|
||||||
|
m.material_name AS material_name,
|
||||||
|
m.material_spec AS material_spec,
|
||||||
|
p.vehicle_type,
|
||||||
|
p.vehicle_code,
|
||||||
|
m.standard_qty AS qty,
|
||||||
|
g.pcsn
|
||||||
|
FROM
|
||||||
|
sch_base_point p
|
||||||
|
RIGHT JOIN sch_base_vehiclematerialgroup g ON p.vehicle_code = g.vehicle_code
|
||||||
|
LEFT JOIN md_base_material m ON g.material_id = m.material_id
|
||||||
|
WHERE
|
||||||
|
p.region_code = 'ZC'
|
||||||
|
AND p.point_status = 2
|
||||||
|
AND p.vehicle_code IS NOT NULL
|
||||||
|
AND p.vehicle_code <> ''
|
||||||
|
]]>
|
||||||
|
</select>
|
||||||
|
</mapper>
|
||||||
@@ -6,10 +6,10 @@ spring:
|
|||||||
druid:
|
druid:
|
||||||
db-type: com.alibaba.druid.pool.DruidDataSource
|
db-type: com.alibaba.druid.pool.DruidDataSource
|
||||||
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
|
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
|
||||||
url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:cw_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
|
url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.10.10}:${DB_PORT:3306}/${DB_NAME:cw_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
|
||||||
# url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:stand_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
|
# url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:stand_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
|
||||||
username: ${DB_USER:root}
|
username: ${DB_USER:root}
|
||||||
password: ${DB_PWD:123456}
|
password: ${DB_PWD:123456789}
|
||||||
# password: ${DB_PWD:P@ssw0rd}
|
# password: ${DB_PWD:P@ssw0rd}
|
||||||
# 初始连接数
|
# 初始连接数
|
||||||
initial-size: 5
|
initial-size: 5
|
||||||
@@ -54,7 +54,7 @@ spring:
|
|||||||
multi-statement-allow: true
|
multi-statement-allow: true
|
||||||
redis:
|
redis:
|
||||||
#数据库索引
|
#数据库索引
|
||||||
database: ${REDIS_DB:2}
|
database: ${REDIS_DB:5}
|
||||||
host: ${REDIS_HOST:127.0.0.1}
|
host: ${REDIS_HOST:127.0.0.1}
|
||||||
port: ${REDIS_PORT:6379}
|
port: ${REDIS_PORT:6379}
|
||||||
password: ${REDIS_PWD:}
|
password: ${REDIS_PWD:}
|
||||||
@@ -152,7 +152,7 @@ sa-token:
|
|||||||
token-session-check-login: false
|
token-session-check-login: false
|
||||||
alone-redis:
|
alone-redis:
|
||||||
# Redis数据库索引(默认为0)
|
# Redis数据库索引(默认为0)
|
||||||
database: 2
|
database: 5
|
||||||
# Redis服务器地址
|
# Redis服务器地址
|
||||||
host: 127.0.0.1
|
host: 127.0.0.1
|
||||||
# Redis服务器连接端口
|
# Redis服务器连接端口
|
||||||
|
|||||||
Reference in New Issue
Block a user