LotRecycledContextValueManagerImpl.java
package com.mycim.server.ctx.exec.manager.impl;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.CollectionUtils;
import com.mycim.server.base.manager.NamedObjectManager;
import com.mycim.server.ctx.exec.manager.LotRecycledContextValueManager;
import com.mycim.server.ctx.manager.ContextValueManager;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.prp.ContextValue;
import com.mycim.valueobject.prp.LotRecycledContextValue;
import com.mycim.valueobject.prp.LotRecycledInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
/**
* from ProcessLoopService
*
* @author Johnson.Wang
* @version 6.0.0
* @date 2019/9/1
**/
@Service
@Transactional
public class LotRecycledContextValueManagerImpl implements LotRecycledContextValueManager {
private final ContextValueManager contextValueManager;
private final NamedObjectManager namedObjectManager;
public LotRecycledContextValueManagerImpl(ContextValueManager contextValueManager, NamedObjectManager namedObjectManager) {
this.contextValueManager = contextValueManager;
this.namedObjectManager = namedObjectManager;
}
@Override
public void copyContextValueForProcessVersionWithActivatedEcn(long processRrn, int currentVersion) {
contextValueManager
.copyContextValueForContextKeyWithActivatedEcn(LocalContext.getUserRrn(),"copyByLastProcessVersion",
buildContextValueForProcessVersion(processRrn, currentVersion),
"CONTEXT_KEY6", StringUtils.toString(currentVersion + 1));
}
@Override
public List<LotRecycledContextValue> getContextValues(Long processRrn, Integer processVersion) {
List<ContextValue> contextValues = contextValueManager.getContextValues(
LocalContext.getFacilityRrn(), buildContextValueForProcessVersion(processRrn, processVersion));
return buildResult(contextValues);
}
@Override
public List<LotRecycledContextValue> getContextValuesByKeys(Long processRrn, Integer processVersion) {
List<ContextValue> contextValues = contextValueManager.getContextValuesByContextKey(
buildContextValueForProcessVersion(processRrn, processVersion));
return buildResult(contextValues);
}
@Override
public void deleteContextValueForProcessVersion(Long processRrn, Integer processVersion) {
contextValueManager.deleteContextValueByContextKey(
"deleteProcessVersion", buildContextValueForProcessVersion(processRrn, processVersion));
}
@Override
public void saveProcessLoop(long processRrn, int processVersion, long startRoute, long startStep, long endRoute, long endStep, int loopCount, String status) {
contextValueManager.createOrUpdateContextValueWithActivatedEcn(
buildContextValueInfoForProcessLoop(processRrn, processVersion, startRoute, startStep, endRoute, endStep, loopCount, status));
}
@Override
public LotRecycledContextValue getProcessLoop(long processRrn, int processVer, Long startRoute, Long startStep, Long endRoute, Long endStep) {
LotRecycledContextValue lotRecycledContextValue = buildContextValueForProcessLoop(
processRrn, processVer, startRoute, startStep, endRoute, endStep, null);
ContextValue contextValue = contextValueManager.getContextValueNoFilter(lotRecycledContextValue);
if (contextValue != null) {
lotRecycledContextValue.copy(contextValue);
return lotRecycledContextValue;
}
return null;
}
@Override
public void deleteContextValueForProcessLoop(long processRrn, int processVer, Long startRoute, Long startStep,
Long endRoute, Long endStep) {
LotRecycledContextValue delete = buildContextValueForProcessLoop(processRrn, processVer, startRoute, startStep, endRoute, endStep, null);
contextValueManager.deleteContextValueByContextKey("deleteProcessLoop", delete);
}
@Override
public List<LotRecycledContextValue> getContextValues(String processId, String endRouteId, String endOperationId, int processVersion) {
List<ContextValue> contextValues = contextValueManager.getContextValues(
LocalContext.getFacilityRrn(), buildContextValueForProcessVersion(processId, endRouteId, endOperationId, processVersion));
return buildResult(contextValues);
}
@Override
public List<LotRecycledContextValue> getContextValuesByStart(String processId, String startRouteId, String startOperationId, int processVersion) {
List<ContextValue> contextValues = contextValueManager.getContextValues(
LocalContext.getFacilityRrn(), buildContextValueForProcessVersionByStart(processId, startRouteId, startOperationId, processVersion));
return buildResult(contextValues);
}
private List<LotRecycledContextValue> buildResult(List<ContextValue> contextValues) {
List<LotRecycledContextValue> lotRecycledContextValues = new ArrayList<>();
if (CollectionUtils.isNotEmpty(contextValues)) {
for (ContextValue contextValue : contextValues) {
LotRecycledContextValue lotRecycledContextValue = new LotRecycledContextValue();
lotRecycledContextValue.copy(contextValue);
lotRecycledContextValues.add(lotRecycledContextValue);
}
}
return lotRecycledContextValues;
}
@Override
public LotRecycledContextValue getContextValues(LotRecycledInfo lotRecycledInfo) {
LotRecycledContextValue lotRecycledContextValue = buildNewLotRecycledContextValue();
lotRecycledContextValue.setProcessRrn(lotRecycledInfo.getProcessRrn());
lotRecycledContextValue.setProcessVersion(lotRecycledInfo.getProcessVersion());
lotRecycledContextValue.setStartRouteRrn(lotRecycledInfo.getStartRouteRrn());
lotRecycledContextValue.setStartOperationRrn(lotRecycledInfo.getStartOperationRrn());
lotRecycledContextValue.setEndRouteRrn(lotRecycledInfo.getEndRouteRrn());
lotRecycledContextValue.setEndOperationRrn(lotRecycledInfo.getEndOperationRrn());
ContextValue contextValue = contextValueManager.simulateContextValue(lotRecycledContextValue);
if (contextValue != null) {
lotRecycledContextValue.copy(contextValue);
}
return lotRecycledContextValue;
}
public LotRecycledContextValue buildNewLotRecycledContextValue() {
LotRecycledContextValue contextValue = new LotRecycledContextValue();
contextValue.setContextRrn(namedObjectManager.getNamedObjectRrn(contextValue.getContextId(), LocalContext.getFacilityRrn(), ObjectList.CONTEXT_KEY));
return contextValue;
}
private LotRecycledContextValue buildContextValueForProcessLoop(long processRrn, int processVer, Long startRoute, Long startStep,
Long endRoute, Long endStep, Integer loopCount) {
LotRecycledContextValue recycledContextValue = buildContextValueForProcessVersion(processRrn, processVer);
recycledContextValue.setLoopCount(loopCount);
recycledContextValue.setStartRouteRrn(startRoute);
recycledContextValue.setStartOperationRrn(startStep);
recycledContextValue.setEndRouteRrn(endRoute);
recycledContextValue.setEndOperationRrn(endStep);
return recycledContextValue;
}
private LotRecycledContextValue buildContextValueInfoForProcessLoop(long processRrn, int processVer, Long startRoute, Long startStep,
Long endRoute, Long endStep, Integer loopCount, String status) {
LotRecycledContextValue recycledContextValue = buildContextValueForProcessVersion(processRrn, processVer);
recycledContextValue.setLoopCount(loopCount);
recycledContextValue.setStartRouteRrn(startRoute);
recycledContextValue.setStartOperationRrn(startStep);
recycledContextValue.setEndRouteRrn(endRoute);
recycledContextValue.setEndOperationRrn(endStep);
recycledContextValue.setStatus(status);
return recycledContextValue;
}
private LotRecycledContextValue buildContextValueForProcessVersion(Long processRrn, Integer processVersion) {
LotRecycledContextValue contextValue = buildNewLotRecycledContextValue();
contextValue.setProcessRrn(processRrn);
contextValue.setProcessVersion(processVersion);
return contextValue;
}
private LotRecycledContextValue buildContextValueForProcessVersion(String processId, String endRouteId, String endOperationId, int processVersion) {
LotRecycledContextValue contextValue = buildNewLotRecycledContextValue();
contextValue.setContextKey1(processId);
contextValue.setContextKey4(endRouteId);
contextValue.setContextKey5(endOperationId);
contextValue.setContextKey6(StringUtils.toString(processVersion));
return contextValue;
}
private LotRecycledContextValue buildContextValueForProcessVersionByStart(String processId, String startRouteId, String startOperationId, int processVersion) {
LotRecycledContextValue contextValue = buildNewLotRecycledContextValue();
contextValue.setContextKey1(processId);
contextValue.setContextKey2(startRouteId);
contextValue.setContextKey3(startOperationId);
contextValue.setContextKey6(StringUtils.toString(processVersion));
return contextValue;
}
}