EntityCounterManagerImpl.java

package com.mycim.server.pms.manager.impl;

import com.mycim.framework.jdbc.Page;
import com.mycim.framework.utils.lang.collections.CollectionUtils;
import com.mycim.server.base.manager.NamedObjectManager;
import com.mycim.server.base.manager.TransactionLogManager;
import com.mycim.server.ems.manager.CheckListJobManager;
import com.mycim.server.pms.dao.EntityCounterDAO;
import com.mycim.server.pms.manager.CheckListManager;
import com.mycim.server.pms.manager.EntityCounterManager;
import com.mycim.valueobject.bas.TransactionLog;
import com.mycim.valueobject.consts.TransactionNames;
import com.mycim.valueobject.ems.Checklist;
import com.mycim.valueobject.ems.ChecklistJob;
import com.mycim.valueobject.ems.EntityCounter;
import com.mycim.valueobject.ems.EntityCounterType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @author Johnson.Wang
 * @version 6.0.0
 * @date 2019/9/25
 **/

@Service
@Transactional
public class EntityCounterManagerImpl implements EntityCounterManager {

    @Autowired
    private NamedObjectManager namedObjectManager;

    @Autowired
    private EntityCounterDAO entityCounterDAO;

    @Autowired
    private TransactionLogManager transactionLogManager;

    @Autowired
    private CheckListManager checkListManager;

    @Autowired
    private CheckListJobManager checkListJobManager;

    @Override
    public List<EntityCounter> getEntityCountersOfEntity(long entityRrn) {
        List<EntityCounter> entityCounters = entityCounterDAO.getEntityCountersOfEntity(entityRrn);

        if (CollectionUtils.isNotEmpty(entityCounters)) {
            for (EntityCounter entityCounter : entityCounters) {
                if ((entityCounter.getChecklistRrn() != null) && (entityCounter.getChecklistRrn() > 0)) {
                    entityCounter.setChecklistId(namedObjectManager.getNamedObjectId(entityCounter.getChecklistRrn()));
                }
            }
        }

        return entityCounters;
    }

    @Override
    public List<EntityCounterType> getEntityCounterTypesOfEntity(long entityRrn) {
        List<EntityCounterType> entityCounterTypeList = entityCounterDAO.getEntityCounterTypesOfEntity(entityRrn);

        if (CollectionUtils.isNotEmpty(entityCounterTypeList)) {

            for (EntityCounterType entityCounterType : entityCounterTypeList) {
                entityCounterType.setEventId(namedObjectManager.getNamedObjectId(entityCounterType.getEventRrn()));
                entityCounterType.setRecipeId(namedObjectManager.getNamedObjectId(entityCounterType.getRecipeRrn()));
            }
        }

        return entityCounterTypeList;
    }


    @Override
    public List<Map<String, Object>> getChecklistEntityCounterLists(long checklistRrn) {
        return entityCounterDAO.getChecklistEntityCounterLists(checklistRrn);
    }

    @Override
    public long insertEntityCounter(EntityCounter entityCounter) {
        TransactionLog transactionLog = transactionLogManager
                .startTransactionLog(entityCounter.getTransPerformedBy(), TransactionNames.CREATE_KEY);
        long instanceRrn = entityCounterDAO.insertEntityCounter(entityCounter, transactionLog);
        transactionLogManager.markTransactionLog(transactionLog);
        return instanceRrn;
    }

    @Override
    public void updateEntityCounter(EntityCounter entityCounter) {
        TransactionLog transactionLog = transactionLogManager
                .startTransactionLog(entityCounter.getTransPerformedBy(), TransactionNames.MODIFY_KEY);
        entityCounterDAO.updateEntityCounter(entityCounter, transactionLog);
        transactionLogManager.markTransactionLog(transactionLog);
    }

    @Override
    public void deleteEntityCounter(EntityCounter entityCounter) {
        TransactionLog transactionLog = transactionLogManager
                .startTransactionLog(entityCounter.getTransPerformedBy(), TransactionNames.DELETE_KEY);
        entityCounterDAO.deleteEntityCounter(entityCounter, transactionLog);
        transactionLogManager.markTransactionLog(transactionLog);
    }

    @Override
    public EntityCounter getActualCounter(long entityRrn, String counterType) {
        return entityCounterDAO.getActualCounter(entityRrn, counterType);
    }

    @Override
    public void updateActualValueForReset(EntityCounter entityCounter, long entityRrn, String type, double count) {
        TransactionLog transactionLog = transactionLogManager
                .startTransactionLog(entityCounter.getTransPerformedBy(), TransactionNames.PM_COUNT_CHANGE_KEY);
        entityCounterDAO.insertEntityCounterHistory(entityCounter, transactionLog.getTransRrn());
        entityCounterDAO.updateActualValue(entityRrn, type, count);
        transactionLogManager.markTransactionLog(transactionLog);
    }

    @Override
    public Page getEntityCountersByPageQuery(long entityRrn, Page page) {
        if (entityRrn == 0) {
            return entityCounterDAO.getEntityCountersAllForPage(page);
        } else {
            return entityCounterDAO.getEntityCountersAllForPageByEntityRrn(entityRrn, page);
        }
    }

    @Override
    public List<Map> updateEqptPMCounter(long eqptRrn, long recipeRrn, long eventRrn, long jobRrn) {
        List<Map> returnValues = new ArrayList<>();

        List<Map> valueList = entityCounterDAO.getEqptCounter(eqptRrn, recipeRrn, eventRrn, jobRrn);

        entityCounterDAO.updateEqptCounteValue(valueList);

        List<Map> warningList = entityCounterDAO.checkCounterValue(eqptRrn, "warning");

        List<Map> alarmList = entityCounterDAO.checkCounterValue(eqptRrn, "alarm");


        for (Map map : alarmList) {
            String alarmId = (String) map.get("alarmId");
            Long checkListRrn = (Long) map.get("checkListRrn");


            ChecklistJob job = new ChecklistJob();

            job.setEntityRrn(eqptRrn);
            job.setChecklistRrn(checkListRrn);
            job.setComments("");
            job.setStartTimestamp(new Timestamp(System.currentTimeMillis()));
            job.setChecklistJobState("STARTED");
            job.setCreatePerformedBy("SYSTEM");
            job.setAttri1("设备计数");

            job.setTransPerformedby("SYSTEM");
            job.setTransId("CREATE");

            Checklist checklist = new Checklist();
            checklist.setInstanceRrn(checkListRrn);
            checklist = checkListManager.getCheckList(checklist);

            if (checklist != null) {
                job.setStartEventRrn(checklist.getStartEventRrn());
                job.setEndEventRrn(checklist.getEndEventRrn());
            }
            checkListJobManager.insertChecklistJob(job);
        }

        returnValues.addAll(warningList);
        returnValues.addAll(alarmList);

        return returnValues;
    }


}