Browse Source

rev: 修改设备监控大屏

master
李永德 2 years ago
parent
commit
0ae1452882
  1. 4
      lms/nladmin-system/src/main/java/org/nl/wms/cockpit/rest/CockpitController.java
  2. 3
      lms/nladmin-system/src/main/java/org/nl/wms/cockpit/service/CockpitService.java
  3. 79
      lms/nladmin-system/src/main/java/org/nl/wms/cockpit/service/impl/CockpitServiceImpl.java
  4. 36
      lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/DeviceEnum.java

4
lms/nladmin-system/src/main/java/org/nl/wms/cockpit/rest/CockpitController.java

@ -22,6 +22,8 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentSkipListMap;
/** /**
* 大屏数据1 * 大屏数据1
@ -82,7 +84,7 @@ public class CockpitController{
@PostMapping("/deviceMonitor") @PostMapping("/deviceMonitor")
@Log("设备监控") @Log("设备监控")
@ApiOperation("设备监控") @ApiOperation("设备监控")
public CommonResult<List<DeviceInfoDto>> deviceMonitor() { public CommonResult<ConcurrentHashMap<String,List<DeviceInfoDto>>> deviceMonitor() {
return RestBusinessTemplate.execute(cockpitService::deviceMonitor); return RestBusinessTemplate.execute(cockpitService::deviceMonitor);
} }

3
lms/nladmin-system/src/main/java/org/nl/wms/cockpit/service/CockpitService.java

@ -8,6 +8,7 @@ import org.nl.wms.cockpit.service.dto.SchBasePointDto;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentSkipListMap;
/** /**
* 大屏服务接口1 * 大屏服务接口1
@ -43,7 +44,7 @@ public interface CockpitService{
* *
* @return 返回结果集 * @return 返回结果集
*/ */
List<DeviceInfoDto> deviceMonitor(); ConcurrentHashMap<String,List<DeviceInfoDto>> deviceMonitor();
/** /**
* 根据point_id获取设备信息 * 根据point_id获取设备信息

79
lms/nladmin-system/src/main/java/org/nl/wms/cockpit/service/impl/CockpitServiceImpl.java

@ -22,10 +22,7 @@ import java.math.BigDecimal;
import java.time.Duration; import java.time.Duration;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ThreadPoolExecutor;
/** /**
* 大屏服务实现1 * 大屏服务实现1
@ -36,7 +33,7 @@ import java.util.concurrent.ThreadPoolExecutor;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@Slf4j @Slf4j
public class CockpitServiceImpl implements CockpitService{ public class CockpitServiceImpl implements CockpitService {
/** /**
* 生产统计大屏 * 生产统计大屏
@ -45,14 +42,14 @@ public class CockpitServiceImpl implements CockpitService{
* @since 2023/2/27 * @since 2023/2/27
*/ */
@Override @Override
public ConcurrentHashMap<String,Object> productionStatistics() { public ConcurrentHashMap<String, Object> productionStatistics() {
ThreadPoolExecutor pool = ThreadPoolExecutorUtil.getPoll(); ThreadPoolExecutor pool = ThreadPoolExecutorUtil.getPoll();
ConcurrentHashMap<String,Object> map = new ConcurrentHashMap<>(3); ConcurrentHashMap<String, Object> map = new ConcurrentHashMap<>(3);
// 1、获取生产任务列表 // 1、获取生产任务列表
CompletableFuture<List<WorkorderDto>> productionTask = CompletableFuture.supplyAsync(() -> { CompletableFuture<List<WorkorderDto>> productionTask = CompletableFuture.supplyAsync(() -> {
List<WorkorderDto> res = new CopyOnWriteArrayList<>(); List<WorkorderDto> res = new CopyOnWriteArrayList<>();
JSONArray result = WQL.getWO("COCKPIT_PRODUCTION").addParam("flag", "1").process().getResultJSONArray(0); JSONArray result = WQL.getWO("COCKPIT_PRODUCTION").addParam("flag", "1").process().getResultJSONArray(0);
if(ObjectUtil.isNotEmpty(result)) { if (ObjectUtil.isNotEmpty(result)) {
res = result.toJavaList(WorkorderDto.class); res = result.toJavaList(WorkorderDto.class);
// res.forEach(r -> { // res.forEach(r -> {
// r.setCust_name("新余钢铁"); // r.setCust_name("新余钢铁");
@ -94,7 +91,7 @@ public class CockpitServiceImpl implements CockpitService{
finishedTask.thenAccept((result) -> { finishedTask.thenAccept((result) -> {
List<ProductionStatisticsDto> planRes = new CopyOnWriteArrayList<>(); List<ProductionStatisticsDto> planRes = new CopyOnWriteArrayList<>();
List<ProductionStatisticsDto> finishedRes = new CopyOnWriteArrayList<>(); List<ProductionStatisticsDto> finishedRes = new CopyOnWriteArrayList<>();
if(ObjectUtil.isNotEmpty(result)) { if (ObjectUtil.isNotEmpty(result)) {
//成品计划完成情况,应前端要求分开两个一样的数据结果,简化调用数据采集 //成品计划完成情况,应前端要求分开两个一样的数据结果,简化调用数据采集
planRes = result.toJavaList(ProductionStatisticsDto.class); planRes = result.toJavaList(ProductionStatisticsDto.class);
setResultComplete(planRes); setResultComplete(planRes);
@ -111,7 +108,7 @@ public class CockpitServiceImpl implements CockpitService{
return null; return null;
}); });
CompletableFuture<Void> allQuery = CompletableFuture.allOf(productionTask, materialTask, finishedTask); CompletableFuture<Void> allQuery = CompletableFuture.allOf(productionTask, materialTask, finishedTask);
CompletableFuture<ConcurrentHashMap<String,Object>> future = allQuery.thenApply((result) -> map).exceptionally((e) -> { CompletableFuture<ConcurrentHashMap<String, Object>> future = allQuery.thenApply((result) -> map).exceptionally((e) -> {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
return null; return null;
}); });
@ -126,22 +123,22 @@ public class CockpitServiceImpl implements CockpitService{
* @since 2023/2/27 * @since 2023/2/27
*/ */
@Override @Override
public ConcurrentHashMap<String,Object> storageMonitor() { public ConcurrentHashMap<String, Object> storageMonitor() {
ThreadPoolExecutor pool = ThreadPoolExecutorUtil.getPoll(); ThreadPoolExecutor pool = ThreadPoolExecutorUtil.getPoll();
ConcurrentHashMap<String,Object> map = new ConcurrentHashMap<>(2); ConcurrentHashMap<String, Object> map = new ConcurrentHashMap<>(2);
// 1、获取原料仓储信息 // 1、获取原料仓储信息
CompletableFuture<List<SchBasePointDto>> materialStorage = CompletableFuture.supplyAsync(() -> { CompletableFuture<List<SchBasePointDto>> materialStorage = CompletableFuture.supplyAsync(() -> {
List<SchBasePointDto> res = new CopyOnWriteArrayList<>(); List<SchBasePointDto> res = new CopyOnWriteArrayList<>();
// 查找所有困料货架 // 查找所有困料货架
JSONArray result = WQL.getWO("COCKPIT_STORAGE").addParam("flag", "1").process().getResultJSONArray(0); JSONArray result = WQL.getWO("COCKPIT_STORAGE").addParam("flag", "1").process().getResultJSONArray(0);
if(ObjectUtil.isNotEmpty(result)) { if (ObjectUtil.isNotEmpty(result)) {
res = result.toJavaList(SchBasePointDto.class); res = result.toJavaList(SchBasePointDto.class);
res.forEach(schBasePointDto -> { res.forEach(schBasePointDto -> {
//Todo 空盅和强制完成状态相关逻辑待完善 //Todo 空盅和强制完成状态相关逻辑待完善
//根据入库时间和静置时间判断静置状态 //根据入库时间和静置时间判断静置状态
getStandingStatus(schBasePointDto); getStandingStatus(schBasePointDto);
//是否满托 //是否满托
if(StringUtils.isNotEmpty(schBasePointDto.getIs_full())) { if (StringUtils.isNotEmpty(schBasePointDto.getIs_full())) {
schBasePointDto.setIs_full(IsOrNotEnum.getName(schBasePointDto.getIs_full())); schBasePointDto.setIs_full(IsOrNotEnum.getName(schBasePointDto.getIs_full()));
} }
}); });
@ -163,7 +160,7 @@ public class CockpitServiceImpl implements CockpitService{
CompletableFuture<List<SchBasePointDto>> finishedStorage = CompletableFuture.supplyAsync(() -> { CompletableFuture<List<SchBasePointDto>> finishedStorage = CompletableFuture.supplyAsync(() -> {
List<SchBasePointDto> res = new CopyOnWriteArrayList<>(); List<SchBasePointDto> res = new CopyOnWriteArrayList<>();
JSONArray result = WQL.getWO("COCKPIT_STORAGE").addParam("flag", "2").process().getResultJSONArray(0); JSONArray result = WQL.getWO("COCKPIT_STORAGE").addParam("flag", "2").process().getResultJSONArray(0);
if(ObjectUtil.isNotEmpty(result)) { if (ObjectUtil.isNotEmpty(result)) {
res = result.toJavaList(SchBasePointDto.class); res = result.toJavaList(SchBasePointDto.class);
} }
return res; return res;
@ -180,7 +177,7 @@ public class CockpitServiceImpl implements CockpitService{
return null; return null;
}); });
CompletableFuture<Void> allQuery = CompletableFuture.allOf(materialStorage, finishedStorage); CompletableFuture<Void> allQuery = CompletableFuture.allOf(materialStorage, finishedStorage);
CompletableFuture<ConcurrentHashMap<String,Object>> future = allQuery.thenApply((result) -> map).exceptionally((e) -> { CompletableFuture<ConcurrentHashMap<String, Object>> future = allQuery.thenApply((result) -> map).exceptionally((e) -> {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
return null; return null;
}); });
@ -195,9 +192,9 @@ public class CockpitServiceImpl implements CockpitService{
* @since 2023/3/1 * @since 2023/3/1
*/ */
@Override @Override
public SchBasePointDto findStorageById(Map<String,String> id) { public SchBasePointDto findStorageById(Map<String, String> id) {
JSONObject rows = WQL.getWO("COCKPIT_STORAGE").addParam("flag", "3").addParam("point_id", id.get("id")).process().uniqueResult(0); JSONObject rows = WQL.getWO("COCKPIT_STORAGE").addParam("flag", "3").addParam("point_id", id.get("id")).process().uniqueResult(0);
if(ObjectUtil.isNotEmpty(rows)) { if (ObjectUtil.isNotEmpty(rows)) {
SchBasePointDto res = rows.toJavaObject(SchBasePointDto.class); SchBasePointDto res = rows.toJavaObject(SchBasePointDto.class);
getStandingStatus(res); getStandingStatus(res);
return res; return res;
@ -212,9 +209,9 @@ public class CockpitServiceImpl implements CockpitService{
* @since 2023/2/28 * @since 2023/2/28
*/ */
@Override @Override
public List<DeviceInfoDto> deviceMonitor() { public ConcurrentHashMap<String, List<DeviceInfoDto>> deviceMonitor() {
List<DeviceInfoDto> res; List<DeviceInfoDto> res;
ConcurrentHashMap<String,List<DeviceInfoDto>> map = new ConcurrentHashMap<>(); ConcurrentHashMap<String, List<DeviceInfoDto>> map = new ConcurrentHashMap<>();
JSONArray result = WQL.getWO("COCKPIT_DEVICE") JSONArray result = WQL.getWO("COCKPIT_DEVICE")
.addParam("flag", "3") .addParam("flag", "3")
.process() .process()
@ -224,15 +221,32 @@ public class CockpitServiceImpl implements CockpitService{
return null; return null;
} }
JSONArray data = ObjectUtil.isNotEmpty( JSONArray data = ObjectUtil.isNotEmpty(
devicesStatus.getJSONArray("data"))?devicesStatus.getJSONArray("data"):result; devicesStatus.getJSONArray("data")) ? devicesStatus.getJSONArray("data") : result;
if(ObjectUtil.isNotEmpty(data)) { // 初始画数据
for (int i = 1; i <= 13; i++) {
DeviceEnum deviceEnum = DeviceEnum.getByModel(String.valueOf(i));
if (ObjectUtil.isEmpty(map.get(deviceEnum.getKeyName()))) {
List<DeviceInfoDto> de = new ArrayList<>();
map.put(deviceEnum.getKeyName(), de);
}
}
if (ObjectUtil.isNotEmpty(data)) {
res = data.toJavaList(DeviceInfoDto.class); res = data.toJavaList(DeviceInfoDto.class);
res.forEach(d -> { res.forEach(d -> {
DeviceEnum deviceEnum = DeviceEnum.get(d.getDevice_model(), d.getDevice_code()); DeviceEnum deviceEnum = DeviceEnum.getByModel(d.getDevice_model());
// 添加图片名字 // 添加图片名字
d.setDevice_url(deviceEnum.getPictureName()); d.setDevice_url(deviceEnum.getPictureName());
// 分类链表
if (ObjectUtil.isEmpty(map.get(deviceEnum.getKeyName()))) {
List<DeviceInfoDto> de = new ArrayList<>();
de.add(d);
map.put(deviceEnum.getKeyName(), de);
} else {
map.get(deviceEnum.getKeyName()).add(d);
map.put(deviceEnum.getKeyName(), map.get(deviceEnum.getKeyName()));
}
}); });
return res; return map;
} }
return null; return null;
} }
@ -244,9 +258,9 @@ public class CockpitServiceImpl implements CockpitService{
* @since 2023/3/1 * @since 2023/3/1
*/ */
@Override @Override
public DeviceDetailDto findDeviceById(Map<String,String> id) { public DeviceDetailDto findDeviceById(Map<String, String> id) {
JSONObject rows = WQL.getWO("COCKPIT_DEVICE").addParam("flag", "2").addParam("point_id", id.get("id")).process().uniqueResult(0); JSONObject rows = WQL.getWO("COCKPIT_DEVICE").addParam("flag", "2").addParam("point_id", id.get("id")).process().uniqueResult(0);
if(ObjectUtil.isNotEmpty(rows)) { if (ObjectUtil.isNotEmpty(rows)) {
DeviceDetailDto deviceDetailDto = rows.toJavaObject(DeviceDetailDto.class); DeviceDetailDto deviceDetailDto = rows.toJavaObject(DeviceDetailDto.class);
//Todo 点击设备弹窗临时演示数据,后面需要根据业务逻辑查询 //Todo 点击设备弹窗临时演示数据,后面需要根据业务逻辑查询
deviceDetailDto.setReal_qty("1500"); deviceDetailDto.setReal_qty("1500");
@ -292,9 +306,9 @@ public class CockpitServiceImpl implements CockpitService{
* @since 2023/3/1 * @since 2023/3/1
*/ */
@Override @Override
public Map<String,Object> workshopCondition() { public Map<String, Object> workshopCondition() {
//Todo 车间设备情况临时演示数据,后面需要根据业务逻辑查询 //Todo 车间设备情况临时演示数据,后面需要根据业务逻辑查询
Map<String,Object> hashMap = new HashMap<>(3); Map<String, Object> hashMap = new HashMap<>(3);
//运行情况 //运行情况
List<DeviceStatisticsDto> runningStatusList = new ArrayList<>(); List<DeviceStatisticsDto> runningStatusList = new ArrayList<>();
runningStatusList.add(DeviceStatisticsDto.builder().workorder_procedure("混料").deviceQty(16).faultyDevice(2).build()); runningStatusList.add(DeviceStatisticsDto.builder().workorder_procedure("混料").deviceQty(16).faultyDevice(2).build());
@ -335,7 +349,7 @@ public class CockpitServiceImpl implements CockpitService{
} }
// 检查 2、3、4 标签值是否全部存在,如果有缺失则创建新的 ProductionStatisticsDto 对象并添加到 result 列表中 // 检查 2、3、4 标签值是否全部存在,如果有缺失则创建新的 ProductionStatisticsDto 对象并添加到 result 列表中
for (int i = 2; i <= 4; i++) { for (int i = 2; i <= 4; i++) {
if (!existingLabels.contains(i+"")) { if (!existingLabels.contains(i + "")) {
result.add(ProductionStatisticsDto result.add(ProductionStatisticsDto
.builder() .builder()
.workorder_procedure(ProductionStatisticsEnum.getName(String.valueOf(i))) .workorder_procedure(ProductionStatisticsEnum.getName(String.valueOf(i)))
@ -373,14 +387,13 @@ public class CockpitServiceImpl implements CockpitService{
* 判断静置状态 * 判断静置状态
*/ */
private void getStandingStatus(SchBasePointDto schBasePointDto) { private void getStandingStatus(SchBasePointDto schBasePointDto) {
if(StringUtils.isNotBlank(schBasePointDto.getInstorage_time()) && null != schBasePointDto.getStanding_time()) { if (StringUtils.isNotBlank(schBasePointDto.getInstorage_time()) && null != schBasePointDto.getStanding_time()) {
DateTime nowTime = DateUtil.parse(DateUtil.now(), DatePattern.NORM_DATETIME_FORMAT); DateTime nowTime = DateUtil.parse(DateUtil.now(), DatePattern.NORM_DATETIME_FORMAT);
DateTime inStorageTime = DateUtil.parse(schBasePointDto.getInstorage_time(), DatePattern.NORM_DATETIME_FORMAT); DateTime inStorageTime = DateUtil.parse(schBasePointDto.getInstorage_time(), DatePattern.NORM_DATETIME_FORMAT);
long minute = DateUtil.between(nowTime, inStorageTime, DateUnit.MINUTE); long minute = DateUtil.between(nowTime, inStorageTime, DateUnit.MINUTE);
if(minute < schBasePointDto.getStanding_time().longValue()) { if (minute < schBasePointDto.getStanding_time().longValue()) {
schBasePointDto.setStanding_status("静置中"); schBasePointDto.setStanding_status("静置中");
} } else {
else{
schBasePointDto.setStanding_status("静置完成"); schBasePointDto.setStanding_status("静置完成");
} }
if (schBasePointDto.getPoint_status().equals(PointEnum.POINT_STATUS_EMPTY_POSITION.getCode())) { if (schBasePointDto.getPoint_status().equals(PointEnum.POINT_STATUS_EMPTY_POSITION.getCode())) {

36
lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/DeviceEnum.java

@ -8,18 +8,19 @@ import cn.hutool.core.util.StrUtil;
* @Date: 2023/3/9 * @Date: 2023/3/9
*/ */
public enum DeviceEnum { public enum DeviceEnum {
HLJ("1", "混料机", "HLJ", "HLJ"), HLJ_S("1", "高速混料机", "HLJ", "HLJ_S"),
HLJ_S("2", "高速混料机", "HLJ_S", "HLJ_S"), HLJ("2", "混料机", "HLJ", "HLJ"),
YZJ("3", "压机", "YZJ", "YZJ"), YZJ_S("3", "液压机", "YZJ", "YZJ_S"), //
YZJ_S("4", "液压机", "YZJ_S", "YZJ_S"), // YZJ("4", "压机", "YZJ", "YZJ"),
FJJXS("5", "分拣机械手", "FJJXS", "FJJXS"), MDJXS("5", "码垛机械手", "MDJXS", "MDJXS"),
CPX("6", "拆盘线", "CPX", "CPX"), RYHJ("6", "入窑桁架", "YAO", "RYHJ"),
BZX("6", "包装线", "BZX", "BZX"), YAO("7", "窑", "YAO", "YAO"),
YAO("7", "窑设备", "YAO", "YAO"), CYHJ("8", "出窑桁架", "YAO", "CYHJ"),
DPJ("8", "叠盘架", "DPJ", "DPJ"), FJCDJXS("9", "分拣拆垛机械手", "FJJXS", "FJCDJXS"),
CPJ("9", "拆盘架", "CPJ", "CPJ"), FJMDJXS("10", "分拣码垛机械手", "FJJXS", "FJMDJXS"),
MDJXS("10", "码垛机械手", "MDJXS", "MDJXS"), RGV("11", "RGV", "BZX", "RGV"),
RGV("11", "RGV", "RGV", "RGV"); BZJ("12", "包装机", "BZX", "BZJ"),
DTJ("13", "叠托机", "BZX", "DTJ");
private final String model; private final String model;
private final String name; private final String name;
@ -35,7 +36,16 @@ public enum DeviceEnum {
public static DeviceEnum get(String model, String code) { public static DeviceEnum get(String model, String code) {
for (DeviceEnum deviceEnum : DeviceEnum.values()) { for (DeviceEnum deviceEnum : DeviceEnum.values()) {
if (code.equals(BZX.pictureName)) return BZX; if (code.equals(BZJ.pictureName)) return BZJ;
if (StrUtil.equals(deviceEnum.model, model)) {
return deviceEnum;
}
}
return null;
}
public static DeviceEnum getByModel(String model) {
for (DeviceEnum deviceEnum : DeviceEnum.values()) {
if (StrUtil.equals(deviceEnum.model, model)) { if (StrUtil.equals(deviceEnum.model, model)) {
return deviceEnum; return deviceEnum;
} }

Loading…
Cancel
Save