diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceExtraServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceExtraServiceImpl.java index 3cffe2f..773418c 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceExtraServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device/service/impl/DeviceExtraServiceImpl.java @@ -177,13 +177,11 @@ public class DeviceExtraServiceImpl extends CommonServiceImpl i celldto.setY(formatNum(i)); celldto.setZ(formatNum(j)); //celldto.setAddress(Integer.parseInt(CodeUtil.getNewCode("NDCADDRESS_NO"))); - celldto.setCreate_by("init"); - celldto.setCreate_time(SecurityUtils.getCurrentUsername()); + celldto.setCreate_by("admin"); + celldto.setCreate_time(DateUtil.now()); // wo.insert((JSONObject) JSONObject.toJSON(celldto)); StorageCell entity = ConvertUtil.convert(celldto, StorageCell.class); storageCellMapper.insert(entity); @@ -982,8 +982,8 @@ public class DeviceServiceImpl extends CommonServiceImpl i celldto.setY("0"); celldto.setZ("0"); celldto.setAddress(Integer.parseInt(CodeUtil.getNewCode("NDCADDRESS_NO"))); - celldto.setCreate_by("init"); - celldto.setCreate_time(SecurityUtils.getCurrentUsername()); + celldto.setCreate_by("admin"); + celldto.setCreate_time(DateUtil.now()); // wo.insert((JSONObject) JSONObject.toJSON(celldto)); StorageCell entity = ConvertUtil.convert(celldto, StorageCell.class); storageCellMapper.insert(entity); @@ -1001,8 +1001,8 @@ public class DeviceServiceImpl extends CommonServiceImpl i celldto.setY("0"); celldto.setZ("0"); celldto.setAddress(Integer.parseInt(CodeUtil.getNewCode("NDCADDRESS_NO"))); - celldto.setCreate_by("init"); - celldto.setCreate_time(SecurityUtils.getCurrentUsername()); + celldto.setCreate_by("admin"); + celldto.setCreate_time(DateUtil.now()); // wo.insert((JSONObject) JSONObject.toJSON(celldto)); StorageCell entity = ConvertUtil.convert(celldto, StorageCell.class); storageCellMapper.insert(entity); @@ -1010,9 +1010,7 @@ public class DeviceServiceImpl extends CommonServiceImpl i } } - deviceAppService.removeDevice(device_code); - deviceAppService.addDevice(device_code); } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/ItemProtocol.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/ItemProtocol.java index fe39c3f..d5614b0 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/ItemProtocol.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/ItemProtocol.java @@ -19,6 +19,17 @@ public class ItemProtocol { public static String item_pallet_type = "pallet_type"; public static String item_to_command = "to_command"; + public static String open_time = "open_time"; + public static String off_time = "off_time"; + public static String standby_time1 = "standby_time1"; + public static String production_time1 = "production_time1"; + public static String error_time1 = "error_time1"; + public static String standby_time2 = "standby_time2"; + public static String production_time2 = "production_time2"; + public static String error_time2 = "error_time2"; + + + private SiteDeviceDriver driver; public ItemProtocol(SiteDeviceDriver driver) { @@ -75,20 +86,87 @@ public class ItemProtocol { public static List getReadableItemDtos() { ArrayList list = new ArrayList(); - list.add(new ItemDto(item_heartbeat, "心跳", "DB600.B0")); - list.add(new ItemDto(item_mode, "工作状态", "DB600.B2", Boolean.valueOf(true))); - list.add(new ItemDto(item_move, "光电信号", "DB600.B3")); - list.add(new ItemDto(item_action, "取放信号", "DB600.B3")); - list.add(new ItemDto(item_error, "error", "DB600.B4")); - list.add(new ItemDto(item_pallet_type, "托盘类型", "DB600.D6")); + list.add(new ItemDto(item_heartbeat, "心跳", "DB6.DBB0")); + list.add(new ItemDto(item_mode, "工作状态", "DB6.DBB2", Boolean.valueOf(true))); + list.add(new ItemDto(item_move, "光电信号", "DB6.DBB3")); + list.add(new ItemDto(item_action, "取放信号", "DB6.DBB4")); + list.add(new ItemDto(item_error, "error", "DB6.DBB7")); + list.add(new ItemDto(item_pallet_type, "托盘类型", "DB6.DBB6")); return list; } + public static List getReadableItemDtos1() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_heartbeat, "心跳", "DB6.DBB0")); + list.add(new ItemDto(item_mode, "工作状态", "DB6.DBB52", Boolean.valueOf(true))); + list.add(new ItemDto(item_move, "光电信号", "DB6.DBB53")); + list.add(new ItemDto(item_action, "取放信号", "DB6.DBB54")); + list.add(new ItemDto(item_error, "error", "DB6.DBB57")); + list.add(new ItemDto(item_pallet_type, "托盘类型", "DB6.DBB56")); + return list; + } + + public static List getReadableItemDtos2() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_heartbeat, "心跳", "DB6.DBB0")); + list.add(new ItemDto(item_mode, "工作状态", "DB6.DBB102", Boolean.valueOf(true))); + list.add(new ItemDto(item_move, "光电信号", "DB6.DBB103")); + list.add(new ItemDto(item_action, "取放信号", "DB6.DBB104")); + list.add(new ItemDto(item_error, "error", "DB6.DBB107")); + list.add(new ItemDto(item_pallet_type, "托盘类型", "DB6.DBB106")); + return list; + } + + public static List getReadableItemDtos3() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_heartbeat, "心跳", "DB6.DBB0")); + list.add(new ItemDto(item_mode, "工作状态", "DB6.DBB152", Boolean.valueOf(true))); + list.add(new ItemDto(item_move, "光电信号", "DB6.DBB153")); + list.add(new ItemDto(item_action, "取放信号", "DB6.DBB154")); + list.add(new ItemDto(item_error, "error", "DB6.DBB157")); + list.add(new ItemDto(item_pallet_type, "托盘类型", "DB6.DBB156")); + return list; + } + + public static List getReadableItemDtos4() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(open_time, "开机上报 ", "DB6.DTL770")); + list.add(new ItemDto(off_time, "关机上报", "DB6.DTL782")); + list.add(new ItemDto(standby_time1, "当前待机时间1", "DB6.DBD794")); + list.add(new ItemDto(production_time1, "当前生产时间1", "DB6.DBD798")); + list.add(new ItemDto(error_time1, "当前故障时间1", "DB6.DBD802")); + list.add(new ItemDto(standby_time2, "当前待机时间2", "DB6.DBD806")); + list.add(new ItemDto(production_time2, "当前生产时间2", "DB6.DBD810")); + list.add(new ItemDto(error_time2, "当前故障时间2", "DB6.DBD814")); + return list; + } + + + + public static List getWriteableItemDtos() { ArrayList list = new ArrayList(); - list.add(new ItemDto(item_to_command, "作业命令", "DB601.W2", Boolean.valueOf(true))); + list.add(new ItemDto(item_to_command, "作业命令", "DB7.DBW2", Boolean.valueOf(true))); return list; } + public static List getWriteableItemDtos1() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_to_command, "作业命令", "DB7.DBW52", Boolean.valueOf(true))); + return list; + } + + public static List getWriteableItemDtos2() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_to_command, "作业命令", "DB7.DBW102", Boolean.valueOf(true))); + return list; + } + public static List getWriteableItemDtos3() { + ArrayList list = new ArrayList(); + list.add(new ItemDto(item_to_command, "作业命令", "DB7.DBW152", Boolean.valueOf(true))); + return list; + } + + } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/SiteDefination.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/SiteDefination.java index 9ae74c4..448c7fa 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/SiteDefination.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/tianneng/site/SiteDefination.java @@ -54,9 +54,45 @@ public class SiteDefination implements OpcDeviceDriverDefination { return ItemProtocol.getReadableItemDtos(); } + + public List getReadableItemDtos1() { + return ItemProtocol.getReadableItemDtos1(); + } + + public List getReadableItemDtos2() { + return ItemProtocol.getReadableItemDtos2(); + } + + public List getReadableItemDtos3() { + return ItemProtocol.getReadableItemDtos3(); + } + + public List getReadableItemDtos4() { + return ItemProtocol.getReadableItemDtos4(); + } + + + @Override public List getWriteableItemDtos() { return ItemProtocol.getWriteableItemDtos(); } + + public List getWriteableItemDtos1() { + return ItemProtocol.getWriteableItemDtos1(); + } + + + public List getWriteableItemDtos2() { + return ItemProtocol.getWriteableItemDtos2(); + } + + + public List getWriteableItemDtos3() { + return ItemProtocol.getWriteableItemDtos3(); + } + + + } diff --git a/acs/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml b/acs/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml index a4d013c..b64926b 100644 --- a/acs/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml +++ b/acs/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml @@ -7,8 +7,8 @@ spring: db-type: com.alibaba.druid.pool.DruidDataSource 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:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:tn_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true - username: ${DB_USER:root} + url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:xftn_acs}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + username: ${DB_USER:generallu} # password: ${DB_PWD:Root.123456} password: ${DB_PWD:123456} # 初始连接数 diff --git a/lms/nladmin-system/nlsso-server/pom.xml b/lms/nladmin-system/nlsso-server/pom.xml index 0074b37..15d4894 100644 --- a/lms/nladmin-system/nlsso-server/pom.xml +++ b/lms/nladmin-system/nlsso-server/pom.xml @@ -33,6 +33,7 @@ + org.fusesource.jansi @@ -47,6 +48,12 @@ ${hutool.version} + + org.dromara.dynamictp + dynamic-tp-spring-boot-starter-adapter-webserver + 1.1.6.1 + + org.springframework spring-jdbc diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java index f125113..1b7e989 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/AppRun.java @@ -6,6 +6,7 @@ import com.alicp.jetcache.anno.config.EnableMethodCache; import io.swagger.annotations.Api; import org.mybatis.spring.annotation.MapperScan; import org.nl.config.SpringContextHolder; +import org.nl.config.thread.ThreadPoolExecutorUtil; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; @@ -54,6 +55,8 @@ public class AppRun { return fa; } + + /** * 访问首页提示 * diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/base/ErrorData.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/base/ErrorData.java new file mode 100644 index 0000000..eae3279 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/base/ErrorData.java @@ -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; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/ColaBeanUtils.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/ColaBeanUtils.java new file mode 100644 index 0000000..8777daa --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/ColaBeanUtils.java @@ -0,0 +1,34 @@ +package org.nl.common.utils; + +import org.springframework.beans.BeanUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Supplier; + +public class ColaBeanUtils extends BeanUtils { + public static List copyListProperties(List sources, Supplier target) { + return copyListProperties(sources, target, null); + } + + /** + * @author Johnson + * 使用场景:Entity、Bo、Vo层数据的复制,因为BeanUtils.copyProperties只能给目标对象的属性赋值,却不能在List集合下循环赋值,因此添加该方法 + * 如:List 赋值到 List ,List中的 AdminVo 属性都会被赋予到值 + * S: 数据源类 ,T: 目标类::new(eg: AdminVo::new) + */ + public static List copyListProperties(List sources, Supplier target, ColaBeanUtilsCallBack callBack) { + List list = new ArrayList<>(sources.size()); + for (S source : sources) { + T t = target.get(); + copyProperties(source, t); + if (callBack != null) { + // 回调 + callBack.callBack(source, t); + } + list.add(t); + } + return list; + } + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/ColaBeanUtilsCallBack.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/ColaBeanUtilsCallBack.java new file mode 100644 index 0000000..0c169a3 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/common/utils/ColaBeanUtilsCallBack.java @@ -0,0 +1,6 @@ +package org.nl.common.utils; + +@FunctionalInterface +public interface ColaBeanUtilsCallBack { + void callBack(S t, T s); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/AsyncTaskExecutePool.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/AsyncTaskExecutePool.java index 0f7083a..0554590 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/AsyncTaskExecutePool.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/AsyncTaskExecutePool.java @@ -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; + } } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/AsyncTaskHelper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/AsyncTaskHelper.java new file mode 100644 index 0000000..e0a3853 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/AsyncTaskHelper.java @@ -0,0 +1,20 @@ +package org.nl.config.thread; + +/** + * @author gbx + * @since 2024-01-04 + */ +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; +import java.util.function.Supplier; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.poi.ss.formula.functions.T; + +public class AsyncTaskHelper { + public static CompletableFuture createAsyncTask(Supplier taskSupplier, Executor pool, Supplier defaultValueSupplier) { + return CompletableFuture.supplyAsync(taskSupplier, pool) + .exceptionally(ex -> defaultValueSupplier.get()); + } + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/AsyncTaskProperties.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/AsyncTaskProperties.java index 3a1541e..34fb06b 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/AsyncTaskProperties.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/AsyncTaskProperties.java @@ -36,4 +36,6 @@ public class AsyncTaskProperties { private int keepAliveSeconds; private int queueCapacity; + + private int awaitTerminationSeconds; } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/ThreadMonitorCollector.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/ThreadMonitorCollector.java new file mode 100644 index 0000000..53889fc --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/ThreadMonitorCollector.java @@ -0,0 +1,30 @@ +package org.nl.config.thread; + +import lombok.extern.slf4j.Slf4j; +import org.dromara.dynamictp.common.entity.ThreadPoolStats; +import org.dromara.dynamictp.core.monitor.collector.AbstractCollector; + +/** + * @Author: lyd + * @Description: 线程监控 + * @Date: 2023/12/25 + */ +@Slf4j +public class ThreadMonitorCollector extends AbstractCollector { + public static ThreadPoolStats TOMCAT_THREAD; + public static ThreadPoolStats EL_THREAD; + @Override + public void collect(ThreadPoolStats threadPoolStats) { + if ("tomcatTp".equals(threadPoolStats.getPoolName())) { + ThreadMonitorCollector.TOMCAT_THREAD = threadPoolStats; + } else { + ThreadMonitorCollector.EL_THREAD = threadPoolStats; + } + log.info("线程池数据:{}", threadPoolStats); + } + + @Override + public String type() { + return "test_collect"; + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/ThreadPoolExecutorUtil.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/ThreadPoolExecutorUtil.java index 00c1bfe..7697988 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/ThreadPoolExecutorUtil.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/config/thread/ThreadPoolExecutorUtil.java @@ -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,17 +32,23 @@ import java.util.concurrent.TimeUnit; * @author Zheng Jie * @date 2019年10月31日18:16:47 */ +@Configuration public class ThreadPoolExecutorUtil { - public static ThreadPoolExecutor getPoll(){ - AsyncTaskProperties properties = SpringContextHolder.getBean(AsyncTaskProperties.class); + @Autowired + private AsyncTaskProperties asyncTaskProperties; + + @Bean + @Primary + @DynamicTp("el-thread") + public ThreadPoolExecutor threadPoolExecutor() { return new ThreadPoolExecutor( - properties.getCorePoolSize(), - properties.getMaxPoolSize(), - properties.getKeepAliveSeconds(), + asyncTaskProperties.getCorePoolSize(), + asyncTaskProperties.getMaxPoolSize(), + asyncTaskProperties.getKeepAliveSeconds(), TimeUnit.SECONDS, - new ArrayBlockingQueue<>(properties.getQueueCapacity()), + new ArrayBlockingQueue<>(asyncTaskProperties.getQueueCapacity()), new TheadFactoryName() ); } -} +} \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/utils/ExecutionJob.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/utils/ExecutionJob.java index e47816a..9c4f777 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/utils/ExecutionJob.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/system/service/quartz/utils/ExecutionJob.java @@ -15,6 +15,8 @@ import org.nl.system.service.quartz.impl.SysQuartzJobServiceImpl; import org.quartz.DisallowConcurrentExecution; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.quartz.QuartzJobBean; @@ -35,7 +37,10 @@ public class ExecutionJob extends QuartzJobBean { /** * 该处仅供参考 */ - private final static ThreadPoolExecutor EXECUTOR = ThreadPoolExecutorUtil.getPoll(); + @Autowired + @Qualifier("threadPoolExecutor") + private ThreadPoolExecutor EXECUTOR; + @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { SysQuartzJob quartzJob = (SysQuartzJob) context.getMergedJobDataMap().get(SysQuartzJob.JOB_KEY); diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/controller/CockpitController.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/controller/CockpitController.java index aa32794..f388299 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/controller/CockpitController.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/controller/CockpitController.java @@ -1,18 +1,19 @@ 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.nl.wms.ext.acs.service.dto.to.acs.DeviceInfoDto; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; /** * @Author: lyd @@ -32,14 +33,62 @@ public class CockpitController { @PostMapping("/getDeviceInfo") @Log("设备ui") @ApiOperation("设备ui") - public ResponseEntity equipmentInfo(@RequestParam String deviceCode){ + public ResponseEntity equipmentInfo(@RequestParam String deviceCode) { return new ResponseEntity<>(cockpitService.equipmentInfo(deviceCode), HttpStatus.OK); } @PostMapping("/allDeviceStatus") @Log("设备ui") @ApiOperation("设备ui") - public ResponseEntity allDeviceStatus(){ + public ResponseEntity allDeviceStatus() { return new ResponseEntity<>(cockpitService.allDeviceStatus(), HttpStatus.OK); } + + + @PostMapping("/acceptAllDeviceInfo") + @Log("接收acs推送的设备信息") + @ApiOperation("接收acs推送的设备信息") + public ResponseEntity acceptAllDeviceInfo(@RequestBody JSONObject deviceInfo) { + cockpitService.acceptAllDeviceInfo(deviceInfo); + return new ResponseEntity<>(HttpStatus.OK); + } + + + @PostMapping("/acceptDeviceFaultInfo") + @Log("接收acs推送的设备故障信息") + @ApiOperation("接收acs推送的设备故障信息") + public ResponseEntity acceptDeviceFaultInfo(@RequestBody JSONObject deviceInfo) { + cockpitService.acceptDeviceFaultInfo(deviceInfo); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/getHomeInfo") + @Log("获取首页总览信息") + @ApiOperation("获取首页总览信息") + public ResponseEntity getHomeInfo() { + return new ResponseEntity<>(cockpitService.getHomeInfo(), HttpStatus.OK); + } + + @PostMapping("/getTbxInfo") + @Log("获取固化室信息") + @ApiOperation("获取涂板线信息") + public ResponseEntity getTbxInfo() { + return new ResponseEntity<>(cockpitService.getTbxInfo(), HttpStatus.OK); + } + + @PostMapping("/getGhsInfo") + @Log("获取固化室信息") + @ApiOperation("获取固化室信息") + public ResponseEntity getGhsInfo() { + return new ResponseEntity<>(cockpitService.getGhsInfo(), HttpStatus.OK); + } + + @PostMapping("/getZcqInfo") + @Log("获取暂存区信息") + @ApiOperation("获取暂存区信息") + public ResponseEntity getZcqInfo() { + return new ResponseEntity<>(cockpitService.getZcqInfo(), HttpStatus.OK); + } + + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/CockpitService.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/CockpitService.java index 3d5e24d..0231f14 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/CockpitService.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/CockpitService.java @@ -3,6 +3,9 @@ package org.nl.wms.cockpit.service; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + /** * @Author: lyd * @Description: @@ -12,4 +15,18 @@ public interface CockpitService { JSONObject equipmentInfo(String deviceCode); JSONArray allDeviceStatus(); + void acceptAllDeviceInfo(JSONObject deviceInfo); + + void acceptDeviceFaultInfo(JSONObject deviceInfo); + + + ConcurrentHashMap getHomeInfo(); + + ConcurrentHashMap getGhsInfo(); + + ConcurrentHashMap getTbxInfo(); + + ConcurrentHashMap getZcqInfo(); + + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/CommonData.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/CommonData.java new file mode 100644 index 0000000..9bfa100 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/CommonData.java @@ -0,0 +1,34 @@ +package org.nl.wms.cockpit.service.dao; + +import lombok.Data; +import lombok.experimental.FieldNameConstants; +import org.nl.common.base.ErrorData; +import org.nl.wms.cockpit.service.dao.home.DayData; + +import java.util.ArrayList; +import java.util.List; + +/** + * 公共类 + * + * @author gbx + * @since 2024-01-04 + */ +@Data +@FieldNameConstants +public class CommonData { + + private WeekWorkorderStatistics week_workorder_statistics; + + + @Data + public static class WeekWorkorderStatistics extends ErrorData { + private List day1 =new ArrayList<>(); + private List day2=new ArrayList<>(); + private List day3=new ArrayList<>(); + private List day4=new ArrayList<>(); + private List day5=new ArrayList<>(); + private List day6=new ArrayList<>(); + private List day7=new ArrayList<>(); + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/DasDeviceFault.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/DasDeviceFault.java new file mode 100644 index 0000000..4add6aa --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/DasDeviceFault.java @@ -0,0 +1,37 @@ +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 lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.util.Date; + +/** + * 设备故障表 + * + * @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; + + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/ghs/DeviceFaultStatistics.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/ghs/DeviceFaultStatistics.java new file mode 100644 index 0000000..661c3dd --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/ghs/DeviceFaultStatistics.java @@ -0,0 +1,21 @@ +package org.nl.wms.cockpit.service.dao.ghs; + +import lombok.Data; + +/** + * 设备故障率 + * + * @author gbx + * @since 2024-01-12 + */ +@Data +public class DeviceFaultStatistics { + private final long totalFaults; + private final double faultRate; + + public DeviceFaultStatistics(long totalFaults, double faultRate) { + this.totalFaults = totalFaults; + this.faultRate = faultRate; + } + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/ghs/GhsInfo.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/ghs/GhsInfo.java new file mode 100644 index 0000000..dc0feb4 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/ghs/GhsInfo.java @@ -0,0 +1,59 @@ +package org.nl.wms.cockpit.service.dao.ghs; + +import lombok.Data; +import org.nl.wms.cockpit.service.dao.CommonData; + +import java.io.Serializable; + +/** + * 固化室大屏页面 + * + * @author gbx + * @since 2024-01-04 + */ +@Data +public class GhsInfo implements Serializable { + private CuringSummary curing_summary; + private CommonData.WeekWorkorderStatistics week_workorder_statistics; + private TaskInfo task_info; + private DeviceStatus device_status; + private FaultAlarm fault_alarm; + private MonthlyFaultStatistics monthly_fault_statistics; + + @Data + public static class CuringSummary { + private String item_name; + private String item_qty; + } + + + + @Data + public static class TaskInfo { + private String task_type; + private String device_name; + private String point_code1; + private String point_code2; + } + + @Data + public static class DeviceStatus { + private String item_name; + private String item_qty; + } + + @Data + public static class FaultAlarm { + private String device_name; + private String fault_cause; + private String alarm_time; + } + + @Data + public static class MonthlyFaultStatistics { + private String device_name; + private String alarm_qty; + } + + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/home/DayData.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/home/DayData.java new file mode 100644 index 0000000..c2f512a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/home/DayData.java @@ -0,0 +1,14 @@ +package org.nl.wms.cockpit.service.dao.home; + +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; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/home/HomeInfo.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/home/HomeInfo.java new file mode 100644 index 0000000..5a42d7e --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/home/HomeInfo.java @@ -0,0 +1,90 @@ +package org.nl.wms.cockpit.service.dao.home; + +import lombok.Data; +import lombok.experimental.FieldNameConstants; +import org.nl.common.base.ErrorData; + +import java.util.ArrayList; +import java.util.List; + +/** + * 首页总览大屏页面 + * + * @author gbx + * @since 2024-01-04 + */ +@Data +@FieldNameConstants +public class HomeInfo { + private TargetAchievement target_achievement; + private ZCStorageInfo zc_storage_info; + private TodayWork today_work; + private WorkorderStatistics workorder_statistics; + private DeviceStatus device_status; + private FaultAlarm fault_alarm; + private MonthlyFaultStatistics monthly_fault_statistics; + + + + @Data + public static class ZCStorageInfo extends ErrorData { + private List material_info; + private String empty_stock; + private String freePoint; + private String pointCount; + } + + @Data + public static class TodayWork extends ErrorData { + private String workorder_code; + private String material_name; + private String plan_qty; + private String real_qty; + private String point_name; + private String workorder_status; + } + + @Data + public static class WorkorderStatistics { + private Day1 day1; + + @Data + public static class Day1 { + private String tb_real_qty; + private String gh_real_qty; + } + } + + @Data + public static class DeviceStatus { + private StatusInfo status_info; + private StorageInfo storage_info; + + @Data + public static class StatusInfo { + private String item_name; + private String item_qty; + } + + @Data + public static class StorageInfo { + private String item_name; + private String tem_qty; + } + } + + @Data + public static class FaultAlarm { + private String device_name; + private String fault_cause; + private String alarm_time; + } + + @Data + public static class MonthlyFaultStatistics { + private String device_name; + private String alarm_qty; + } + + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/home/TargetAchievement.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/home/TargetAchievement.java new file mode 100644 index 0000000..845ff3b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/home/TargetAchievement.java @@ -0,0 +1,41 @@ +package org.nl.wms.cockpit.service.dao.home; + +import com.baomidou.mybatisplus.annotation.TableField; +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; + + } + +} + + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/mapper/CockpitMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/mapper/CockpitMapper.java deleted file mode 100644 index 33c502d..0000000 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/mapper/CockpitMapper.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.nl.wms.cockpit.service.dao.mapper; - -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import org.apache.ibatis.annotations.Param; - -/** - * @Author: lyd - * @Description: - * @Date: 2023/11/22 - */ -public interface CockpitMapper { - /** - * 获取最近n条工单数据 - * @param deviceCode - * @param number - * @return - */ - JSONArray getDeviceLimitOrders(@Param("deviceCode") String deviceCode, @Param("number") int number); - - JSONObject getVehicleGroupInfo(String vehicleCode, String vehicleType); - - /** - * 固化室详情 - * @return - */ - JSONArray getGHSInteriorList(); - - JSONArray getSSXInteriorList(); - - JSONArray getZCList(); - - JSONArray getKJList(); -} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/mapper/CockpitMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/mapper/CockpitMapper.xml deleted file mode 100644 index 786596b..0000000 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/mapper/CockpitMapper.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - - - diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/tbx/TbxInfo.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/tbx/TbxInfo.java new file mode 100644 index 0000000..000c27a --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/tbx/TbxInfo.java @@ -0,0 +1,79 @@ +package org.nl.wms.cockpit.service.dao.tbx; + +import lombok.Data; +import lombok.experimental.FieldNameConstants; + +/** + * 涂板线大屏页面 + * + * @author gbx + * @since 2024-01-04 + */ +@Data +@FieldNameConstants +public class TbxInfo { + private TargetAchievement target_achievement; + private WeekWorkorderStatistics week_workorder_statistics; + private DeviceStatus device_status; + private FaultAlarm fault_alarm; + private MonthlyFaultStatistics monthly_fault_statistics; + + @Data + public static class TargetAchievement { + private LTProduction lt_production; + private PTProduction pt_production; + + @Data + public static class LTProduction { + private String plan_production; + private String actual_production; + private String percentage; + } + + @Data + public static class PTProduction { + private String plan_production; + private String actual_production; + private String percentage; + } + } + + @Data + public static class WeekWorkorderStatistics { + private Day1 day1; + + @Data + public static class Day1 { + private String item_name; + private String item_qty; + } + } + + + + @Data + public static class DeviceStatus { + private DeviceName device_name; + + @Data + public static class DeviceName { + private String item_name; + private String item_qty; + } + } + + @Data + public static class FaultAlarm { + private String device_name; + private String fault_cause; + private String alarm_time; + } + + @Data + public static class MonthlyFaultStatistics { + private String device_name; + private String alarm_qty; + } + + +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/zcq/Inventory.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/zcq/Inventory.java new file mode 100644 index 0000000..f112b9f --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/zcq/Inventory.java @@ -0,0 +1,16 @@ +package org.nl.wms.cockpit.service.dao.zcq; + +import lombok.Data; + +/** + * 暂存区库存结构 + * + * @author gbx + * @since 2024-01-10 + */ +@Data +public class Inventory { + private String point_name; + private String material_name; + private String quantity; +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/zcq/TaskInfo.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/zcq/TaskInfo.java new file mode 100644 index 0000000..13d1603 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/zcq/TaskInfo.java @@ -0,0 +1,22 @@ +package org.nl.wms.cockpit.service.dao.zcq; + +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 vehicle_type; + private String vehicle_code; + private String task_type; +} \ No newline at end of file diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/zcq/ZcqInfo.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/zcq/ZcqInfo.java new file mode 100644 index 0000000..064b915 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/dao/zcq/ZcqInfo.java @@ -0,0 +1,56 @@ +package org.nl.wms.cockpit.service.dao.zcq; + +import lombok.Data; + +/** + * 暂存区大屏页面 + * + * @author gbx + * @since 2024-01-04 + */ +public class ZcqInfo { + private TemporaryStorage temporary_storage; + private Inventory inventory; + private TaskInfo task_info; + private DeviceStatus device_status; + private FaultAlarm fault_alarm; + private MonthlyFaultStatistics monthly_fault_statistics; + + @Data + public static class TemporaryStorage { + private String total; + private String free; + private String percentage; + } + + @Data + public static class Inventory { + private String material_name; + private String quantity; + } + + + @Data + public static class DeviceStatus { + private DeviceName device_name; + } + + @Data + public static class DeviceName { + private String item_name; + private String item_qty; + } + + @Data + public static class FaultAlarm { + private String device_name; + private String fault_cause; + private String alarm_time; + } + + @Data + public static class MonthlyFaultStatistics { + private String device_name; + private String alarm_qty; + } +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/impl/CockpitServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/impl/CockpitServiceImpl.java index 0fc91ff..3d5d1c9 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/impl/CockpitServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/impl/CockpitServiceImpl.java @@ -1,22 +1,60 @@ package org.nl.wms.cockpit.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; + +import cn.hutool.core.util.IdUtil; 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.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.ColaBeanUtils; +import org.nl.common.utils.SecurityUtils; import org.nl.wms.cockpit.service.CockpitService; -import org.nl.wms.cockpit.service.dao.mapper.CockpitMapper; +import org.nl.wms.cockpit.service.dao.CommonData; +import org.nl.wms.cockpit.service.dao.DasDeviceFault; +import org.nl.wms.cockpit.service.dao.ghs.DeviceFaultStatistics; +import org.nl.wms.cockpit.service.dao.home.DayData; +import org.nl.wms.cockpit.service.dao.home.HomeInfo; +import org.nl.wms.cockpit.service.dao.home.TargetAchievement; +import org.nl.wms.cockpit.service.dao.zcq.Inventory; +import org.nl.wms.cockpit.service.dao.zcq.TaskInfo; +import org.nl.wms.cockpit.service.mapper.CockpitMapper; +import org.nl.wms.pdm.solidifyplan.service.impl.PdmBdSolidifyPlanServiceImpl; import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService; +import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; import org.nl.wms.sch.point.service.ISchBasePointService; import org.nl.wms.sch.point.service.dao.SchBasePoint; +import org.nl.wms.sch.task.service.ISchBaseTaskService; +import org.nl.wms.sch.task.service.dao.SchBaseTask; +import org.nl.wms.sch.task.service.dao.mapper.SchBaseTaskMapper; import org.nl.wms.sch.task_manage.enums.RegionCodeConstant; +import org.nl.wms.sch.task_manage.task.TaskServiceImpl; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Random; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ThreadPoolExecutor; import java.util.stream.Collectors; /** @@ -25,21 +63,251 @@ import java.util.stream.Collectors; * @Date: 2023/11/22 */ @Service +@Slf4j +@EnableScheduling public class CockpitServiceImpl implements CockpitService { @Autowired private ISchBasePointService pointService; @Autowired private IPdmBdWorkorderService workorderService; + + @Autowired + private ISchBaseTaskService taskService; + + @Autowired private CockpitMapper cockpitMapper; @Autowired private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; + @Autowired + @Qualifier("threadPoolExecutor") + private ThreadPoolExecutor pool; + + @Autowired + PdmBdSolidifyPlanServiceImpl pdmBdSolidifyPlanServiceImpl; + + + /** + * 总览 + */ + @Override + public ConcurrentHashMap getHomeInfo() { + ConcurrentHashMap map = new ConcurrentHashMap<>(); + //生产任务目标达成 + CompletableFuture task1 = CompletableFuture.supplyAsync(() -> { + TargetAchievement targetAchievementResult = new TargetAchievement(); + try { + targetAchievementResult = getWorkOrderList(null, null, 1); + } catch (Exception e) { + targetAchievementResult.setError_info(e.toString()); + } + return targetAchievementResult; + }, pool); + //固化汇总 + CompletableFuture> task2 = CompletableFuture.supplyAsync(() -> { + List dayDataList = new ArrayList<>(); + try { + dayDataList = cockpitMapper.getGhCuringSummary(); + } catch (Exception e) { + DayData dayData = new DayData(); + dayData.setError_info(e.toString()); + dayDataList.add(dayData); + } + return dayDataList; + }, pool); + //暂存库库存结构 + CompletableFuture task3 = CompletableFuture.supplyAsync(() -> { + HomeInfo.ZCStorageInfo zCStorageInfo = new HomeInfo.ZCStorageInfo(); + try { + zCStorageInfo = getTemporaryStorage(); + return zCStorageInfo; + + } catch (Exception e) { + zCStorageInfo.setError_info(e.toString()); + } + return zCStorageInfo; + }, pool); + //今日生产任务 + CompletableFuture> task4 = CompletableFuture.supplyAsync(() -> { + List targetAchievement = new ArrayList<>(); + try { + targetAchievement = getWorkOrders(""); + } catch (Exception e) { + HomeInfo.TodayWork todayWork = new HomeInfo.TodayWork(); + todayWork.setError_info(e.toString()); + targetAchievement.add(todayWork); + } + return targetAchievement; + }, pool); + // 7天生产统计 + CompletableFuture task5 = CompletableFuture.supplyAsync(() -> { + CommonData.WeekWorkorderStatistics targetAchievement = new CommonData.WeekWorkorderStatistics(); + try { + targetAchievement = getWeekWorkStatistics(""); + } catch (Exception e) { + targetAchievement.setError_info(e.toString()); + } + return targetAchievement; + }, pool); + CompletableFuture.allOf(task1, task2, task3, task4, task5).join(); + map.put("target_achievement", task1.join()); + map.put("gh_statistics", task2.join()); + map.put("zc_storage_info", task3.join()); + map.put("today_work", task4.join()); + map.put("workorder_statistics", task5.join()); + return map; + } + + /** + * 涂板线 + */ + @Override + public ConcurrentHashMap getTbxInfo() { + ConcurrentHashMap map = new ConcurrentHashMap<>(); + //今日生产 + CompletableFuture task1 = CompletableFuture.supplyAsync(() -> { + TargetAchievement.TbxTargetAchievement tbxTargetAchievement = new TargetAchievement.TbxTargetAchievement(); + try { + //普涂 + TargetAchievement ptProduction = getWorkOrderList("TBX", "1", 1); + //连涂 + TargetAchievement ltProduction = getWorkOrderList("TBX", "2", 1); + tbxTargetAchievement.setPt_production(ptProduction); + tbxTargetAchievement.setLt_production(ltProduction); + + } catch (Exception e) { + tbxTargetAchievement.setPt_production(new TargetAchievement()); + tbxTargetAchievement.setLt_production(new TargetAchievement()); + tbxTargetAchievement.setError_info(e.toString()); + } + return tbxTargetAchievement; + }, pool); + //7天生产统计 + CompletableFuture task2 = CompletableFuture.supplyAsync(() -> { + CommonData.WeekWorkorderStatistics targetAchievement = new CommonData.WeekWorkorderStatistics(); + try { + targetAchievement = getWeekWorkStatistics("TBX"); + } catch (Exception e) { + targetAchievement.setError_info(e.toString()); + } + return targetAchievement; + }, pool); + //今日涂板工单 + CompletableFuture> task3 = CompletableFuture.supplyAsync(() -> { + List todayWorks = new ArrayList<>(); + try { + todayWorks = getWorkOrders(RegionCodeConstant.COATED_PLATE_LINE_AREA); + } catch (Exception e) { + HomeInfo.TodayWork todayWork = new HomeInfo.TodayWork(); + todayWork.setError_info(e.toString()); + todayWorks.add(todayWork); + } + return todayWorks; + }, pool); + CompletableFuture.allOf(task1, task2, task3).join(); + map.put("target_achievement", task1.join()); + map.put("week_workorder_statistics", task2.join()); + map.put("today_work", task3.join()); + return map; + } + + /** + * 固化室 + */ + @Override + public ConcurrentHashMap getGhsInfo() { + ConcurrentHashMap map = new ConcurrentHashMap<>(); + //固化汇总 + CompletableFuture> task1 = CompletableFuture.supplyAsync(() -> { + List dayDataList = new ArrayList<>(); + try { + dayDataList = cockpitMapper.getGhCuringSummary(); + } catch (Exception e) { + DayData dayData = new DayData(); + dayData.setError_info(e.toString()); + dayDataList.add(dayData); + } + return dayDataList; + }, pool); + + //7日固化 + CompletableFuture task2 = CompletableFuture.supplyAsync(() -> { + CommonData.WeekWorkorderStatistics targetAchievement = new CommonData.WeekWorkorderStatistics(); + try { + targetAchievement = getWeekWorkStatistics("GH"); + } catch (Exception e) { + targetAchievement.setError_info(e.toString()); + } + return targetAchievement; + }, pool); + + //出入库任务 + CompletableFuture> task3 = CompletableFuture.supplyAsync(() -> { + List tasks = new ArrayList<>(); + try { + tasks = getTasks(RegionCodeConstant.CURING_ZONE); + + } catch (Exception e) { + TaskInfo taskInfo = new TaskInfo(); + taskInfo.setError_info(e.toString()); + tasks.add(taskInfo); + } + return tasks; + }, pool); + CompletableFuture.allOf(task1, task2, task3).join(); + map.put("curing_summary", task1.join()); + map.put("week_workorder_statistics", task2.join()); + map.put("task_info", task3.join()); + return map; + } + + + /** + * 暂存区 + */ + @Override + public ConcurrentHashMap getZcqInfo() { + ConcurrentHashMap map = new ConcurrentHashMap<>(); + //暂存区库存结构 + CompletableFuture task1 = CompletableFuture.supplyAsync(() -> { + HomeInfo.ZCStorageInfo zCStorageInfo = new HomeInfo.ZCStorageInfo(); + try { + zCStorageInfo = getTemporaryStorage(); + return zCStorageInfo; + } catch (Exception e) { + zCStorageInfo.setError_info(e.toString()); + } + return zCStorageInfo; + }, pool); + //出入库任务 + CompletableFuture> task2 = CompletableFuture.supplyAsync(() -> { + List tasks = new ArrayList<>(); + try { + tasks = getTasks(RegionCodeConstant.STAGING_AREA); + + } catch (Exception e) { + TaskInfo taskInfo = new TaskInfo(); + taskInfo.setError_info(e.toString()); + tasks.add(taskInfo); + } + return tasks; + }, pool); + CompletableFuture.allOf(task1, task2).join(); + map.put("temporary_storage", task1.join()); + map.put("inventory", task2.join()); + return map; + } + + + /** + * 设备ui + */ @Override public JSONObject equipmentInfo(String deviceCode) { - JSONObject res = new JSONObject(); + JSONObject res = new JSONObject(); SchBasePoint point = pointService.getById(deviceCode); List points; switch (point.getRegion_code()) { @@ -70,7 +338,8 @@ public class CockpitServiceImpl implements CockpitService { } res.put("details", array); // 获取最近3条工单数据 - JSONArray productionTask = cockpitMapper.getDeviceLimitOrders(deviceCode, 3); + List targetAchievementList = cockpitMapper.getDeviceLimitOrders(deviceCode, 3); + JSONArray productionTask = JSONArray.parseArray(JSON.toJSONString(targetAchievementList)); res.put("production_tasks", productionTask); break; case RegionCodeConstant.CURING_ZONE: @@ -89,13 +358,14 @@ public class CockpitServiceImpl implements CockpitService { JSONArray ghsArray = new JSONArray(); for (int i = 0; i < points.size(); i++) { SchBasePoint pointObj = points.get(i); - if (pointObj.getPoint_type().equals("4")) break; + if (pointObj.getPoint_type().equals("4")) { + break; + } JSONObject one = new JSONObject(); one.put("device_code", pointObj.getPoint_code()); one.put("device_name", pointObj.getPoint_name()); one.put("move", (Integer.parseInt(pointObj.getPoint_status()) - 1)); - one.put("material_type", ObjectUtil.isNotEmpty(pointObj.getVehicle_type()) - ? pointObj.getVehicle_type() : "-"); + one.put("material_type", ObjectUtil.isNotEmpty(pointObj.getVehicle_type()) ? pointObj.getVehicle_type() : "-"); ghsArray.add(one); } res.put("details", ghsArray); @@ -110,8 +380,7 @@ public class CockpitServiceImpl implements CockpitService { res.put("standby_time", 20); res.put("production_time", 10); res.put("error_time", 8); - res.put("material_type", ObjectUtil.isNotEmpty(point.getVehicle_type()) - ? point.getVehicle_type() : "-"); + res.put("material_type", ObjectUtil.isNotEmpty(point.getVehicle_type()) ? point.getVehicle_type() : "-"); res.put("end_time", "-"); JSONArray ssxArray = new JSONArray(); for (int i = 0; i < points.size(); i++) { @@ -129,18 +398,16 @@ public class CockpitServiceImpl implements CockpitService { res.put("device_code", deviceCode); res.put("device_name", point.getPoint_name()); res.put("move", (Integer.parseInt(point.getPoint_status()) - 1)); - res.put("vehicle_type", ObjectUtil.isNotEmpty(point.getVehicle_type()) - ? point.getVehicle_type() : "-"); + res.put("vehicle_type", ObjectUtil.isNotEmpty(point.getVehicle_type()) ? point.getVehicle_type() : "-"); break; case RegionCodeConstant.STAGING_AREA: // 货位直接显示,获取组盘信息,组装数据反馈 res.put("device_code", deviceCode); res.put("device_name", point.getPoint_name()); - res.put("vehicle_code", ObjectUtil.isNotEmpty(point.getVehicle_code())?point.getPoint_code():"-"); - res.put("vehicle_type", ObjectUtil.isNotEmpty(point.getVehicle_type())?point.getVehicle_type():"-"); + res.put("vehicle_code", ObjectUtil.isNotEmpty(point.getVehicle_code()) ? point.getPoint_code() : "-"); + res.put("vehicle_type", ObjectUtil.isNotEmpty(point.getVehicle_type()) ? point.getVehicle_type() : "-"); if (ObjectUtil.isNotEmpty(point.getVehicle_type()) && ObjectUtil.isNotEmpty(point.getVehicle_code())) { - JSONObject groupInfo = cockpitMapper.getVehicleGroupInfo(point.getVehicle_code(), - point.getVehicle_type()); + JSONObject groupInfo = cockpitMapper.getVehicleGroupInfo(point.getVehicle_code(), point.getVehicle_type()); if (ObjectUtil.isNotEmpty(groupInfo)) { res.put("storage_info", groupInfo); } @@ -150,6 +417,39 @@ public class CockpitServiceImpl implements CockpitService { return res; } + + /** + * 接收acs推送的设备信息 + */ + @Override + public void acceptAllDeviceInfo(JSONObject deviceInfo) { + + } + + + /** + * 接收acs推送的设备故障信息 + */ + @Override + public void acceptDeviceFaultInfo(JSONObject deviceInfo) { + try { + DasDeviceFault dasDeviceFault = new DasDeviceFault(); + String now = DateUtil.now(); + dasDeviceFault.setDevice_code(deviceInfo.getString("device_code")); + dasDeviceFault.setRegion_code(pointService.getById(deviceInfo.getString("device_code")).getRegion_code()); + dasDeviceFault.setData_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + dasDeviceFault.setFailure_time(now); + dasDeviceFault.setFailure_info(deviceInfo.getString("failure_info")); + cockpitMapper.insertDeviceFault(dasDeviceFault); + } catch (Exception exception) { + throw new BadRequestException(exception.toString()); + } + } + + + /** + * 秒级接口 + */ @Override public JSONArray allDeviceStatus() { JSONArray array = new JSONArray(); @@ -199,8 +499,7 @@ public class CockpitServiceImpl implements CockpitService { rgv_m.put("error_time", 0); array.add(rgv_m); } - List tbx = pointService.list(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_type, "1") - .eq(SchBasePoint::getRegion_code, "TBX")); + List tbx = pointService.list(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_type, "1").eq(SchBasePoint::getRegion_code, "TBX")); List tbxList = tbx.stream().map(SchBasePoint::getPoint_code).collect(Collectors.toList()); tbxList.forEach(s -> { JSONObject object = new JSONObject(); @@ -216,8 +515,7 @@ public class CockpitServiceImpl implements CockpitService { object.put("material", "01200000"); array.add(object); }); - List tbxDjw = pointService.list(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_type, "2") - .eq(SchBasePoint::getRegion_code, "TBX")); + List tbxDjw = pointService.list(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_type, "2").eq(SchBasePoint::getRegion_code, "TBX")); List tbxDjwList = tbxDjw.stream().map(SchBasePoint::getPoint_code).collect(Collectors.toList()); tbxDjwList.forEach(s -> { JSONObject object = new JSONObject(); @@ -229,8 +527,7 @@ public class CockpitServiceImpl implements CockpitService { array.add(object); }); // 缓存位 - List hcx = pointService.list(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_type, "3") - .eq(SchBasePoint::getRegion_code, "TBX")); + List hcx = pointService.list(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_type, "3").eq(SchBasePoint::getRegion_code, "TBX")); List hcxList = hcx.stream().map(SchBasePoint::getPoint_code).collect(Collectors.toList()); hcxList.forEach(s -> { JSONObject object = new JSONObject(); @@ -239,8 +536,7 @@ public class CockpitServiceImpl implements CockpitService { object.put("move", "0"); array.add(object); }); - List gh = pointService.list(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_type, "1") - .eq(SchBasePoint::getRegion_code, "GH")); + List gh = pointService.list(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_type, "1").eq(SchBasePoint::getRegion_code, "GH")); List ghList = gh.stream().map(SchBasePoint::getPoint_code).collect(Collectors.toList()); ghList.forEach(s -> { JSONObject object = new JSONObject(); @@ -259,8 +555,7 @@ public class CockpitServiceImpl implements CockpitService { array.add(object); }); // 整体 - List kjzc = pointService.list(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_type, "5") - .eq(SchBasePoint::getRegion_code, "KJZC")); + List kjzc = pointService.list(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_type, "5").eq(SchBasePoint::getRegion_code, "KJZC")); List kjzcList = kjzc.stream().map(SchBasePoint::getPoint_code).collect(Collectors.toList()); kjzcList.forEach(s -> { JSONObject object = new JSONObject(); @@ -296,4 +591,274 @@ public class CockpitServiceImpl implements CockpitService { array.add(emptyCacheBit); return array; } + + public ConcurrentHashMap equipmentInfo1(String deviceCode) { + ConcurrentHashMap map = new ConcurrentHashMap<>(); + CompletableFuture listCompletableFuture = CompletableFuture.supplyAsync(() -> { + JSONArray array = new JSONArray(); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("one", "1"); + jsonObject.put("two", "2"); + array.add(jsonObject); + return array; + }, pool); + listCompletableFuture.thenAccept(result -> { + map.put("DayShiftList", result); + }).exceptionally((e) -> { + map.put("DayShiftList", null); + return null; + }); + + CompletableFuture listShiftProductionFuture = CompletableFuture.supplyAsync(() -> { + JSONArray array = new JSONArray(); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("one", "3"); + jsonObject.put("two", "4"); + array.add(jsonObject); + // 此处为故意制造异常 + Integer sd = 5 / 0; + jsonObject.put("one", "6"); + jsonObject.put("two", "7"); + array.add(jsonObject); + return array; + }, pool); + listCompletableFuture.thenAccept(result -> { + map.put("DayShiftList", result); + }).exceptionally((e) -> { + map.put("DayShiftList", null); + return null; + }); + CompletableFuture listProductionTaskFuture = CompletableFuture.supplyAsync(() -> { + JSONArray array = new JSONArray(); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("one", "1"); + jsonObject.put("two", "2"); + array.add(jsonObject); + return array; + }, pool); + listCompletableFuture.thenAccept(result -> { + map.put("DayShiftList", result); + }).exceptionally((e) -> { + map.put("DayShiftList", null); + return null; + }); + // 提交 + CompletableFuture allQuery = CompletableFuture.allOf(listCompletableFuture, listShiftProductionFuture, listProductionTaskFuture); + CompletableFuture> future = allQuery.thenApply((result) -> map).exceptionally((e) -> { + return null; + }); + future.join(); + return map; + } + + /** + * 暂存区库存结构-空库存 + */ + public HomeInfo.ZCStorageInfo getTemporaryStorage() { + HomeInfo.ZCStorageInfo zCStorageInfo = new HomeInfo.ZCStorageInfo(); + zCStorageInfo.setMaterial_info(cockpitMapper.getTemporaryStorage()); + List pointList = pointService.list(new LambdaUpdateWrapper().eq(SchBasePoint::getRegion_code, "ZC").eq(SchBasePoint::getIs_used, 1)); + long freePoint = pointList.stream().filter(r -> "1".equals(r.getPoint_status())).count(); + int pointCount = pointList.size(); + //空库存百分比 + double percentageFree = Math.round(((double) freePoint / (double) pointCount) * 100); + zCStorageInfo.setFreePoint(String.valueOf(freePoint)); + zCStorageInfo.setPointCount(String.valueOf(pointCount)); + zCStorageInfo.setEmpty_stock(String.valueOf(percentageFree)); + return zCStorageInfo; + } + + + /** + * 今日任务 + */ + public List getTasks(String type) { + // 获取今天的日期时间范围 + LocalDateTime startOfDay = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0).withNano(0); + LocalDateTime endOfDay = startOfDay.plusDays(1).minusNanos(1); + List tasks = new ArrayList<>(); + if (RegionCodeConstant.CURING_ZONE.equals(type)) { + // 固化室当天出入库任务 + List todayTasks = taskService.list(new LambdaUpdateWrapper().eq(SchBaseTask::getIs_delete, 0).between(SchBaseTask::getCreate_time, startOfDay, endOfDay).and(wrapper -> wrapper.eq(SchBaseTask::getConfig_code, "1").or().eq(SchBaseTask::getConfig_code, "2"))); + tasks = ColaBeanUtils.copyListProperties(todayTasks, TaskInfo::new); + } else if (RegionCodeConstant.STAGING_AREA.equals(type)) { + // 暂存区当天出入库任务 + List inTasks = cockpitMapper.getTemporaryInTask(); + List outTasks = cockpitMapper.getTemporaryOutTask(); + tasks.addAll(inTasks); + tasks.addAll(outTasks); + } + return tasks; + } + + + /** + * 生产任务 + */ + public List getWorkOrders(String type) { + // 获取今天的日期时间范围 + LocalDateTime startOfDay = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0).withNano(0); + LocalDateTime endOfDay = startOfDay.plusDays(1).minusNanos(1); + // 查询今天的工单信息 + List todayWorkOrders = workorderService.list(new LambdaUpdateWrapper() + .eq(PdmBdWorkorder::getIs_delete, 0) + .between(PdmBdWorkorder::getCreate_time, startOfDay, endOfDay) + .and(StringUtils.isNotBlank(type), i -> i.eq(PdmBdWorkorder::getRegion_code, type))); + return ColaBeanUtils.copyListProperties(todayWorkOrders, HomeInfo.TodayWork::new); + } + + /** + * 生产目标达成 + */ + public TargetAchievement getWorkOrderList(String regionCode, String type, Integer days) { + TargetAchievement targetAchievement; + targetAchievement = cockpitMapper.getCompletionPercent(regionCode, type, days); + if (targetAchievement != null) { + // 计算完成百分比 + BigDecimal completionPercentage = targetAchievement.getActual_production().divide(targetAchievement.getExpected_production(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")); + int roundedPercentage = completionPercentage.intValue(); + targetAchievement.setPercentage(roundedPercentage); + } else { + targetAchievement = new TargetAchievement(); + } + return targetAchievement; + } + + + /** + * 7天生产统计 + * type:1涂板线,2固化室 + */ + public CommonData.WeekWorkorderStatistics getWeekWorkStatistics(String type) { + // 过滤近5天的数据 + CommonData.WeekWorkorderStatistics weekWorkorderStatistics = new CommonData.WeekWorkorderStatistics(); + List weekWorkorder; + List tbxWorkOrder = new ArrayList<>(); + List ghworkOrders = new ArrayList<>(); + //涂板线和固化室7天统计 + if (RegionCodeConstant.COATED_PLATE_LINE_AREA.equals(type)) { + tbxWorkOrder = cockpitMapper.getWorkOrders(type, 7); + } else if (RegionCodeConstant.CURING_ZONE.equals(type)) { + ghworkOrders = cockpitMapper.getGhActualProduction(7); + } else { + tbxWorkOrder = cockpitMapper.getWorkOrders(RegionCodeConstant.COATED_PLATE_LINE_AREA, 7); + ghworkOrders = cockpitMapper.getGhActualProduction(7); + } + if (tbxWorkOrder.size() > 0 || ghworkOrders.size() > 0) { + weekWorkorder = isWithinLastDayss(tbxWorkOrder, ghworkOrders, 1, type); + weekWorkorderStatistics.setDay1(weekWorkorder); + weekWorkorder = isWithinLastDayss(tbxWorkOrder, ghworkOrders, 2, type); + weekWorkorderStatistics.setDay2(weekWorkorder); + weekWorkorder = isWithinLastDayss(tbxWorkOrder, ghworkOrders, 3, type); + weekWorkorderStatistics.setDay3(weekWorkorder); + weekWorkorder = isWithinLastDayss(tbxWorkOrder, ghworkOrders, 4, type); + weekWorkorderStatistics.setDay4(weekWorkorder); + weekWorkorder = isWithinLastDayss(tbxWorkOrder, ghworkOrders, 5, type); + weekWorkorderStatistics.setDay5(weekWorkorder); + weekWorkorder = isWithinLastDayss(tbxWorkOrder, ghworkOrders, 6, type); + weekWorkorderStatistics.setDay6(weekWorkorder); + weekWorkorder = isWithinLastDayss(tbxWorkOrder, ghworkOrders, 7, type); + weekWorkorderStatistics.setDay7(weekWorkorder); + } + return weekWorkorderStatistics; + } + + + /** + * 7天生产统计-获取每天对应的数值 + * vehicle_type: + */ + private List isWithinLastDayss(List tbxWorkOrder, List ghworkOrders, int days, String type) { + List dayDataList = new ArrayList<>(); + DayData dayData = new DayData(); + tbxWorkOrder = tbxWorkOrder.stream().filter(workOrder -> isThisDays(workOrder, days)).collect(Collectors.toList()); + ghworkOrders = ghworkOrders.stream().filter(workOrder -> isThisDays(workOrder, days)).collect(Collectors.toList()); + if (type.equals(RegionCodeConstant.COATED_PLATE_LINE_AREA)) { + List lt; + List pt; + dayData.setItem_name("连涂计划数"); + lt = tbxWorkOrder.stream().filter(workOrder -> "1".equals(workOrder.getVehicle_type())).collect(Collectors.toList()); + dayData.setItem_qty(calculateTotalPlanQty(lt)); + dayDataList.add(dayData); + dayData = new DayData(); + dayData.setItem_name("连涂完成数"); + dayData.setItem_qty(calculateTotalRealQty(lt)); + dayDataList.add(dayData); + pt = tbxWorkOrder.stream().filter(workOrder -> "2".equals(workOrder.getVehicle_type())).collect(Collectors.toList()); + dayData = new DayData(); + dayData.setItem_name("普涂计划数"); + dayData.setItem_qty(calculateTotalRealQty(pt)); + dayDataList.add(dayData); + dayData = new DayData(); + dayData.setItem_name("普涂完成数"); + dayData.setItem_qty(calculateTotalRealQty(pt)); + dayDataList.add(dayData); + } else if (type.equals(RegionCodeConstant.CURING_ZONE)) { + dayData.setItem_name("固化生产"); + dayData.setItem_qty(calculateTotalRealQty(ghworkOrders)); + dayDataList.add(dayData); + } else { + dayData.setItem_name("连涂生产"); + dayData.setItem_qty(calculateTotalRealQty(tbxWorkOrder)); + dayDataList.add(dayData); + dayData = new DayData(); + dayData.setItem_name("固化生产"); + dayData.setItem_qty(calculateTotalRealQty(ghworkOrders)); + dayDataList.add(dayData); + } + return dayDataList; + } + + + /** + * 7天生产统计-计算计划生产总和 + */ + private String calculateTotalPlanQty(List workOrders) { + BigDecimal result = workOrders.stream().map(TargetAchievement::getExpected_production).reduce(BigDecimal.ZERO, BigDecimal::add); + return result.toString(); + } + + + /** + * 7天生产统计-计算实际生产总和 + */ + private String calculateTotalRealQty(List workOrders) { + BigDecimal result = workOrders.stream().map(TargetAchievement::getActual_production).reduce(BigDecimal.ZERO, BigDecimal::add); + return result.toString(); + } + + /** + * 7天生产统计-过滤某日的工单 + */ + private boolean isThisDays(TargetAchievement workOrder, int days) { + LocalDate createDate = LocalDate.parse(workOrder.getCreate_time(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + LocalDate today = LocalDate.now(); + LocalDate daysAgo = today.minusDays(days); + return !createDate.isBefore(daysAgo) && createDate.isBefore(today.plusDays(1)); + } + + + /** + * 查询设备的故障次数和故障率 + */ + private DeviceFaultStatistics getFaultsForDevice(String deviceCode) { + long totalFaults = cockpitMapper.getFaultsForDevice(deviceCode); + long last30Days = 30; // 假设固定为30天 + double faultRate = (totalFaults / (double) last30Days) * 100.0; + // 返回包含故障数和故障率的对象 + return new DeviceFaultStatistics(totalFaults, faultRate); + } + + + /** + * 定时统计近七天数据 + */ + @Async("taskExecutor") + //@Scheduled(cron = "0/10 * * * * *") + public void executeWeekWorkStatistics() { + + + } + + } diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/mapper/CockpitMapper.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/mapper/CockpitMapper.java new file mode 100644 index 0000000..17a9b7b --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/mapper/CockpitMapper.java @@ -0,0 +1,80 @@ +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.apache.ibatis.annotations.Select; +import org.nl.wms.cockpit.service.dao.DasDeviceFault; +import org.nl.wms.cockpit.service.dao.home.DayData; +import org.nl.wms.cockpit.service.dao.home.TargetAchievement; +import org.nl.wms.cockpit.service.dao.zcq.Inventory; +import org.nl.wms.cockpit.service.dao.zcq.TaskInfo; +import org.nl.wms.cockpit.service.dao.zcq.ZcqInfo; + +import java.util.List; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/11/22 + */ +public interface CockpitMapper { + /** + * 获取最近n条工单数据 + * + * @param deviceCode + * @param number + * @return + */ + List getDeviceLimitOrders(@Param("deviceCode") String deviceCode, @Param("number") int number); + + + List getTemporaryStorage(); + + + List getTemporaryInTask(); + + + List getTemporaryOutTask(); + + + TargetAchievement getCompletionPercent(@Param("regionCode") String regionCode, @Param("vehicleType") String vehicleType, @Param("days") Integer days); + + + List getWorkOrders(@Param("regionCode") String regionCode, @Param("days") Integer days); + + + List getGhActualProduction(@Param("days") Integer days); + + + @Select("SELECT COUNT(*) AS totalFaults, " + + " (COUNT(*) / 30.0) * 100 AS faultRate " + + "FROM das_device_fault " + + "WHERE device_code = #{deviceCode} " + + " AND failure_time >= NOW() - INTERVAL 30 DAY") + Long getFaultsForDevice(@Param("deviceCode") String deviceCode); + + + List 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(); +} diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/mapper/CockpitMapper.xml b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/mapper/CockpitMapper.xml new file mode 100644 index 0000000..1249739 --- /dev/null +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/cockpit/service/mapper/CockpitMapper.xml @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/SchBaseVehiclematerialgroup.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/SchBaseVehiclematerialgroup.java index a55b662..4da6886 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/SchBaseVehiclematerialgroup.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/dao/SchBaseVehiclematerialgroup.java @@ -25,6 +25,9 @@ public class SchBaseVehiclematerialgroup implements Serializable { @ApiModelProperty(value = "组盘标识") private String group_id; + @ApiModelProperty(value = "区域编码") + private String region_code; + @ApiModelProperty(value = "载具编码") private String vehicle_code; diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/impl/SchBaseVehiclematerialgroupServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/impl/SchBaseVehiclematerialgroupServiceImpl.java index ab13929..67d51ab 100644 --- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/impl/SchBaseVehiclematerialgroupServiceImpl.java +++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/group/service/impl/SchBaseVehiclematerialgroupServiceImpl.java @@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; @@ -17,6 +18,7 @@ import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; import org.nl.wms.sch.group.service.dao.mapper.SchBaseVehiclematerialgroupMapper; import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; import org.nl.wms.sch.group.service.dto.SchBaseVehiclematerialgroupQuery; +import org.nl.wms.sch.point.service.ISchBasePointService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -36,6 +38,9 @@ public class SchBaseVehiclematerialgroupServiceImpl extends ServiceImpl queryAll(SchBaseVehiclematerialgroupQuery whereJson, PageQuery page){ IPage pages = new Page<>(page.getPage() + 1, page.getSize()); @@ -48,7 +53,10 @@ public class SchBaseVehiclematerialgroupServiceImpl extends ServiceImpl