From a33c33d48c2c16995130b825355b6883be4eb159 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期一, 02 九月 2024 15:26:41 +0800
Subject: [PATCH] 加入定时任务,启动时打固定点 ,并且加入工位数据缓存

---
 collect/src/main/java/com/qianwen/mdc/collect/service/DeviceStateFixPointService.java |    2 
 collect/src/main/java/com/qianwen/mdc/collect/job/DeviceStatusAggregateJob.java       |   44 ++++++++++++++
 collect/src/main/java/com/qianwen/mdc/collect/job/ProductionTimeCacheXxlJob.java      |    2 
 collect/src/main/java/com/qianwen/mdc/collect/runner/InitRunner.java                  |   48 +++++++++-------
 collect/src/main/java/com/qianwen/mdc/collect/config/XxlJobConfig.java                |   41 +++++++++++++
 collect/src/main/java/com/qianwen/mdc/collect/mapper/iotdb/DeviceStateMapper.java     |    9 ++
 collect/src/main/java/com/qianwen/mdc/collect/cache/WorkstationCache.java             |    6 +-
 collect/src/main/resources/application-dev.yml                                        |   16 +++++
 collect/src/main/resources/com/qianwen/mdc/collect/mapper/iotdb/DeviceStateMapper.xml |    4 +
 9 files changed, 144 insertions(+), 28 deletions(-)

diff --git a/collect/src/main/java/com/qianwen/mdc/collect/cache/WorkstationCache.java b/collect/src/main/java/com/qianwen/mdc/collect/cache/WorkstationCache.java
index 1083904..6bbdfae 100644
--- a/collect/src/main/java/com/qianwen/mdc/collect/cache/WorkstationCache.java
+++ b/collect/src/main/java/com/qianwen/mdc/collect/cache/WorkstationCache.java
@@ -53,7 +53,7 @@
 
     
 
