ResistStatusManagerImpl.java
package com.mycim.server.resist.manager.impl;
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.server.base.manager.EventManager;
import com.mycim.server.base.manager.NamedObjectManager;
import com.mycim.server.base.manager.TransactionLogManager;
import com.mycim.server.ems.manager.EntityManager;
import com.mycim.server.resist.dao.ResistStatusDao;
import com.mycim.server.resist.manager.ResistManager;
import com.mycim.server.resist.manager.ResistStatusManager;
import com.mycim.valueobject.MessageIdList;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.bas.TransactionLog;
import com.mycim.valueobject.consts.ObjectStatus;
import com.mycim.valueobject.consts.TransactionNames;
import com.mycim.valueobject.ems.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
/**
* @author can.yang
*/
@Transactional
@Service
public class ResistStatusManagerImpl implements ResistStatusManager {
@Autowired
ResistStatusDao resistStatusDao;
@Autowired
NamedObjectManager namedObjectManager;
@Autowired
TransactionLogManager transactionLogManager;
@Autowired
EventManager eventManager;
@Autowired
EntityManager entityManager;
@Autowired
ResistManager resistManager;
@Override
public void insertResistStatus(Long eventRrn, ResistStatus resistStatus, TransactionLog transactionLog) {
resistStatusDao.insertResistStatus(eventRrn, resistStatus, transactionLog);
}
@Override
public void initInsertResistStatusH(ResistStatus resistStatus, TransactionLog transactionLog) {
resistStatusDao.initInsertResistStatusH(resistStatus, transactionLog);
}
@Override
public void updateResistStatus(ResistStatus resistStatus, TransactionLog transactionLog) {
resistStatusDao.updateResistStatus(resistStatus, transactionLog);
}
@Override
public ResistStatus getResistStatus(ResistStatus resistStatus) {
return resistStatusDao.getResistStatus(resistStatus);
}
@Override
public String getPreResistStatus(ResistStatus resistStatus) {
return resistStatusDao.getPreResistStatus(resistStatus);
}
@Override
public void initResistStatus(String eventId, Resist resist) {
TransactionLog transactionLog = transactionLogManager
.startTransactionLog(LocalContext.getUserId(), "INITIALIZE");
Long eventRrn = new Long(
namedObjectManager.getNamedObjectRrn(eventId, resist.getNamedSpace(), ObjectList.EVENT_KEY));
Assert.isFalse(eventRrn == 0, Errors.create().content("Event: {} not found").args(eventId).build());
ResistStatus resistStatus = new ResistStatus();
resistStatus.setResistSysRrn(resist.getInstanceRrn());
//插入RESIST_STATUS表中
insertResistStatus(eventRrn, resistStatus, transactionLog);
//插入RESIST_STATUS_表中
initInsertResistStatusH(resistStatus, transactionLog);
HashMap<String, Object> map = MapUtils.newHashMap();
Event event = new Event();
event.setInstanceRrn(eventRrn);
event.setEntityType(resist.getObjectType());
event = eventManager.getEvent(event);
map.put("transrrn", transactionLog.getTransRrn());
map.put("lastUpdateTime", transactionLog.getTransStartTimestamp());
map.put("entityrrn", resist.getInstanceRrn());
map.put("eventrrn", eventRrn);
map.put("entityavailablebefore", event.getValidAvailability());
map.put("entityavailableafter", event.getTargetAvailability());
entityManager.insertEntityEventHistoty(map);
transactionLogManager.markTransactionLog(transactionLog);
}
@Override
public long changeResistStatus(Resist resist, String objectType, String eventId, String comments) {
TransactionLog transactionLog = transactionLogManager
.startTransactionLog(LocalContext.getUserId(), TransactionNames.LOGEVENT_KEY);
long transRrn = transactionLog.getTransRrn();
Event event = new Event();
long eventRrn = namedObjectManager.getNamedObjectRrn(eventId, namedObjectManager
.getNamedSpace(LocalContext.getFacilityRrn(), ObjectList.EVENT_KEY), ObjectList.EVENT_KEY);
event.setInstanceRrn(eventRrn);
event.setEntityType(objectType);
event = eventManager.getEvent(event);
Assert.isFalse(event == null || event.getInstanceRrn() <= 0,
Errors.create().content("Event ID not found!").build());
List<EventModel> resistEventModels = resistManager.getResistEventModels(eventRrn, resist.getInstanceRrn());
event.setEventModels(resistEventModels);
List<ResistStatus> resistStatuss = new ArrayList();
List<EventModel> eventModels = (List<EventModel>) event.getEventModels();
for (EventModel eventModel : eventModels) {
ResistStatus resistStatus = new ResistStatus();
resistStatus.setStatusGroupId(eventModel.getStatusGroupId());
resistStatus.setCurrentStatus(eventModel.getTargetStatus());
resistStatus.setStatusBefore(eventModel.getCurrentStatus());
resistStatus.setResistSysRrn(resist.getInstanceRrn());
resistStatuss.add(resistStatus);
}
//check Event
checkResistEnableLogEvent(eventRrn, resist.getInstanceRrn());
HashMap<String, Object> eventHMap = MapUtils.newHashMap();
eventHMap.put("transrrn", transRrn);
eventHMap.put("lastUpdateTime", transactionLog.getTransStartTimestamp());
eventHMap.put("eventrrn", event.getInstanceRrn());
eventHMap.put("entityavailablebefore", event.getValidAvailability());
eventHMap.put("entityavailableafter", event.getTargetAvailability());
entityManager.insertEntityEventHistoty(eventHMap);
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("event", event);
map.put("user", resist.getModifyBy());
map.put("comments", comments);
map.put("entityrrn", resist.getInstanceRrn());
for (ResistStatus status : resistStatuss) {
updateResistStatus(status, transactionLog);
resistStatusDao.insertResistStatusH(eventRrn, status, transactionLog);
}
transactionLogManager.markTransactionLog(transactionLog);
return transRrn;
}
public void checkResistEnableLogEvent(long eventRrn, long resistRrn) {
Entity entity = new Entity();
Event myevent = new Event();
Resist resist = new Resist();
resist.setInstanceRrn(resistRrn);
myevent.setInstanceRrn(eventRrn);
resist = resistManager.getResistByResistRrn(resistRrn);
Assert.isFalse(resist == null, Errors.create().key(MessageIdList.ENTITY_MISSING).content("找不到entity").build());
myevent.setEntityType(resist.getObjectType());
myevent = eventManager.getEvent(myevent);
Assert.isFalse(myevent == null, Errors.create().key(MessageIdList.EVENT_MISSING).content("找不到事件").build());
if (resist.getInstanceId() == null) {
resist.setInstanceId(StringUtils.EMPTY);
}
if (resist.getInstanceStatus() == null) {
resist.setInstanceStatus("ACTIVE");
}
Assert.isFalse(resist.getInstanceStatus().equalsIgnoreCase(ObjectStatus.HOLD_KEY),
Errors.create().key(MessageIdList.ENTITY_STATUS_HOLD).content("实体{}状态是hold")
.args(resist.getInstanceId()).build());
Assert.isFalse(eventManager.getEventAndEntityStatus(new Long(myevent.getInstanceRrn()),
new Long(resist.getInstanceRrn())) == null,
Errors.create().key(MessageIdList.EQUIPMENT_STATUS_INVALID).content("设备{}当前状态无效")
.args(resist.getInstanceId()).build());
}
}