ViewLotBuildTask.java
package com.mycim.webapp.actions.operation.query.threadtask;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.MapUtils;
import com.mycim.valueobject.wip.Lot;
import com.mycim.webapp.actions.WipSetupAction;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Callable;
public class ViewLotBuildTask extends WipSetupAction implements Callable<Map<String,Object>> {
final private Map<String,Object> lot;
final private Map<String,Object> params;
public ViewLotBuildTask(Map<String, Object> lot,
Map<String, Object> params) {
this.lot = lot;
this.params = params;
}
@Override
public Map<String, Object> call(){
Long lotRrn = MapUtils.getLongValue(lot, "lotRrn");
String recipeString = MapUtils.getString(lot, "contextRecipeId", StringUtils.EMPTY);
if (StringUtils.isBlank(recipeString)) {
lotService.insertLotRecipe(lotRrn, StringUtils.EMPTY);
} else {
lotService.insertLotRecipe(lotRrn, recipeString);
}
Map<String, Object> jsonObject = new HashMap<>();
jsonObject.put("batchId", lot.get("batchId"));
jsonObject.put("LotRRN", lot.get("lotRrn"));// 批次RRN
jsonObject.put("LotID", lot.get("lotId"));// 批次号
jsonObject.put("CarrierID", lot.get("carrierId"));// 晶舟号
jsonObject.put("LotCategory", lot.get("lotType"));// 批次类型
jsonObject.put("LotPiority", MapUtils.getStringCheckNull(lot, "hotFalg_priority"));// 优先级
jsonObject.put("Qty1", lot.get("qty1"));// 数量
jsonObject.put("ProductID", lot.get("productId"));// 产品号
jsonObject.put("StageID", MapUtils.getStringCheckNull(lot, "contextStageId"));
jsonObject.put("RouteID", lot.get("routeId"));// 路径号
jsonObject.put("RouteDesc", MapUtils.getStringCheckNull(lot, "routeDesc"));// 路径描述
jsonObject.put("OperationID", lot.get("operationId"));// 步骤号
jsonObject.put("operationDesc", MapUtils.getStringCheckNull(lot, "contextOperationDesc"));// 步骤描述
jsonObject.put("RecipeID", MapUtils.getStringCheckNull(lot, "recipeId"));// 工艺菜单号
// update by pinyan.song 使用recipeId替换掉
// String recipePhysicalId = MapUtils.getStringCheckNull(lot, "recipePhysicalId");
String recipePhysicalId = MapUtils.getStringCheckNull(lot, "recipeId");
jsonObject.put("physicalRecipeID", StringUtils.isEmpty(recipePhysicalId) ? "" : recipePhysicalId);
jsonObject.put("documentFile", MapUtils.getStringCheckNull(lot, "recipeDocFile"));
jsonObject.put("documentFileCompulsorydisplay",
MapUtils.getStringCheckNull(lot, "recipeDocFileCompulsorydisplay"));
jsonObject.put("RecipePara", lot.get("recipeParam"));// 工艺规格
jsonObject.put("QueueTime", lot.get("queueTimestamp"));// 等待时间
jsonObject.put("equipRRN", lot.get("equipmentRrn"));
jsonObject.put("pollutionLevel", lot.get("pollutionLevel"));// 污染等级
/*
String maxQTime = MapUtils.getStringCheckNull(lot, "operationMaxQueueTime");
if (StringUtils.isNotBlank(maxQTime) && !StringUtils.isEqual(maxQTime, "0")) {
// 剩余时间=最大等待时间-等待时间
int maxMinutesTime = DateUtils.getMinutesTime(maxQTime);
int waitMinutesTime = Integer.parseInt(lot.get("queueTimestamp").toString());
jsonObject.put("timeLimit", maxMinutesTime - waitMinutesTime);
}// 剩余时间
*/
String timeLimitStr = MapUtils.getString(lot, "qTime");
double timeLimitDouble = StringUtils.isBlank(timeLimitStr) ? 0 : Double
.parseDouble(MapUtils.getString(lot, "qTime"));
jsonObject.put("timeLimit", timeLimitStr);
jsonObject.put("statusFlag", MapUtils.getString(lot, "lotStatus"));
if (timeLimitStr != null && timeLimitStr.substring(0, 1).equals(".")) {
timeLimitStr = "0" + timeLimitStr;
jsonObject.put("timeLimit", timeLimitStr);
} else if (timeLimitStr != null && timeLimitStr.length() > 2 && timeLimitStr.substring(0, 1).equals("-") &&
timeLimitStr.substring(1, 2).equals(".")) {
timeLimitStr = timeLimitStr.substring(0, 1) + "0" + timeLimitStr.substring(1, timeLimitStr.length());
jsonObject.put("timeLimit", timeLimitStr);
}
Lot realLot = lotQueryService.getLot(MapUtils.getLongValue(lot, "lotRrn"));
Map minTime = wipCheckService.getLotMinTimeForQueueTime(realLot);
if (StringUtils.isNotEmpty(MapUtils.getString(minTime, "MIN_TIME"))) {
jsonObject.put("timeLimit", MapUtils.getString(minTime, "MIN_TIME"));
jsonObject.put("statusFlag", "QTIME");
if (StringUtils.equalsIgnoreCase(MapUtils.getString(lot, "lotStatus"), "HOLD")) {
jsonObject.put("statusFlag", "QTIMEHOLD");
}
}
if (timeLimitDouble != -10000) {
jsonObject.put("statusFlag", "QTIME");
if (StringUtils.equalsIgnoreCase(MapUtils.getString(lot, "lotStatus"), "HOLD")) {
jsonObject.put("statusFlag", "QTIMEHOLD");
}
}
jsonObject.put("jobRrn", lot.get("jobRrn"));
jsonObject.put("LotStatus", lot.get("lotStatus"));
jsonObject.put("flowSeq", MapUtils.getStringCheckNull(lot, "contextFlowSeq"));
jsonObject.put("routeSeq", MapUtils.getStringCheckNull(lot, "routeSeq"));
jsonObject.put("operationSeq", MapUtils.getStringCheckNull(lot, "operationSeq"));
jsonObject.put("operationRrn", lot.get("operationRrn"));
jsonObject.put("workArea", MapUtils.getStringCheckNull(lot, "operationWorkArea"));
String lotDoJobFlag = "YES";
String constrainFlag = "NO";
String constrainMsg = "";
// if (StringUtils.isNotBlank(equipmentId)) {
// Lot lotTemp = buildLotFromMap(lot);
// // start: 检查批次在当前设备是否有constrain
// ErrorMsg errorMsg = constrainService.checkLotConstrain(constrainMap, equipmentId, lotTemp);
// if (errorMsg.getError()) {
// constrainFlag = "YES";
// constrainMsg = errorMsg.getErrorMsg();
// }
// // end: 检查批次在当前设备是否有constrain
//
// // start:检测批次是否有可用的recipe
// String recipeId = MapUtils.getString(lot, "recipeId");
// boolean recipeFAvailableFlag = false;
// if (StringUtils.isNotBlank(recipeId)) {
// recipeFAvailableFlag =checkEqptRecipeAvailable(equipmentRecipes, recipeId);
// }
// jsonObject.put("eqptRecipeAvailableFlag", recipeFAvailableFlag);
// // end:检测批次是否有可用的recipe
//
// // 检查批次在当前设备是否可以do job
// if (errorMsg.getError()) {
// lotDoJobFlag = "NO";
// } else {
// if (StringUtils.isNotBlank(wipCheckService
// .checkHasAvailableDispatchRecipe(lotTemp, equipmentRrn, recipeId,
// lotTemp.getQty1()))) {
// lotDoJobFlag = "NO";
// } else {
// if (StringUtils.isNotBlank(wipCheckService.checkAvailableEquipment(lotTemp, equipmentRrn,
// user.getInstanceRrn()))) {
// lotDoJobFlag = "NO";
// }
// }
// }
// }
jsonObject.put("lotDoJobFlag", lotDoJobFlag);
jsonObject.put("constrainFlag", constrainFlag);
jsonObject.put("constrainMsg", constrainMsg);
jsonObject.put("pilot", MapUtils.getStringCheckNull(lot, "piLot"));
String sapphire = MapUtils.getString(params, "Sapphire");
if (StringUtils.isNotBlank(sapphire) && sapphire.equalsIgnoreCase("isSapphire")) {
jsonObject.put("isSapphire", "Y");
} else {
jsonObject.put("isSapphire", "N");
}
jsonObject.put("rcFlag", MapUtils.getStringCheckNull(lot, "rcFlag"));
jsonObject.put("rcLotId", MapUtils.getStringCheckNull(lot, "rcLotId"));
return jsonObject;
}
private Lot buildLotFromMap(Map<String, Object> lotMap) {
Lot lotTemp = new Lot();
// BeanUtils.copyMapToBean(lotTemp, lotMap);
lotTemp.setLotRrn(MapUtils.getLongValue(lotMap, "lotRrn"));
lotTemp.setLotId(MapUtils.getStringCheckNull(lotMap, "lotId"));
lotTemp.setProductId(MapUtils.getStringCheckNull(lotMap, "productId"));
lotTemp.setProcessId(MapUtils.getStringCheckNull(lotMap, "processId"));
lotTemp.setRouteId(MapUtils.getStringCheckNull(lotMap, "routeId"));
lotTemp.setOperationId(MapUtils.getStringCheckNull(lotMap, "operationId"));
lotTemp.setRecipeId(MapUtils.getStringCheckNull(lotMap, "recipeId"));
lotTemp.setStageId(MapUtils.getStringCheckNull(lotMap, "contextStageId"));
lotTemp.setCustomerId(MapUtils.getStringCheckNull(lotMap, "customerId"));
lotTemp.setQty1(MapUtils.getDoubleValue(lotMap, "qty1"));
lotTemp.setQty2(MapUtils.getDoubleValue(lotMap, "qty2"));
lotTemp.setCreateCategory(MapUtils.getStringCheckNull(lotMap, "createCategory"));
lotTemp.setFacilityRrn(MapUtils.getLongValue(lotMap, "facilityRrn"));
lotTemp.setRouteSeq(MapUtils.getStringCheckNull(lotMap, "routeSeq"));
lotTemp.setOperationSeq(MapUtils.getStringCheckNull(lotMap, "operationSeq"));
lotTemp.setProductRrn(MapUtils.getLongValue(lotMap, "productRrn"));
lotTemp.setProcessRrn(MapUtils.getLongValue(lotMap, "processRrn"));
lotTemp.setRouteRrn(MapUtils.getLongValue(lotMap, "routeRrn"));
lotTemp.setOperationRrn(MapUtils.getLongValue(lotMap, "operationRrn"));
lotTemp.setRecipeRrn(MapUtils.getLongValue(lotMap, "recipeRrn"));
lotTemp.setExecutionRrn(MapUtils.getLongValue(lotMap, "executionRrn"));
lotTemp.setPrevOperationRrn(MapUtils.getLongValue(lotMap, "prevOperationRrn"));
return lotTemp;
}
}