LogEventSaveAction.java
/*
* @ Copyright 2001 FA Software;
* All right reserved. No part of this program may be reproduced or
* transmitted in any form or by any means, electronic or
* mechanical, including photocopying, recording, or by any
* information storage or retrieval system without written
* permission from FA Software, except for inclusion of brief
* quotations in a review.
*/
package com.mycim.webapp.actions.logevent;
import com.fa.sesa.exception.Assert;
import com.fa.sesa.exception.Errors;
import com.fa.sesa.exception.SystemIllegalArgumentException;
import com.fa.sesa.i18n.I18nUtils;
import com.fa.sesa.threadlocal.LocalContext;
import com.fasterxml.jackson.databind.ObjectMapper;
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.framework.utils.lang.time.DateUtils;
import com.mycim.valueobject.MessageIdList;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.SystemConstant;
import com.mycim.valueobject.alm.EenAction;
import com.mycim.valueobject.alm.EenMessage;
import com.mycim.valueobject.alm.EmailMessage;
import com.mycim.valueobject.bas.NamedObject;
import com.mycim.valueobject.consts.*;
import com.mycim.valueobject.ems.*;
import com.mycim.valueobject.prp.ContextValue;
import com.mycim.valueobject.security.User;
import com.mycim.valueobject.sys.ReferenceFileDetail;
import com.mycim.webapp.Constants;
import com.mycim.webapp.WebUtils;
import com.mycim.webapp.actions.EmsSetupAction;
import com.mycim.webapp.forms.LogEventInfoForm;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* 设备状态更改/光罩状态更改
*
* @author weike.li
* @date 2019/8/26
* @since 1.8
**/
public class LogEventSaveAction extends EmsSetupAction {
private static final String MAIN_EQPT = "MAINEQPT";
private static final String TRANSACTION = "transaction";
private static final String TRUE_YES_LOWER = "yes";
private static final String HOLD_NEW = "holdnew";
private static final String MAINT_TO_QC = "DD.MAINT_TO_QC";
private static final String OT = "O/T";
private static final String INITIALIZE = "initialize";
private static final String REGULAR_PROD = "REGULAR PROD";
private static final String END_PROD = "END PROD";
private static final String NUMBER_1 = "1";
private static final String NUMBER_2 = "2";
private static final String NUMBER_4 = "4";
private static final String RUN = "RUN";
private static final String L_T = "L/T";
@Override
public ActionForward init(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
if (WebUtils.getParameterBoolean("reticleStatusEventFlag", request)) {
return mapping.findForward("logreticleevent");
}
long userRrn = LocalContext.getUserRrn();
Long facilityRrn = LocalContext.getFacilityRrn();
request.setAttribute("userrrn", userRrn);
LogEventInfoForm theform = (LogEventInfoForm) form;
theform.setEntityId(StringUtils.trim(theform.getEntityId()));
theform.setEventId(StringUtils.trim(theform.getEventId()));
String entityId = StringUtils.trimToUpperCase(theform.getEntityId());
String eventId = StringUtils.trimToUpperCase(theform.getEventId());
String reticleFlag = request.getParameter("reticleFlag");
long entityRrn = 0;
String status = StringUtils.EMPTY;
if ("Y".equals(reticleFlag)) {
Assert.isFalse(
StringUtils.isBlank(entityId) || StringUtils.isEmpty(entityId) || StringUtils.isBlank(eventId) ||
StringUtils.isEmpty(eventId),
Errors.create().content("Entity ID and event ID cannot be empty!").build());
} else {
if (StringUtils.isBlank(entityId) || StringUtils.isEmpty(entityId)) {
return mapping.findForward("logeqptevent");
}
}
entityRrn = getInstanceRrn(entityId, getNamedSpace(ObjectList.ENTITY_KEY, facilityRrn), ObjectList.ENTITY_KEY);
if (entityRrn == 0) {
Assert.isFalse("Y".equals(reticleFlag),
Errors.create().key(MessageIdList.RETICLE_ID_NOEXIST).content("Reticle Id does not exist!")
.build());
Assert.isTrue("Y".equals(reticleFlag),
Errors.create().key(MessageIdList.EQUIPMENT_ID_NOT_EXIST).content("EQP ID is not exist!")
.build());
}
List<EntityStatus> statusList = emsService.getEntityStatuss(entityRrn);
for (EntityStatus statues : statusList) {
status = statues.getCurrentStatus();
}
request.setAttribute("lotevent_eqptStatus", status);
List<Entity> chamberList = emsService.getChildChamberEquip(entityRrn);
if (chamberList != null && chamberList.size() > 0) {
for (int i = 0; i < chamberList.size(); i++) {
Entity chamberEntity = chamberList.get(i);
chamberEntity.setCurrentStatus(emsService.getEntityCurrentStatus(chamberEntity.getInstanceRrn()));
request.setAttribute("chamberList", chamberList);
}
}
//是否是从派工界面进入
if (WebUtils.getParameterBoolean("eqptPageFlag", request)) {
request.setAttribute("eqptPageFlag", true);
}
//先查询机况
if ((request.getParameter("qryEvents") != null && !StringUtils.EMPTY.equals(request.getParameter("qryEvents")))
|| request.getAttribute("refresh") != null) {
request.setAttribute("entityId", entityId);
Entity entity = StringUtils.isNotBlank(entityId) ? new Entity(entityId, getNamedSpace(ObjectList.ENTITY_KEY,
facilityRrn),
ObjectList.ENTITY_KEY) : null;
request.setAttribute(SessionNames.ENTITY_KEY, entity);
theform.setAvailabilityHidden("");
theform.setValidAvailabilityHidden("");
theform.setTargetAvailabilityHidden("");
theform.setStatusEndTime("");
theform.setIsChangeChild("");
return mapping.findForward(Constants.MODIFY_KEY);
}
Event event = new Event();
Entity entity = new Entity();
String oldEntityId = StringUtils.trim(request.getParameter("entityId"));
request.setAttribute("entityId", oldEntityId);
entity = emsService.getEntity(new Entity(entityRrn));
boolean logRights;
String objectType = entity.getObjectType();
Assert.isFalse(StringUtils.isBlank(entityId) || StringUtils.isBlank(eventId),
Errors.create().content("Entity ID and " + "event ID" + " cannot " + "be empty!").build());
if (StringUtils.equals(reticleFlag, "Y")) {
Assert.isTrue(StringUtils.equals(objectType, ObjectList.RETICLE_KEY),
Errors.create().key(MessageIdList.RETICLE_ID_MISSING).content("Reticle Id is not " + "found!")
.build());
Assert.isFalse(
StringUtils.equalsIgnoreCase("INIT", status) && StringUtils.equalsIgnoreCase("INIT_RTL", eventId),
Errors.create().key(MessageIdList.RETICLE_HAS_BEEN_INIT).content("光罩{}已经Init!不能重复init")
.args(entityId).build());
String maskSize = entity.getMaskSize();
if (StringUtils.equalsIgnoreCase("9", maskSize)) {
if (StringUtils.equalsIgnoreCase("RTL.WAIT_PD", eventId)) {
theform.setComment("请直接做maskclean.");
}
if (StringUtils.equalsIgnoreCase("RTL.WAIT_PD_TO_IN_PD", eventId)) {
theform.setComment("正在做maskclean.");
}
}
//因为quartz能把6寸光罩切换为WAIT_PD但是手动不行
// 所以暂时把6寸光罩的卡控暂时去掉
// if (StringUtils.equalsIgnoreCase("6", maskSize)) {
// if (StringUtils.equalsIgnoreCase("RTL.WAIT_PD", eventId)) {
// throw new WebException(I18nUtils.getMessage("reticle
// .six_size_cannot_wait_pd",
// "Reticle size is 6,
// cannot
// Wait Pd by "
// + "handle.",
// entityId));
// }
// }
logRights = emsService.checkLogRights(entityId, eventId, userRrn, "RTL");
request.setAttribute("reticleFlag", "Y");
} else {
Assert.isTrue(StringUtils.equals(objectType, MAIN_EQPT),
Errors.create().key(MessageIdList.EQUIPMENT_MISSING_ID).content("设备号为空或不存在").build());
// 主设备如果当前状态是RUN,在查询设备上的所有批次
if (StringUtils.equalsIgnoreCase(status, RUN)) {
String lotIds = getLotByRunEqpt(entity.getInstanceId(), facilityRrn);
request.setAttribute("lotIds", lotIds);
}
logRights = emsService.checkLogRights(entityId, eventId, userRrn, "MAINEQPT");
if (WebUtils.getParameter("nav", request) == null) {
logRights = true;
}
}
Assert.isTrue(logRights, Errors.create().key(MessageIdList.EQUIPMENT_NOT_AUTHORIZED_LOG_EVENT)
.content("你无权登录该事件或设备状态与该事件不符").build());
event = new Event(eventId, getNamedSpace(ObjectList.EVENT_KEY, facilityRrn), ObjectList.EVENT_KEY);
//PM Check
if (eventId.contains(SystemConstant.Str.OTHER_TO_PM) || eventId.startsWith(SystemConstant.Str.PM_TO_OTHER)){
request.setAttribute("refresh", "true");
theform.setEventId(StringUtils.EMPTY);
throw new SystemIllegalArgumentException(Errors.create().key(MessageIdList.PM_CANNOT_DO_IN_HERE)
.content("Please go to the PMS Portal to operate the PM related status switch!").build());
}
request.setAttribute("NEXT_KEY", "next");
theform.setEntityId(entityId);
entity = emsService.getEntity(new Entity(entityRrn));
getInstance(entity);
entity.setInstanceRrn(entityRrn);
event.setEntityType(entity.getObjectType());
event = baseService.getEvent(event);
request.setAttribute(SessionNames.ENTITY_KEY, entity);
theform.setEntityId(entity.getInstanceId());
theform.setEntityNamedSpace(entity.getNamedSpace());
theform.setEntityDesc(entity.getInstanceDesc());
theform.setAvailability(entity.getAvailability());
theform.setAvailabilityHidden(sysService.referenceDetailExchangeNull("$$TARGET_AVAILABILITY",
entity.getAvailability(), "data_1_value"));
if (request.getParameter(Constants.NEXT_KEY) != null) {
List<NamedObject> validEvents = getValidEvents(entity);
request.setAttribute(SessionNames.OPTIONS_KEY, validEvents);
boolean checked = false;
for (NamedObject validEvent : validEvents) {
if (validEvent.getInstanceRrn() == event.getInstanceRrn()) {
checked = true;
break;
}
}
Assert.isTrue(checked,
Errors.create().key(MessageIdList.EQUIPMENT_MISSING_EVENT).content("设备缺少相应的事件").build());
theform.setTransId(Constants.MODIFY_KEY);
}
List<EventModel> eventStatus = baseService.getEventModels(event.getInstanceRrn(), entity.getInstanceRrn());
event.setEventModels(eventStatus);
List<Map<String, Object>> cascadingEvent = baseService
.getCascadingEvent(entity.getInstanceRrn(), event.getInstanceRrn());
if (cascadingEvent != null && cascadingEvent.size() > 0) {
request.setAttribute("cascadingEvent", cascadingEvent);
} else {
request.removeAttribute("cascadingEvent");
}
List<PrincipalSupportingEvent> principalEvent = baseService
.getPrincipalSupportingEvents(entity.getInstanceRrn(), event.getInstanceRrn());
if (principalEvent != null && principalEvent.size() > 0) {
request.setAttribute("principalEvent", principalEvent);
} else {
request.removeAttribute("principalEvent");
}
theform.setTargetAvailability(event.getTargetAvailability());
request.setAttribute(SessionNames.EVENT_KEY, event);
theform.setEventNamedSpace(event.getNamedSpace());
theform.setEventId(event.getInstanceId());
theform.setEventRrn(event.getInstanceRrn());
theform.setEventDesc(event.getInstanceDesc());
theform.setIsChangeChild(event.getIsChangeChild());
theform.setStatusEndTime(DateUtils.formatDate(new Date(), "yyyy/MM/dd HH:mm:ss"));
theform.setValidAvailability(event.getValidAvailability());
theform.setValidAvailabilityHidden(sysService.referenceDetailExchangeNull("$$VALID_AVAILABILITY",
event.getValidAvailability(),
"data_1_value"));
theform.setTargetAvailabilityHidden(
(event.getTargetAvailability() == null) ? "0" : event.getTargetAvailability());
/* if (NUMBER_2.equalsIgnoreCase(theform.getTargetAvailabilityHidden())) {
theform.setTargetAvailabilityHidden(theform.getAvailabilityHidden());
} else {*/
theform.setTargetAvailabilityHidden(sysService.referenceDetailExchangeNull("$$TARGET_AVAILABILITY",
theform.getTargetAvailabilityHidden(),
"data_1_value"));
//}
request.setAttribute("entityType", request.getParameter("entityType"));
return mapping.findForward(Constants.MODIFY_KEY);
}
public ActionForward eqptCancel(ActionMapping mapping, LogEventInfoForm theform, HttpServletRequest request,
HttpServletResponse response) throws Exception {
//是否是从派工界面进入
if (WebUtils.getParameterBoolean("eqptPageFlag", request)) {
request.setAttribute("eqptPageFlag", true);
response.sendRedirect(
request.getContextPath() + "/eqptlogeventsave.do?showLogEvent=Y&dispatch=Y&entityId=" +
theform.getEntityId() + "&nav=true&eqptPageFlag=true&qryEvents=true");
} else {
theform.setEntityId("");
}
return mapping.findForward("logeqptevent");
}
public String getReticleLogEvent(Map<String, Object> params) throws Exception {
Map<String, Object> map = new HashMap();
String entityId = MapUtils.getString(params, "entityId");
String eventId = MapUtils.getString(params, "eventId");
String reticleFlag = MapUtils.getString(params, "reticleFlag");
long userRrn = LocalContext.getUserRrn();
Long facilityRrn = LocalContext.getFacilityRrn();
LogEventInfoForm theform = new LogEventInfoForm();
theform.setEntityId(entityId);
theform.setEventId(eventId);
long entityRrn = 0;
String status = StringUtils.EMPTY;
entityRrn = getInstanceRrn(entityId, getNamedSpace(ObjectList.ENTITY_KEY, facilityRrn), ObjectList.ENTITY_KEY);
if (entityRrn == 0) {
Assert.isFalse("Y".equals(reticleFlag),
Errors.create().key(MessageIdList.RETICLE_ID_NOEXIST).content("Reticle Id does not exist!")
.build());
Assert.isTrue("Y".equals(reticleFlag),
Errors.create().key(MessageIdList.EQUIPMENT_ID_NOT_EXIST).content("EQP ID is not exist!")
.build());
}
List<EntityStatus> statusList = emsService.getEntityStatuss(entityRrn);
for (EntityStatus statues : statusList) {
status = statues.getCurrentStatus();
}
List<Entity> chamberList = emsService.getChildChamberEquip(entityRrn);
Event event = new Event();
Entity entity = new Entity();
String oldEntityId = StringUtils.trim(entityId);
entity = emsService.getEntity(new Entity(entityRrn));
boolean logRights;
String objectType = entity.getObjectType();
Assert.isFalse(StringUtils.isBlank(entityId) || StringUtils.isBlank(eventId),
Errors.create().content("Entity ID and " + "event ID" + " cannot " + "be empty!").build());
if (StringUtils.equals(reticleFlag, "Y")) {
Assert.isTrue(StringUtils.equals(objectType, ObjectList.RETICLE_KEY),
Errors.create().key(MessageIdList.RETICLE_ID_MISSING).content("Reticle Id is not " + "found!")
.build());
Assert.isFalse(
StringUtils.equalsIgnoreCase("INIT", status) && StringUtils.equalsIgnoreCase("INIT_RTL", eventId),
Errors.create().key(MessageIdList.RETICLE_HAS_BEEN_INIT).content("光罩{}已经Init!不能重复init")
.args(entityId).build());
String maskSize = entity.getMaskSize();
if (StringUtils.equalsIgnoreCase("9", maskSize)) {
if (StringUtils.equalsIgnoreCase("RTL.WAIT_PD", eventId)) {
theform.setComment("请直接做maskclean.");
}
if (StringUtils.equalsIgnoreCase("RTL.WAIT_PD_TO_IN_PD", eventId)) {
theform.setComment("正在做maskclean.");
}
}
logRights = emsService.checkLogRights(entityId, eventId, userRrn, "RTL");
}
event = new Event(eventId, getNamedSpace(ObjectList.EVENT_KEY, facilityRrn), ObjectList.EVENT_KEY);
theform.setEntityId(entityId);
entity = emsService.getEntity(new Entity(entityRrn));
getInstance(entity);
entity.setInstanceRrn(entityRrn);
event.setEntityType(entity.getObjectType());
event = baseService.getEvent(event);
theform.setEntityId(entity.getInstanceId());
theform.setEntityNamedSpace(entity.getNamedSpace());
theform.setEntityDesc(entity.getInstanceDesc());
theform.setAvailability(entity.getAvailability());
theform.setAvailabilityHidden(sysService.referenceDetailExchangeNull("$$TARGET_AVAILABILITY",
entity.getAvailability(), "data_1_value"));
List<EventModel> eventStatus = baseService.getEventModels(event.getInstanceRrn(), entity.getInstanceRrn());
event.setEventModels(eventStatus);
List<Map<String, Object>> cascadingEvent = baseService
.getCascadingEvent(entity.getInstanceRrn(), event.getInstanceRrn());
List<PrincipalSupportingEvent> principalEvent = baseService
.getPrincipalSupportingEvents(entity.getInstanceRrn(), event.getInstanceRrn());
theform.setTargetAvailability(event.getTargetAvailability());
theform.setEventNamedSpace(event.getNamedSpace());
theform.setEventId(event.getInstanceId());
theform.setEventRrn(event.getInstanceRrn());
theform.setEventDesc(event.getInstanceDesc());
theform.setIsChangeChild(event.getIsChangeChild());
theform.setStatusEndTime(DateUtils.formatDate(new Date(), "yyyy/MM/dd HH:mm:ss"));
theform.setValidAvailability(event.getValidAvailability());
theform.setValidAvailabilityHidden(sysService.referenceDetailExchangeNull("$$VALID_AVAILABILITY",
event.getValidAvailability(),
"data_1_value"));
theform.setTargetAvailabilityHidden(
(event.getTargetAvailability() == null) ? "0" : event.getTargetAvailability());
theform.setTargetAvailabilityHidden(sysService.referenceDetailExchangeNull("$$TARGET_AVAILABILITY",
theform.getTargetAvailabilityHidden(),
"data_1_value"));
map.put("availability", theform.getAvailabilityHidden());
map.put("validAvailability", theform.getValidAvailabilityHidden());
map.put("targetAvailability", theform.getTargetAvailabilityHidden());
map.put("statusEndTime", theform.getStatusEndTime());
map.put("changeSubEQP", theform.getIsChangeChild());
map.put("comments", theform.getComment());
EventModel eventModel = eventStatus.get(0);
map.put("statusGrpID", eventModel.getStatusGroupId());
map.put("currentStatus", eventModel.getCurrentStatus());
map.put("validStatus", eventModel.getValidStatus());
map.put("targetStatus", eventModel.getTargetStatus());
ObjectMapper mapper = new ObjectMapper();
String s = mapper.writeValueAsString(map);
return s;
}
public ActionForward eqptModify(ActionMapping mapping, LogEventInfoForm theform,
HttpServletRequest request) throws Exception {
String user = LocalContext.getUserId();
Long facility = LocalContext.getFacilityRrn();
Long userRrn = LocalContext.getUserRrn();
String namedSpace = baseService.getNamedSpace(facility, ObjectList.ENTITY_KEY);
// chamber设备id,通过逗号分隔
String chamberIdsStr = WebUtils.getParameter("chamberIdList", request);
String[] chamberIdArray = new String[]{};
// 修改成功的chamber设备集合
List<Entity> successChamberList = new ArrayList();
// 修改成功的chamber设备对应的event事件集合
List<Event> successChamberEventList = new ArrayList();
if (StringUtils.isNotBlank(chamberIdsStr)) {
chamberIdArray = chamberIdsStr.split(",");
}
//是否是从派工界面进入
if (WebUtils.getParameterBoolean("eqptPageFlag", request)) {
request.setAttribute("eqptPageFlag", true);
}
NamedObject entityObject = baseService
.getNamedObject(new NamedObject(theform.getEntityId(), namedSpace, ObjectList.ENTITY_KEY));
Entity entity = emsService.getEntity(new Entity(entityObject.getInstanceRrn()));
request.setAttribute("entityId", entity.getInstanceId());
if (StringUtils.isEmpty(entityObject.getInstanceDesc())) {
request.setAttribute("entityDesc", "");
} else {
request.setAttribute("entityDesc", entityObject.getInstanceDesc());
}
Assert.isFalse(entity == null ||
!StringUtils.equals(entity.getInstanceId(), theform.getEntityId().trim().toUpperCase()),
Errors.create().key(MessageIdList.EQUIPMENT_ENTER_THE_EQP_ID)
.content("Please enter or confirm the current EQP id!").build());
String eventNamedSpace = baseService.getNamedSpace(facility, ObjectList.EVENT_KEY);
Event oldEvent = new Event(theform.getEventId(), eventNamedSpace, ObjectList.EVENT_KEY);
oldEvent.setEntityType(entityObject.getObjectType());
Event event = baseService.getEvent(oldEvent);
Assert.isFalse(event == null,
Errors.create().key(MessageIdList.EQUIPMENT_SELECT_TARGET_STATUS).content("请选择目标状态!").build());
String validateStatusEndTimeFlag = request.getParameter("validateStatusEndTimeFlag");
if (TRUE_YES_LOWER.equals(validateStatusEndTimeFlag)) {
Long statusEndTimeLong = null;
statusEndTimeLong = new SimpleDateFormat(DateUtils.DATE_FORMAT).parse(theform.getStatusEndTime()).getTime();
Assert.isFalse(statusEndTimeLong > System.currentTimeMillis(),
Errors.create().key(MessageIdList.EQUIPMENT_END_TIME_GREATER_CURRENT).content("请选择目标状态!")
.build());
}
if (StringUtils.equalsIgnoreCase(entity.getObjectType(), MAIN_EQPT)) {
Assert.isTrue(emsService.checkUserAndEqptStationJurisdiction(user, entity.getInstanceId(), facility),
Errors.create().key(MessageIdList.EQUIPMENT_NO_PERMISSION_MODIFY_EQP).content("没有修改设备的权限!")
.build());
/*
String msg = pmsService.pmsCheck(entity, Constants.PM_CHECK_TYPE.WAIT_ENT4DEADLINE);
if (StringUtils.isNotEmpty(msg)) {
throw new WebException(msg);
}
*/
// 主设备有RUN切换到其它状态需要提示
}
// ocap check
// wipQueryService.checkActiveOfflineOcapId(entity.getInstanceRrn());
Assert.state(wipQueryService.checkActiveOfflineOcapId(entity.getInstanceRrn(), event.getInstanceId()),
Errors.create().content("Eqp has active ocapId.only change {}")
.args(Arrays.asList(EventName.AVAILABLE_EQP_LOG_EVENT_BY_OFFLINE).toString()).build());
if (request.getParameter(HOLD_NEW) != null) {
theform.setComment("NEW-->HOLD");
theform.setEntityId(entity.getInstanceId());
theform.setEventId(event.getInstanceId());
theform.setTransId("modify");
}
List<EntityStatus> entityStatuss = new ArrayList();
// 事件模型,选中的设备状态更改信息
List<EventModel> eventModels = baseService.getEventModels(event.getInstanceRrn(), entity.getInstanceRrn());
if (request.getParameter(Constants.MEMBERS_KEY) != null) {
entity = (Entity) request.getAttribute(SessionNames.ENTITY_KEY);
Collection validEvents = (Collection) request.getAttribute(SessionNames.OPTIONS_KEY);
if ((entity == null) || (validEvents == null)) {
return mapping.findForward(Constants.LOGIN_KEY);
}
long eventRrn = theform.getEventRrn();
Event tempEvent = new Event();
tempEvent.setInstanceRrn(eventRrn);
tempEvent.setEntityType(entity.getObjectType());
tempEvent = (Event) getInstance(tempEvent);
tempEvent.setEventModels(baseService.getEventModels(eventRrn, entity.getInstanceRrn()));
request.setAttribute(SessionNames.EVENT_KEY, tempEvent);
theform.setEventNamedSpace(tempEvent.getNamedSpace());
theform.setEventDesc(tempEvent.getInstanceDesc());
theform.setValidAvailability(tempEvent.getValidAvailability());
theform.setValidAvailabilityHidden(sysService.referenceDetailExchangeNull("$$VALID_AVAILABILITY",
tempEvent.getValidAvailability(),
"data_1_value"));
theform.setTargetAvailabilityHidden(
(tempEvent.getTargetAvailability() == null) ? "0" : tempEvent.getTargetAvailability());
tempEvent.setTargetAvailability(theform.getTargetAvailabilityHidden());
if (NUMBER_2.equalsIgnoreCase(theform.getTargetAvailabilityHidden())) {
theform.setTargetAvailabilityHidden(theform.getValidAvailability());
} else {
theform.setTargetAvailabilityHidden(sysService.referenceDetailExchangeNull("$$TARGET_AVAILABILITY",
tempEvent
.getTargetAvailability(),
"data_1_value"));
}
return mapping.findForward(Constants.MODIFY_KEY);
} else {
String comment = theform.getComment();
String comment1 = theform.getComment1();
String comment2 = theform.getComment2();
String eventId = theform.getEventId();
if (MAINT_TO_QC.equals(eventId)) {
Assert.isFalse("".equalsIgnoreCase(comment) || comment == null || "".equalsIgnoreCase(comment1) ||
comment1 == null || "".equalsIgnoreCase(comment2) || comment2 == null,
Errors.create().key(MessageIdList.EQUIPMENT_DISPOSAL_MEASURES_MUST_BE_ENTERED)
.content("维修人员,故障现象,处置措施 必须填写!").build());
}
boolean otFlag = !OT.equalsIgnoreCase(eventId);
Assert.isFalse(
("".equalsIgnoreCase(comment) || comment == null) && otFlag && (!L_T.equalsIgnoreCase(eventId)),
Errors.create().key(MessageIdList.EQUIPMENT_MISSING_COMMENT).content("备注不能为空").build());
if (StringUtils.equalsIgnoreCase(StringUtils.trim(eventId), INITIALIZE) ||
StringUtils.indexOf(eventId, "INIT") != -1) {
long transRrn = 0;
Map map = new HashMap(10);
map.put("comments", comment);
map.put("comments1", comment1);
map.put("comments2", comment2);
transRrn = emsService.initializeEntityStatus(new Long(entity.getInstanceRrn()), entity.getObjectType(),
new Long(event.getInstanceRrn()), user, map);
// 更改选中的腔体设备TO_INIT
if (StringUtils.isNotBlank(chamberIdsStr)) {
for (int i = 0; i < chamberIdArray.length; i++) {
String chamberId = chamberIdArray[i];
if (!emsService.checkUserAndEqptStationJurisdiction(user, chamberId, facility)) {
Assert.isFalse(
StringUtils.equalsIgnoreCase("CN", I18nUtils.getCurrentLanguage().toString()),
Errors.create().content("没有修改设备 {} 的权限<br>").args(chamberId).build());
throw new SystemIllegalArgumentException(
Errors.create().content("No permission to modify the " + "{}!<br>").args(chamberId)
.build());
}
Long chamberRrn = this
.getInstanceRrn(chamberId, baseService.getNamedSpace(facility, ObjectList.ENTITY_KEY),
ObjectList.ENTITY_KEY, "MAINEQPT");
Entity object = new Entity();
object.setInstanceRrn(chamberRrn);
Entity chamberEntity = emsService.getEntity(object);
emsService.initializeEntityStatus(new Long(chamberEntity.getInstanceRrn()),
chamberEntity.getObjectType(),
new Long(event.getInstanceRrn()), user, map);
}
}
if (TRANSACTION.equals(theform.getTransId())) {
HashMap parameters = (HashMap) request.getAttribute(SessionNames.PARAMETERSINFO_KEY);
Assert.isFalse(parameters == null,
Errors.create().key(MessageIdList.EQUIPMENT_MISSING_PARAMETER).content("缺少参数")
.build());
parameters.put(SessionNames.RUNSTEP_FLAG, "0");
return mapping.findForward("workflow");
} else {
request.removeAttribute("NEXT_KEY");
request.setAttribute("successFlag", true);
request.setAttribute("entityId", theform.getEntityId());
return mapping.findForward(Constants.MODIFY_KEY);
}
}
int i = 0;
for (EventModel instance : eventModels) {
EntityStatus entityStatus = new EntityStatus();
entityStatus.setStatusGroupId(instance.getStatusGroupId());
if (request.getParameter("holdnew") != null) {
entityStatus.setCurrentStatus(StringUtils.upperCase(Constants.HOLD_KEY));
} else {
entityStatus.setCurrentStatus(theform.getTargetStatus()[i++]);
}
entityStatus.setStatusBefore(instance.getCurrentStatus());
entityStatus.setEntityRrn(entity.getInstanceRrn());
entityStatuss.add(entityStatus);
}
Assert.isFalse(entityStatuss.size() < 1,
Errors.create().key(MessageIdList.EQUIPMENT_MISSING_EVENT_MODEL).content("未定义事件模型").build());
String validAvailability = theform.getAvailability();
String validAvailabilityHidden = theform.getAvailabilityHidden();
if (validAvailability != null && !NUMBER_2.equalsIgnoreCase(validAvailability)) {
Collection cascadingEvent = (Collection) request.getAttribute("cascadingEvent");
if (cascadingEvent != null && cascadingEvent.size() > 0) {
Iterator cascading = cascadingEvent.iterator();
while (cascading.hasNext()) {
HashMap map = (HashMap) cascading.next();
String temp = (String) map.get("availability");
String entityId = (String) map.get("entityId");
Assert.isFalse(temp != null && !temp.equalsIgnoreCase(validAvailabilityHidden),
Errors.create().key(MessageIdList.EQUIPMENT_CHECK_STATUS).content("请检查{}的状态")
.args(entityId).build());
}
}
}
if (entity != null) {
if (REGULAR_PROD.equalsIgnoreCase(eventId)) {
if (checkRunningJobByEqpt(entity.getInstanceRrn()) &&
(NUMBER_1).equalsIgnoreCase(entity.getAvailability())) {
// "1"-->"REGULAR PROD" target availability
} else {
statusService.updatEntityStatus(entityStatuss, user, event, theform.getComment(),
theform.getComment1(), theform.getComment2(),
theform.getStatusEndTime(), entity);
}
} else if (END_PROD.equalsIgnoreCase(eventId)) {
if (NUMBER_4.equalsIgnoreCase(entity.getAvailability()) ||
checkRunningJobByEqpt(entity.getInstanceRrn())) {
// "4"-->"END PROD" target availability
} else {
statusService.updatEntityStatus(entityStatuss, user, event, theform.getComment(),
theform.getComment1(), theform.getComment2(),
theform.getStatusEndTime(), entity);
}
} else {
// 主设备更改
long transRrn = statusService
.updateEntityStatusByEntityId(entityStatuss, user, userRrn, event, theform.getComment(),
theform.getComment1(), theform.getComment2(),
theform.getStatusEndTime(), entity.getInstanceRrn());
// chamber设备更改
if (chamberIdArray.length > 0) {
for (int j = 0; j < chamberIdArray.length; j++) {
String chamberId = chamberIdArray[j];
if (!emsService.checkUserAndEqptStationJurisdiction(user, chamberId, facility)) {
Assert.isFalse(
StringUtils.equalsIgnoreCase("CN", I18nUtils.getCurrentLanguage().toString()),
Errors.create().content("没有修改设备 {} 的权限<br>").args(chamberId).build());
throw new SystemIllegalArgumentException(
Errors.create().content("No permission to modify the " + "{}!<br>")
.args(chamberId).build());
}
Long chamberRrn = baseService
.getNamedObjectRrn(chamberId, this.getNamedSpace(ObjectList.ENTITY_KEY, facility),
ObjectList.ENTITY_KEY);
// 捕获chamber修改失败信息
// 修改chamber相关status信息,存储entity status历史数据
String chamberCurrentStatus = emsService.getEntityCurrentStatus(chamberRrn);
List ChamberStatuss = new ArrayList();
Iterator parentEnityESIt = entityStatuss.iterator();
String chamberTargetStatus = "";
while (parentEnityESIt.hasNext()) {
EntityStatus parentEntityES = (EntityStatus) parentEnityESIt.next();
EntityStatus chamberES = new EntityStatus();
chamberES.setStatusBefore(chamberCurrentStatus);
chamberES.setEntityRrn(chamberRrn);
chamberES.setCurrentStatus(parentEntityES.getCurrentStatus());
chamberES.setStatusGroupId(parentEntityES.getStatusGroupId());
chamberTargetStatus = parentEntityES.getCurrentStatus();
ChamberStatuss.add(chamberES);
}
// 修改event信息,eventRrn通过chamber的当前状态到主设备的目标状态获取
String chamberEventId = "EQP." + chamberCurrentStatus + "_TO_" + chamberTargetStatus;
long chamberEventRrn = this
.getInstanceRrn(chamberEventId, this.getNamedSpace(ObjectList.EVENT_KEY, facility),
ObjectList.EVENT_KEY);
Assert.isFalse(chamberEventRrn == 0,
Errors.create().content("子腔设备事件集 {} 不存在").args(chamberEventId).build());
Collection chamberEventColl = baseService.getEvents(chamberEventRrn);
Iterator chamberEventIt = chamberEventColl.iterator();
Event chamberEvent = new Event();
while (chamberEventIt.hasNext()) {
chamberEvent = (Event) chamberEventIt.next();
chamberEvent.setInstanceId(chamberEventId);
}
statusService.updateEntityStatusByEntityId(ChamberStatuss, user, userRrn, chamberEvent,
theform.getComment(), theform.getComment1(),
theform.getComment2(),
theform.getStatusEndTime(), chamberRrn);
Entity chamberEntity = new Entity(chamberRrn);
chamberEntity = emsService.getEntity(entity);
successChamberList.add(chamberEntity);
successChamberEventList.add(chamberEvent);
}
}
}
}
}
// 调用ERP接口,chamber设备暂不需要调用
String message = updateWorkStream(entity, event, entityStatuss, facility, user);
Assert.isFalse(message != null, Errors.create().content(message).build());
// 主设备
handleFutureAction4Eqpt(entity, event, "LOGEVENT", facility.longValue(), userRrn, theform);
// chamber 设备
if (chamberIdArray.length > 0) {
if (successChamberList != null && successChamberList.size() > 0) {
for (int j = 0; j < successChamberList.size(); j++) {
Entity chamberEntity = successChamberList.get(j);
Event chamberEvent = successChamberEventList.get(j);
theform.setEventId(chamberEvent.getInstanceId());
handleFutureAction4Eqpt(chamberEntity, chamberEvent, "LOGEVENT", facility.longValue(), userRrn,
theform);
}
}
}
if (TRANSACTION.equals(theform.getTransId())) {
HashMap parameters = (HashMap) request.getAttribute(SessionNames.PARAMETERSINFO_KEY);
Assert.isFalse(parameters == null,
Errors.create().key(MessageIdList.EQUIPMENT_MISSING_PARAMETER).content("缺少参数").build());
parameters.put(SessionNames.RUNSTEP_FLAG, "0");
return mapping.findForward("workflow");
} else {
theform.setEntityId("");
theform.setEventId("");
String availability = "";
List<EntityStatus> entityStatus = emsService.getEntityStatuss(entity.getInstanceRrn());
// availability = emsService.getEntityAvailability(entity.getInstanceRrn());
request.setAttribute("availability", theform.getTargetAvailabilityHidden());
// 设备组内设备down,系统自动hold lot
EntityStatus es = entityStatus.iterator().next();
entity.setCurrentStatus(es.getCurrentStatus());
List<ReferenceFileDetail> eqptHoldInfos = sysService.getRefFileValues("$$EQUP_LOT_HOLD_STATUS", facility);
for (ReferenceFileDetail eqptHoldInfo : eqptHoldInfos) {
// 如果设备当前状态(修改后状态)与类表中的key1一致,则hold设备上的批次
if (StringUtils.equals(entity.getCurrentStatus(), eqptHoldInfo.getKey1Value())) {
String holdReason = eqptHoldInfo.getData2Value();
String holdReasonCode = eqptHoldInfo.getData1Value();
if (StringUtils.isBlank(holdReasonCode)) {
holdReasonCode = "EQPTDOWNHOLD";
eqptHoldInfo.setData1Value(holdReasonCode);
}
if (StringUtils.isBlank(holdReason)) {
holdReason = "THE EQUIPMENTS ALL DOWN";
eqptHoldInfo.setData2Value(holdReason);
}
// hold主设备批次
handleLotsByEqptDown(entity, eqptHoldInfo, eqptHoldInfos);
// hold chamber设备批次
if (chamberIdArray.length > 0) {
if (successChamberList != null && successChamberList.size() > 0) {
for (int j = 0; j < successChamberList.size(); j++) {
Entity chamberEntity = successChamberList.get(j);
handleLotsByEqptDown(chamberEntity, eqptHoldInfo, eqptHoldInfos);
}
}
}
}
}
request.setAttribute("entitystatus", entityStatus);
request.removeAttribute("NEXT_KEY");
request.setAttribute("entityType", request.getParameter("entityType"));
WebUtils.setSuccessMsg(request);
if (StringUtils.isNotBlank(chamberIdsStr)) {
request.setAttribute("successFlag", true);
request.setAttribute("entityId", theform.getEntityId());
request.setAttribute("chamberIdList", chamberIdsStr);
request.setAttribute("isChamberChangeFalg", "Y");
return mapping.findForward("changeChamberBack");
} else {
return (mapping.findForward("sucess"));
}
}
}
public ActionForward reticleModify(ActionMapping mapping, LogEventInfoForm theform,
HttpServletRequest request) throws Exception {
String user = LocalContext.getUserId();
Long facility = LocalContext.getFacilityRrn();
Long userRrn = LocalContext.getUserRrn();
String reticlePortal = WebUtils.getParameter("reticlePortal", request);
if (StringUtils.isNotBlank(reticlePortal)) {
request.setAttribute("reticlePortal", reticlePortal);
}
String namedSpace = baseService.getNamedSpace(facility, ObjectList.ENTITY_KEY);
NamedObject entityObject = baseService.getNamedObject(
new NamedObject(StringUtils.trim(theform.getEntityId()), namedSpace, ObjectList.ENTITY_KEY));
Entity entity = emsService.getEntity(new Entity(entityObject.getInstanceRrn()));
request.setAttribute("entityId", entity.getInstanceId());
String eventNamedSpace = baseService.getNamedSpace(facility, ObjectList.EVENT_KEY);
Event oldEvent = new Event(StringUtils.trim(theform.getEventId()), eventNamedSpace, ObjectList.EVENT_KEY);
oldEvent.setEntityType(entityObject.getObjectType());
Event event = baseService.getEvent(oldEvent);
if (StringUtils.isEmpty(entityObject.getInstanceDesc())) {
request.setAttribute("entityDesc", "");
} else {
request.setAttribute("entityDesc", entityObject.getInstanceDesc());
}
// ---------------------validate StatusEndTime-----------
String validateStatusEndTimeFlag = request.getParameter("validateStatusEndTimeFlag");
if (TRUE_YES_LOWER.equals(validateStatusEndTimeFlag)) {
Long statusEndTimeLong = null;
statusEndTimeLong = new SimpleDateFormat(DateUtils.DATE_FORMAT).parse(theform.getStatusEndTime()).getTime();
Assert.isFalse(statusEndTimeLong > System.currentTimeMillis(),
Errors.create().key(MessageIdList.EQUIPMENT_END_TIME_GREATER_CURRENT).content("请选择目标状态!")
.build());
}
List<EntityStatus> entityStatuss = new ArrayList();
// 事件模型,选中的设备状态更改信息
List<EventModel> eventModels = baseService.getEventModels(event.getInstanceRrn(), entity.getInstanceRrn());
String comment = theform.getComment();
String eventId = theform.getEventId();
boolean otFlag = !OT.equalsIgnoreCase(eventId);
Assert.isFalse(("".equalsIgnoreCase(comment) || comment == null) && otFlag && (!L_T.equalsIgnoreCase(eventId)),
Errors.create().key(MessageIdList.EQUIPMENT_MISSING_COMMENT).content("备注不能为空").build());
int i = 0;
String beforeStatus = "";
for (EventModel instance : eventModels) {
EntityStatus entityStatus = new EntityStatus();
entityStatus.setStatusGroupId(instance.getStatusGroupId());
entityStatus.setCurrentStatus(theform.getTargetStatus()[i++]);
entityStatus.setStatusBefore(instance.getCurrentStatus());
entityStatus.setEntityRrn(entity.getInstanceRrn());
entityStatuss.add(entityStatus);
beforeStatus = instance.getCurrentStatus();
}
Assert.isFalse(entityStatuss.size() < 1,
Errors.create().key(MessageIdList.EQUIPMENT_MISSING_EVENT_MODEL).content("未定义事件模型").build());
// 主设备更改
statusService.updateEntityStatusByEntityId(entityStatuss, user, userRrn, event, theform.getComment(),
theform.getComment1(), theform.getComment2(),
theform.getStatusEndTime(), entity.getInstanceRrn());
// handle future actions when log event
// 主设备
handleFutureAction4Eqpt(entity, event, "LOGEVENT", facility.longValue(), userRrn, theform);
//手动做PD使用次数清零和更新Last PD Time,Deadline
if (StringUtils.equals(beforeStatus, EventName.RTL_STATUS_IN_PD) ||
StringUtils.equals(beforeStatus, EventName.INIT)) {
emsService.manualReticlePD(entity);
}
theform.setEntityId("");
theform.setEventId("");
Collection entityStatus = new ArrayList();
String availability = "";
entityStatus = emsService.getEntityStatuss(entity.getInstanceRrn());
availability = emsService.getEntityAvailability(entity.getInstanceRrn());
request.setAttribute("reticleFlag", "Y");
request.setAttribute("availability", availability);
request.setAttribute("entitystatus", entityStatus);
request.setAttribute("entityType", request.getParameter("entityType"));
WebUtils.setSuccessMsg(request);
return (mapping.findForward("sucess"));
}
public ActionForward reticleCancel(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
return mapping.findForward("logreticleevent");
}
private String getLotByRunEqpt(String entityId, Long facilityRrn) {
String lotIds = StringUtils.EMPTY;
Map<String, Object> argMap = new HashMap<String, Object>(10);
argMap.put("showAll", "1");
argMap.put("eqptId", StringUtils.trimToUpperCase(entityId));
argMap.put("facility", facilityRrn);
Map dataMap = emsService.qryEqptInfo(argMap);
if (dataMap != null && dataMap.size() > 0) {
List<Map> eqptInfoList = (List<Map>) dataMap.get("data");
if (CollectionUtils.isNotEmpty(eqptInfoList)) {
for (Map eqptInfo : eqptInfoList) {
Map<String, Object> eqptMap = (Map<String, Object>) eqptInfo;
lotIds = MapUtils.getString(eqptMap, "currentLotId", StringUtils.EMPTY);
if (lotIds.contains("#")) {
lotIds = StringUtils.replace(lotIds, "#", ",").toString();
}
}
}
}
return lotIds;
}
private List<NamedObject> getValidEvents(Entity entity) {
return baseService.getValidEventsOfEntity(entity.getInstanceRrn());
}
private String updateWorkStream(Entity entity, Event event, Collection entityStatus, Long facility, String user) {
String message = "";
HashMap map = new HashMap(10);
Iterator it = entityStatus.iterator();
EntityStatus es = null;
Collection status = new ArrayList();
// ignore status since workstream will ignore the status check
/*
* while (it.hasNext()) { es = (EntityStatus) it.next(); status.add(es.getCurrentStatus()
* ); log
* .debug("status :"
* + es.getCurrentStatus()); }
*/
map.put("status", status);
entity.setAvailability("");
map.put("entity", entity);
map.put("event", event);
map.put("wsname", "logEvent");
message = connectMesSystem(map, facility.longValue(), user);
return message;
}
private void handleFutureAction4Eqpt(Entity entity, Event event, String actionPoint, long facilityRrn, Long userRrn,
LogEventInfoForm theform) {
if (StringUtils.equals(event.getNoticeLotEngineer(), NUMBER_1)) {
User user = new User();
user.setInstanceRrn(userRrn.longValue());
//todo email重做
// EmailMessage emailMessage = buildEmail(entity, securityService.getUser
// (user),
// theform);
// alarmService.insertAlarmEmailMessag(emailMessage);
}
ContextValue actionCondition = null;
actionCondition = new ContextValue();
actionCondition.setContextRrn(
getInstanceRrn("EEN_CONTEXT_EQPT", getNamedSpace(ObjectList.CONTEXT_KEY, new Long(facilityRrn)),
ObjectList.CONTEXT_KEY));
actionCondition.setContextKey1(entity.getInstanceId());
actionCondition.setContextKey2(event.getInstanceId());
actionCondition.setContextKey3(actionPoint);
List<EenAction> actions = wipQueryService.getFutureActions(actionCondition, facilityRrn);
for (EenAction eenAction : actions) {
if (eenAction.getActionType() == null) {
continue;
}
// In send mail case, the parameters seq is like param1/Current
// Operator,param2(een msg id)/135450
if (EenActionType.SEND_EMAIL_KEY.equals(eenAction.getActionType())) {
Map fromUserInfo = securityService.getUserInfo4Alarm(userRrn.longValue());
Map toUserInfo = new HashMap(10);
if (!"Current Operator".equals(eenAction.getParameterValue1())) {
toUserInfo = securityService
.getUserInfo4Alarm(new Long(eenAction.getParameterValue1()).longValue());
if (toUserInfo == null) {
toUserInfo = securityService
.getUserInfo4AlarmByUserGroup(new Long(eenAction.getParameterValue1()).longValue());
}
} else {
toUserInfo = fromUserInfo;
}
String subject = "";
String content = "";
if (eenAction.getParameterValue2() != null) {
long msg = new Long(eenAction.getParameterValue2()).longValue();
EenMessage e = alarmService.getEenMessage(new EenMessage(msg));
subject = entity.getInstanceId() + e.getMessageSubject();
content = e.getMessageText();
}
Map values = new HashMap(10);
values.put("from", fromUserInfo.get("emailAddress"));
values.put("to", toUserInfo.get("emailAddress"));
values.put("subject", subject);
values.put("content", content);
//todo email重做
//sysService.sendMail(values);
}
}
}
private boolean checkRunningJobByEqpt(long eqptRrn) {
return emsService.checkRunningJobByEqpt(eqptRrn);
}
private EmailMessage buildEmail(Entity entity, User user, LogEventInfoForm theform) throws Exception {
EmailMessage emailMessage = new EmailMessage();
emailMessage.setFromUser(user.getInstanceId());
emailMessage.setCreatedUser(user);
emailMessage.setLastUpdatedUser(user);
// emailMessage.setAttributeData1()
// jobType: NORMAL表示周期性触发,REPEAT表示重复触发,NOTIFY保留
emailMessage.setEmailType("LOG_EVENT");
emailMessage.setToUsers(getEmailUserGroups(entity));
emailMessage.setSubject(buildEmailSubject(theform, entity));
emailMessage.setContent(buildContent(entity, user, theform));
return emailMessage;
}
private String getEmailUserGroups(Entity entity) {
StringBuffer userGroups = new StringBuffer();
Long maintenanceEngineerRrn = entity.getMaintenanceEngineerRrn();
if (maintenanceEngineerRrn != null && maintenanceEngineerRrn.longValue() > 0) {
userGroups.append(maintenanceEngineerRrn);
}
return userGroups.toString();
}
private String buildEmailSubject(LogEventInfoForm theform, Entity entity) {
StringBuffer subject = null;
if (StringUtils.equalsIgnoreCase(ObjectList.RETICLE_KEY, entity.getObjectType())) {
subject = new StringBuffer(
"reticle " + entity.getInstanceId() + " status must change to " + theform.getTargetStatus()[0]);
} else {
subject = new StringBuffer(
"equipment " + entity.getInstanceId() + " status must change to " + theform.getTargetStatus()[0]);
}
return subject.toString();
}
private String buildContent(Entity entity, User user, LogEventInfoForm theform) {
StringBuffer subject = new StringBuffer();
subject.append("event id:" + theform.getEventId() + ";").append(MailComponent.ENTER_KEY);
if (StringUtils.equalsIgnoreCase(ObjectList.RETICLE_KEY, entity.getObjectType())) {
subject.append("reticle status:" + theform.getTargetStatus()[0] + ";").append(MailComponent.ENTER_KEY);
subject.append("reticle status change time:" + theform.getStatusEndTime() + ";")
.append(MailComponent.ENTER_KEY);
} else {
subject.append("equipment status:" + theform.getTargetStatus()[0] + ";").append(MailComponent.ENTER_KEY);
subject.append("equipment status change time:" + theform.getStatusEndTime() + ";")
.append(MailComponent.ENTER_KEY);
}
if (StringUtils.isNotBlank(theform.getComment())) {
subject.append("note:" + theform.getComment() + ";").append(MailComponent.ENTER_KEY);
}
if (StringUtils.isNotBlank(theform.getComment1())) {
subject.append("note 1:" + theform.getComment1() + ";").append(MailComponent.ENTER_KEY);
}
if (StringUtils.isNotBlank(theform.getComment2())) {
subject.append("note 2:" + theform.getComment2() + ";").append(MailComponent.ENTER_KEY);
}
subject.append("operator:" + user.getInstanceId() + ";").append(MailComponent.ENTER_KEY);
subject.append("operation time:" + new Timestamp(System.currentTimeMillis()) + ";")
.append(MailComponent.ENTER_KEY);
return MailComponent.parseText(subject.toString());
}
}