EmsSetupAction.java
package com.mycim.webapp.actions;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.context.spring.SpringContext;
import com.mycim.framework.utils.beans.PropertyUtils;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.MapUtils;
import com.mycim.framework.utils.lang.math.NumberUtils;
import com.mycim.framework.utils.lang.time.DateUtils;
import com.mycim.quartz.service.QuartzOperateService;
import com.mycim.server.alarm.service.AlarmService;
import com.mycim.server.asm.service.AsmService;
import com.mycim.server.asm.service.WarehouseService;
import com.mycim.server.constrain.service.ConstrainService;
import com.mycim.server.ctx.exec.service.CtxExecService;
import com.mycim.server.ecn.service.EcnService;
import com.mycim.server.ems.service.EmsService;
import com.mycim.server.npw.service.EqpMonitorService;
import com.mycim.server.pms.service.PmsService;
import com.mycim.server.prp.service.PrpService;
import com.mycim.server.rcp.service.RecipeService;
import com.mycim.server.status.service.StatusService;
import com.mycim.server.wip.service.LotQueryService;
import com.mycim.server.wip.service.LotService;
import com.mycim.server.wip.service.WipQueryService;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.alm.Alarm;
import com.mycim.valueobject.alm.AlarmCategory;
import com.mycim.valueobject.bas.ErrorMsg;
import com.mycim.valueobject.bas.NamedObject;
import com.mycim.valueobject.consts.AlarmType;
import com.mycim.valueobject.consts.SessionNames;
import com.mycim.valueobject.ems.*;
import com.mycim.valueobject.prp.BORResource;
import com.mycim.valueobject.sys.ReferenceFileDetail;
import com.mycim.valueobject.wip.Lot;
import com.mycim.valueobject.wip.LotStatus;
import com.mycim.webapp.Constants;
import com.mycim.webapp.WebUtils;
import com.mycim.webapp.forms.DoChecklistInfoForm;
import com.mycim.webapp.forms.RootForm;
import javax.servlet.http.HttpServletRequest;
import java.sql.Timestamp;
import java.util.*;
public abstract class EmsSetupAction extends AbstractAction {
public static final String COMPLETED = "COMPLETED";
public static final String CANCELED = "CANCELED";
protected static final String NEXT_SEQ = "next_seq";
protected static final String STARTED = "STARTED";
protected static final String JOB_CLASS_NAME = "com.mycim.quartz.jobs.AlarmScheduleJob";
protected static final String CHAMBER_FLAG = "_";
private static final String LOT_STATUS = "lotStatus";
protected EmsService emsService = SpringContext.getBean(EmsService.class);
protected LotService lotService = SpringContext.getBean(LotService.class);
protected AlarmService alarmService = SpringContext.getBean(AlarmService.class);
protected StatusService statusService = SpringContext.getBean(StatusService.class);
protected PmsService pmsService = SpringContext.getBean(PmsService.class);
protected WipQueryService wipQueryService = SpringContext.getBean(WipQueryService.class);
protected LotQueryService lotQueryService = SpringContext.getBean(LotQueryService.class);
protected ConstrainService constrainService = SpringContext.getBean(ConstrainService.class);
protected RecipeService recipeService = SpringContext.getBean(RecipeService.class);
protected EcnService ecnService = SpringContext.getBean(EcnService.class);
protected QuartzOperateService quartzOperateService = SpringContext.getBean(QuartzOperateService.class);
protected EqpMonitorService dmmService = SpringContext.getBean(EqpMonitorService.class);
protected PrpService prpService = SpringContext.getBean(PrpService.class);
protected AsmService asmService = SpringContext.getBean(AsmService.class);
protected WarehouseService warehouseService = SpringContext.getBean(WarehouseService.class);
protected CtxExecService ctxExecService = SpringContext.getBean(CtxExecService.class);
private Map getTransInfoByItemRrn(BORResource borResource, List<Map<String, Object>> transInfos) {
for (Map<String, Object> info : transInfos) {
Long itemRrn = (Long) info.get("itemRrn");
Long sequenceNumber = (Long) info.get("transSequence");
if (borResource.getResourceRrn().equals(itemRrn) &&
(borResource.getSequenceNumber().intValue() == sequenceNumber.longValue())) {
return info;
}
}
return null;
}
private List<BORResource> concatCollection(List<BORResource> borResources, List<Map<String, Object>> transInfos) {
for (BORResource borResource : borResources) {
if (borResource.getResourceRrn() != null) {
Map transInfo = getTransInfoByItemRrn(borResource, transInfos);
if (transInfo != null) {
borResource.setConsumedQty((Double) transInfo.get("transQty"));
borResource.setRemarks((String) transInfo.get("comments"));
}
}
}
return borResources;
}
private String parseMessage(String rep, String msg) {
if (msg == null) {
return null;
}
StringBuffer sb = new StringBuffer();
sb.append(msg);
int pos = msg.indexOf("$");
if (pos >= 0) {
sb.replace(pos, pos + 1, rep);
}
return sb.toString();
}
private Map<String, Object> buildAlarmInfo(String alarmId, String text, Long checkListRrn, Entity entity,
Long userRrn) {
Map<String, Object> alarmInfo = new HashMap<>();
Alarm alarm = new Alarm();
alarm.setAlarmId(alarmId);
alarm.setAlarmType(AlarmType.SYSTEM_KEY);
alarm = alarmService.getAlarm(alarm);
alarmInfo.put("alarm", alarm);
alarmInfo.put("eqptId", entity.getInstanceId() + "");
alarmInfo.put("alarmId", "The Alarm: " + alarmId + " has been triggered!");
alarmInfo.put("alarmText", parseMessage(text, alarm.getAlarmDesc()));
alarmInfo.put("fromUserRrn", userRrn);
alarmInfo.put("toUserRrn", entity.getMaintenanceEngineerRrn());
// add
alarmInfo.put("checklistRrn", checkListRrn);
alarmInfo.put("entityRrn", entity.getInstanceRrn());
alarmInfo.put("entityId", entity.getInstanceId());
if (alarm.getAlarmCategoryRrn() != null) {
AlarmCategory item = new AlarmCategory();
item.setInstanceRrn(alarm.getAlarmCategoryRrn());
item = alarmService.getAlarmCategory(item);
alarmInfo.put("workflowRrn", item.getTriggerWflRrn());
alarmInfo.put("alarmCategory", item);
}
return alarmInfo;
}
private Map<String, Object> buildAlarmInfo(Long sequenceNumber, String scheduleId, String scheduleDesc,
String alarmId, String text, Long checkListRrn, Entity entity,
Long userRrn, ChecklistJob checklistJob, String jobType,
String nameSpace) {
Map<String, Object> alarmInfo = new HashMap<>();
Alarm alarm = new Alarm();
alarm.setAlarmId(alarmId);
alarm.setAlarmType(AlarmType.SYSTEM_KEY);
alarm = alarmService.getAlarm(alarm);
// alarmInfo.put("alarm", alarm);
// alarmInfo.put("alarmId", alarm.getAlarmId());
/**
* add by Bright 添加mail subject为: 设备周期PM: entityId (entityDesc) triggerTime 因为triggerTime时pm
* schedule的下一次触发时间,所以在触发的时候添加
*/
String entityDesc = entity.getInstanceDesc() == null ? " " : " (" + entity.getInstanceDesc() + ")";// FIX 设备描述
// alarmInfo.put("subject", "设备周期PM: " + entity.getInstanceId() + entityDesc);
// alarmInfo.put("entityDesc", entity.getInstanceDesc());
// alarmInfo.put("alarmText", parseMessage(text, alarm.getAlarmDesc()));
alarmInfo.put("fromUserRrn", userRrn);
alarmInfo.put("userRrn", userRrn);
// alarmInfo.put("toUserRrn", entity.getMaintenanceEngineerRrn());
// add
// alarmInfo.put("checklistRrn", checkListRrn);
alarmInfo.put("entityRrn", entity.getInstanceRrn());
alarmInfo.put("equipmentRrn", entity.getInstanceRrn());
alarmInfo.put("entityId", entity.getInstanceId());
// checklistJob.setSequenceNumber(sequenceNumber);
// alarmInfo.put("checklistJob", checklistJob.toString());
/**
* comment by Bright mail内容: 设备号:SL-10, 设备描述 :线切割10号机 维护计划序号:1 维护计划号:SL-3M-1 本次计划维护中心时间:2007-7-1 ,在+/-
* 3天内需要完成维护。 (动态添加) 重复警报: 1 Day (或无) (动态添加) 检查单号:EQ1-SL-3M 警报等级:Warning (或Information或Error)
* 发送人:MES PM
* Schedule 发送日期:2007-6-29
*/
/*
* String contentHead = ""; String contentTrail = ""; Calendar cal = Calendar.getInstance();
* AlarmCategory
* category = new AlarmCategory(); if (alarm.getAlarmCategoryRrn() != null &&
* alarm.getAlarmCategoryRrn().longValue() > 0)
* category.setInstanceRrn(alarm.getAlarmCategoryRrn().longValue()); category =
* this.getAlmManager().getAlarmCategory(category); String severity = category.getSeverity(); if
* (severity !=
* null && severity.equals(AlarmCategory.SEVERITY_TYPE_INFORMATION)) severity = "Information"; else
* if (severity
* != null && severity.equals(AlarmCategory.SEVERITY_TYPE_WARNING)) severity = "Warning"; else if
* (severity !=
* null && severity.equals(AlarmCategory.SEVERITY_TYPE_FATALERROR)) severity = "Error"; else
* severity = "N/A";
* SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); // Get detail check list info,
* added by
* yichao, 2013-07-03 Checklist checkListInfo = new Checklist(this.getInstanceId(checkListRrn
* .longValue()),
* nameSpace, ObjectList.CHECKLIST_KEY); checkListInfo = (Checklist) getInstance(checkListInfo);
* Collection
* checkListItems = this.getChecklistItems(checkListInfo); String ChecklistItemInfo = ""; for
* (Iterator it =
* checkListItems.iterator(); it.hasNext();) { ChecklistItem citem = (ChecklistItem) it.next();
* ChecklistItemInfo += " " + citem.getChecklistSequence() + ":" + citem.getChecklistItemId() +
* MailComponent.ENTER_KEY; } if (checkListInfo.getInstanceId().substring(0, 3).equalsIgnoreCase
* ("QC-") ||
* checkListInfo.getInstanceId().substring(0, 3).equalsIgnoreCase("QC_")) { alarmInfo.put
* ("alarmUserType",
* "QC"); } else { alarmInfo.put("alarmUserType", "PM"); } contentHead += MailComponent
* .ENTITY_ID_KEY + ":" +
* entity.getInstanceId() + ", " + MailComponent.ENTITY_DESC_KEY + ":" + entityDesc + MailComponent
* .ENTER_KEY +
* MailComponent.PM_SCHEDULE_SEQ_KEY + ":" + sequenceNumber.longValue() + ", " +
* MailComponent.PM_SCHEDULE_ID_KEY + ":" + scheduleId + "(" + scheduleDesc + ")" + MailComponent
* .ENTER_KEY;
* contentTrail = MailComponent.CHECKLIST_ID_KEY + ":" + this.getInstanceId(checkListRrn.longValue
* ()) +
* MailComponent.ENTER_KEY + ChecklistItemInfo + MailComponent.ENTER_KEY + // MailComponent
* .ALARM_SEVERITY_KEY +
* ":" + severity + MailComponent.ENTER_KEY + // MailComponent.MAIL_FROM_KEY + ":MES PM Schedule" +
* MailComponent.ENTER_KEY + MailComponent.MODIFY_DATE_KEY + ":" + formatter.format(cal.getTime());
* alarmInfo.put("contentHead", contentHead); alarmInfo.put("contentTrail", contentTrail);
*/
/**
* comment by Bright 添加jobType: NORMAL表示周期性触发,REPEAT表示重复触发,NOTIFY保留
*/
alarmInfo.put("jobType", jobType);
/**
* comment by Bright 添加pm schedule的顺序号,使checklistjob可以对应到pm schedule
*/
alarmInfo.put("sequenceNumber", sequenceNumber);
if (alarm.getAlarmCategoryRrn() != null) {
AlarmCategory item = new AlarmCategory();
item.setInstanceRrn(alarm.getAlarmCategoryRrn());
item = alarmService.getAlarmCategory(item);
alarmInfo.put("workflowRrn", item.getTriggerWflRrn());
alarmInfo.put("alarmCategory", item);
}
return alarmInfo;
}
private String getcronExpression(Date startDate, long f) {
int ss = startDate.getSeconds();
int mm = startDate.getMonth();
int hh = startDate.getHours();
int day = startDate.getDay();
int month = startDate.getMonth();
return ss + " " + mm + " " + hh + " " + day + " " + month + "/" + f + " ?";
}
/**
* @param jobName jobName
* @param jobGroup jobGroup
* @param alarmInfo jobData
* @param baseFlag 以完成checklistjob为标志,true表示只触发一次,false表示周期性触发
* @param startDate 开始日期
* @param repeat 重复间隔
* @param frequency 频率
* @param unit 单位
*/
protected void addJob(String jobName, String jobGroup, Map alarmInfo, boolean baseFlag, Date startDate, Long repeat,
long frequency, String unit) {
if (StringUtils.equals("Y", unit) || StringUtils.equals("M", unit)) {
quartzOperateService.addJob(jobName, JOB_CLASS_NAME, jobGroup, getcronExpression(startDate, frequency),
alarmInfo);
} else {
long repeatTime;
if (repeat != null) {
repeatTime = repeat;
} else {
repeatTime = getTimebyUnit(frequency, unit);
}
int repeatCount = -1;
if (baseFlag || repeatTime == 0) {
repeatTime = 0L;
repeatCount = 0;
}
quartzOperateService.addJob(jobName, JOB_CLASS_NAME, jobGroup, startDate, repeatCount, repeatTime,
alarmInfo);
}
}
protected void addSchedule(PmSchedule instance, Entity entity, ChecklistJob checklistJob) {
int offset = 0;
if (instance.getOffset() != null && instance.getOffset() > 0) {
offset = instance.getOffset().intValue();
}
Timestamp triggerTime = DateUtils.stringToTimestamp(instance.getNextEventTime());
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(triggerTime.getTime());
// triggerTime-offset(Day)
calendar.add(Calendar.DATE, 0 - offset);
long triggerTimeMillis = calendar.getTimeInMillis();
// end by Bright
boolean basePmFlag = false;
if (StringUtils.equalsIgnoreCase(instance.getBasedOnPmFlag(), "1") ||
StringUtils.equalsIgnoreCase(instance.getBasedOnPmFlag(), "Y")) {
basePmFlag = true;
}
String[] id = getScheduleJobIdGroupId(instance, entity);
if (StringUtils.isNotEmpty(instance.getAlarmIdWhenDue())) {
Map<String, Object> alarmInfo = buildAlarmInfo(instance.getSequenceNumber(), instance.getScheduleId(),
instance.getScheduleDescription(),
instance.getAlarmIdWhenDue(), instance.getScheduleId(),
instance.getChecklistRrn(), entity,
LocalContext.getUserRrn(), checklistJob, "NORMAL",
instance.getEquipmentNamedSpace());
alarmInfo.put("jobName", "R" + id[0]);
alarmInfo.put("jobGroup", "R" + id[1]);
addJob(id[0], id[1], alarmInfo, basePmFlag, new Date(triggerTimeMillis), null,
NumberUtils.toLong(instance.getFrequence()), instance.getUnit());
}
if (StringUtils.isNotEmpty(instance.getNotifyAlarmId())) {
Map<String, Object> alarmInfo = buildAlarmInfo(instance.getSequenceNumber(), instance.getScheduleId(),
instance.getScheduleDescription(),
instance.getNotifyAlarmId(), instance.getScheduleId(),
instance.getChecklistRrn(), entity,
LocalContext.getUserRrn(), checklistJob, "NOTIFY",
instance.getEquipmentNamedSpace());
alarmInfo.put("jobName", "R" + id[0]);
alarmInfo.put("jobGroup", "R" + id[1]);
Long notifyTime = null;
if (instance.getNotifyBefore() == null) {
notifyTime = DateUtils.stringToTimestamp(instance.getNextEventTime()).getTime();
} else {
notifyTime = DateUtils.stringToTimestamp(instance.getNextEventTime()).getTime() -
instance.getNotifyBefore() * 1000;
}
addJob("N" + id[0], "N" + id[1], alarmInfo, basePmFlag, new Date(notifyTime), null,
NumberUtils.toLong(instance.getFrequence()), instance.getUnit());
}
if (instance.getRepeatInFrequence() != null && instance.getRepeatInFrequence() > 0 &&
instance.getRepeatInUnit() != null) {
long repeatStartTime = this.getNextTime(triggerTimeMillis, instance.getRepeatInFrequence().intValue(),
instance.getRepeatInUnit());
Map<String, Object> alarmInfo = buildAlarmInfo(instance.getSequenceNumber(), instance.getScheduleId(),
instance.getScheduleDescription(),
instance.getAlarmIdWhenRepeat(), instance.getScheduleId(),
instance.getChecklistRrn(), entity,
LocalContext.getUserRrn(), checklistJob, "REPEAT",
instance.getEquipmentNamedSpace());
alarmInfo.put("jobName", "R" + id[0]);
alarmInfo.put("jobGroup", "R" + id[1]);
addJob("R" + id[0], "R" + id[1], alarmInfo, basePmFlag, new Date(repeatStartTime), null,
instance.getRepeatInFrequence(), instance.getRepeatInUnit());
}
}
protected void deleteSchedule(PmSchedule instance, Entity entity) {
String[] id = getScheduleJobIdGroupId(instance, entity);
if (StringUtils.isNotEmpty(instance.getAlarmIdWhenDue())) {
quartzOperateService.deleteJob(id[0], id[1]);
}
if (StringUtils.isNotEmpty(instance.getNotifyAlarmId())) {
quartzOperateService.deleteJob("N" + id[0], "N" + id[1]);
}
if ((instance.getRepeatInFrequence() != null) && instance.getRepeatInUnit() != null) {
quartzOperateService.deleteJob("R" + id[0], "R" + id[1]);
}
}
protected long getTimebyUnit(long f, String unit) {
long day = 1000L * 60L * 60L * 24;
long week = day * 7L;
long year = day * 365L;
long hour = 1000L * 60L * 60L;
long second = 1000L;
long minute = second * 60L;
long longTime = 0;
if (unit.equalsIgnoreCase("D")) {
longTime = day * f;
} else if (unit.equalsIgnoreCase("W")) {
longTime = week * f;
} else if (unit.equalsIgnoreCase("M")) {
longTime = day * 30L * f;
} else if (unit.equalsIgnoreCase("Y")) {
longTime = year * f;
} else if (unit.equalsIgnoreCase("I")) {
longTime = minute * f;
} else if (unit.equalsIgnoreCase("H")) {
longTime = hour * f;
} else if (unit.equalsIgnoreCase("S")) {
longTime = second * f;
}
return longTime;
}
/**
* @param startTime :开始时间
* @param frequence :间隔
* @param unit :间隔单位Y,M,W,D,H,I,S分别表示年,月,周,日,天,分,秒
* @return : long :startTime+ frequence*unit 得到开始时间在第一次间隔以后的时间
* @author Bright
*/
protected long getNextTime(long startTime, int frequence, String unit) {
long nextTime = startTime;
java.util.Calendar calendar = java.util.Calendar.getInstance();
calendar.setTimeInMillis(startTime);
if (unit.equalsIgnoreCase("Y")) {
calendar.add(java.util.Calendar.YEAR, frequence);
} else if (unit.equalsIgnoreCase("M")) {
calendar.add(java.util.Calendar.MONTH, frequence);
} else if (unit.equalsIgnoreCase("W")) {
calendar.add(java.util.Calendar.WEEK_OF_YEAR, frequence);
} else if (unit.equalsIgnoreCase("D")) {
calendar.add(java.util.Calendar.DATE, frequence);
} else if (unit.equalsIgnoreCase("H")) {
calendar.add(java.util.Calendar.HOUR, frequence);
} else if (unit.equalsIgnoreCase("I")) {
calendar.add(java.util.Calendar.MINUTE, frequence);
} else if (unit.equalsIgnoreCase("S")) {
calendar.add(java.util.Calendar.SECOND, frequence);
}
nextTime = calendar.getTimeInMillis();
return nextTime;
}
protected void deleteRepeatSchedule(PmSchedule instance, Entity entity) {
String[] id = getScheduleJobIdGroupId(instance, entity);
if ((instance.getRepeatInFrequence() != null) && instance.getRepeatInUnit() != null) {
quartzOperateService.deleteJob("R" + id[0], "R" + id[1]);
}
}
protected void addDelayRepeatSchedule(PmSchedule instance, Entity entity) {
String[] id = getScheduleJobIdGroupId(instance, entity);
if (instance.getRepeatInFrequence() != null && instance.getRepeatInUnit() != null) {
long startTime = DateUtils.stringToTimestamp(instance.getActualEventTime()).getTime();
long repeatTime = getTimebyUnit(instance.getRepeatInFrequence(), instance.getRepeatInUnit());
Map<String, Object> alarmInfo = this.buildAlarmInfo(instance.getAlarmIdWhenDue(), instance.getScheduleId(),
instance.getChecklistRrn(), entity,
LocalContext.getUserRrn());
addJob("R" + id[0], "R" + id[1], alarmInfo, false, new Date(repeatTime + startTime), repeatTime,
NumberUtils.toLong(instance.getFrequence()), instance.getUnit());
}
}
protected String[] getScheduleJobIdGroupId(PmSchedule pm, Entity entity) {
String[] id = new String[2];
id[0] = entity.getInstanceRrn() + entity.getInstanceId() + pm.getSequenceNumber();
id[1] = "DEFAULT";
return id;
}
protected void process(NamedObject instance) {
String action = instance.getTransId();
if (action.equals(Constants.CREATE_KEY)) {
long instanceRrn = 0;
if (instance instanceof EntityGroup) {
instanceRrn = emsService.insertEntityGroup((EntityGroup) instance);
} else if (instance instanceof Equipment) {
instanceRrn = emsService.insertEquipment((Equipment) instance);
} else if (instance instanceof Checklist) {
instanceRrn = emsService.insertChecklist((Checklist) instance);
}
instance.setInstanceRrn(instanceRrn);
} else if (action.equals(Constants.DELETE_KEY)) {
if (instance instanceof EntityGroup) {
emsService.deleteEntityGroup((EntityGroup) instance);
} else if (instance instanceof Equipment) {
emsService.deleteEquipment((Equipment) instance);
} else if (instance instanceof Checklist) {
emsService.deleteChecklist((Checklist) instance);
}
} else if (action.equals(Constants.MODIFY_KEY)) {
if (instance instanceof EntityGroup) {
emsService.updateEntityGroup((EntityGroup) instance);
} else if (instance instanceof Equipment) {
emsService.updateEquipment((Equipment) instance);
} else if (instance instanceof Checklist) {
emsService.updateChecklist((Checklist) instance);
}
} else if (action.equals(Constants.CLEAR_KEY)) {
}
}
@Override
protected void doCopy(RootForm theform, NamedObject instance) {
String origId = theform.getInstanceId();
instance = getInstance(instance);
// populate the new information thru the new instance id
PropertyUtils.copyProperties(theform, instance);
// and restore the original Id
theform.setInstanceId(origId);
}
@Override
protected NamedObject getInstance(NamedObject instance) {
// temp object to store the value object retrived from database
NamedObject namedObject = null;
if (instance instanceof EntityGroup) {
namedObject = emsService.getEntityGroup((EntityGroup) instance);
} else if (instance instanceof Entity) {
namedObject = emsService.getEntity((Entity) instance);
} else if (instance instanceof Checklist) {
namedObject = emsService.getChecklist((Checklist) instance);
}
return namedObject;
}
protected void handleLotsByEqptDown(Entity entity, ReferenceFileDetail eqptHoldInfo,
List<ReferenceFileDetail> eqptHoldInfos) {
List<Map> lotsInEqpGroup = getWaitingLotsByEqpt(entity);
for (Map lotMapInfo : lotsInEqpGroup) {
long lotRrn = MapUtils.getLongValue(lotMapInfo, "lotRrn");
Lot currentLot = lotQueryService.getLot(lotRrn);
// constrain过滤
Equipment equipment = new Equipment();
equipment.setInstanceRrn(entity.getInstanceRrn());
ErrorMsg errorMsg = constrainService.checkLotConstrain(equipment, currentLot);
if (!errorMsg.getError()) {
lotService.handleLotByEqptDown(errorMsg.getEqpIds(), currentLot, eqptHoldInfo, eqptHoldInfos);
}
}
}
protected List<Map> getWaitingLotsByEqpt(Entity entity) {
String entityRrnStr = entity.getInstanceRrn() + "";
Map criterion = new HashMap(10);
if (null != LotStatus.WAITING) {
criterion.put(LOT_STATUS, new ArrayList(Arrays.asList(StringUtils.split(LotStatus.WAITING, ","))));
}
criterion.put("dummyFlag", null);
criterion.put("PAGESIZE", new Integer(500));
criterion.put("jobGridFlag", new Boolean(false));
criterion.put("objectType", "ENTITY");
criterion.put("objectRrn", entityRrnStr);
List<Map> lots = lotQueryService.getLotList4ExtAtEqpt(criterion);
return lots;
}
protected String connectMesSystem(Map objectInfo, long facilityRrn, String user) {
// todo 接口相关的待完成
return null;
}
protected void addRepeatSchedule(PmSchedule instance, Entity entity) {
String[] id = getScheduleJobIdGroupId(instance, entity);
// repeat alarm create
if (instance.getRepeatInFrequence() != null && instance.getRepeatInUnit() != null) {
long startTime = DateUtils.stringToTimestamp(instance.getNextEventTime()).getTime();
long repeatTime = getTimebyUnit(instance.getRepeatInFrequence(), instance.getRepeatInUnit());
Map<String, Object> alarmInfo = this.buildAlarmInfo(instance.getAlarmIdWhenDue(), instance.getScheduleId(),
instance.getChecklistRrn(), entity,
LocalContext.getUserRrn());
addJob("R" + id[0], "R" + id[1], alarmInfo, false, new Date(repeatTime + startTime), repeatTime,
NumberUtils.toLong(instance.getFrequence()), instance.getUnit());
}
}
protected ChecklistJob getChecklistJob(DoChecklistInfoForm theform) {
ChecklistJob checklistJob = new ChecklistJob();
checklistJob.setChecklistJobRrn(theform.getChecklistJobRrn());
checklistJob = emsService.getChecklistJob(checklistJob);
checklistJob.setTriggerPerformedBy(LocalContext.getUserId());
checklistJob.setTriggerTimestamp(new Timestamp(System.currentTimeMillis()));
return checklistJob;
}
protected ChecklistJobData getChecklistItemAndSetSequence(ChecklistJob instance, HttpServletRequest request) {
List<ChecklistJobData> checklistJobDatas = (List<ChecklistJobData>) instance.getChecklistJobDatas();
int seq = WebUtils.getParameterInt(Constants.SEQUENCENUMBER_KEY, request);
request.setAttribute(Constants.SEQUENCENUMBER_KEY, seq);
request.setAttribute(NEXT_SEQ, seq + 1);
for (ChecklistJobData checklistJobData : checklistJobDatas) {
if (checklistJobData.getChecklistItemSequence() == seq) {// if (checklistJobData.getRecordIndex() == Seq) {
checklistJobData.setChecklistItemSequence(seq);
checklistJobData.setOperatorRrn(LocalContext.getUserRrn());
checklistJobData.setChecklistJobRrn(instance.getChecklistJobRrn());
request.setAttribute(SessionNames.CHECKLISTJOBDATA_KEY, checklistJobData);
return checklistJobData;
}
}
return null;
}
protected List<BORResource> getBorResources(ChecklistJobData checklistJobData) {
if (checklistJobData.getConsumedTransRrn() == null) {
return prpService.getActiveBorResources(checklistJobData.getBorRrn());
} else {
List<Map<String, Object>> data = asmService.getLotInventoryTransHistory(
checklistJobData.getConsumedTransRrn());
return concatCollection(prpService.getActiveBorResources(checklistJobData.getBorRrn()), data);
}
}
protected void doChecklistItem(ChecklistJobData instance) {
instance.setCompletedTimestamp(new Timestamp(System.currentTimeMillis()).toString());
emsService.updateChecklistJobData(instance);
}
protected long inCreaseBorResource(List<BORResource> borResources, Long checklistJobRrn,
HttpServletRequest request) {
String[] consumedQty = request.getParameterValues("consumedQty");
String[] remarks = request.getParameterValues("remarks");
List<Map<String, Object>> items = new ArrayList<>();
int i = 0;
for (BORResource item : borResources) {
if (item.getResourceType() != null && item.getResourceType().equalsIgnoreCase(ObjectList.PRODUCT_KEY)) {
Map<String, Object> info = new HashMap<>();
info.put("itemRrn", item.getResourceRrn());
info.put("consumedQty", new Double(consumedQty[i]));
info.put("comments", remarks[i]);
info.put("sequenceNumber", item.getSequenceNumber());
items.add(info);
}
i++;
}
return warehouseService.consumeItemQty(items, LocalContext.getUserId(), LocalContext.getFacilityRrn(),
checklistJobRrn);
}
protected Map getPmDetailString(Map pmScheduleInfo) {
Map<String, Object> pmsInfo = new HashMap<>();
if (pmScheduleInfo != null) {
Set s = pmScheduleInfo.keySet();
for (Object o : s) {
// if(theform instanceof EntityPmScheduleMonthForm) {
// EntityPmScheduleMonthForm form = (EntityPmScheduleMonthForm)theform;
String key = (String) o;
List list = (List) pmScheduleInfo.get(key);
StringBuilder buf = new StringBuilder();
for (Iterator ite = list.iterator(); ite.hasNext(); ) {
PmSchedule pms = (PmSchedule) ite.next();
String desc = StringUtils.isEmpty(
pms.getChecklistDescription()) ? "" : pms.getChecklistDescription();
buf.append("<span class=\"myview\"><a href=\"javascript:doDetail('").append(pms.getChecklistRrn())
.append("','").append(pms.getEntityRrn()).append("','").append(pms.getSequenceNumber())
.append("')\" title=\"").append(desc).append("\">").append(pms.getChecklistId())
.append("</a></span>");
if (ite.hasNext()) {
buf.append("<br>");
}
}
pmsInfo.put(key, buf.toString());
// }
}
}
return pmsInfo;
}
}