-    public Map<Long, WorkstationDTO> getWorkStations() {
+    public Map<Long, WorkstationDTO> getWorkstations() {
         String redisKey = "posting:workstation".concat("::").concat(WORKSTATION_ALL);
         /*Map<String, WorkstationDTO> map = bladeRedis.hGetAll(redisKey);
        
@@ -66,14 +66,14 @@
         Map<Long, WorkstationDTO> map = convertMap(redisUtil.hmget(redisKey));
        
         if (ObjectUtil.isEmpty(map)) {
-            map = setWorkStations();
+            map = setWorkstations();
         }
 
         return map;
         
     }
     
-    private Map<Long, WorkstationDTO> setWorkStations() {
+    private Map<Long, WorkstationDTO> setWorkstations() {
         List<Workstation> list = workstationService.list();
         String redisKey = "posting:workstation".concat("::").concat(WORKSTATION_ALL);
        
diff --git a/collect/src/main/java/com/qianwen/mdc/collect/config/XxlJobConfig.java b/collect/src/main/java/com/qianwen/mdc/collect/config/XxlJobConfig.java
new file mode 100644
index 0000000..5584715
--- /dev/null
+++ b/collect/src/main/java/com/qianwen/mdc/collect/config/XxlJobConfig.java
@@ -0,0 +1,41 @@
+package com.qianwen.mdc.collect.config;
+
+import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class XxlJobConfig {
+    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
+    @Value("${xxl.job.admin.addresses}")
+    private String adminAddresses;
+    @Value("${xxl.job.executor.appname}")
+    private String appName;
+    @Value("${xxl.job.executor.ip:}")
+    private String ip;
+    @Value("${xxl.job.executor.port}")
+    private int port;
+    @Value("${xxl.job.accessToken:}")
+    private String accessToken;
+    @Value("${xxl.job.executor.logpath}")
+    private String logPath;
+    @Value("${xxl.job.executor.logretentiondays:7}")
+    private int logRetentionDays;
+
+    @Bean
+    public XxlJobSpringExecutor xxlJobExecutor() {
+        this.logger.info("xxl-job 閰嶇疆鍒濆鍖�...");
+        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
+        xxlJobSpringExecutor.setAdminAddresses(this.adminAddresses);
+        xxlJobSpringExecutor.setAppName(this.appName);
+        xxlJobSpringExecutor.setIp(this.ip);
+        xxlJobSpringExecutor.setPort(this.port);
+        xxlJobSpringExecutor.setAccessToken(this.accessToken);
+        xxlJobSpringExecutor.setLogPath(this.logPath);
+        xxlJobSpringExecutor.setLogRetentionDays(this.logRetentionDays);
+        return xxlJobSpringExecutor;
+    }
+}
diff --git a/collect/src/main/java/com/qianwen/mdc/collect/job/DeviceStatusAggregateJob.java b/collect/src/main/java/com/qianwen/mdc/collect/job/DeviceStatusAggregateJob.java
new file mode 100644
index 0000000..99e115c
--- /dev/null
+++ b/collect/src/main/java/com/qianwen/mdc/collect/job/DeviceStatusAggregateJob.java
@@ -0,0 +1,44 @@
+package com.qianwen.mdc.collect.job;
+
+import com.qianwen.mdc.collect.cache.WorkstationCache;
+import com.qianwen.mdc.collect.dto.WorkstationDTO;
+import com.qianwen.mdc.collect.service.DeviceStateAggregateService;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import com.xxl.job.core.log.XxlJobLogger;
+
+import cn.hutool.core.util.ObjectUtil;
+
+import java.util.Map;
+import java.util.Set;
+
+import javax.annotation.Resource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class DeviceStatusAggregateJob {
+    private static final Logger log = LoggerFactory.getLogger(DeviceStatusAggregateJob.class);
+    @Resource
+    private DeviceStateAggregateService deviceStateAggregateService;
+    @Autowired
+    private WorkstationCache workstationCache;
+    @XxlJob("workStationAggregateJobHandler")
+    public ReturnT<String> workStationAggregateJobHandler(String param) throws Exception {
+        XxlJobLogger.log("XXL-JOB, 瀹氭椂璁$畻宸ヤ綅鐨勭姸鎬侊紝浜ч噺绛変俊鎭�,寮�濮嬪彂閫�.....", new Object[0]);
+        
+        
+        Map<Long, WorkstationDTO> workstations = workstationCache.getWorkstations();
+        if (ObjectUtil.isNotEmpty(workstations)) {
+            Set<Long> workStationIds = workstations.keySet();
+            for(Long workstationId :workStationIds) {
+            	deviceStateAggregateService.stateAggregate(workstationId);
+            }
+        }
+        
+        XxlJobLogger.log("XXL-JOB, 瀹氭椂璁$畻宸ヤ綅鐨勭姸鎬侊紝浜ч噺绛変俊鎭�,鍙戦�佺粨鏉�", new Object[0]);
+        return ReturnT.SUCCESS;
+    }
+}
diff --git a/collect/src/main/java/com/qianwen/mdc/collect/job/ProductionTimeCacheXxlJob.java b/collect/src/main/java/com/qianwen/mdc/collect/job/ProductionTimeCacheXxlJob.java
index 766b53a..e291c1c 100644
--- a/collect/src/main/java/com/qianwen/mdc/collect/job/ProductionTimeCacheXxlJob.java
+++ b/collect/src/main/java/com/qianwen/mdc/collect/job/ProductionTimeCacheXxlJob.java
@@ -22,7 +22,7 @@
     @Autowired
 	private TimeSliceCache timeSliceCache;
     
-    @XxlJob("productionTimeCacheJobHandler")
+    @XxlJob("prodCalendarTimeCacheJobHandler")
     public ReturnT<String> productionTimeCacheJobHandler(String param) throws Exception {
         LocalDate targetDate = LocalDate.now().plusDays(1L);
         if (Func.isNotEmpty(param)) {
diff --git a/collect/src/main/java/com/qianwen/mdc/collect/mapper/iotdb/DeviceStateMapper.java b/collect/src/main/java/com/qianwen/mdc/collect/mapper/iotdb/DeviceStateMapper.java
index a2f7e8e..0fa8177 100644
--- a/collect/src/main/java/com/qianwen/mdc/collect/mapper/iotdb/DeviceStateMapper.java
+++ b/collect/src/main/java/com/qianwen/mdc/collect/mapper/iotdb/DeviceStateMapper.java
@@ -13,7 +13,7 @@
 @DS("iotdb")
 @InterceptorIgnore(tenantLine = "true")
 public interface DeviceStateMapper extends BaseMapper<DeviceState> {
-    void createSuperTable();
+    //void createSuperTable();
 
     //void createTable(Long workstationId);
 
@@ -51,5 +51,10 @@
 	 */
 	List<DeviceState> statesInTimeRange(@Param("workstationId")Long workstationId,@Param("timeRange") StateAggregateTimeDTO timeRange);
 
-	
+	/**
+	 * 鏌ヨ鏌愬ぉ鍥哄畾鐐规暟閲�
+	 * @param factoryDate
+	 * @return
+	 */
+	long fixPointCountByDate(int factoryDate);
 }
diff --git a/collect/src/main/java/com/qianwen/mdc/collect/runner/InitRunner.java b/collect/src/main/java/com/qianwen/mdc/collect/runner/InitRunner.java
index 7a07f9f..ea12d69 100644
--- a/collect/src/main/java/com/qianwen/mdc/collect/runner/InitRunner.java
+++ b/collect/src/main/java/com/qianwen/mdc/collect/runner/InitRunner.java
@@ -1,18 +1,10 @@
 package com.qianwen.mdc.collect.runner;
 
-import cn.hutool.core.date.DatePattern;
-import cn.hutool.core.date.DateTime;
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.google.common.collect.Sets;
-import java.lang.invoke.SerializedLambda;
 import java.time.LocalDate;
-import javax.annotation.Resource;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
-import com.qianwen.mdc.collect.service.DeviceStateFixPointService;
+import org.springframework.beans.factory.annotation.Autowired;
 /*
 import com.qianwen.core.redis.lock.RedisLock;
 import com.qianwen.posting.cache.TimeSliceCache;
@@ -25,21 +17,34 @@
 import org.springframework.boot.ApplicationRunner;
 import org.springframework.stereotype.Component;
 
+import com.google.common.collect.Sets;
+import com.qianwen.mdc.collect.cache.TimeSliceCache;
+import com.qianwen.mdc.collect.dto.CacheBuildDTO;
+import com.qianwen.mdc.collect.mapper.iotdb.DeviceStateMapper;
+import com.qianwen.mdc.collect.service.DeviceStateFixPointService;
+
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateTime;
+
 @Component
 public class InitRunner implements ApplicationRunner {
     private static final Logger log = LoggerFactory.getLogger(InitRunner.class);
-    @Resource
+
+    @Autowired
     private DeviceStateFixPointService stateFixPointService;
-    //@Resource
-    //private WorkstationStateMapper workstationStateMapper;
+    @Autowired
+    private TimeSliceCache timeSliceCache;
+    @Autowired
+    private DeviceStateMapper deviceStateMapper;
 
 
     public void run(ApplicationArguments args) throws Exception {
-    	/*
+    	//鐢熸垚鏃堕棿鍒囩墖
         CacheBuildDTO cacheBuildDTO = CacheBuildDTO.builder().tenantIds(Sets.newHashSet(new String[]{"000000"})).targetDate(LocalDate.now()).build();
-        TimeSliceCache.build(cacheBuildDTO);
+        timeSliceCache.build(cacheBuildDTO);
+        
         checkNeedStateFixPoint();
-        */
+        
     }
 
     //@RedisLock("posting:lock:initStateFixPoint")
