Commit 9b11b276 authored by 高建强's avatar 高建强

item:应急处置同步调整提交

parent e88bf8f3
package com.yeejoin.amos.fas.business.service.impl; package com.yeejoin.amos.fas.business.service.impl;
import java.io.IOException; import com.alibaba.fastjson.JSONObject;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import com.yeejoin.amos.component.feign.model.FeignClientResult; import com.yeejoin.amos.component.feign.model.FeignClientResult;
import com.yeejoin.amos.component.rule.RuleTrigger;
import com.yeejoin.amos.fas.business.action.ContingencyAction;
import com.yeejoin.amos.fas.business.action.model.ContingencyEvent;
import com.yeejoin.amos.fas.business.action.model.ContingencyRo;
import com.yeejoin.amos.fas.business.action.mq.WebMqttComponent; import com.yeejoin.amos.fas.business.action.mq.WebMqttComponent;
import com.yeejoin.amos.fas.business.action.util.ContingencyLogPublisher;
import com.yeejoin.amos.fas.business.bo.FirePlanAlarmBo;
import com.yeejoin.amos.fas.business.dao.mapper.*;
import com.yeejoin.amos.fas.business.dao.repository.IContingencyOriginalDataDao;
import com.yeejoin.amos.fas.business.dao.repository.IContingencyPlanInstanceRepository;
import com.yeejoin.amos.fas.business.feign.RemoteSecurityService;
import com.yeejoin.amos.fas.business.service.intfc.*; import com.yeejoin.amos.fas.business.service.intfc.*;
import com.yeejoin.amos.fas.business.service.model.Operate;
import com.yeejoin.amos.fas.business.service.model.OperateGroup;
import com.yeejoin.amos.fas.business.util.DateUtils;
import com.yeejoin.amos.fas.business.vo.PlanStepJsonVO; import com.yeejoin.amos.fas.business.vo.PlanStepJsonVO;
import com.yeejoin.amos.fas.business.vo.Toke;
import com.yeejoin.amos.fas.common.enums.PlanReplyMessageEnum; import com.yeejoin.amos.fas.common.enums.PlanReplyMessageEnum;
import com.yeejoin.amos.fas.dao.entity.ContingencyOriginalData;
import com.yeejoin.amos.fas.dao.entity.ContingencyPlanInstance;
import com.yeejoin.amos.fas.dao.entity.Equipment;
import com.yeejoin.amos.fas.datasync.bo.ContingencyOriginalDataSyncBo; import com.yeejoin.amos.fas.datasync.bo.ContingencyOriginalDataSyncBo;
import com.yeejoin.amos.feign.privilege.Privilege; import com.yeejoin.amos.feign.privilege.Privilege;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel; import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
...@@ -33,28 +40,15 @@ import org.springframework.core.io.Resource; ...@@ -33,28 +40,15 @@ import org.springframework.core.io.Resource;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import org.typroject.tyboot.core.foundation.context.RequestContext; import org.typroject.tyboot.core.foundation.context.RequestContext;
import com.alibaba.fastjson.JSONObject; import java.io.IOException;
import com.yeejoin.amos.component.rule.RuleTrigger; import java.nio.charset.StandardCharsets;
import com.yeejoin.amos.fas.business.action.ContingencyAction; import java.util.*;
import com.yeejoin.amos.fas.business.action.model.ContingencyEvent; import java.util.stream.Collectors;
import com.yeejoin.amos.fas.business.action.model.ContingencyRo;
import com.yeejoin.amos.fas.business.action.util.ContingencyLogPublisher;
import com.yeejoin.amos.fas.business.bo.FirePlanAlarmBo;
import com.yeejoin.amos.fas.business.dao.mapper.*;
import com.yeejoin.amos.fas.business.dao.repository.IContingencyOriginalDataDao;
import com.yeejoin.amos.fas.business.dao.repository.IContingencyPlanInstanceRepository;
import com.yeejoin.amos.fas.business.feign.RemoteSecurityService;
import com.yeejoin.amos.fas.business.service.model.Operate;
import com.yeejoin.amos.fas.business.service.model.OperateGroup;
import com.yeejoin.amos.fas.business.util.DateUtils;
import com.yeejoin.amos.fas.business.vo.Toke;
import com.yeejoin.amos.fas.dao.entity.ContingencyOriginalData;
import com.yeejoin.amos.fas.dao.entity.ContingencyPlanInstance;
import com.yeejoin.amos.fas.dao.entity.Equipment;
@Service @Service
public class ContingencyInstanceImpl implements IContingencyInstance { public class ContingencyInstanceImpl implements IContingencyInstance {
...@@ -247,7 +241,12 @@ public class ContingencyInstanceImpl implements IContingencyInstance { ...@@ -247,7 +241,12 @@ public class ContingencyInstanceImpl implements IContingencyInstance {
BeanUtils.copyProperties(contingencyOriginalData, contingencyRo); BeanUtils.copyProperties(contingencyOriginalData, contingencyRo);
contingencyRo.setStep(stepCode); contingencyRo.setStep(stepCode);
contingencyRo.setStepState(stepMap.get(stepKey)); contingencyRo.setStepState(stepMap.get(stepKey));
// contingencyRo.setIsMock(true); Object isMock = redisTemplate.opsForValue().get("isMock");
if (isMock != null) {
contingencyRo.setIsMock("1".equals(isMock.toString()));
} else {
contingencyRo.setIsMock(false);
}
log.info("stepstate:" + contingencyRo.getStepState()); log.info("stepstate:" + contingencyRo.getStepState());
log.info("stepCode:" + stepCode); log.info("stepCode:" + stepCode);
equipment = impAndFireEquipMapper.queryImpEqumtByFireEquipmt(Long.parseLong(contingencyRo.getFireEquipmentId())); equipment = impAndFireEquipMapper.queryImpEqumtByFireEquipmt(Long.parseLong(contingencyRo.getFireEquipmentId()));
...@@ -326,7 +325,7 @@ public class ContingencyInstanceImpl implements IContingencyInstance { ...@@ -326,7 +325,7 @@ public class ContingencyInstanceImpl implements IContingencyInstance {
contingencyLogPublisher.publish(event); contingencyLogPublisher.publish(event);
} }
@Transactional
public void setButtonExecuted(String batchNo, String contingencyPlanId, String code, String buttonState) throws Exception { public void setButtonExecuted(String batchNo, String contingencyPlanId, String code, String buttonState) throws Exception {
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
Optional<ContingencyPlanInstance> contingencyPlanInstance1 = repository.findById(contingencyPlanId); Optional<ContingencyPlanInstance> contingencyPlanInstance1 = repository.findById(contingencyPlanId);
...@@ -370,8 +369,6 @@ public class ContingencyInstanceImpl implements IContingencyInstance { ...@@ -370,8 +369,6 @@ public class ContingencyInstanceImpl implements IContingencyInstance {
contingencyPlanInstance.setContent(operateJson); contingencyPlanInstance.setContent(operateJson);
if (buttonState.equals("CONFIRM")) { if (buttonState.equals("CONFIRM")) {
contingencyPlanInstance.setRunstate(true); contingencyPlanInstance.setRunstate(true);
String topic = String.format("/%s/%s/%s", serviceName, stationName, "plan");
webMqttComponent.publish(topic, "{\"msgType\":\"operateConfirmMessage\"}");
// 满足移动端确认按钮展示,确认后,多按钮json只保留最后一个按钮 // 满足移动端确认按钮展示,确认后,多按钮json只保留最后一个按钮
planVisual3dService.updateStatusById(contingencyPlanId, true); planVisual3dService.updateStatusById(contingencyPlanId, true);
} }
...@@ -381,6 +378,21 @@ public class ContingencyInstanceImpl implements IContingencyInstance { ...@@ -381,6 +378,21 @@ public class ContingencyInstanceImpl implements IContingencyInstance {
planVisual3dService.updateStatusById(contingencyPlanId, false); planVisual3dService.updateStatusById(contingencyPlanId, false);
} }
ContingencyPlanInstance instance = repository.save(contingencyPlanInstance); ContingencyPlanInstance instance = repository.save(contingencyPlanInstance);
if (buttonState.equals("CONFIRM")) {
String topic = String.format("/%s/%s/%s", serviceName, stationName, "plan");
webMqttComponent.publish(topic, "{\"msgType\":\"operateConfirmMessage\"}");
}
// if (buttonState.equals("CONFIRM")) {
// // TODO 数字化换流站组态屏数据推送,需要在事务提交之后,否侧事务隔离查询不出数据
// TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
// @Override
// public void afterCommit() {
// // 事物提交后业务逻辑
// String topic = String.format("/%s/%s/%s", serviceName, stationName, "plan");
// webMqttComponent.publish(topic, "{\"msgType\":\"operateConfirmMessage\"}");
// }
// });
// }
// 异步数据同步之消息发送 // 异步数据同步之消息发送
contingencyPlanInstanceDataSync(instance); contingencyPlanInstanceDataSync(instance);
} }
......
...@@ -206,7 +206,9 @@ public class ContingencyPlanServiceImpl implements IContingencyPlanService { ...@@ -206,7 +206,9 @@ public class ContingencyPlanServiceImpl implements IContingencyPlanService {
deviceData.setMonitor(equipment.getName()); deviceData.setMonitor(equipment.getName());
deviceData.setId(String.valueOf(equipmentSpecific.getId())); deviceData.setId(String.valueOf(equipmentSpecific.getId()));
deviceData.setCode(equipmentSpecific.getCode()); deviceData.setCode(equipmentSpecific.getCode());
deviceData.setIsMock((vo.getStatus()==4 || "4".equals(vo.getStatus()))?true:false); boolean isMock = vo.getStatus() == 4;
deviceData.setIsMock(isMock);
redisTemplate.opsForValue().set("isMock", isMock ? "1" : "0");
String batchNo = equipmentHandlerService.executeDynamicPlan(deviceData, equipment, equipmentSpecific, toke, operationRecord.getId()); String batchNo = equipmentHandlerService.executeDynamicPlan(deviceData, equipment, equipmentSpecific, toke, operationRecord.getId());
//更新模型状态 //更新模型状态
PlanDetail planDetail = PlanDetailOp.get(); PlanDetail planDetail = PlanDetailOp.get();
......
...@@ -396,37 +396,34 @@ public class PlanVisual3dServiceImpl implements IPlanVisual3dService { ...@@ -396,37 +396,34 @@ public class PlanVisual3dServiceImpl implements IPlanVisual3dService {
@Override @Override
@Transactional @Transactional
public void updatePlanStep(String batchNo, String stepCode, String contingencyPlanId, String buttonCode) { public void updatePlanStep(String batchNo, String stepCode, String contingencyPlanId, String buttonCode) {
String json = ""; if (StringUtils.isNotBlank(batchNo) && StringUtils.isNotBlank(contingencyPlanId)) {
try { // 根据批次号查询预案步骤
json = IOUtils.toString(planStepResource.getInputStream(), String.valueOf(StandardCharsets.UTF_8)); PlanRule planRule = planOperationRecordMapper.getPlanRuleByBatchNo(batchNo);
} catch (IOException e) { if (planRule != null) {
throw new RuntimeException("获取预案相关角色信息失败!"); List<PlanStepJsonVO> list = JSONObject.parseArray(planRule.getPlanStep(), PlanStepJsonVO.class);
} List<PlanStepJsonVO> collect = list.stream().peek(x -> {
List<PlanStepJsonVO> list = JSONObject.parseArray(json, PlanStepJsonVO.class); String code = x.getStepCode();
// 获取当前步骤的数据 if (code.equals(stepCode)) {
List<PlanStepJsonVO> nowCollect = list.stream().filter(x -> stepCode.equals(x.getStepCode())).collect(Collectors.toList()); x.setTime(DateFormatUtils.format(new Date(), "HH:mm:ss"));
if (!CollectionUtils.isEmpty(nowCollect)) { x.setBatchNo(batchNo);
List<PlanStepJsonVO> collect = nowCollect.stream().peek(x -> { x.setCaseId(contingencyPlanId);
x.setTime(DateFormatUtils.format(new Date(), "HH:mm:ss")); if (buttonCode.endsWith("_NOT")) {
x.setBatchNo(batchNo); x.setCheckYesOrNo("0");
x.setCaseId(contingencyPlanId); } else {
if (buttonCode.endsWith("_NOT")) { x.setCheckYesOrNo("1");
x.setCheckYesOrNo("0"); }
} else { // 通过contingencyPlanId获取buttonJson数据
x.setCheckYesOrNo("1"); ContingencyPlanInstance planInstance = iContingencyPlanInstanceRepository.getOne(contingencyPlanId);
} x.setButtonJson(planInstance.getContent());
// 通过contingencyPlanId获取buttonJson数据 }
ContingencyPlanInstance planInstance = iContingencyPlanInstanceRepository.getOne(contingencyPlanId); // 更新进度条标志位
x.setButtonJson(planInstance.getContent()); x.setShowLine(Integer.parseInt(x.getStepCode()) <= Integer.parseInt(stepCode));
}).collect(Collectors.toList()); }).collect(Collectors.toList());
List<PlanStepJsonVO> updateCollect = collect.stream().peek(x -> { PlanStepVo planStepVo = new PlanStepVo();
// 更新进度条标志位 planStepVo.setBatchNo(batchNo);
x.setShowLine(Integer.parseInt(x.getStepCode()) <= Integer.parseInt(stepCode)); planStepVo.setPlanStep(JSON.toJSONString(collect));
}).collect(Collectors.toList()); updatePlanStep(planStepVo);
PlanStepVo planStepVo = new PlanStepVo(); }
planStepVo.setBatchNo(batchNo);
planStepVo.setPlanStep(JSON.toJSONString(updateCollect));
updatePlanStep(planStepVo);
} }
} }
......
...@@ -15,7 +15,7 @@ public class PlanStepJsonVO { ...@@ -15,7 +15,7 @@ public class PlanStepJsonVO {
private String caseId; private String caseId;
private String buttonJson; private String buttonJson;
private String time; private String time;
private boolean showLine = false; private boolean showLine;
/** /**
* 1:是,0:否 * 1:是,0:否
*/ */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment