EdcLotContextManagerImpl.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.MapUtils;
import com.mycim.server.base.manager.NamedObjectManager;
import com.mycim.server.ctx.exec.manager.EdcLotContextManager;
import com.mycim.server.ctx.manager.ContextValueManager;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.ems.Equipment;
import com.mycim.valueobject.prp.ContextValue;
import com.mycim.valueobject.prp.EdcLotContextValue;
import com.mycim.valueobject.wip.Lot;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author Luopeng.Wang
* @version 6.0.0
* @date 2019/9/9
**/
@Service
@Transactional
public class EdcLotContextManagerImpl implements EdcLotContextManager {
@Autowired
private ContextValueManager contextValueManager;
@Autowired
private NamedObjectManager namedObjectManager;
@Override
public ContextValue getEdcLotContextValue(Long productRrn, Integer productVersion, Long processRrn,
Integer processVersion, Long routeRrn, Long operationRrn) {
EdcLotContextValue edcLotContextValue = buildNewEdcLotContextValueForProcess(productRrn, productVersion,
processRrn, processVersion,
routeRrn, operationRrn);
ContextValue contextValue = contextValueManager
.getContextValue(edcLotContextValue, LocalContext.getFacilityRrn());
return contextValue;
}
@Override
public List<ContextValue> getEdcContextValueList(long productRrn, Integer productVersion, long processRrn,
int processVersion) {
long facilityRrn = LocalContext.getFacilityRrn();
EdcLotContextValue edcLotContextValue = new EdcLotContextValue();
edcLotContextValue.setContextRrn(namedObjectManager
.getNamedObjectRrn(edcLotContextValue.getContextId(), facilityRrn,
ObjectList.CONTEXT_KEY));
edcLotContextValue.setProductRrn(productRrn);
edcLotContextValue.setProductVersion(productVersion);
edcLotContextValue.setProcessRrn(processRrn);
edcLotContextValue.setProcessVersion(processVersion);
edcLotContextValue.setContextKey9("MOVEOUT");
return contextValueManager.getContextValuesByContextKey(edcLotContextValue);
}
@Override
public List<ContextValue> getEdcContextValueList(Long processRrn, Integer processVersion) {
long facilityRrn = LocalContext.getFacilityRrn();
EdcLotContextValue edcLotContextValue = new EdcLotContextValue();
edcLotContextValue.setContextRrn(namedObjectManager
.getNamedObjectRrn(edcLotContextValue.getContextId(), facilityRrn,
ObjectList.CONTEXT_KEY));
edcLotContextValue.setProcessRrn(processRrn);
edcLotContextValue.setProcessVersion(processVersion);
edcLotContextValue.setContextKey9("MOVEOUT");
return contextValueManager.getContextValuesByContextKey(edcLotContextValue);
}
@Override
public EdcLotContextValue getEdcLotContextValue(Lot lot, Equipment equipment, String actionPoint) {
EdcLotContextValue edcLotContextValue = new EdcLotContextValue();
long contextRrn = namedObjectManager
.getNamedObjectRrn(edcLotContextValue.getContextId(), LocalContext.getFacilityRrn(),
ObjectList.CONTEXT_KEY);
if (contextRrn > 0) {
edcLotContextValue.setContextRrn(contextRrn);
edcLotContextValue.setProductRrn(lot.getProductRrn());
edcLotContextValue.setProductVersion(lot.getProductVersion());
edcLotContextValue.setProcessRrn(lot.getProcessRrn());
edcLotContextValue.setRouteRrn(lot.getRouteRrn());
edcLotContextValue.setOperationRrn(lot.getOperationRrn());
edcLotContextValue.setRecipeRrn(lot.getRecipeRrn());
edcLotContextValue.setLotRrn(new Long(lot.getLotRrn()));
if (equipment != null && equipment.getInstanceRrn() > 0) {
edcLotContextValue.setEquipmentModel(equipment.getEquipmentModelRrn());
edcLotContextValue.setMainEqpt(new Long(equipment.getInstanceRrn()));
}
edcLotContextValue.setActionPoint(actionPoint);
edcLotContextValue.setRouteSeq(lot.getRouteSeq());
edcLotContextValue.setOperationSeq(lot.getOperationSeq());
edcLotContextValue.setProcessVersion(lot.getProcessVersion());
ContextValue contextValue = contextValueManager.simulateContextValue(edcLotContextValue);
if (contextValue != null) {
edcLotContextValue.copy(contextValue);
}
}
return edcLotContextValue;
}
@Override
public Map getEdcContextValueByLot(Map condition) {
Map result = new HashMap();
String contextId = "EDC_CONTEXT_LOT";
Long facilityRrn = MapUtils.getLong(condition, "facilityRrn");
Long productRrn = MapUtils.getLong(condition, "productRrn");
Long routeRrn = MapUtils.getLong(condition, "routeRrn");
Long operationRrn = MapUtils.getLong(condition, "operationRrn");
Long technologyRrn = MapUtils.getLong(condition, "technologyRrn");
Long lotRrn = MapUtils.getLong(condition, "lotRrn");
Long equipmentModel = MapUtils.getLong(condition, "equipmentModel");
Long entityRrn = MapUtils.getLong(condition, "entityRrn");
String actionPoint = MapUtils.getString(condition, "actionPoint");
Long recipeRrn = MapUtils.getLong(condition, "recipeRrn");
String routeSeq = MapUtils.getString(condition, "routeSeq");
String operationSeq = MapUtils.getString(condition, "operationSeq");
String processVersion = MapUtils.getString(condition, "processVersion");
String productVersion = MapUtils.getString(condition, "productVersion");
long facility = 1;
if (facilityRrn != null) {
facility = facilityRrn.longValue();
}
// Operation, Route ID, Technology ID, Product ID, Lot
// call prp setup manager's get context value method to retrive recipe string
ContextValue ctxValue = new ContextValue();
if ((contextId != null)) {
String namedSpace = namedObjectManager.getNamedSpace(facility, ObjectList.CONTEXT_KEY);
ctxValue.setContextRrn(namedObjectManager.getNamedObjectRrn(contextId, namedSpace, ObjectList.CONTEXT_KEY,
ObjectList.CONTEXT_TYPE_KEY));
}
if (operationRrn != null) {
ctxValue.setContextKey1("" + operationRrn);
}
if (routeRrn != null) {
ctxValue.setContextKey2("" + routeRrn);
}
if (technologyRrn != null) {
ctxValue.setContextKey3("" + technologyRrn);
}
if (productRrn != null) {
ctxValue.setContextKey4("" + productRrn);
}
if (equipmentModel != null) {
ctxValue.setContextKey5("" + equipmentModel);
}
if (entityRrn != null) {
ctxValue.setContextKey6("" + entityRrn);
}
if (lotRrn != null) {
ctxValue.setContextKey7("" + lotRrn);
}
if (actionPoint != null) {
ctxValue.setContextKey9(actionPoint);
}
if (recipeRrn != null) {
ctxValue.setContextKey10(recipeRrn + "");
}
if (StringUtils.isNotBlank(routeSeq)) {
ctxValue.setContextKey11(routeSeq);
}
if (StringUtils.isNotBlank(operationSeq)) {
ctxValue.setContextKey12(operationSeq);
}
if (StringUtils.isNotBlank(processVersion)) {
ctxValue.setContextKey13(processVersion);
}
if (StringUtils.isNotBlank(productVersion)) {
ctxValue.setContextKey14(productVersion);
}
List<ContextValue> contextValues = contextValueManager.simulateContextValues(ctxValue);
for (ContextValue contextValue : contextValues) {
if (contextValue != null) {
result.put("PARAMETERSET", contextValue.getResultValue1());
result.put("ROUTE", contextValue.getResultValue2());
result.put("OPERATION", contextValue.getResultValue3());
result.put("PARAMETERSETSPEC", contextValue.getResultValue4());
continue;
}
}
return result;
}
@Override
public Map buildContextValueForEdcLot(Long facilityRrn, Map contextValueInfo) {
EdcLotContextValue edcLotContextValue = new EdcLotContextValue();
// BeanUtils.copyMapToBean(edcLotContextValue, contextValueInfo);
edcLotContextValue.setOperationRrn(MapUtils.getLong(contextValueInfo, "operationRrn"));
edcLotContextValue.setRouteRrn(MapUtils.getLong(contextValueInfo, "routeRrn"));
edcLotContextValue.setProductRrn(MapUtils.getLong(contextValueInfo, "productRrn"));
edcLotContextValue.setProcessRrn(MapUtils.getLong(contextValueInfo, "processRrn"));
edcLotContextValue.setProductVersion(MapUtils.getInteger(contextValueInfo, "productVersion"));
edcLotContextValue.setContextRrn(namedObjectManager.getNamedObjectRrn(edcLotContextValue.getContextId(),
namedObjectManager
.getNamedSpace(facilityRrn,
ObjectList.CONTEXT_KEY),
ObjectList.CONTEXT_KEY));
edcLotContextValue.setProcessVersion(MapUtils.getIntValue(contextValueInfo, "processVersion"));
edcLotContextValue.setContextKey9("MOVEOUT");
ContextValue contextValue = contextValueManager.getContextValueNoFilter(edcLotContextValue);
if (contextValue != null) {
contextValueInfo.put("parameterSetRrn", contextValue.getResultValue1());
contextValue = contextValueManager.filterContextValueToId(contextValue);
contextValueInfo.put("parameterSetId", contextValue.getResultValue1());
if (contextValue.getEcnRrn() != null && contextValue.getEcnRrn() > 0) {
contextValueInfo.put("ecnRrn", contextValue.getEcnRrn());
contextValueInfo.put("status", contextValue.getStatus());
contextValueInfo.put("effectiveDateFrom", contextValue.getEffectiveDateFrom());
contextValueInfo.put("effectiveDateTo", contextValue.getEffectiveDateTo());
}
if (StringUtils.isNotBlank(contextValue.getResultValue1())) {
contextValueInfo.put("hasSetEDCFlag", true);
}
}
return contextValueInfo;
}
@Override
public boolean isValidDescForEDCPlan(long contextRrn, long productRrn, long processRrn, long operationRrn,
String desc) {
boolean isValidDescForEDCPlan = contextValueManager
.isValidDescForEDCPlan(contextRrn, productRrn, processRrn, operationRrn, desc);
if (!isValidDescForEDCPlan) {
isValidDescForEDCPlan = contextValueManager
.isValidInactiveDescForEDCPlan(contextRrn, productRrn, processRrn, operationRrn, desc);
}
return isValidDescForEDCPlan;
}
public EdcLotContextValue buildNewEdcLotContextValue() {
EdcLotContextValue contextValue = new EdcLotContextValue();
contextValue.setContextRrn(namedObjectManager.getNamedObjectRrn(contextValue.getContextId(),
LocalContext.getFacilityRrn(),
ObjectList.CONTEXT_KEY));
return contextValue;
}
private EdcLotContextValue buildNewEdcLotContextValueForProcess(Long productRrn, Integer productVersion,
Long processRrn, Integer processVersion,
Long routeRrn, Long operationRrn) {
EdcLotContextValue contextValue = buildNewEdcLotContextValue();
contextValue.setProductRrn(productRrn);
contextValue.setProductVersion(productVersion);
contextValue.setProcessRrn(processRrn);
contextValue.setProcessVersion(processVersion);
contextValue.setRouteRrn(routeRrn);
contextValue.setOperationRrn(operationRrn);
return contextValue;
}
}