ProcessSpecItemManagerImpl.java
package com.mycim.server.spec.manager.impl;
import com.mycim.framework.jdbc.Page;
import com.mycim.framework.utils.beans.BeanUtils;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.CollectionUtils;
import com.mycim.framework.utils.lang.time.DateUtils;
import com.mycim.server.spec.dao.ProcessSpecItemActiveDao;
import com.mycim.server.spec.dao.ProcessSpecItemDao;
import com.mycim.server.spec.dao.ProcessSpecItemHistoryDao;
import com.mycim.server.spec.manager.ProcessSpecItemManager;
import com.mycim.valueobject.bas.TransactionLog;
import com.mycim.valueobject.consts.TransactionNames;
import com.mycim.valueobject.consts.VersionStatus;
import com.mycim.valueobject.prp.Ecn;
import com.mycim.valueobject.prp.ProcessSpecItem;
import com.mycim.valueobject.prp.ProcessSpecItemDto;
import com.mycim.valueobject.prp.ProcessSpecItemHistory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
@Service
@Transactional
public class ProcessSpecItemManagerImpl implements ProcessSpecItemManager {
@Autowired
ProcessSpecItemDao processSpecItemDao;
@Autowired
ProcessSpecItemActiveDao processSpecItemActiveDao;
@Autowired
ProcessSpecItemHistoryDao processSpecItemHistoryDao;
@Override
public void insertProcessSpecItems(TransactionLog transactionLog, List<ProcessSpecItem> processSpecItems) {
if (CollectionUtils.isEmpty(processSpecItems)) {
return;
}
List<ProcessSpecItemHistory> processSpecItemHistories = new ArrayList<>();
int transSequence =
transactionLog.getTransSequence() != null ? transactionLog.getTransSequence().intValue() : 0;
for (ProcessSpecItem processSpecItem : processSpecItems) {
processSpecItem.setStatus(VersionStatus.UNFROZEN_KEY);
processSpecItem.setCreatedUser(transactionLog.getTransPerformedBy());
processSpecItem.setCreatedTime(transactionLog.getTransStartTimestamp());
processSpecItem.setUpdatedUser(transactionLog.getTransPerformedBy());
processSpecItem.setUpdatedTime(transactionLog.getTransStartTimestamp());
ProcessSpecItemHistory processSpecItemHistory = new ProcessSpecItemHistory();
BeanUtils.copyProperties(processSpecItem, processSpecItemHistory);
processSpecItemHistory.setTransRrn(transactionLog.getTransRrn());
processSpecItemHistory.setTransId(transactionLog.getTransId());
processSpecItemHistory.setTransSequence(++transSequence);
processSpecItemHistory.setSubTransId(TransactionNames.CREATE_KEY);
processSpecItemHistory.setTransTimestamp(transactionLog.getTransStartTimestamp());
processSpecItemHistory.setTransPerformedBy(transactionLog.getTransPerformedBy());
processSpecItemHistories.add(processSpecItemHistory);
}
processSpecItemDao.insertProcessSpecItems(processSpecItems);
processSpecItemHistoryDao.insertProcessSpecItemHistories(processSpecItemHistories);
transactionLog.setTransSequence((long) transSequence);
}
@Override
public void deleteProcessSpecItems(TransactionLog transactionLog, List<ProcessSpecItem> processSpecItems) {
if (CollectionUtils.isEmpty(processSpecItems)) {
return;
}
List<ProcessSpecItemHistory> processSpecItemHistories = new ArrayList<>();
int transSequence =
transactionLog.getTransSequence() != null ? transactionLog.getTransSequence().intValue() : 0;
for (ProcessSpecItem processSpecItem : processSpecItems) {
processSpecItem.setUpdatedUser(transactionLog.getTransPerformedBy());
processSpecItem.setUpdatedTime(transactionLog.getTransStartTimestamp());
ProcessSpecItemHistory processSpecItemHistory = new ProcessSpecItemHistory();
BeanUtils.copyProperties(processSpecItem, processSpecItemHistory);
processSpecItemHistory.setTransRrn(transactionLog.getTransRrn());
processSpecItemHistory.setTransId(transactionLog.getTransId());
processSpecItemHistory.setTransSequence(++transSequence);
processSpecItemHistory.setSubTransId(TransactionNames.DELETE_KEY);
processSpecItemHistory.setTransTimestamp(transactionLog.getTransStartTimestamp());
processSpecItemHistory.setTransPerformedBy(transactionLog.getTransPerformedBy());
processSpecItemHistories.add(processSpecItemHistory);
}
processSpecItemDao.deleteProcessSpecItems(processSpecItems);
processSpecItemHistoryDao.insertProcessSpecItemHistories(processSpecItemHistories);
transactionLog.setTransSequence((long) transSequence);
}
@Override
public void updateProcessSpecItems(TransactionLog transactionLog, List<ProcessSpecItem> processSpecItems) {
if (CollectionUtils.isEmpty(processSpecItems)) {
return;
}
List<ProcessSpecItemHistory> processSpecItemHistories = new ArrayList<>();
int transSequence =
transactionLog.getTransSequence() != null ? transactionLog.getTransSequence().intValue() : 0;
for (ProcessSpecItem processSpecItem : processSpecItems) {
processSpecItem.setStatus(VersionStatus.UNFROZEN_KEY);
processSpecItem.setUpdatedUser(transactionLog.getTransPerformedBy());
processSpecItem.setUpdatedTime(transactionLog.getTransStartTimestamp());
ProcessSpecItemHistory processSpecItemHistory = new ProcessSpecItemHistory();
BeanUtils.copyProperties(processSpecItem, processSpecItemHistory);
processSpecItemHistory.setTransRrn(transactionLog.getTransRrn());
processSpecItemHistory.setTransId(transactionLog.getTransId());
processSpecItemHistory.setTransSequence(++transSequence);
processSpecItemHistory.setSubTransId(TransactionNames.MODIFY_KEY);
processSpecItemHistory.setTransTimestamp(transactionLog.getTransStartTimestamp());
processSpecItemHistory.setTransPerformedBy(transactionLog.getTransPerformedBy());
processSpecItemHistories.add(processSpecItemHistory);
}
processSpecItemDao.updateProcessSpecItems(processSpecItems);
processSpecItemHistoryDao.insertProcessSpecItemHistories(processSpecItemHistories);
transactionLog.setTransSequence((long) transSequence);
}
@Override
public void updateStatusOfProcessSpecItems(TransactionLog transactionLog, List<ProcessSpecItem> processSpecItems,
Ecn ecn, String targetStatus) {
if (CollectionUtils.isEmpty(processSpecItems)) {
return;
}
List<ProcessSpecItemHistory> processSpecItemHistories = new ArrayList<>();
int transSequence =
transactionLog.getTransSequence() != null ? transactionLog.getTransSequence().intValue() : 0;
for (ProcessSpecItem processSpecItem : processSpecItems) {
processSpecItem.setStatus(targetStatus);
processSpecItem.setUpdatedTime(transactionLog.getTransStartTimestamp());
processSpecItem.setUpdatedUser(transactionLog.getTransPerformedBy());
if (ecn != null) {
processSpecItem.setEcnRrn(ecn.getInstanceRrn());
processSpecItem.setEffectiveTime(DateUtils.stringToTimestamp(ecn.getEffectiveDateFrom()));
processSpecItem.setTerminatedTime(DateUtils.stringToTimestamp(ecn.getEffectiveDateTo()));
} else {
processSpecItem.setEcnRrn(null);
processSpecItem.setEffectiveTime(null);
processSpecItem.setTerminatedTime(null);
}
ProcessSpecItemHistory processSpecItemHistory = new ProcessSpecItemHistory();
BeanUtils.copyProperties(processSpecItem, processSpecItemHistory);
processSpecItemHistory.setTransRrn(transactionLog.getTransRrn());
processSpecItemHistory.setTransId(transactionLog.getTransId());
processSpecItemHistory.setTransSequence(++transSequence);
processSpecItemHistory.setSubTransId(transactionLog.getTransId());
processSpecItemHistory.setTransTimestamp(transactionLog.getTransStartTimestamp());
processSpecItemHistory.setTransPerformedBy(transactionLog.getTransPerformedBy());
processSpecItemHistories.add(processSpecItemHistory);
}
processSpecItemDao.updateProcessSpecItemsForStatus(processSpecItems);
processSpecItemHistoryDao.insertProcessSpecItemHistories(processSpecItemHistories);
if (StringUtils.equals(targetStatus, VersionStatus.ACTIVE_KEY)) {
this.updateProcessSpecItemsForActive(processSpecItems);
}
transactionLog.setTransSequence((long) transSequence);
}
@Override
public void saveProcessSpecItems(TransactionLog transactionLog,
Map<String, List<ProcessSpecItem>> saveProcessSpecItemMap) {
insertProcessSpecItems(transactionLog, saveProcessSpecItemMap.get("insertSpecItems"));
updateProcessSpecItems(transactionLog, saveProcessSpecItemMap.get("updateSpecItems"));
deleteProcessSpecItems(transactionLog, saveProcessSpecItemMap.get("deleteSpecItems"));
}
@Override
public ProcessSpecItem getProcessSpecItemByPrimaryKey(Long processRrn, Integer processVersion, Long routeRrn,
Long operationRrn) {
return processSpecItemDao.getProcessSpecItemByPrimaryKey(processRrn, processVersion, routeRrn, operationRrn);
}
@Override
public List<ProcessSpecItem> getProcessSpecItems(Long processRrn, Integer processVersion) {
List<ProcessSpecItem> result = processSpecItemDao.getProcessSpecItems(processRrn, processVersion);
if (CollectionUtils.isEmpty(result)) {
result = Collections.emptyList();
}
return result;
}
@Override
public List<ProcessSpecItem> getProcessSpecItemsWithVariables(Long processRrn, Integer processVersion) {
List<ProcessSpecItem> result = processSpecItemDao.getProcessSpecItemsWithVariables(processRrn, processVersion);
if (CollectionUtils.isEmpty(result)) {
result = Collections.emptyList();
}
return result;
}
@Override
public List<ProcessSpecItem> getProcessSpecItems(Long processRrn, Integer processVersion, String status) {
List<ProcessSpecItem> result = processSpecItemDao
.getProcessSpecItemsForStatus(processRrn, processVersion, status);
if (CollectionUtils.isEmpty(result)) {
result = Collections.emptyList();
}
return result;
}
@Override
public Page queryProcessSpecItemHistories(Page page, String processId, Integer processVersion, Date queryStartTime,
Date queryEndTime) {
return processSpecItemHistoryDao
.queryProcessSpecItemHistories(page, processId, processVersion, queryStartTime, queryEndTime);
}
@Override
public List<ProcessSpecItem> getProcessSpecItemsForActive(Long processRrn, Integer processVersion) {
List<ProcessSpecItem> result = processSpecItemActiveDao
.getProcessSpecItemsForActive(processRrn, processVersion);
if (CollectionUtils.isEmpty(result)) {
result = Collections.emptyList();
}
return result;
}
@Override
public String getEqptGroupIds(Long processRrn, Integer processVersion, Long routeRrn, Long operationRrn) {
return processSpecItemActiveDao.getEqptGroupIds(processRrn, processVersion, routeRrn, operationRrn);
}
@Override
public String getEqptGroupRrns(Long processRrn, Integer processVersion, Long routeRrn, Long operationRrn) {
return processSpecItemActiveDao.getEqptGroupRrns(processRrn, processVersion, routeRrn, operationRrn);
}
@Override
public ProcessSpecItem getProcessSpecItemForActive(ProcessSpecItemDto processSpecItemDto) {
return processSpecItemActiveDao.getProcessSpecItemForActive(processSpecItemDto);
}
@Override
public String getFlipType(Long processRrn, Integer processVersion, Long routeRrn, Long operationRrn) {
return processSpecItemActiveDao.getFlipType(processRrn, processVersion, routeRrn, operationRrn);
}
@Override
public boolean checkFlipSetTogether(Long processRrn, Integer processVersion) {
return processSpecItemDao.checkFlipSetTogether(processRrn, processVersion);
}
@Override
public String getProcessLocation(Long processRrn, Integer processVersion, Long routeRrn, Integer routeVersion,
Long operationRrn) {
return processSpecItemActiveDao.getProcessLocation(processRrn, processVersion, routeRrn, routeVersion, operationRrn);
}
private void updateProcessSpecItemsForActive(List<ProcessSpecItem> processSpecItems) {
if (CollectionUtils.isEmpty(processSpecItems)) {
return;
}
List<ProcessSpecItem> tmp = getProcessSpecItemsForActive(processSpecItems.iterator().next().getProcessRrn(),
processSpecItems.iterator().next()
.getProcessVersion());
if (CollectionUtils.isEmpty(tmp)) {
processSpecItemActiveDao.insertProcessSpecItemsForActive(processSpecItems);
} else {
processSpecItemActiveDao.updateProcessSpecItemsForActive(processSpecItems);
}
}
}