WflLinkContextValueManagerImpl.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.framework.utils.lang.collections.MapUtils;
import com.mycim.server.base.manager.NamedObjectManager;
import com.mycim.server.ctx.exec.dao.WflLinkContextValueDao;
import com.mycim.server.ctx.exec.manager.WflLinkContextValueManager;
import com.mycim.server.ctx.manager.ContextValueManager;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.prp.ContextValue;
import com.mycim.valueobject.prp.WflLinkContextValue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @author Johnson.Wang
* @version 6.0.0
* @date 2019/9/1
**/
@Service
@Transactional
public class WflLinkContextValueManagerImpl implements WflLinkContextValueManager {
private final ContextValueManager contextValueManager;
private final NamedObjectManager namedObjectManager;
@Autowired
private WflLinkContextValueDao wflLinkContextValueDao;
public WflLinkContextValueManagerImpl(ContextValueManager contextValueManager,
NamedObjectManager namedObjectManager) {
this.contextValueManager = contextValueManager;
this.namedObjectManager = namedObjectManager;
}
@Override
public void copyContextValueForProcessVersionWithActivatedEcn(long processRrn, int currentVersion) {
WflLinkContextValue wflContextValue = buildNewWflLinkContextValue(processRrn, currentVersion);
contextValueManager
.copyContextValueForContextKeyWithActivatedEcn(LocalContext.getUserRrn(), "copyByLastProcessVersion",
wflContextValue, "CONTEXT_KEY14",
StringUtils.toString(currentVersion + 1));
}
@Override
public void deleteContextValueForProcessVersion(long instanceRrn, int instanceVersion) {
contextValueManager.deleteContextValueByContextKey("deleteProcessVersion",
buildNewWflLinkContextValue(instanceRrn, instanceVersion));
}
@Override
public List<WflLinkContextValue> getContextValues(long processRrn, int processVersion) {
List<ContextValue> contextValues = contextValueManager
.getContextValuesByContextKey(buildNewWflLinkContextValue(processRrn, processVersion));
List<WflLinkContextValue> wflLinkContextValues = new ArrayList<>();
if (CollectionUtils.isNotEmpty(contextValues)) {
for (ContextValue contextValue : contextValues) {
WflLinkContextValue routeContextValue = new WflLinkContextValue();
routeContextValue.copy(contextValue);
wflLinkContextValues.add(routeContextValue);
}
}
return wflLinkContextValues;
}
@Override
public List<String> getParameterForLot(WflLinkContextValue ctx, List operationParam) {
return wflLinkContextValueDao.getParameterForLot(ctx, operationParam);
}
@Override
public String getEffectiveMultipathWflLinkId(Long facilityRrn, Map<String, Object> contextKey,
boolean isRouteLastStep) {
WflLinkContextValue wflLinkContextValue = buildWflLinkByContextValue(facilityRrn, contextKey);
if (isRouteLastStep) {
wflLinkContextValue.setOperationRrn(null);
}
ContextValue contextValue = contextValueManager.getContextValueForMultipath(wflLinkContextValue);
if (contextValue != null) {
return contextValue.getResultValue1();
} else {
//手动的multipath在lbrd中会插入一条手动规则的multipath情景值
//现在情景值rule不勾,生成sql都是value=' ' 导致有lotRrn的autoressign匹配不上有BUG,还要匹配手动multipath式
WflLinkContextValue wflLinkContextValue4Manual = buildWflLinkByContextValue4Manual(facilityRrn, contextKey);
if (isRouteLastStep) {
wflLinkContextValue4Manual.setOperationRrn(null);
}
contextValue = contextValueManager.getContextValueForMultipath(wflLinkContextValue4Manual);
if (contextValue != null) {
return contextValue.getResultValue1();
}
}
return StringUtils.EMPTY;
}
@Override
public List<WflLinkContextValue> getContextValues(WflLinkContextValue ctx) {
ctx.setContextRrn(namedObjectManager.getNamedObjectRrn(ctx.getContextId(), LocalContext.getFacilityRrn(),
ObjectList.CONTEXT_KEY));
List<ContextValue> contextValues = contextValueManager.getContextValuesByContextKey(ctx);
List<WflLinkContextValue> wflLinkContextValues = new ArrayList<>();
if (CollectionUtils.isNotEmpty(contextValues)) {
for (ContextValue contextValue : contextValues) {
WflLinkContextValue routeContextValue = new WflLinkContextValue();
routeContextValue.copy(contextValue);
wflLinkContextValues.add(routeContextValue);
}
}
return wflLinkContextValues;
}
//auto式的multipath情景值规则
private WflLinkContextValue buildWflLinkByContextValue(Long facilityRrn, Map<String, Object> contextKey) {
WflLinkContextValue wflLinkContextValue = new WflLinkContextValue();
wflLinkContextValue.setContextRrn(namedObjectManager
.getNamedObjectRrn(wflLinkContextValue.getContextId(), facilityRrn,
ObjectList.CONTEXT_KEY));
wflLinkContextValue.setProductRrn(MapUtils.getLong(contextKey, "productRrn")); // context_key1
wflLinkContextValue.setProcessRrn(MapUtils.getLong(contextKey, "processRrn")); // context_key2
wflLinkContextValue.setRouteRrn(MapUtils.getLong(contextKey, "routeRrn")); // context_key3
wflLinkContextValue.setOperationRrn(MapUtils.getLong(contextKey, "operationRrn")); // context_key4
//wflLinkContextValue.setContextKey5(MapUtils.getString(contextKey, "lotRrn"));
wflLinkContextValue.setContextKey9(MapUtils.getString(contextKey, "recipeRrn"));
// wflLinkContextValue.setContextKey10(MapUtils.getString(contextKey, "parameter"));
// wflLinkContextValue.setContextKey11(MapUtils.getString(contextKey, "parameterValue")); //
// lower
// wflLinkContextValue.setContextKey12(MapUtils.getString(contextKey, "parameterValue")); //
// upper
wflLinkContextValue.setContextKey15(MapUtils.getString(contextKey, "lotType"));
wflLinkContextValue.setProcessVersion(MapUtils.getInteger(contextKey, "processVersion")); // context_key14
return wflLinkContextValue;
}
//手动选择multipath情景值规则
private WflLinkContextValue buildWflLinkByContextValue4Manual(Long facilityRrn, Map<String, Object> contextKey) {
WflLinkContextValue wflLinkContextValue = new WflLinkContextValue();
wflLinkContextValue.setContextRrn(namedObjectManager
.getNamedObjectRrn(wflLinkContextValue.getContextId(), facilityRrn,
ObjectList.CONTEXT_KEY));
wflLinkContextValue.setProductRrn(MapUtils.getLong(contextKey, "productRrn")); // context_key1
wflLinkContextValue.setProcessRrn(MapUtils.getLong(contextKey, "processRrn")); // context_key2
wflLinkContextValue.setRouteRrn(MapUtils.getLong(contextKey, "routeRrn")); // context_key3
wflLinkContextValue.setOperationRrn(MapUtils.getLong(contextKey, "operationRrn")); // context_key4
wflLinkContextValue.setContextKey5(MapUtils.getString(contextKey, "lotRrn"));
//wflLinkContextValue.setContextKey9(MapUtils.getString(contextKey, "recipeRrn"));
wflLinkContextValue.setContextKey15(MapUtils.getString(contextKey, "lotType"));
wflLinkContextValue.setProcessVersion(MapUtils.getInteger(contextKey, "processVersion")); // context_key14
return wflLinkContextValue;
}
private WflLinkContextValue buildNewWflLinkContextValue(Long processRrn, Integer processVersion) {
WflLinkContextValue contextValue = new WflLinkContextValue();
contextValue.setContextRrn(namedObjectManager.getNamedObjectRrn(contextValue.getContextId(),
LocalContext.getFacilityRrn(),
ObjectList.CONTEXT_KEY));
contextValue.setProcessRrn(processRrn);
contextValue.setProcessVersion(processVersion);
return contextValue;
}
}