@@ -47,18 +52,19 @@
         DateTime dateTime = DateTime.now();
         log.info("杩涘叆绋嬪簭鍚姩鏍¢獙鏄惁瀛樺湪宸ヤ綅鎵撹繃鍥哄畾鐐�....... ");
        
+        long count = deviceStateMapper.fixPointCountByDate(Integer.valueOf(DatePattern.PURE_DATE_FORMAT.format(dateTime)));
         /*
         Long result = this.workstationStateMapper.selectCount(Wrappers.<WorkstationState>lambdaQuery()
                 .eq(WorkstationState::getFactoryDate, Integer.valueOf(DatePattern.PURE_DATE_FORMAT.format(dateTime)))
                 .eq(WorkstationState::getIsFixPoint, Boolean.TRUE));
                 */
-        Long result = 1L;
-        if (result == null || result.longValue() <= 0) {
-            log.info("宸ヤ綅鏈墦杩囧浐瀹氱偣....... ");
+        //Long result = 1L;
+        if (count <= 0) {
+            log.info("宸ヤ綅鏈墦杩囧浐瀹氱偣,鍚姩鏃舵墦鐐�....... ");
             //this.workStationStateFixPointService.workStationStateFixPoint(dateTime, null);
             stateFixPointService.deviceStateFixPoint(dateTime, null);
-            return;
+        }else {
+        	log.info("宸ヤ綅宸插瓨鍦ㄥ浐瀹氱偣");
         }
-        log.info("宸ヤ綅宸插瓨鍦ㄥ浐瀹氱偣");
     }
 }
