PodManagerImpl.java
package com.mycim.server.carrier.manager.impl;
import com.fa.sesa.exception.Assert;
import com.fa.sesa.exception.Errors;
import com.fa.sesa.exception.SystemIllegalArgumentException;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.MapUtils;
import com.mycim.server.base.manager.EventManager;
import com.mycim.server.base.manager.NamedObjectManager;
import com.mycim.server.base.manager.TransactionLogManager;
import com.mycim.server.carrier.dao.PodDAO;
import com.mycim.server.carrier.manager.PcdManager;
import com.mycim.server.carrier.manager.PodManager;
import com.mycim.server.ems.manager.EntityManager;
import com.mycim.server.status.manager.StatusManager;
import com.mycim.valueobject.MessageIdList;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.bas.NamedObject;
import com.mycim.valueobject.bas.TransactionLog;
import com.mycim.valueobject.consts.PcdStatus;
import com.mycim.valueobject.consts.TransactionNames;
import com.mycim.valueobject.ems.POD;
import com.mycim.valueobject.ems.PcdAssembly;
import com.mycim.valueobject.ems.PcdClean;
import com.mycim.valueobject.wip.TransReason;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author yanbing.chen
* @date 2019/10/10
* @since 1.8
**/
@Service
@Transactional
public class PodManagerImpl implements PodManager {
@Autowired
PodDAO podDao;
@Autowired
TransactionLogManager transactionLogManager;
@Autowired
StatusManager statusManager;
@Autowired
EventManager eventManager;
@Autowired
PcdManager pcdManager;
@Autowired
NamedObjectManager namedObjectManager;
@Autowired
EntityManager entityManager;
@Override
public POD getPod(long podRrn) {
return podDao.getPod(podRrn);
}
@Override
public Map<String, Object> qryPodInfoDetailById(String podId, String namedSpace) {
return podDao.qryPodInfoDetailById(podId, namedSpace);
}
@Override
public void insertPodH(Long podRrn, String comments, Long transRrn) {
podDao.insertPodH(podRrn, comments, transRrn);
PcdClean cleanInfo = pcdManager.getPcdCleanInfo(podRrn);
if (cleanInfo != null && StringUtils.isNotBlank(cleanInfo.getInstanceId())) {
pcdManager.insertPcdCleanH(transRrn, cleanInfo);
}
}
@Override
public void updatePodByDeassembly(Long transRrn, POD pod) {
podDao.updatePodByDeassembly(transRrn, pod);
}
@Override
public void holdPod(Map transInfo) {
String transPerformedBy = MapUtils.getString(transInfo, "transPerformedBy");
long holdBy = MapUtils.getLong(transInfo, "holdBy");
NamedObject pcd = (NamedObject) transInfo.get("pcd");
long instanceRrn = pcd.getInstanceRrn();
long facilityRrn = MapUtils.getLongValue(transInfo, "facilityRrn");
TransReason transReason = (TransReason) transInfo.get("transReason");
PcdAssembly pcdAssembly = (PcdAssembly) transInfo.get("pcdAssembly");
TransactionLog transactionLog = transactionLogManager
.startTransactionLog(transPerformedBy, TransactionNames.HOLD_POD_KEY);
long transRrn = transactionLog.getTransRrn();
if (pcdAssembly == null) {
pcdAssembly = new PcdAssembly();
pcdAssembly.setPodRrn(instanceRrn);
}
// step1: update pcd status and add history
POD pod = getPod(instanceRrn);
if (!StringUtils.equalsIgnoreCase(pod.getPodStatus(), PcdStatus.HOLD_KEY)) {
String podEventId = eventManager
.getEventIdBy2Status(facilityRrn, instanceRrn, pod.getPodStatus(), PcdStatus.HOLD_KEY);
statusManager
.changePCDStatusByEvent(facilityRrn, transPerformedBy, instanceRrn, ObjectList.POD_KEY, podEventId,
"Hold");
podDao.updatePodStatus(pcdAssembly, transRrn, PcdStatus.HOLD_KEY, null);
}
// step2: insert into multiple_Hold
pcdManager.insertMultipleHold(instanceRrn, holdBy, transRrn);
// step3: insert into trans_reason
pcdManager.insertTransReason(transRrn, instanceRrn, transReason, 1);
transactionLogManager.markTransactionLog(transactionLog);
}
@Override
public void releasePod(Map transInfo) {
String transPerformedBy = MapUtils.getString(transInfo, "transPerformedBy");
List releaseReasons = (List) transInfo.get("releaseReasons");
NamedObject pcd = (NamedObject) transInfo.get("pcd");
long instanceRrn = pcd.getInstanceRrn();
String transNames = TransactionNames.RELEASE_POD_KEY;
TransReason transReason = (TransReason) transInfo.get("transReason");
String targetStatus = MapUtils.getString(transInfo, "targetStatus");
PcdAssembly pcdAssembly = (PcdAssembly) transInfo.get("pcdAssembly");
long facilityRrn = MapUtils.getLongValue(transInfo, "facilityRrn");
if (pcdAssembly == null) {
pcdAssembly = new PcdAssembly();
pcdAssembly.setPodRrn(instanceRrn);
}
TransactionLog transactionLog = transactionLogManager.startTransactionLog(transPerformedBy, transNames);
// delete Multiple hold
Object[] releaseReasonArray = releaseReasons.toArray();
for (int i = 0; i < releaseReasonArray.length; i++) {
HashMap releaseReason = (HashMap) releaseReasonArray[i];
pcdManager.deleteMultipleHold(instanceRrn, Long.parseLong((String) releaseReason.get("sequenceNumber")));
}
if (!StringUtils.equalsIgnoreCase(targetStatus, PcdStatus.HOLD_KEY)) {
POD pod = getPod(instanceRrn);
String cstEventId = eventManager
.getEventIdBy2Status(facilityRrn, instanceRrn, pod.getPodStatus(), targetStatus);
statusManager
.changePCDStatusByEvent(facilityRrn, transPerformedBy, instanceRrn, ObjectList.POD_KEY, cstEventId,
"Hold");
podDao.updatePodStatus(pcdAssembly, transactionLog.getTransRrn(), targetStatus, null);
}
transReason.setReasonCategory(transNames);
pcdManager.insertTransReason(transactionLog.getTransRrn(), instanceRrn, transReason, 1);
transactionLogManager.markTransactionLog(transactionLog);
}
@Override
public Map<String, Object> qryPodListByPage(Map<String, Object> argMap) {
int pageSize = 20;
int startRow = 0;
int currentTotalRow = 10;
if (MapUtils.isNotEmpty(argMap) && MapUtils.getInteger(argMap, "startRow") != null) {
startRow = MapUtils.getInteger(argMap, "startRow");
currentTotalRow = startRow + pageSize;
}
if (MapUtils.getLong(argMap, "facility") > 0) {
argMap.put("namedSpace",
namedObjectManager.getNamedSpace(MapUtils.getLong(argMap, "facility"), ObjectList.ENTITY_KEY));
}
if (StringUtils.isNotBlank(MapUtils.getString(argMap, "podId"))) {
argMap.put("podId",
StringUtils.replace(MapUtils.getString(argMap, "podId"), "*", "%").toString().toUpperCase());
}
// 查询数据集和数据总量
int totalCount = podDao.getPodTotalCount(argMap);
List<Map> eqptInfoList = podDao.getPodListByPage(argMap, startRow, currentTotalRow);
for (Map dataMap : eqptInfoList) {
// 替换location
String location = MapUtils.getString(dataMap, "location");
if (StringUtils.isNotBlank(location) && StringUtils.equalsIgnoreCase("$EQPT_LOCATION", location)) {
dataMap.put("location", "");
}
PcdAssembly pcdAssembly = pcdManager.getPcdAssembly(null, MapUtils.getLong(dataMap, "podRrn"), null);
if (pcdAssembly != null) {
dataMap.put("carrierId", pcdAssembly.getCarrierId());
dataMap.put("doorId", pcdAssembly.getDoorId());
if (pcdManager.isPcdCleaningTimeIsLessThan3Days(pcdAssembly.getCarrierRrn())) {
dataMap.put("carrierCleanRedFlag", "1");
}
if (pcdManager.isPcdCleaningTimeIsLessThan3Days(pcdAssembly.getDoorRrn())) {
dataMap.put("doorCleanRedFlag", "1");
}
}
if (pcdManager.isPcdCleaningTimeIsLessThan3Days(MapUtils.getLong(dataMap, "podRrn"))) {
dataMap.put("podCleanRedFlag", "1");
}
}
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("data", eqptInfoList);
dataMap.put("totalCount", totalCount);
return dataMap;
}
@Override
public void deletePodEntity(String podId, Long facilityRrn, String user) {
String namedSpace = namedObjectManager.getNamedSpace(facilityRrn, ObjectList.ENTITY_KEY);
long podRrn = 0L;
podRrn = namedObjectManager.getNamedObjectRrn(podId, namedSpace, ObjectList.ENTITY_KEY, ObjectList.POD_KEY);
Assert.isFalse(podRrn <= 0, Errors.create().key(MessageIdList.POD_POD_ID_MISSING).content("Pod号不存在!").build());
// pod存在,检查pod当前信息,判断是否可以删除
POD pod = this.getPod(podRrn);
// 目前判断不是FREE状态不能删除
if (StringUtils.equalsIgnoreCase(PcdStatus.FREE_KEY, pod.getPodStatus())) {
// 删除pod
pod.setTransId("DELETE");
pod.setPodStatus(PcdStatus.DELETED_KEY);
pod.setTransPerformedby(user);
deletePod(pod);
} else {
Assert.isFalse(StringUtils.equalsIgnoreCase(PcdStatus.HOLD_KEY, pod.getPodStatus()),
Errors.create().key(MessageIdList.POD_IN_HOLD_STATUS).content("Pod在hold 状态,不能删除!").build());
throw new SystemIllegalArgumentException(
Errors.create().key(MessageIdList.POD_IN_USE_CANNOT_DELETE).content("Pod正在使用中,不能删除!").build());
}
}
@Override
public void updatePodEntity(Map<String, Object> attrMap, Long facilityRrn, String user) {
String allowableEventId = MapUtils.getString(attrMap, "podAllowableEvent").toUpperCase().trim();
String engineerGroupId = MapUtils.getString(attrMap, "podEngineerGroupID").toUpperCase().trim();
long allowableEventRrn = namedObjectManager.getNamedObjectRrn(allowableEventId, namedObjectManager
.getNamedSpace(facilityRrn,
ObjectList.ALLOWABLEEVENTSET_KEY),
ObjectList.ALLOWABLEEVENTSET_KEY.toString());
long engineerGroupRrn = namedObjectManager.getNamedObjectRrn(engineerGroupId, namedObjectManager
.getNamedSpace(facilityRrn, ObjectList.USERGROUP_KEY), ObjectList.USERGROUP_KEY);
Assert.isFalse(allowableEventRrn <= 0,
Errors.create().key(MessageIdList.CARRIER_ALLOWABLE_EVENT_EMPTY).content("允许事件集号不能为空!").build());
Assert.isFalse(StringUtils.isNotBlank(engineerGroupId) && engineerGroupRrn <= 0,
Errors.create().key(MessageIdList.ENGINEERGROUP_ENGINEER_GROUP_MISSING).content("工程师组无效!")
.build());
Long podRrn = MapUtils.getLong(attrMap, "podRrn");
POD pod = getPod(podRrn);
pod.setAllowableEventsId(allowableEventId);
pod.setAllowableEventsRrn(allowableEventRrn);
pod.setCarrierCode(MapUtils.getString(attrMap, "podColor"));
pod.setInstanceDesc(MapUtils.getString(attrMap, "podDesc"));
pod.setPollutionLevel(MapUtils.getString(attrMap, "podPollutionLevel"));
pod.setTransId(TransactionNames.MODIFY_KEY);
pod.setTransPerformedby(user);
pod.setObjectSubtype(MapUtils.getString(attrMap, "podType"));
pod.setMaintenanceEngineerId(engineerGroupId);
pod.setMaintenanceEngineerRrn(engineerGroupRrn);
pod.setFlagType(MapUtils.getString(attrMap, "podCategory"));
TransactionLog transactionLog = transactionLogManager.startTransactionLog(user, pod.getTransId());
long transRrn = transactionLog.getTransRrn();
if (pcdManager.countPcdCategoryByRrn(pod.getInstanceRrn()) > 0) {
// 已经存在数据
pcdManager.updatePcdNamedObjectExt(pod.getInstanceRrn(), pod.getFlagType());
} else {
pcdManager.insertPcdNamedObjectExt(pod.getInstanceRrn(), pod.getFlagType(), pod.getDmmType());
}
podDao.updatePod(pod, transRrn);
PcdClean podCleanInfo = new PcdClean();
podCleanInfo.setInstanceRrn(podRrn);
podCleanInfo.setInstanceId(pod.getInstanceId());
podCleanInfo.setCleanCycle(MapUtils.getDoubleValue(attrMap, "podCleanCycle"));
podCleanInfo.setNamedSpace(namedObjectManager.getNamedSpace(facilityRrn, ObjectList.ENTITY_KEY));
pcdManager.updatePcdCleanInfo(transRrn, podCleanInfo);
// insert into Transaction Log
transactionLogManager.markTransactionLog(transactionLog);
}
@Override
public void addPodEntity(Map<String, Object> attrMap, Long facilityRrn, String user) {
Map<String, Object> resultMap = new HashMap<String, Object>();
String allowableEventId = MapUtils.getString(attrMap, "podAllowableEvent").toUpperCase().trim();
String engineerGroupId = MapUtils.getString(attrMap, "podEngineerGroupID").toUpperCase().trim();
long allowableEventRrn = namedObjectManager.getNamedObjectRrn(allowableEventId, namedObjectManager
.getNamedSpace(facilityRrn,
ObjectList.ALLOWABLEEVENTSET_KEY),
ObjectList.ALLOWABLEEVENTSET_KEY.toString());
long engineerGroupRrn = namedObjectManager.getNamedObjectRrn(engineerGroupId, namedObjectManager
.getNamedSpace(facilityRrn, ObjectList.USERGROUP_KEY), ObjectList.USERGROUP_KEY);
Assert.isFalse(allowableEventRrn <= 0,
Errors.create().key(MessageIdList.CARRIER_ALLOWABLE_EVENT_EMPTY).content("允许事件集号不能为空!").build());
Assert.isFalse(StringUtils.isNotBlank(engineerGroupId) && engineerGroupRrn <= 0,
Errors.create().key(MessageIdList.ENGINEERGROUP_ENGINEER_GROUP_MISSING).content("工程师组无效!")
.build());
POD pod = new POD();
pod.setAllowableEventsId(allowableEventId);
pod.setAllowableEventsRrn(allowableEventRrn);
pod.setCarrierCode(MapUtils.getString(attrMap, "podColor"));
pod.setInstanceId(MapUtils.getString(attrMap, "podId").toUpperCase().trim());
pod.setInstanceDesc(MapUtils.getString(attrMap, "podDesc"));
pod.setInstanceStatus("ACTIVE");
pod.setNamedSpace(namedObjectManager.getNamedSpace(facilityRrn, ObjectList.ENTITY_KEY));
pod.setObject(ObjectList.ENTITY_KEY);
pod.setObjectType(ObjectList.POD_KEY);
// carrier.setObjectSubtype(Objects);
pod.setPollutionLevel(MapUtils.getString(attrMap, "podPollutionLevel"));
pod.setPodStatus(PcdStatus.FREE_KEY);
pod.setTransId(TransactionNames.CREATE_KEY);
pod.setTransPerformedby(user);
pod.setObjectSubtype(MapUtils.getString(attrMap, "podType"));
pod.setMaintenanceEngineerId(engineerGroupId);
pod.setMaintenanceEngineerRrn(engineerGroupRrn);
pod.setFlagType(MapUtils.getString(attrMap, "podCategory"));
pod.setCleanCycle(MapUtils.getDoubleValue(attrMap, "podCleanCycle"));
insertPod(pod, facilityRrn);
}
@Override
public long insertPod(POD pod, Long facilityRrn) {
long instanceRrn = 0;
TransactionLog transactionLog = transactionLogManager
.startTransactionLog(pod.getTransPerformedby(), pod.getTransId());
instanceRrn = namedObjectManager.insertNamedObject(pod, transactionLog.getTransRrn());
pod.setInstanceRrn(instanceRrn);
// main or history table handle
pcdManager.insertPcdNamedObjectExt(pod.getInstanceRrn(), pod.getFlagType(), pod.getDmmType());
entityManager.insertParentEntity(pod, transactionLog.getTransRrn(), instanceRrn);
entityManager.insertEntityHistory(pod, transactionLog.getTransRrn(), instanceRrn);
podDao.insertPod(pod, transactionLog.getTransRrn());
pcdManager.addPcdCleanInfo(instanceRrn, transactionLog.getTransRrn(), facilityRrn, ObjectList.POD_KEY,
pod.getCleanCycle());
// mark transaction end flag
transactionLogManager.markTransactionLog(transactionLog);
return instanceRrn;
}
@Override
public void deletePod(POD pod) {
// get the transaction log
TransactionLog transactionLog = transactionLogManager
.startTransactionLog(pod.getTransPerformedby(), pod.getTransId());
// delete the named object.
long transRrn = transactionLog.getTransRrn();
podDao.deletePod(pod, transRrn);
entityManager.deleteEntityOnly(pod.getInstanceRrn());
entityManager.deleteEntityConstraints(pod.getInstanceRrn());
namedObjectManager.deleteNamedObject(pod, transRrn);
pcdManager.deletePcdCleanInfo(pod.getInstanceRrn(), transRrn);
// insert into Transaction Log
transactionLogManager.markTransactionLog(transactionLog);
}
@Override
public Map<String, Object> getPodInfoDetailById(String podId, String namedSpace) {
Map<String, Object> dataMap = qryPodInfoDetailById(podId, namedSpace);
PcdAssembly pcdAssembly = pcdManager.getPcdAssembly(null, MapUtils.getLong(dataMap, "podRrn"), null);
if (pcdAssembly != null) {
dataMap.put("carrierId", pcdAssembly.getCarrierId());
dataMap.put("doorId", pcdAssembly.getDoorId());
if (pcdManager.isPcdCleaningTimeIsLessThan3Days(pcdAssembly.getCarrierRrn())) {
dataMap.put("carrierCleanRedFlag", "1");
}
if (pcdManager.isPcdCleaningTimeIsLessThan3Days(pcdAssembly.getDoorRrn())) {
dataMap.put("doorCleanRedFlag", "1");
}
}
if (pcdManager.isPcdCleaningTimeIsLessThan3Days(MapUtils.getLong(dataMap, "podRrn"))) {
dataMap.put("podCleanRedFlag", "1");
}
return dataMap;
}
@Override
public List<Map> getAllPod(Map<String, Object> getAllPodMap) {
return podDao.getPodListByPage(getAllPodMap, 0, Integer.MAX_VALUE);
}
@Override
public String generatePodId(String prefix, int width) {
String newPodId= podDao.generatePodId(prefix,width);
Assert.isFalse(StringUtils.contains(newPodId,"-1"),Errors.create().key(MessageIdList.PCD_POD_OUT_OF_MAX).content("Error, Maximum upper limit").build());
return newPodId;
}
}