Commit 279c1b34 authored by 高建强's avatar 高建强

item:应急处置移动端功能新增

parent 8a88dd07
package com.yeejoin.amos.fas.dao.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.List;
/**
* 货架结构
*
* @author wujiang
* @date 2020-07-07
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("wl_warehouse_structure")
@ApiModel(value = "WarehouseStructure对象", description = "货架结构")
public class WarehouseStructure extends BaseEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "位置编码")
private String code;
@ApiModelProperty(value = "名称")
private String name;
@ApiModelProperty(value = "全称")
private String fullName;
@ApiModelProperty(value = "父ID")
private Long parentId;
@ApiModelProperty(value = "位置类型")
private Long cellType;
@ApiModelProperty(value = "货位code")
private String cellCode;
@ApiModelProperty(value = "仓库ID")
private Long warehouseId;
//新加
@ApiModelProperty(value = "机构/部门名称")
@TableField("biz_org_name")
private String bizOrgName;
@ApiModelProperty(value = "机构编码")
@TableField("biz_org_code")
private String bizOrgCode;
private String remark;
@ApiModelProperty(value = "预控系统中的ID字段")
private Long sourceId;
@ApiModelProperty(value = "预控系统中的code字段")
private String sourceCode;
@TableField(exist = false)
private List<WarehouseStructure> children;
}
......@@ -17,7 +17,6 @@ import com.yeejoin.amos.fas.business.action.result.ActionResult;
import com.yeejoin.amos.fas.business.action.result.SafteyPlanResult;
import com.yeejoin.amos.fas.business.action.result.message.AbstractActionResultMessage;
import com.yeejoin.amos.fas.business.action.util.ContingencyLogPublisher;
import com.yeejoin.amos.fas.business.controller.ContingencyPlanController;
import com.yeejoin.amos.fas.business.dao.mapper.PlanDetailMapper;
import com.yeejoin.amos.fas.business.dao.mapper.PlanOperationRecordMapper;
import com.yeejoin.amos.fas.business.dao.repository.IPlanDetailDao;
......@@ -25,6 +24,8 @@ import com.yeejoin.amos.fas.business.dao.repository.IPlanOperationRecordDao;
import com.yeejoin.amos.fas.business.feign.IDutyModeServer;
import com.yeejoin.amos.fas.business.feign.JcsFeign;
import com.yeejoin.amos.fas.business.feign.RemoteSecurityService;
import com.yeejoin.amos.fas.business.jpush.JPushTypeEnum;
import com.yeejoin.amos.fas.business.jpush.PushMsgParam;
import com.yeejoin.amos.fas.business.service.impl.RuleRunigSnapshotServiceImpl;
import com.yeejoin.amos.fas.business.service.intfc.*;
import com.yeejoin.amos.fas.business.service.model.ContingencyDeviceStatus;
......@@ -36,7 +37,6 @@ import com.yeejoin.amos.fas.business.vo.Toke;
import com.yeejoin.amos.fas.common.enums.ContingencyPlanStatusEnum;
import com.yeejoin.amos.fas.common.enums.PlanRecordStatusEnum;
import com.yeejoin.amos.fas.core.enums.NumberEnum;
import com.yeejoin.amos.fas.core.util.CommonResponse;
import com.yeejoin.amos.fas.core.util.DateUtil;
import com.yeejoin.amos.fas.core.util.ResponseModel;
import com.yeejoin.amos.fas.dao.entity.ContingencyPlanInstance;
......@@ -45,6 +45,7 @@ import com.yeejoin.amos.fas.dao.entity.PlanDetail;
import com.yeejoin.amos.fas.dao.entity.PlanOperationRecord;
import com.yeejoin.amos.fas.datasync.bo.PlanDetailSyncBo;
import com.yeejoin.amos.fas.datasync.bo.PlanOperationRecordSyncBo;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -132,7 +133,7 @@ public class ContingencyAction implements CustomerAction {
private IPlanVisual3dService iPlanVisual3dService;
@Autowired
private ContingencyPlanController contingencyPlanController;
private ContingencyInstanceInfoService contingencyInstanceInfoService;
@Value("${rocket-plan-topic}")
private String rocketTopic;
......@@ -473,6 +474,7 @@ public class ContingencyAction implements CustomerAction {
String batchNo = contingencyRo.getBatchNo();
if (!findByBatchNoAndStatus(batchNo)) {
stopSnapshop(contingencyRo);
String buttonCode = contingencyRo.getButtonCode();
//转换content中的变量
tips = instedParams(tips, contingencyRo);
......@@ -491,8 +493,12 @@ public class ContingencyAction implements CustomerAction {
this.sendcmd("optionarea", paramObj, result);
//极光推送
Object messageInfo = contingencyPlanController.getUserOperateCountAndPlanName().getResult();
iPlanVisual3dService.sendMessage(JSONUtil.toJson(messageInfo), contingencyRo.getButtonCode());
iPlanVisual3dService.sendMessage(buttonCode);
PushMsgParam pushMsgParam = new PushMsgParam();
pushMsgParam.setSubject("应急处置执行任务提醒");
pushMsgParam.setContent("【" + actionName + "】- " + DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
pushMsgParam.setType(JPushTypeEnum.TAG.getCode());
iPlanVisual3dService.sendMessage(buttonCode, pushMsgParam);
}
}
......@@ -682,6 +688,7 @@ public class ContingencyAction implements CustomerAction {
public void stopPlan(@MethodParam(paramLabel = "对象") Object paramObj) {
ContingencyRo contingencyRo = (ContingencyRo) paramObj;
stopSnapshop(contingencyRo);
String batchNo = contingencyRo.getBatchNo();
SafteyPlanResult result = new SafteyPlanResult();
Map<String, Object> tempmap1 = new HashMap<>();
......@@ -707,7 +714,7 @@ public class ContingencyAction implements CustomerAction {
}
// 结束预案 更新预案记录表,预案状态
PlanOperationRecord PlanOperationRecord = planOperationRecordDao.findByBatchNo(contingencyRo.getBatchNo());
PlanOperationRecord PlanOperationRecord = planOperationRecordDao.findByBatchNo(batchNo);
if (PlanOperationRecord != null && PlanOperationRecord.getStatus() == PlanRecordStatusEnum.OPERATION.getCode()) {
PlanOperationRecord.setStatus(PlanRecordStatusEnum.COMPLETE.getCode());
PlanOperationRecord.setEndTime(new Date());
......@@ -726,6 +733,8 @@ public class ContingencyAction implements CustomerAction {
this.sendweb("recordarea", paramObj, result);
}
// 结束预案,更新预案信息表结束时间
contingencyInstanceInfoService.updateEndTimeById(batchNo);
}
private void planDetailDataSync(PlanDetail detail) {
......@@ -905,8 +914,9 @@ public class ContingencyAction implements CustomerAction {
//数字预案业务屏web端发送消息
this.sendweb("recordarea", contingencyRo, result);
updateNumberPlan(batchNo);
// 应急处置中断,初始化planStep,json数据
// 应急处置中断,初始化planStep,json数据;更新预案结束时间
planRuleService.updatePlanRuleByBatchNo(batchNo);
contingencyInstanceInfoService.updateEndTimeById(batchNo);
}
/**
......
package com.yeejoin.amos.fas.business.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.fas.dao.entity.WarehouseStructure;
/**
* 货架结构 Mapper 接口
*
* @author wujiang
* @date 2020-07-07
*/
public interface WarehouseStructureMapper extends BaseMapper<WarehouseStructure> {
}
package com.yeejoin.amos.fas.business.service.impl;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
......@@ -7,9 +9,16 @@ 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.fas.business.service.intfc.IPlanRuleService;
import com.yeejoin.amos.component.feign.model.FeignClientResult;
import com.yeejoin.amos.fas.business.service.intfc.*;
import com.yeejoin.amos.fas.business.vo.PlanStepJsonVO;
import com.yeejoin.amos.fas.datasync.bo.ContingencyOriginalDataSyncBo;
import com.yeejoin.amos.feign.privilege.Privilege;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.feign.privilege.model.RoleModel;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.codehaus.jackson.map.ObjectMapper;
......@@ -18,6 +27,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
......@@ -36,9 +46,6 @@ 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.IContingencyInstance;
import com.yeejoin.amos.fas.business.service.intfc.IDataSyncService;
import com.yeejoin.amos.fas.business.service.intfc.IRocketMQService;
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;
......@@ -96,6 +103,20 @@ public class ContingencyInstanceImpl /*extends GenericManagerImpl<ContingencyPla
@Autowired
private IPlanRuleService planRuleService;
@Autowired
private ContingencyInstanceInfoService contingencyInstanceInfoService;
@Autowired
private IContingencyInstance contingencyInstance;
@Autowired
private ContingencyPlanInstanceMapper contingencyPlanInstanceMapper;
@Autowired
private IPlanVisual3dService planVisual3dService;
@Value("classpath:/json/plan-step.json")
private Resource planStepResource;
private static Map<String, String> stepMap = new HashMap<>();
......@@ -323,6 +344,8 @@ public class ContingencyInstanceImpl /*extends GenericManagerImpl<ContingencyPla
if ("END_EMERGENCY".equals(code)) {
// 应急处置中断,初始化planStep,json数据
planRuleService.updatePlanRuleByBatchNo(batchNo);
// 应急处置中断,更新预案信息表结束时间
contingencyInstanceInfoService.updateEndTimeById(batchNo);
}
} else {
operate.setState("disable");
......@@ -331,12 +354,15 @@ public class ContingencyInstanceImpl /*extends GenericManagerImpl<ContingencyPla
}
}
operateJson = objectMapper.writeValueAsString(operateGroup);
contingencyPlanInstance.setContent(operateJson);
if (buttonState.equals("CONFIRM")) {
contingencyPlanInstance.setRunstate(true);
ContingencyPlanInstance planInstance = contingencyInstance.updateExtendColumn(contingencyPlanInstance);
BeanUtils.copyProperties(planInstance, contingencyPlanInstance);
// 确认后,移动端极光推送
planVisual3dService.sendMessage(code);
}
operateJson = objectMapper.writeValueAsString(operateGroup);
contingencyPlanInstance.setContent(operateJson);
ContingencyPlanInstance instance = repository.save(contingencyPlanInstance);
// 异步数据同步之消息发送
contingencyPlanInstanceDataSync(instance);
......@@ -409,6 +435,46 @@ public class ContingencyInstanceImpl /*extends GenericManagerImpl<ContingencyPla
return Optional.empty();
}
@Override
public ContingencyPlanInstance updateExtendColumn(ContingencyPlanInstance contingencyPlanInstance) {
FeignClientResult<AgencyUserModel> feignClientResult = Privilege.agencyUserClient.getme();
AgencyUserModel user = (AgencyUserModel) feignClientResult.getResult();
String json = "";
try {
json = IOUtils.toString(planStepResource.getInputStream(), String.valueOf(StandardCharsets.UTF_8));
} catch (IOException e) {
throw new RuntimeException("获取预案相关角色信息失败!");
}
List<PlanStepJsonVO> result = JSONObject.parseArray(json, PlanStepJsonVO.class);
List<String> roleCode = result.stream().map(PlanStepJsonVO::getRoleCode).distinct().collect(Collectors.toList());
List<RoleModel> roleModelList = new ArrayList<>();
for (Long key : user.getOrgRoles().keySet()) {
roleModelList.addAll(user.getOrgRoles().get(key));
}
List<String> roleCodeList = new ArrayList<>();
List<String> roleNameList = new ArrayList<>();
List<String> realRoleCode = roleModelList.stream().map(RoleModel::getRoleName).distinct().collect(Collectors.toList());
realRoleCode.forEach(item -> {
if (roleCode.contains(item)) {
roleCodeList.add(item);
}
});
roleModelList.forEach(item -> {
if (!roleNameList.contains(item.getRoleDesc()) && roleCode.contains(item.getRoleName())) {
roleNameList.add(item.getRoleDesc());
}
});
contingencyPlanInstance.setRoleCode(String.join(",", roleCodeList));
contingencyPlanInstance.setRoleName(String.join(",", roleNameList));
contingencyPlanInstance.setStartUserId(user.getUserId());
contingencyPlanInstance.setStartUserId(user.getRealName());
Map<String, String> userInfo = contingencyPlanInstanceMapper.getUserByUserId(user.getUserId());
contingencyPlanInstance.setPersonImg(userInfo.get("personImg"));
return contingencyPlanInstance;
}
private void sendPlanAlarm(String batchNo, String buttonCode) {
//确警后推送报警数据
List<FirePlanAlarmBo> list = new ArrayList<FirePlanAlarmBo>();
......
......@@ -8,6 +8,7 @@ import com.yeejoin.amos.fas.dao.entity.ContingencyInstanceInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
......@@ -54,4 +55,14 @@ public class ContingencyInstanceInfoServiceImpl implements ContingencyInstanceIn
return contingencyInstanceInfoMapper.updateDisposalDetails(contingencyInstanceInfo);
}
@Override
public Boolean updateEndTimeById(String id) {
ContingencyInstanceInfo instanceInfo = selectDisposalDetails(id);
if (instanceInfo != null) {
instanceInfo.setEndTime(new Date());
return contingencyInstanceInfoMapper.updateDisposalDetails(instanceInfo);
}
return false;
}
}
......@@ -61,6 +61,8 @@ public class ContingencyPlanServiceImpl implements IContingencyPlanService {
@Autowired
private EquipmentSpecificMapper equipmentSpecificMapper;
@Autowired
private WarehouseStructureMapper warehouseStructureMapper;
@Autowired
private IEquipmentHandlerService equipmentHandlerService;
@Autowired
private IContingencyPlanInstanceRepository repository;
......@@ -69,6 +71,9 @@ public class ContingencyPlanServiceImpl implements IContingencyPlanService {
@Qualifier("contingencyAction")
@Autowired
private CustomerAction customerAction;
@Autowired
private ContingencyInstanceInfoService contingencyInstanceInfoService;
@Value("${systemctl.sync.switch}")
......@@ -167,18 +172,25 @@ public class ContingencyPlanServiceImpl implements IContingencyPlanService {
return result;
}
}
String specificCode = equipmentSpecific.getCode();
String specificName = equipmentSpecific.getName();
Date date = new Date();
// 插入预案基本信息
ContingencyInstanceInfo instanceInfo = new ContingencyInstanceInfo();
instanceInfo.setStartTime(date);
instanceInfo.setEquipmentCode(specificCode);
instanceInfo.setEquipmentName(specificName);
//插入运行记录表
PlanOperationRecord PlanOperationRecord = new PlanOperationRecord();
PlanOperationRecord.setStatus(PlanRecordStatusEnum.OPERATION.getCode());
PlanOperationRecord.setPlanId(PlanDetailOp.get().getId());
PlanOperationRecord.setIsDelete(false);
PlanOperationRecord.setStartTime(new Date());
PlanOperationRecord.setStartTime(date);
PlanOperationRecord.setPlanPattern(vo.getStatus());
PlanOperationRecord.setStartUserId(vo.getUserId());
PlanOperationRecord.setStartUserName(vo.getUserName());
PlanOperationRecord.setEquipmentCode(equipmentSpecific.getCode());
PlanOperationRecord.setEquipmentName(equipmentSpecific.getName());
PlanOperationRecord.setEquipmentCode(specificCode);
PlanOperationRecord.setEquipmentName(specificName);
PlanOperationRecord.setEquipmentId(equipmentSpecific.getId());
PlanOperationRecord.setFireEquipmentId(equipment.getId());
if (ContingencyPlanStatusEnum.SIMULATION_START.getCode().equals(vo.getStatus())) {
......@@ -204,6 +216,15 @@ public class ContingencyPlanServiceImpl implements IContingencyPlanService {
//更新预案执行记录表的批次号
operationRecord.setBatchNo(batchNo);
PlanOperationRecord record = planOperationRecordDao.save(operationRecord);
// 保存预案基本信息
instanceInfo.setId(batchNo);
instanceInfo.setName(detail.getPlanName());
instanceInfo.setOrgCode(detail.getOrgCode());
WarehouseStructure warehouseStructure = warehouseStructureMapper.selectById(equipmentSpecific.getWarehouseStructureId());
if (warehouseStructure != null) {
instanceInfo.setPosition(warehouseStructure.getName());
}
contingencyInstanceInfoService.addDisposalDetails(instanceInfo);
// 异步数据同步之消息发送
planOperationRecordDataSync(record);
result.setMessage(ReserveEnum.RUN.getText());
......
......@@ -494,6 +494,37 @@ public class PlanVisual3dServiceImpl implements IPlanVisual3dService {
@Override
public void sendMessage(String json, String buttonCode) {
String userIdsJoin = getUserIds(buttonCode);
//极光推送
PushMsgParam pushMsgParam = new PushMsgParam();
pushMsgParam.setRecivers(Arrays.asList(userIdsJoin.split(",")));
pushMsgParam.setContent(json);
pushMsgParam.setSubject("REPLYMESSAGE");
pushMsgParam.setType(JPushTypeEnum.REPLY_MESSAGE.getCode());
pushFeign.sendMessageone(pushMsgParam);
}
@Override
public void sendMessage(String buttonCode) {
String userIdsJoin = getUserIds(buttonCode);
//极光推送
PushMsgParam pushMsgParam = new PushMsgParam();
pushMsgParam.setRecivers(Arrays.asList(userIdsJoin.split(",")));
pushMsgParam.setContent(JPushTypeEnum.ALL.getName());
pushMsgParam.setSubject(JPushTypeEnum.ALL.getName());
pushMsgParam.setType(JPushTypeEnum.ALL.getCode());
pushFeign.sendMessageone(pushMsgParam);
}
@Override
public void sendMessage(String buttonCode, PushMsgParam pushMsgParam) {
String userIdsJoin = getUserIds(buttonCode);
//极光推送
pushMsgParam.setRecivers(Arrays.asList(userIdsJoin.split(",")));
pushFeign.sendMessageone(pushMsgParam);
}
private String getUserIds(String buttonCode) {
String planStepJson = "";
try {
planStepJson = IOUtils.toString(planStepResource.getInputStream(), String.valueOf(StandardCharsets.UTF_8));
......@@ -505,12 +536,6 @@ public class PlanVisual3dServiceImpl implements IPlanVisual3dService {
String roleJoin = String.join(",", collect);
// TODO: 2022/10/19 根据多个角色code查询用户ids
String userIdsJoin = "";
//极光推送
PushMsgParam pushMsgParam = new PushMsgParam();
pushMsgParam.setRecivers(Arrays.asList(userIdsJoin.split(",")));
pushMsgParam.setContent(json);
pushMsgParam.setSubject("REPLYMESSAGE");
pushMsgParam.setType(JPushTypeEnum.REPLY_MESSAGE.getCode());
pushFeign.sendMessageone(pushMsgParam);
return userIdsJoin;
}
}
......@@ -14,4 +14,11 @@ public interface ContingencyInstanceInfoService {
Boolean updateDisposalDetails(ContingencyInstanceInfo contingencyInstanceInfo);
/**
* 通过ID更新预案的结束时间
* @param id
* @return
*/
Boolean updateEndTimeById(String id);
}
......@@ -24,4 +24,11 @@ public interface IContingencyInstance {
void updateStep(String step, String batchNo);
Optional<Equipment> fire(String batchNo, String stepCode, String contingencyPlanId, String buttonCode, String buttonState, String stepStateOnbutton, String token, String product) throws Exception;
/**
* 扩展属性赋值
* @param contingencyPlanInstance
* @return
*/
ContingencyPlanInstance updateExtendColumn(ContingencyPlanInstance contingencyPlanInstance);
}
......@@ -3,6 +3,7 @@ package com.yeejoin.amos.fas.business.service.intfc;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.fas.business.jpush.PushMsgParam;
import com.yeejoin.amos.fas.business.service.model.ToipResponse;
import com.yeejoin.amos.fas.business.vo.PlanStepVo;
import com.yeejoin.amos.fas.business.vo.TreeSubjectVo;
......@@ -102,4 +103,17 @@ public interface IPlanVisual3dService {
* @param buttonCode 按钮编码
*/
void sendMessage(String json, String buttonCode);
/**
* 极光推送
* @param buttonCode 按钮编码
*/
void sendMessage(String buttonCode);
/**
* 极光推送
* @param buttonCode 按钮编码
* @param pushMsgParam 消息体
*/
void sendMessage(String buttonCode, PushMsgParam pushMsgParam);
}
......@@ -29,6 +29,9 @@ public class EquipmentSpecificForRiskVo {
@ApiModelProperty(value = "detailid")
private Long equipmentDetailId;
@ApiModelProperty(value = "warehouseStructureId")
private Long warehouseStructureId;
@ApiModelProperty(value = "二维码")
private String qrCode;
......
......@@ -220,6 +220,7 @@
wes.code as code,
wes.org_code as orgCode,
wes.equipment_code as equipmentCode,
wes.warehouse_structure_id,
IF(substr(wes.equipment_code ,1,4) = '9204','true','false') as push3D
from
wl_equipment_specific wes
......
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