diff --git a/collect/src/main/java/com/qianwen/mdc/collect/service/DeviceStateFixPointService.java b/collect/src/main/java/com/qianwen/mdc/collect/service/DeviceStateFixPointService.java
index b66dd81..b196c7f 100644
--- a/collect/src/main/java/com/qianwen/mdc/collect/service/DeviceStateFixPointService.java
+++ b/collect/src/main/java/com/qianwen/mdc/collect/service/DeviceStateFixPointService.java
@@ -58,7 +58,7 @@
     public void deviceStateFixPoint(DateTime dateTime, List<String> includeWorkstationIds) {
         List<DeviceState> result;
         
-        Map<Long, WorkstationDTO> workStations = workstationCache.getWorkStations();
+        Map<Long, WorkstationDTO> workStations = workstationCache.getWorkstations();
         if (ObjectUtil.isEmpty(workStations)) {
             return;
         }
diff --git a/collect/src/main/resources/application-dev.yml b/collect/src/main/resources/application-dev.yml
index f5e016a..487b9e7 100644
--- a/collect/src/main/resources/application-dev.yml
+++ b/collect/src/main/resources/application-dev.yml
@@ -49,3 +49,19 @@
   username: root
   password: root
 
+xxl:
+  job:
+    admin:
+      ### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
+      addresses: http://127.0.0.1:8080/xxl-job-admin
+      ### xxl-job executor address
+    executor:
+      appname: qwmdc-collect
+      ip: 
+      port: 38801
+      ### xxl-job log path
+      logpath: /qwlogs/xxl-job/jobhandler
+      ### xxl-job log remain days
+      logretentiondays: 7
+    ### xxl-job, access token
+    accessToken:
\ No newline at end of file
diff --git a/collect/src/main/resources/com/qianwen/mdc/collect/mapper/iotdb/DeviceStateMapper.xml b/collect/src/main/resources/com/qianwen/mdc/collect/mapper/iotdb/DeviceStateMapper.xml
index af763c6..f72aee0 100644
--- a/collect/src/main/resources/com/qianwen/mdc/collect/mapper/iotdb/DeviceStateMapper.xml
+++ b/collect/src/main/resources/com/qianwen/mdc/collect/mapper/iotdb/DeviceStateMapper.xml
@@ -94,5 +94,9 @@
         order by time asc
     </select>
     
+    <select id="fixPointCountByDate" resultType="Long">
+        select count(factory_date) FROM root.f2.state_* where factory_date=#{factoryDate} and is_fix_point=true
+    </select>
+    
 </mapper>
 

--
Gitblit v1.9.3