StorageManagerImpl.java 6.7 KB
package com.myproject.manager.impl;

import com.myproject.bean.json.ChartItem;
import com.myproject.bean.json.DateBean;
import com.myproject.bean.search.PageList;

import com.myproject.bean.update.Storage;
import com.myproject.dao.mongo.IAlarmInfoDao;
import com.myproject.dao.mongo.IDataLogDao;
import com.myproject.dao.mongo.IStorageDao;
import com.myproject.exception.ValidateException;
import com.myproject.manager.IStorageManager;
import com.myproject.util.DateUtil;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.*;

@Service
public class StorageManagerImpl implements IStorageManager {
    @Autowired
    IStorageDao storageDao;
    @Autowired
    IDataLogDao dataLogDao;
    @Autowired
    IAlarmInfoDao alarmInfoDao;

    protected final transient Logger log = LogManager.getLogger(getClass());

    @Override
    public Storage get(String id) {
        return storageDao.findOneById(id);
    }

    @Override
    public Storage findOneByCid(String cid) {
        return storageDao.findOneByCondition(new String[]{"cid"}, new String[]{cid});
    }

    @Override
    public ChartItem countUsedPos(){
        return storageDao.countUsedPos();
    }

    @Override
    public Storage findEmptyStorage() {
        Storage storage = null;
        List<Storage> storageList = storageDao.findListByCondition(new String[]{"emptySlots"}, new String[]{});
        if (storageList != null && storageList.size() > 0) {
            for (Storage s : storageList) {
                if (s.isAvailable()) {
                    storage = s;
                }
            }
        }
        return storage;
    }

    /**
     * 获取某个时间段的统计信息ChartItem 的 value 为入库量,value2为出库量,value3为报警次数,value4为报警持续时间
     */
    @Override
    public Collection<ChartItem> getRunStatusData(Date fromDate, Date toDate,String partNumber){
        if(fromDate == null || toDate == null){
            return new ArrayList<>();
        }
        LinkedHashMap<String,ChartItem> inOutDataMap = new LinkedHashMap<>();
        Date startDay = DateUtil.getMinDate(fromDate, toDate);
        Date endDay = DateUtil.getMaxDate(fromDate,toDate);

        /**
         * 结束时间+1天,包含结束那一天
         */
        long endTime = endDay.getTime();
        Calendar c = Calendar.getInstance();
        c.setTime(startDay);
        do{
            int dayOfYear = c.get(Calendar.DAY_OF_YEAR);
            int year = c.get(Calendar.YEAR);
            String dayStr = DateUtil.toDateString(c.getTime());

            ChartItem item = new ChartItem();
            item.setLabel(dayStr);
            String yearAndDay = year + "-" + dayOfYear;
            inOutDataMap.put(yearAndDay, item);
            c.add(Calendar.DAY_OF_YEAR,1);
        }while (c.getTimeInMillis() <= endTime);

        List<ChartItem> putInData = dataLogDao.putInChart(startDay, endDay,partNumber);
        for (ChartItem putInItem : putInData){
            DateBean dateBean = putInItem.getDateBean();
            ChartItem item = inOutDataMap.get(dateBean.getYear() + "-" + dateBean.getDayOfYear());
            if(item != null){
                item.setValue(putInItem.getValue());
            }
        }

        List<ChartItem> checkOutData = dataLogDao.checkOutChart(startDay, endDay,partNumber);

        for (ChartItem checkOutItem : checkOutData){
            DateBean dateBean = checkOutItem.getDateBean();
            ChartItem item = inOutDataMap.get(dateBean.getYear() + "-" + dateBean.getDayOfYear());
            if(item != null){
                item.setValue2(checkOutItem.getValue());
            }
        }

//        List<ChartItem> alarmData = alarmInfoDao.alarmChart(startDay, endDay);
//        for (ChartItem alarmItem : alarmData){
//            DateBean dateBean = alarmItem.getDateBean();
//            ChartItem item = inOutDataMap.get(dateBean.getYear() + "-" + dateBean.getDayOfYear());
//            if(item != null){
//                item.setValue3(alarmItem.getValue());
//                item.setValue4(alarmItem.getValue2());
//            }
//        }
        //alarmInfoDao.alarmChartByType(startDay,endDay);
        //alarmInfoDao.alarmChartByBox(startDay,endDay);
        return inOutDataMap.values();
    }

    @Override
    public Storage save(Storage storage) throws ValidateException {
        if (!StringUtils.isEmpty(storage.getId())) {
            Storage oldStorage = storageDao.findOneById(storage.getId());
            if (oldStorage == null) {
                log.error("Storage id: " + storage.getId() + " is not exist");
                throw new ValidateException("storage.error.notExist");
            }
            log.debug("Create new storage");
        }
        Storage s = storageDao.findOneByCondition(new String[]{"name"}, new String[]{storage.getName()});
        if (s != null && s.getName().equals(storage.getName()) && !s.getId().equals(storage.getId())) {
            log.error("Storage name " + s.getName() + " is not unique");
            throw new ValidateException("storage.error.unique");
        }
        Storage s1 = findOneByCid(storage.getCid());
        if (s1 != null && s1.getCid() != null && storage.getCid() != null) {
            if (s1.getCid().equals(storage.getCid()) && !s1.getId().equals(storage.getId())) {
                log.error("Storage cid " + s1.getCid() + " is not unique");
                throw new ValidateException("storage.error.cidUnique");
            }
        }
        storage = storageDao.save(storage);
        log.debug("Save storage with id " + storage.getId());
        return storage;
    }

    @Override
    public List<Storage> findByArea(String areaId){
        return storageDao.findListByCondition(new String[]{"areaId"}, new String[]{areaId});
    }

    @Override
    public void delete(Storage storage) throws ValidateException {
        //@TODO validation
        log.debug("Delete storage with id " + storage.getId());
        storageDao.removeOne(storage);
    }

    @Override
    public List<Storage> findAll() {
        return storageDao.findAll();
    }

    @Override
    public PageList findByQuery(Query query, PageList pageList) {
        pageList.setList(storageDao.findByQuery(query, pageList.getPageNumber(), pageList.getObjectsPerPage()));
        pageList.setFullListSize(storageDao.countByQuery(query));
        return pageList;
    }

    @Override
    public void validate(Storage object, List errors) {

    }

    public void setStorageDao(IStorageDao storageDao) {
        this.storageDao = storageDao;
    }

}