yangys
2024-09-02 a33c33d48c2c16995130b825355b6883be4eb159
加入定时任务,启动时打固定点 ,并且加入工位数据缓存
已修改7个文件
已添加2个文件
172 ■■■■ 文件已修改
collect/src/main/java/com/qianwen/mdc/collect/cache/WorkstationCache.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
collect/src/main/java/com/qianwen/mdc/collect/config/XxlJobConfig.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
collect/src/main/java/com/qianwen/mdc/collect/job/DeviceStatusAggregateJob.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
collect/src/main/java/com/qianwen/mdc/collect/job/ProductionTimeCacheXxlJob.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
collect/src/main/java/com/qianwen/mdc/collect/mapper/iotdb/DeviceStateMapper.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
collect/src/main/java/com/qianwen/mdc/collect/runner/InitRunner.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
collect/src/main/java/com/qianwen/mdc/collect/service/DeviceStateFixPointService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
collect/src/main/resources/application-dev.yml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
collect/src/main/resources/com/qianwen/mdc/collect/mapper/iotdb/DeviceStateMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
       
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;
    }
}
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;
    }
}
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)) {
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);
}
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("工位已存在固定点");
    }
}
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;
        }
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:
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>