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

import cn.hutool.core.collection.CollectionUtil;
import com.ruoyi.driver.mapper.DriverSchedulingMapper;
import com.ruoyi.in.domain.SignIn;
import com.ruoyi.pojo.entity.DriverScheduling;
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<>();


    public NowSchedulingCache(DriverSchedulingMapper driverSchedulingMapper) {
        this.schedulingMapper = driverSchedulingMapper;
        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);
            handleResultMap(resultMap, schedulingList);
            cacheNowDayScheduling.put(date, resultMap);
        }
    }

    private void handleResultMap(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) {
        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());
    }
}