NowSchedulingCache.java 4.6 KB
package com.ruoyi.common.cache;

import cn.hutool.core.collection.CollectionUtil;
import com.ruoyi.driver.mapper.DriverSchedulingMapper;
import com.ruoyi.errorScheduling.domain.ErrorJobcode;
import com.ruoyi.errorScheduling.service.IErrorJobcodeService;
import com.ruoyi.in.domain.SignIn;
import com.ruoyi.domain.DriverScheduling;
import com.ruoyi.service.ThreadJobService;
import com.ruoyi.utils.ConstDateUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;

@Component
public class NowSchedulingCache {
    private final DriverSchedulingMapper schedulingMapper;
    Logger log = LoggerFactory.getLogger(SchedulingCache.class);
    /**
     * 当天初版排班
     */
    private static ConcurrentHashMap<String, Map<String, List<DriverScheduling>>> cacheNowDayScheduling = new ConcurrentHashMap<>();
    private IErrorJobcodeService errorJobcodeService;

    public NowSchedulingCache(DriverSchedulingMapper driverSchedulingMapper,IErrorJobcodeService errorJobcodeService) {
        this.schedulingMapper = driverSchedulingMapper;
        this.errorJobcodeService = errorJobcodeService;
        log.info("项目启动加载中获取排班表-----");
        cacheNowDaySchedulingInit();
    }

    private void cacheNowDaySchedulingInit() {
        // 查询今天和昨天
        for (int i = 0; i > -2; i--) {
            Map<String, List<DriverScheduling>> resultMap = new HashMap<>(800);
            String date = ConstDateUtil.formatDate(ConstDateUtil.getTheSpecifiedNumberOfDaysOfTime(i));
            List<DriverScheduling> schedulingList = schedulingMapper.queryToDay(date, null, null, null);
            handlerResultMap(resultMap, schedulingList);
            // 获取错误排班
            List<ErrorJobcode> errorScheduling = ThreadJobService.getErrorScheduling(resultMap);
            // 插入错误排班
            errorJobcodeService.insertBatchErrorJobcode(errorScheduling);
            // 更新缓存
            cacheNowDayScheduling.put(date, resultMap);
        }
    }


    public static void handlerResultMap(Map<String, List<DriverScheduling>> resultMap, List<DriverScheduling> schedulingList) {
        for (DriverScheduling scheduling : schedulingList) {
            List<DriverScheduling> list = resultMap.get(scheduling.getJobCode());
            if (CollectionUtil.isEmpty(list)) {
                resultMap.put(scheduling.getJobCode(), new ArrayList<>(Arrays.asList(scheduling)));
            } else {
                list.add(scheduling);
            }
        }
    }

    public void setCacheScheduling(String key, Map<String, List<DriverScheduling>> mapValue) {
        cacheNowDayScheduling.put(key, mapValue);
    }

    public Map<String, List<DriverScheduling>> getCacheScheduling(String key) {
        return cacheNowDayScheduling.get(key);
    }

    public void removeCacheSchedulingByKey(String key) {
        cacheNowDayScheduling.remove(key);
    }

    public List<String> getKeys() {
        return new ArrayList<>(cacheNowDayScheduling.keySet());
    }

    public Integer size() {
        return cacheNowDayScheduling.size();
    }

    public List<DriverScheduling> getCacheSchedulingMapValueByHKey(String key, String HKey) {
        if (Objects.isNull(cacheNowDayScheduling.get(key))) {
            return null;
        }
        List<DriverScheduling> list = cacheNowDayScheduling.get(key).get(HKey);

        return Objects.isNull(list) ? null : list;
    }

    public List<String> getHKeysByKey(String key) {
        return new ArrayList<>(cacheNowDayScheduling.get(key).keySet());
    }

    public List<String> getKes() {
        return new ArrayList<>(cacheNowDayScheduling.keySet());
    }

    /**
     * 更新缓存
     * @param key
     * @param index
     * @param signIn
     */
    public void updateCacheByJobCode(String key, Integer index, SignIn signIn) {
        if (key.equals(ConstDateUtil.formatDate(ConstDateUtil.getTheSpecifiedNumberOfDaysOfTime(0)))
                || key.equals(ConstDateUtil.formatDate(ConstDateUtil.getTheSpecifiedNumberOfDaysOfTime(-1)))){
            DriverScheduling scheduling = cacheNowDayScheduling.get(key).get(signIn.getJobCode()).get(index);
            scheduling.setSignInId(signIn.getId());
            scheduling.setRemark(signIn.getRemark());
            scheduling.setExType(signIn.getExType());
            scheduling.setSignTime(signIn.getCreateTime());
            scheduling.setSignType(signIn.getType());
            scheduling.setAlcoholFlag(signIn.getAlcoholFlag());
            scheduling.setAlcoholIntake(signIn.getAlcoholIntake());
        }
    }
}