add:新增超威大屏接口。
This commit is contained in:
@@ -98,6 +98,11 @@
|
||||
<artifactId>sa-token-spring-boot-starter</artifactId>
|
||||
<version>${sa-token.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dromara.dynamictp</groupId>
|
||||
<artifactId>dynamic-tp-spring-boot-starter-adapter-webserver</artifactId>
|
||||
<version>1.1.7</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.dev33</groupId>
|
||||
<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.EnableMethodCache;
|
||||
import io.swagger.annotations.Api;
|
||||
import org.dromara.dynamictp.core.spring.EnableDynamicTp;
|
||||
import org.mybatis.spring.annotation.MapperScan;
|
||||
import org.nl.config.SpringContextHolder;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
@@ -35,6 +36,7 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
@EnableMethodCache(basePackages = "org.nl")
|
||||
@EnableCreateCacheAnnotation
|
||||
@MapperScan("org.nl.**.mapper")
|
||||
@EnableDynamicTp
|
||||
public class AppRun {
|
||||
|
||||
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 org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.scheduling.annotation.AsyncConfigurer;
|
||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
||||
@@ -67,4 +68,35 @@ public class AsyncTaskExecutePool implements AsyncConfigurer {
|
||||
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 queueCapacity;
|
||||
private int awaitTerminationSeconds;
|
||||
}
|
||||
|
||||
@@ -16,7 +16,12 @@
|
||||
package org.nl.config.thread;
|
||||
|
||||
|
||||
import org.dromara.dynamictp.core.support.DynamicTp;
|
||||
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.ThreadPoolExecutor;
|
||||
@@ -27,7 +32,10 @@ import java.util.concurrent.TimeUnit;
|
||||
* @author Zheng Jie
|
||||
* @date 2019年10月31日18:16:47
|
||||
*/
|
||||
@Configuration
|
||||
public class ThreadPoolExecutorUtil {
|
||||
@Autowired
|
||||
private AsyncTaskProperties asyncTaskProperties;
|
||||
|
||||
public static ThreadPoolExecutor getPoll(){
|
||||
AsyncTaskProperties properties = SpringContextHolder.getBean(AsyncTaskProperties.class);
|
||||
@@ -40,4 +48,18 @@ public class ThreadPoolExecutorUtil {
|
||||
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:
|
||||
db-type: com.alibaba.druid.pool.DruidDataSource
|
||||
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
|
||||
username: ${DB_USER:root}
|
||||
password: ${DB_PWD:123456}
|
||||
password: ${DB_PWD:123456789}
|
||||
# password: ${DB_PWD:P@ssw0rd}
|
||||
# 初始连接数
|
||||
initial-size: 5
|
||||
@@ -54,7 +54,7 @@ spring:
|
||||
multi-statement-allow: true
|
||||
redis:
|
||||
#数据库索引
|
||||
database: ${REDIS_DB:2}
|
||||
database: ${REDIS_DB:5}
|
||||
host: ${REDIS_HOST:127.0.0.1}
|
||||
port: ${REDIS_PORT:6379}
|
||||
password: ${REDIS_PWD:}
|
||||
@@ -152,7 +152,7 @@ sa-token:
|
||||
token-session-check-login: false
|
||||
alone-redis:
|
||||
# Redis数据库索引(默认为0)
|
||||
database: 2
|
||||
database: 5
|
||||
# Redis服务器地址
|
||||
host: 127.0.0.1
|
||||
# Redis服务器连接端口
|
||||
|
||||
Reference in New Issue
Block a user