DoorHoldAction.java
package com.mycim.webapp.actions.door.doorholdrelease;
import com.fa.sesa.exception.Assert;
import com.fa.sesa.exception.Errors;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.valueobject.MessageIdList;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.bas.NamedObject;
import com.mycim.valueobject.consts.PcdStatus;
import com.mycim.valueobject.consts.TransactionNames;
import com.mycim.valueobject.ems.Door;
import com.mycim.valueobject.security.User;
import com.mycim.valueobject.wip.TransReason;
import com.mycim.webapp.Constants;
import com.mycim.webapp.actions.CarrierSetupAction;
import com.mycim.webapp.forms.HoldReleasePCDInfoForm;
import org.apache.commons.collections.MapUtils;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Door hold
*
* @author yanbing.chen
* @date 2019/9/01
* @since 1.8
**/
public class DoorHoldAction extends CarrierSetupAction {
@Override
public String inItMethod() {
return "getPcdDetail";
}
public ActionForward hold(ActionMapping mapping, HoldReleasePCDInfoForm theform,
HttpServletRequest request) throws Exception {
Long userRrn = LocalContext.getUserRrn();
Long facilityRrn = LocalContext.getFacilityRrn();
Assert.isFalse(StringUtils.isEmpty(theform.getDepartment()),
Errors.create().key(MessageIdList.PCD_DEPARTMENT_ID_CANNOT_EMPTY).content("部门号不可为空!").build());
Assert.isFalse(StringUtils.isEmpty(theform.getReason()),
Errors.create().key(MessageIdList.PCD_RELEASE_REASON_CANNOT_EMPTY).content("释放原因不可为空!").build());
String pcdId = request.getParameter("instanceId");
Assert.isFalse(StringUtils.isBlank(pcdId),
Errors.create().key(MessageIdList.PCD_PCD_ID_CANNOT_EMPTY).content("PCD号不能为空!").build());
String entityNamedSpace = getNamedSpace(ObjectList.ENTITY_KEY, facilityRrn);
NamedObject pcd = baseService.isExisted(pcdId, entityNamedSpace, ObjectList.ENTITY_KEY);
Boolean isAssembledPcd = carrierService.isAssembledPCD(pcd.getInstanceRrn());
Assert.isFalse(isAssembledPcd && !StringUtils.equalsIgnoreCase(pcd.getObjectType(), ObjectList.CARRIER_KEY),
Errors.create().key(MessageIdList.PCD_ASSEMBLED_POD_AND_DOOR_RELEASED_BY_CASSETTE)
.content("组装后的Pod 和 Door 只允许通过Cassette 暂停!").build());
String reason =
theform.getReasonGroup() + " " + theform.getDepartment() + " " + " Reason:" + theform.getReason();
TransReason transReason = new TransReason();
transReason.setReasonCode(theform.getReasonCode());
transReason.setReason(reason);
User user = new User();
user.setInstanceRrn(userRrn);
user = securityService.getUser(user);
transReason.setResponsibility(user.getInstanceId());
transReason.setReasonCategory(TransactionNames.HOLD_PCD_KEY);
transReason.setAccountCode("");
HashMap holdInfo = new HashMap(10);
holdInfo.put("transPerformedBy", user.getInstanceId());
holdInfo.put("holdBy", userRrn);
holdInfo.put("transReason", transReason);
holdInfo.put("pcd", pcd);
holdInfo.put("facilityRrn", facilityRrn);
holdInfo.put("objectType", pcd.getObjectType());
carrierService.holdDoor(holdInfo);
theform.setReason("");
theform.setReasonCode("");
theform.setReasonGroup("");
theform.setDepartment("");
theform.setTransId(Constants.HOLD_KEY);
return getPcdDetail(mapping, theform, request);
}
public ActionForward getPcdDetail(ActionMapping mapping, HoldReleasePCDInfoForm form, HttpServletRequest request) {
Long facilityRrn = LocalContext.getFacilityRrn();
String pcdId = request.getParameter("instanceId");
Assert.isFalse(StringUtils.isBlank(pcdId),
Errors.create().key(MessageIdList.CARRIER_CASSETTE_EMPTY).content("晶舟号不能为空!").build());
String entityNamedSpace = getNamedSpace(ObjectList.ENTITY_KEY, facilityRrn);
NamedObject pcd = baseService.isExisted(pcdId, entityNamedSpace, ObjectList.ENTITY_KEY);
Assert.isFalse(pcd == null || pcd.getInstanceRrn() == 0,
Errors.create().key(MessageIdList.PCD_PCD_MISSING).content("PCD 不存在!").build());
Map door = carrierService.getDoorInfoDetailById(pcd.getInstanceId(), entityNamedSpace);
form.setInstanceDesc((MapUtils.getString(door, "doorDesc", StringUtils.EMPTY)));
form.setStatus((MapUtils.getString(door, "doorStatus", StringUtils.EMPTY)));
form.setObjectSubtype((MapUtils.getString(door, "doorType", StringUtils.EMPTY)));
form.setFlagType((MapUtils.getString(door, "doorCategory", StringUtils.EMPTY)));
form.setAllowableEventsId((MapUtils.getString(door, "doorAllowable", StringUtils.EMPTY)));
form.setPodId((MapUtils.getString(door, "podId", StringUtils.EMPTY)));
form.setCarrierId((MapUtils.getString(door, "carrierId", StringUtils.EMPTY)));
String transId = request.getParameter("transId");
form.setTransId(transId);
form.setObjectType(pcd.getObjectType());
Boolean isAssembledPcd = carrierService.isAssembledPCD(pcd.getInstanceRrn());
form.setHoldReleaseAllowed(holdReleaseAllowed(pcd, isAssembledPcd));
List<Map> holdReasons = carrierService.getHoldReasons(pcd.getInstanceRrn());
request.setAttribute("collection", holdReasons);
request.setAttribute("transUrl", "/doorHold");
return mapping.findForward("doorHold");
}
private boolean holdReleaseAllowed(NamedObject pcd, Boolean isAssembledPcd) {
Door door = carrierService.getDoor(pcd.getInstanceRrn());
return StringUtils.equalsIgnoreCase(door.getDoorStatus(), PcdStatus.FREE_KEY) ||
(StringUtils.equalsIgnoreCase(door.getDoorStatus(), PcdStatus.HOLD_KEY) && !isAssembledPcd);
}
}