DoorPortalAction.java
package com.mycim.webapp.actions.door.doorportal;
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.framework.utils.lang.collections.MapUtils;
import com.mycim.valueobject.MessageIdList;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.SystemConstant;
import com.mycim.valueobject.consts.EventName;
import com.mycim.valueobject.consts.PODConts;
import com.mycim.valueobject.consts.PcdStatus;
import com.mycim.valueobject.ems.Door;
import com.mycim.valueobject.ems.PcdClean;
import com.mycim.valueobject.sys.ReferenceFileDetail;
import com.mycim.webapp.actions.CarrierSetupAction;
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.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
public class DoorPortalAction extends CarrierSetupAction {
public final static int PCD_ID_LENGTH = 7;
public final static int CLEAN_CYCLE_NUM_SIX = 6;
public final static String DOOR_ID = "doorId";
public final static String DOOR_ALLOWABLE_EVENT = "doorAllowableEvent";
public final static String DOOR_CATEGORY = "doorCategory";
public final static String DOOR_CLEAN_CYLE = "doorCleanCycle";
@Override
public ActionForward init(ActionMapping mapping, ActionForm theform, HttpServletRequest request,
HttpServletResponse response) {
return mapping.findForward("doorPortal");
}
public ActionForward doorInfoTab(HttpServletRequest request, ActionMapping mapping) {
request.setAttribute("pcdId", request.getParameter("doorId"));
request.setAttribute("transId", "door");
return mapping.findForward("pcdInfoTab");
}
public ActionForward getCommentHistory(HttpServletRequest request, ActionMapping mapping) {
String user = LocalContext.getUserId();
long facilityRrn = LocalContext.getFacilityRrn();
return getCommentHistory(request, mapping, facilityRrn, user, "doorPortal", "getCommentHistory");
}
public Map getDoorInfoDetail(Map map) {
String doorId = map.get("doorId").toString();
long facilityRrn = LocalContext.getFacilityRrn();
Map<String, Object> dataMap = new HashMap<String, Object>(10);
if (StringUtils.isNotBlank(doorId)) {
String namedSpace = baseService.getNamedSpace(facilityRrn, ObjectList.ENTITY_KEY);
dataMap = carrierService.getDoorInfoDetailById(doorId, namedSpace);
PcdClean cleanInfo = carrierService.getPcdCleanInfo(MapUtils.getLong(dataMap, "doorRrn"));
if (cleanInfo != null && cleanInfo.getInstanceRrn() > 0) {
dataMap.put("cleanCycle", cleanInfo.getCleanCycle());
dataMap.put("cleanEqpt", cleanInfo.getCleanEqptId());
}
// check是否拥有从当前状态切换为目标状态的权限
Map<String, Object> btnMap = carrierService
.checkPcdChangeStatusButton(facilityRrn, MapUtils.getLong(dataMap, "doorRrn"),
MapUtils.getString(dataMap, "doorStatus"));
dataMap.put("btnPermissionByEvent", btnMap);
}
return dataMap;
}
public Map queryDoorByPage(Map map) {
Map<String, Object> argMap = new HashMap<String, Object>(10);
long facilityRrn = LocalContext.getFacilityRrn();
argMap.put("startRow", map.get("start"));
argMap.put("limit", map.get("limit"));
argMap.put("doorId", StringUtils.trim(map.get("DOOR").toString()));
argMap.put("status", StringUtils.trim(map.get("formDoorStatus").toString()));
argMap.put("type", StringUtils.trim(map.get("formDoorType").toString()));
argMap.put("category", StringUtils.trim(map.get("formDoorCategory").toString()));
argMap.put("facility", facilityRrn);
Map<String, Object> dataMap = new HashMap<String, Object>(20);
dataMap = carrierService.qryDoorListByPage(argMap);
return dataMap;
}
public Door queryDoorDetail(Map map) {
String doorId = map.get("doorId").toString();
long facilityRrn = LocalContext.getFacilityRrn();
Assert.isFalse(StringUtils.isBlank(doorId),
Errors.create().key(MessageIdList.DOOR_ID_CANNOT_EMPTY).content("Door号不能为空!").build());
long doorRrn = baseService.getNamedObjectRrn(doorId, this.getNamedSpace(ObjectList.ENTITY_KEY, facilityRrn),
ObjectList.ENTITY_KEY, ObjectList.DOOR_KEY);
Assert.isFalse(doorRrn < 1, Errors.create().key(MessageIdList.DOOR_DOOR_MISSING).content("Door 不存在").build());
Door door = carrierService.getDoor(doorRrn);
PcdClean doorCleanInfo = carrierService.getPcdCleanInfo(door.getInstanceRrn());
if (doorCleanInfo != null && doorCleanInfo.getInstanceRrn() > 0) {
door.setCleanCycle(doorCleanInfo.getCleanCycle());
}
return door;
}
public void delete(Map map) {
String user = LocalContext.getUserId();
long facilityRrn = LocalContext.getFacilityRrn();
String doorId = map.get("winDoorId").toString();
Assert.isFalse(StringUtils.isBlank(doorId),
Errors.create().key(MessageIdList.DOOR_ID_CANNOT_EMPTY).content("Door号不能为空!").build());
Map<String, Object> resultMap;
carrierService.deleteDoorEntity(doorId, facilityRrn, user);
}
public List<Map> combobxData(HttpServletRequest request) {
List<Map> list = putDefaultData();
String type = request.getParameter("type");
List<ReferenceFileDetail> comboData = queryComboDataList(type);
for (ReferenceFileDetail detail : comboData) {
if (SystemConstant.Pcd.CARRIER_TYPE.equalsIgnoreCase(type)) {
if (StringUtils.isBlank(detail.getData2Value())) {
continue;
}
}
Map jo = new HashMap(10);
if (SystemConstant.Pcd.DOOR_COLOR.equalsIgnoreCase(type)) {
jo.put("value", detail.getData4Value()); // 实际传递的值
} else {
jo.put("value", detail.getKey1Value()); // 实际传递的值
}
jo.put("key", detail.getData1Value()); // 显示在页面的值
list.add(jo);
}
return list;
}
/**
* 检查输入的doorid是否已经存在
*
* @return
*/
public Map checkDoor(Map map) {
long facilityRrn = LocalContext.getFacilityRrn();
Map result = new HashMap(20);
String doorId = map.get("winDoorId").toString();
Assert.isTrue(StringUtils.isNotBlank(doorId),
Errors.create().key(MessageIdList.DOOR_ID_CANNOT_EMPTY).content("Door号不能为空!").build());
doorId = StringUtils.trimToUpperCase(doorId);
checkNamedObjectIdRule(doorId, "Door");
long doorRrn = baseService.getNamedObjectRrn(doorId, baseService.getNamedSpace(facilityRrn, ObjectList.ENTITY_KEY),
ObjectList.ENTITY_KEY, ObjectList.DOOR_KEY);
Assert.isTrue(doorRrn < 1, Errors.create().key(MessageIdList.DOOR_DOOR_ID_EXISTS).content("Door号已存在!").build());
long namedObjectRrn = baseService.getNamedObjectRrn(doorId, baseService.getNamedSpace(facilityRrn, ObjectList.ENTITY_KEY),
ObjectList.ENTITY_KEY);
Assert.isTrue(namedObjectRrn < 1,
Errors.create().key(MessageIdList.CARRIER_ID_EXISTS).content("系统中已存在此ID").build());
Map<String, Object> allowableMap = baseService
.getAllowableEventSetFirst(baseService.getNamedSpace(facilityRrn, ObjectList.ALLOWABLEEVENTSET_KEY),
ObjectList.DOOR_KEY);
result.put("doorId", doorId);
result.put("allowableEvent", allowableMap.get("allwoableEventId"));
return result;
}
public void modify(Map map) {
String user = LocalContext.getUserId();
long facilityRrn = LocalContext.getFacilityRrn();
Map<String, Object> attrMap = getRequestParameterMap(map);
Assert.isFalse(StringUtils.isBlank(MapUtils.getString(attrMap, DOOR_ID)),
Errors.create().key(MessageIdList.DOOR_ID_CANNOT_EMPTY).content("Door号不能为空!").build());
Assert.isFalse(StringUtils.isBlank(MapUtils.getString(attrMap, SystemConstant.Pcd.DOOR_STATUS)),
Errors.create().key(MessageIdList.DOOR_DOOR_STATUS_EMPTY).content("Door状态不能为空!").build());
Assert.isFalse(StringUtils.isBlank(MapUtils.getString(attrMap, SystemConstant.Pcd.DOOR_TYPE)),
Errors.create().key(MessageIdList.DOOR_DOOR_TYPE_EMPTY).content("Door类型不能为空!").build());
Assert.isFalse(StringUtils.isBlank(MapUtils.getString(attrMap, DOOR_ALLOWABLE_EVENT)),
Errors.create().key(MessageIdList.CARRIER_ALLOWABLE_EVENT_EMPTY).content("允许事件集号不能为空!").build());
Assert.isFalse(StringUtils.isBlank(MapUtils.getString(attrMap, DOOR_CATEGORY)),
Errors.create().key(MessageIdList.DOOR_DOOR_CATEGORY_EMPTY).content("Door类别不能为空!").build());
Assert.isFalse(StringUtils.isBlank(MapUtils.getString(attrMap, DOOR_CLEAN_CYLE)),
Errors.create().key(MessageIdList.CARRIER_CLEAN_CYCLE_EMPTY).content("清洗周期不能为空!").build());
String doorCleanCycle = MapUtils.getString(attrMap, DOOR_CLEAN_CYLE);
Assert.isFalse(StringUtils.length(doorCleanCycle) > CLEAN_CYCLE_NUM_SIX,
Errors.create().key(MessageIdList.CARRIER_CLEAN_LENGTH_EXCEED_SIX).content("清洗周期不能超过6位数!")
.build());
// 修改操作
long doorRrn = baseService.getNamedObjectRrn(MapUtils.getString(attrMap, "doorId"),
baseService.getNamedSpace(facilityRrn, ObjectList.ENTITY_KEY),
ObjectList.ENTITY_KEY, ObjectList.DOOR_KEY);
Assert.isTrue(doorRrn > 0, Errors.create().key(MessageIdList.DOOR_DOOR_MISSING).content("Door 不存在").build());
Door door = carrierService.getDoor(doorRrn);
Assert.isTrue(StringUtils.isNotBlank(door.getDoorStatus()) &&
StringUtils.equalsIgnoreCase(door.getDoorStatus(), PcdStatus.FREE_KEY),
Errors.create().key(MessageIdList.DOOR_FREE_STATUS_CAN_MODIFY).content("只有FREE状态的Door才能修改!")
.build());
attrMap.put("doorRrn", doorRrn);
carrierService.updateDoorEntity(attrMap, facilityRrn, user);
}
private Map<String, Object> getRequestParameterMap(Map paramMap) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("doorId", paramMap.get("winDoorId"));
map.put("doorDesc", paramMap.get("winDoorDesc"));
map.put("doorStatus", paramMap.get("winDoorStatus"));
map.put("doorType", paramMap.get("winDoorType"));
map.put("doorColor", paramMap.get("winDoorColor"));
map.put("doorPosition", paramMap.get("winDoorLocation"));
map.put("doorSlotCount", paramMap.get("winSlotCount"));
map.put("doorPollutionLevel", paramMap.get("winDoorPollutionLevel"));
map.put("doorAllowableEvent", paramMap.get("winDoorAllowableEvent"));
map.put("doorEngineerGroupID", paramMap.get("winDoorEngineerGroupID"));
map.put("doorCategory", paramMap.get("winDoorCategory"));
map.put("doorCleanCycle", paramMap.get("winDoorCleanCycle"));
return map;
}
public void save(Map map) {
String user = LocalContext.getUserId();
long facilityRrn = LocalContext.getFacilityRrn();
Map<String, Object> attrMap = getRequestParameterMap(map);
String doorId;
Assert.isFalse(StringUtils.isBlank(doorId = MapUtils.getString(attrMap, DOOR_ID)),
Errors.create().key(MessageIdList.DOOR_ID_CANNOT_EMPTY).content("Door号不能为空!").build());
Assert.isFalse(StringUtils.isBlank(MapUtils.getString(attrMap, SystemConstant.Pcd.DOOR_STATUS)),
Errors.create().key(MessageIdList.DOOR_DOOR_STATUS_EMPTY).content("Door状态不能为空!").build());
Assert.isFalse(StringUtils.isBlank(MapUtils.getString(attrMap, SystemConstant.Pcd.DOOR_TYPE)),
Errors.create().key(MessageIdList.DOOR_DOOR_TYPE_EMPTY).content("Door类型不能为空!").build());
Assert.isFalse(StringUtils.isBlank(MapUtils.getString(attrMap, DOOR_ALLOWABLE_EVENT)),
Errors.create().key(MessageIdList.CARRIER_ALLOWABLE_EVENT_EMPTY).content("允许事件集号不能为空!").build());
Assert.isFalse(StringUtils.isBlank(MapUtils.getString(attrMap, DOOR_CATEGORY)),
Errors.create().key(MessageIdList.DOOR_DOOR_CATEGORY_EMPTY).content("Door类别不能为空!").build());
Assert.isFalse(StringUtils.isBlank(MapUtils.getString(attrMap, DOOR_CLEAN_CYLE)),
Errors.create().key(MessageIdList.CARRIER_CLEAN_CYCLE_EMPTY).content("清洗周期不能为空!").build());
String doorCleanCycle = MapUtils.getString(attrMap, DOOR_CLEAN_CYLE);
Assert.isFalse(StringUtils.length(doorCleanCycle) > CLEAN_CYCLE_NUM_SIX,
Errors.create().key(MessageIdList.CARRIER_CLEAN_LENGTH_EXCEED_SIX).content("清洗周期不能超过6位数!")
.build());
checkNamedObjectIdRule(doorId, "Door");
long doorRrn = baseService.getNamedObjectRrn(MapUtils.getString(attrMap, "doorId"),
baseService.getNamedSpace(facilityRrn, ObjectList.ENTITY_KEY),
ObjectList.ENTITY_KEY, ObjectList.DOOR_KEY);
Assert.isTrue(doorRrn < 1, Errors.create().key(MessageIdList.DOOR_DOOR_ID_EXISTS).content("Door号已存在!").build());
long namedObjectRrn = baseService.getNamedObjectRrn(MapUtils.getString(attrMap, "doorId"), baseService
.getNamedSpace(facilityRrn, ObjectList.ENTITY_KEY), ObjectList.ENTITY_KEY);
Assert.isTrue(namedObjectRrn < 1,
Errors.create().key(MessageIdList.CARRIER_ID_EXISTS).content("系统中已存在此ID!").build());
carrierService.addDoorEntity(attrMap, facilityRrn, user);
initStatusByEvent(facilityRrn, user, MapUtils.getString(attrMap, "doorId"), ObjectList.DOOR_KEY,
EventName.INIT_DOOR);
}
public Map<String,Object> generateDoorId(Map<String,Object> param){
String type = org.apache.commons.collections.MapUtils.getString(param, "type");
String doorId = generatePCDId(SystemConstant.Pcd.DOOR, type);
return new HashMap<String,Object>(){{
put("doorId", doorId);
}};
}
}