Commit 2e410da2 authored by 李成龙's avatar 李成龙

Merge branch 'developer' of http://39.98.45.134:8090/moa/amos-boot-biz into developer

parents dc62bfad 382adbc8
...@@ -35,6 +35,7 @@ import org.typroject.tyboot.core.foundation.utils.ValidationUtil; ...@@ -35,6 +35,7 @@ import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.restful.doc.TycloudOperation; import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -131,10 +132,15 @@ public class ControllerAop { ...@@ -131,10 +132,15 @@ public class ControllerAop {
CompanyBo company = new CompanyBo(); CompanyBo company = new CompanyBo();
DepartmentBo department = new DepartmentBo(); DepartmentBo department = new DepartmentBo();
RoleBo role = new RoleBo(); RoleBo role = new RoleBo();
//平台更新 人员部门可能为NULL 导致redis缓存不到人员信息
Map<Long, List<DepartmentModel>> mapDepartments = new HashMap<>();
DepartmentModel departmentM = new DepartmentModel();
CompanyModel companyM = user.getCompanys() != null ? user.getCompanys().get(0) : null; CompanyModel companyM = user.getCompanys() != null ? user.getCompanys().get(0) : null;
Bean.copyExistPropertis(companyM, company); Bean.copyExistPropertis(companyM, company);
Map<Long, List<DepartmentModel>> mapDepartments = user.getCompanyDepartments(); if (!ValidationUtil.isEmpty(user.getCompanyDepartments())){
DepartmentModel departmentM = companyM != null ? mapDepartments.get(companyM.getSequenceNbr()).get(0) : null; mapDepartments = user.getCompanyDepartments();
departmentM = companyM != null ? mapDepartments.get(companyM.getSequenceNbr()).get(0) : null;
}
Bean.copyExistPropertis(departmentM, department); Bean.copyExistPropertis(departmentM, department);
Map<Long, List<RoleModel>> roles = user.getOrgRoles(); Map<Long, List<RoleModel>> roles = user.getOrgRoles();
Long sequenceNbr; Long sequenceNbr;
......
...@@ -774,6 +774,34 @@ public class DateUtils { ...@@ -774,6 +774,34 @@ public class DateUtils {
} }
/** /**
* 获得本天的开始时间,即2012-01-01 00:00:00
*
* @return
*/
public static Date getCurrentDayStartTime(Date date) {
try {
date = shortSdf.parse(shortSdf.format(date) + " 00:00:00");
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* 获得本天的结束时间,即2012-01-01 23:59:59
*
* @return
*/
public static Date getCurrentDayEndTime(Date date) {
try {
date = longSdf.parse(shortSdf.format(date) + " 23:59:59");
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* 获取指定时间所在周的第一天日期 * 获取指定时间所在周的第一天日期
* *
* @param date * @param date
......
package com.yeejoin.amos.boot.module.jcs.api.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import com.yeejoin.amos.boot.module.common.api.dto.AttachmentDto;
import com.yeejoin.amos.boot.module.common.api.entity.SourceFile;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.List;
import java.util.Map;
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("jc_situation_detail")
@ApiModel(value="AlertCalled对象", description="警情接警记录")
public class JcSituationDetail extends BaseEntity {
@ApiModelProperty(value = "报送内容")
private String info;
@ApiModelProperty(value = "类型")
private String infoType = "指令下发";
@ApiModelProperty(value = "警情ID")
private Long alertCalledId;
}
package com.yeejoin.amos.boot.module.jcs.api.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.boot.module.jcs.api.entity.JcSituationDetail;
public interface JcSituationDetailMapper extends BaseMapper<JcSituationDetail> {
}
...@@ -315,7 +315,7 @@ public class CarController extends AbstractBaseController { ...@@ -315,7 +315,7 @@ public class CarController extends AbstractBaseController {
if(car.getIotCode()!=null){ if(car.getIotCode()!=null){
Car ar= carMapper.getCarsByIotCode(car.getIotCode()); Car ar= carMapper.getCarsByIotCodeExcludeCarId(car.getIotCode(),car.getId());
if(ar!=null){ if(ar!=null){
throw new BadRequest("物联编码重复"); throw new BadRequest("物联编码重复");
} }
......
...@@ -37,6 +37,8 @@ public interface CarMapper extends BaseMapper<Car> { ...@@ -37,6 +37,8 @@ public interface CarMapper extends BaseMapper<Car> {
List<String> getIotCodeList(@Param("id") String id); List<String> getIotCodeList(@Param("id") String id);
Car getCarsByIotCode(@Param("iotCode") String iotCode); Car getCarsByIotCode(@Param("iotCode") String iotCode);
Car getCarsByIotCodeExcludeCarId(@Param("iotCode") String iotCode, @Param("carId") Long carId);
List<CarIndexVo> getCarsInfoByOrgCode(@Param("orgCode") String orgCode); List<CarIndexVo> getCarsInfoByOrgCode(@Param("orgCode") String orgCode);
......
...@@ -181,7 +181,7 @@ public interface IEquipmentSpecificSerivce extends IService<EquipmentSpecific> { ...@@ -181,7 +181,7 @@ public interface IEquipmentSpecificSerivce extends IService<EquipmentSpecific> {
* *
* @param indexs * @param indexs
*/ */
void updateEquipmentSpecIndexRealtimeData(List<EquipmentSpecificIndex> indexs); void updateEquipmentSpecIndexRealtimeData(EquipmentSpecificIndex index);
List<EquipmentSpecificVo> getEquipAndCarIotcodeByIotcode(String iotCode); List<EquipmentSpecificVo> getEquipAndCarIotcodeByIotcode(String iotCode);
......
...@@ -6,15 +6,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; ...@@ -6,15 +6,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mchange.lang.DoubleUtils;
import com.yeejoin.amos.boot.module.jcs.api.dto.IotSystemAlarmRo; import com.yeejoin.amos.boot.module.jcs.api.dto.IotSystemAlarmRo;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel; import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.feign.systemctl.model.DictionarieValueModel; import com.yeejoin.amos.feign.systemctl.model.DictionarieValueModel;
import com.yeejoin.amos.feign.systemctl.model.MessageModel; import com.yeejoin.amos.feign.systemctl.model.MessageModel;
import com.yeejoin.equipmanage.common.dto.UserDto; import com.yeejoin.equipmanage.common.dto.UserDto;
import com.yeejoin.equipmanage.common.entity.EquipmentSpecific; import com.yeejoin.equipmanage.common.entity.*;
import com.yeejoin.equipmanage.common.entity.EquipmentSpecificAlarm;
import com.yeejoin.equipmanage.common.entity.EquipmentSpecificAlarmLog;
import com.yeejoin.equipmanage.common.entity.EquipmentSpecificIndex;
import com.yeejoin.equipmanage.common.entity.vo.AlamVideoVO; import com.yeejoin.equipmanage.common.entity.vo.AlamVideoVO;
import com.yeejoin.equipmanage.common.enums.*; import com.yeejoin.equipmanage.common.enums.*;
import com.yeejoin.equipmanage.common.utils.DateUtils; import com.yeejoin.equipmanage.common.utils.DateUtils;
...@@ -39,6 +37,7 @@ import org.springframework.transaction.support.TransactionSynchronizationManager ...@@ -39,6 +37,7 @@ import org.springframework.transaction.support.TransactionSynchronizationManager
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil; import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest; import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import ucar.ma2.ArrayDouble;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -113,7 +112,8 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ ...@@ -113,7 +112,8 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ
@Autowired @Autowired
private ISignalClassifyService signalClassifyService; private ISignalClassifyService signalClassifyService;
@Autowired
private IFormInstanceService instanceService;
@Override @Override
public Map<String, Object> getDetailsById(Long alarmId, Long equipId, String type, String area) { public Map<String, Object> getDetailsById(Long alarmId, Long equipId, String type, String area) {
...@@ -360,6 +360,25 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ ...@@ -360,6 +360,25 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ
// } // }
// } // }
//查询当前建筑是否是 最顶级建筑
public List<FormInstance> selectBuildingById(List<FormInstance> formInstances){
if (formInstances.get(0).getGroupType().equals("building")){
return formInstances;
}
String parentId = null;
for (FormInstance formInstance : formInstances) {
if (formInstance.getFieldName().equals("parentId")){
parentId =formInstance.getFieldValue();
}
}
LambdaQueryWrapper<FormInstance> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(FormInstance::getInstanceId,parentId);
formInstances = instanceService.getBaseMapper().selectList(wrapper);
return selectBuildingById(formInstances);
}
public void sendIotSystemAlarm(EquipmentSpecificAlarmLog ent, String userId, String appKey, String product, String token){ public void sendIotSystemAlarm(EquipmentSpecificAlarmLog ent, String userId, String appKey, String product, String token){
// Token serverToken = remoteSecurityService.getServerToken(); // Token serverToken = remoteSecurityService.getServerToken();
IotSystemAlarmRo confirmAlamVo = new IotSystemAlarmRo(); IotSystemAlarmRo confirmAlamVo = new IotSystemAlarmRo();
...@@ -367,15 +386,49 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ ...@@ -367,15 +386,49 @@ public class ConfirmAlarmServiceImpl extends ServiceImpl<ConfirmAlarmMapper, Equ
ent = confirmAlarmMapper.getDetailsById(ent.getId(), null); ent = confirmAlarmMapper.getDetailsById(ent.getId(), null);
EquipmentSpecific equipmentSpecific = equipmentSpecificSerivce.getById(ent.getEquipmentSpecificId()); EquipmentSpecific equipmentSpecific = equipmentSpecificSerivce.getById(ent.getEquipmentSpecificId());
List<FormInstance> formInstances = new ArrayList<>();
//现在需要返回设备的所在建筑及经纬度 查询当前设备所在建筑
if(!ValidationUtil.isEmpty(equipmentSpecific.getWarehouseStructureId())){
LambdaQueryWrapper<FormInstance> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(FormInstance::getInstanceId,equipmentSpecific.getWarehouseStructureId());
formInstances = instanceService.getBaseMapper().selectList(wrapper);
}
//判断所在建筑是否是顶级建筑 房间及楼层是没有经纬度的 向上查询
if (!ValidationUtil.isEmpty(formInstances)){
formInstances = selectBuildingById(formInstances);
}
String address = null ;
String latitude= null ;
String longitude= null ;
if (!ValidationUtil.isEmpty(formInstances)){
for (FormInstance formInstance : formInstances) {
if (formInstance.getFieldName().equals("address")){
address =formInstance.getFieldValue();
if (address.contains("@")){
String[] split = address.split("@");
address = split[0];
}
}
if (formInstance.getFieldName().equals("latitude")){
latitude =formInstance.getFieldValue();
}
if (formInstance.getFieldName().equals("longitude")){
longitude =formInstance.getFieldValue();
}
}
}
if (!ValidationUtil.isEmpty(equipmentSpecific.getAgencyId())){ if (!ValidationUtil.isEmpty(equipmentSpecific.getAgencyId())){
// 机场单位 // 机场单位
JSONObject unitMap = jcsFeign.getUnitById(appKey, product, token, equipmentSpecific.getAgencyId()).getResult(); JSONObject unitMap = jcsFeign.getUnitById(appKey, product, token, equipmentSpecific.getAgencyId()).getResult();
JSONObject jsonObject = unitMap.getJSONObject("map"); JSONObject jsonObject = unitMap.getJSONObject("map");
confirmAlamVo.setUnitInvolvedId(equipmentSpecific.getAgencyId()); confirmAlamVo.setUnitInvolvedId(equipmentSpecific.getAgencyId());
confirmAlamVo.setUnitInvolvedName(unitMap.getString("bizOrgName")); confirmAlamVo.setUnitInvolvedName(unitMap.getString("bizOrgName"));
confirmAlamVo.setAddress(jsonObject.getString("companyLocation")); confirmAlamVo.setAddress(address == null ? jsonObject.getString("companyLocation"):address);
confirmAlamVo.setLongitude(jsonObject.getDouble("longitude")); confirmAlamVo.setLongitude(latitude == null?jsonObject.getDouble("longitude"): Double.valueOf(latitude));
confirmAlamVo.setLatitude(jsonObject.getDouble("latitude")); confirmAlamVo.setLatitude(longitude == null?jsonObject.getDouble("latitude"):Double.valueOf(longitude));
} }
try { try {
// 机场人员 // 机场人员
......
...@@ -1631,10 +1631,9 @@ public class EquipmentSpecificSerivceImpl extends ServiceImpl<EquipmentSpecificM ...@@ -1631,10 +1631,9 @@ public class EquipmentSpecificSerivceImpl extends ServiceImpl<EquipmentSpecificM
} }
@Override @Override
public void updateEquipmentSpecIndexRealtimeData(List<EquipmentSpecificIndex> indexs) { public void updateEquipmentSpecIndexRealtimeData(EquipmentSpecificIndex index) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
if (!ObjectUtils.isEmpty(indexs)) { if (!ObjectUtils.isEmpty(index)) {
EquipmentSpecificIndex index = indexs.get(0);
EquipmentSpecific es = equipmentSpecificMapper.selectById(index.getEquipmentSpecificId()); EquipmentSpecific es = equipmentSpecificMapper.selectById(index.getEquipmentSpecificId());
es.setRealtimeIotEsIndexId(index.getId()); es.setRealtimeIotEsIndexId(index.getId());
es.setRealtimeIotIndexKey(index.getNameKey()); es.setRealtimeIotIndexKey(index.getNameKey());
......
...@@ -77,7 +77,6 @@ import com.yeejoin.equipmanage.service.IEquipmentIndexService; ...@@ -77,7 +77,6 @@ import com.yeejoin.equipmanage.service.IEquipmentIndexService;
import com.yeejoin.equipmanage.service.IEquipmentService; import com.yeejoin.equipmanage.service.IEquipmentService;
import com.yeejoin.equipmanage.service.IEquipmentSpecificAlarmLogService; import com.yeejoin.equipmanage.service.IEquipmentSpecificAlarmLogService;
import com.yeejoin.equipmanage.service.IEquipmentSpecificAlarmService; import com.yeejoin.equipmanage.service.IEquipmentSpecificAlarmService;
import com.yeejoin.equipmanage.service.IEquipmentSpecificIndexSerivce;
import com.yeejoin.equipmanage.service.IEquipmentSpecificIndexService; import com.yeejoin.equipmanage.service.IEquipmentSpecificIndexService;
import com.yeejoin.equipmanage.service.IEquipmentSpecificSerivce; import com.yeejoin.equipmanage.service.IEquipmentSpecificSerivce;
import com.yeejoin.equipmanage.service.IFireFightingSystemService; import com.yeejoin.equipmanage.service.IFireFightingSystemService;
...@@ -94,1009 +93,981 @@ import lombok.extern.slf4j.Slf4j; ...@@ -94,1009 +93,981 @@ import lombok.extern.slf4j.Slf4j;
/** /**
* @author keyong * @author keyong
* @title: MqttReceiveServiceImpl * @title: MqttReceiveServiceImpl
* <pre> *
* @description: 增量数据处理 * <pre>
* </pre> * &#64;description: 增量数据处理
* </pre>
*
* @date 2020/11/3 13:39 * @date 2020/11/3 13:39
*/ */
@Slf4j @Slf4j
@Service @Service
public class MqttReceiveServiceImpl implements MqttReceiveService { public class MqttReceiveServiceImpl implements MqttReceiveService {
private static Map<String, TemperatureAlarmDto> temperatureMap = new HashMap<>(); private static Map<String, TemperatureAlarmDto> temperatureMap = new HashMap<>();
@Autowired @Autowired
IEquipmentSpecificIndexService equipmentSpecificIndexService; IEquipmentSpecificIndexService equipmentSpecificIndexService;
@Autowired @Autowired
ICarPropertyService carPropertyService; ICarPropertyService carPropertyService;
@Autowired @Autowired
IEquipmentSpecificAlarmService equipmentSpecificAlarmService; IEquipmentSpecificAlarmService equipmentSpecificAlarmService;
@Autowired @Autowired
IEquipmentSpecificAlarmLogService equipmentSpecificAlarmLogService; IEquipmentSpecificAlarmLogService equipmentSpecificAlarmLogService;
@Autowired @Autowired
EquipmentSpecificAlarmMapper equipmentSpecificAlarmMapper; EquipmentSpecificAlarmMapper equipmentSpecificAlarmMapper;
@Autowired
EquipmentSpecificAlarmLogMapper equipmentSpecificAlarmLogMapper;
@Autowired @Autowired
@Lazy EquipmentSpecificAlarmLogMapper equipmentSpecificAlarmLogMapper;
IEquipmentIndexService equipmentIndexService;
@Autowired @Autowired
EquipmentSpecificIndexMapper equipmentSpecificIndexMapper; @Lazy
IEquipmentIndexService equipmentIndexService;
@Autowired @Autowired
EquipmentSpecificMapper equipmentSpecificMapper; EquipmentSpecificIndexMapper equipmentSpecificIndexMapper;
@Autowired @Autowired
FireFightingSystemMapper FireFightingSystemMapper; EquipmentSpecificMapper equipmentSpecificMapper;
@Autowired @Autowired
IFireFightingSystemService fireFightingSystemService; FireFightingSystemMapper FireFightingSystemMapper;
@Autowired @Autowired
MqttSendGateway mqttSendGateway; IFireFightingSystemService fireFightingSystemService;
@Autowired @Autowired
private RedisUtils redisUtils; MqttSendGateway mqttSendGateway;
@Autowired @Autowired
CarMapper carMapper; private RedisUtils redisUtils;
@Autowired @Autowired
IMainIotMonitorSerivce iMainIotMonitorSerivce; CarMapper carMapper;
@Autowired @Autowired
private IEquipmentSpecificIndexSerivce equipmentSpecificIndexSerivce; IMainIotMonitorSerivce iMainIotMonitorSerivce;
@Autowired @Autowired
private ISyncDataService syncDataService; private ISyncDataService syncDataService;
@Autowired @Autowired
private IEquipmentAlarmReportDayService iEquipmentAlarmReportDayService; private IEquipmentAlarmReportDayService iEquipmentAlarmReportDayService;
@Autowired @Autowired
private IEquipmentSpecificSerivce iEquipmentSpecificSerivce; private IEquipmentSpecificSerivce iEquipmentSpecificSerivce;
@Autowired @Autowired
FireFightingSystemMapper fireFightingSystemMapper; FireFightingSystemMapper fireFightingSystemMapper;
@Autowired @Autowired
private SystemctlFeign systemctlFeign; private SystemctlFeign systemctlFeign;
@Autowired @Autowired
private RemoteSecurityService remoteSecurityService; private RemoteSecurityService remoteSecurityService;
@Autowired @Autowired
private TopographyService topographyService; private TopographyService topographyService;
@Autowired @Autowired
private IEquipmentService equipmentService; private IEquipmentService equipmentService;
@Value("${equipManage.name}") @Value("${equipManage.name}")
private String serverName; private String serverName;
@Value("${mqtt.vehicle.topic}") @Value("${mqtt.vehicle.topic}")
private String carTopic; private String carTopic;
@Value("${equip.point.equipmentdata.topic}") @Value("${equip.point.equipmentdata.topic}")
private String canvasTopic; private String canvasTopic;
@Value("${equip.index.topic}") @Value("${equip.index.topic}")
private String indexTopic; private String indexTopic;
@Value("${spring.redis.expire.time}") @Value("${spring.redis.expire.time}")
private long redisExpireTime; private long redisExpireTime;
@Value("${systemctl.sync.switch}") @Value("${systemctl.sync.switch}")
private Boolean syncSwitch; private Boolean syncSwitch;
@Value("${systemctl.amos.switch}") @Value("${systemctl.amos.switch}")
private Boolean amosSwitch; private Boolean amosSwitch;
@Value("${isSendApp}") @Value("${isSendApp}")
private Boolean isSendApp; private Boolean isSendApp;
private static Boolean bool = Boolean.FALSE;
private final static Map staticMap = new HashMap(); @Override
@Transactional(rollbackFor = Exception.class)
private static Boolean bool = Boolean.FALSE; public void handlerMqttIncrementMessage(String topic, String message) {
static { TopicEntityVo topicEntity = new TopicEntityVo();
staticMap.put("FireCar_GDLongitude", "0"); topicEntity.setTopic(topic);
staticMap.put("FireCar_GDLatitude", "0"); topicEntity.setMessage(message);
staticMap.put("FireCar_Speed", "0"); int endIndex = topic.lastIndexOf("/");
staticMap.put("FireCar_Power", "0"); String iotCode = topic.substring(0, endIndex).replace("/", "");
staticMap.put("FireCar_CourseOverGround", "0"); topicEntity.setIotCode(iotCode);
staticMap.put("time", System.currentTimeMillis()); List<EquipmentSpecificVo> eqIotCodeList = iEquipmentSpecificSerivce.getEquipAndCarIotcodeByIotcode(iotCode);
staticMap.put("FireCar_Start", "false"); if (eqIotCodeList.isEmpty()) {
} log.info("该数据{}不存在!", iotCode);
return;
@Override }
@Transactional(rollbackFor = Exception.class) if (eqIotCodeList.size() > 1) {
public void handlerMqttIncrementMessage(String topic, String message) { log.info("有重复的{}数据!", iotCode);
}
EquipmentSpecificVo vo = eqIotCodeList.get(0);
topicEntity.setType(vo.getType());
TopicEntityVo topicEntity = new TopicEntityVo(); topicEntity.setCode(vo.getCode());
topicEntity.setTopic(topic);
topicEntity.setMessage(message); JSONObject json = JSONObject.parseObject(message);
int endIndex = topic.lastIndexOf("/"); Iterator it = json.entrySet().iterator();
String iotCode = topic.substring(0, endIndex).replace("/", ""); List<IotDataVO> iotDatalist = new ArrayList<IotDataVO>();
topicEntity.setIotCode(iotCode); while (it.hasNext()) {
List<EquipmentSpecificVo> eqIotCodeList =null; IotDataVO iotDataVO = new IotDataVO();
Map.Entry<String, Object> entry = (Map.Entry<String, Object>) it.next();
if(iotCode!=null&&!iotCode.startsWith("20210003")&&!iotCode.startsWith("20210004")&&!iotCode.startsWith("20210005")){ iotDataVO.setKey(entry.getKey());
eqIotCodeList = iEquipmentSpecificSerivce.getEquipAndCarIotcodeByIotcode(iotCode); iotDataVO.setValue(entry.getValue());
}else{ iotDatalist.add(iotDataVO);
log.info("不是装备物联code!", iotCode); }
return; if (ObjectUtils.isEmpty(iotDatalist)) {
} return;
}
log.info(String.format("收到mqtt消息:%s", message));
if (eqIotCodeList.isEmpty()) { realTimeDateProcessing(topicEntity, iotDatalist);
log.info("该数据{}不存在!", iotCode); }
return;
} /**
if (eqIotCodeList.size() > 1) { * 物联数据处理
log.info("有重复的{}数据!", iotCode); *
} * @param topicEntity
EquipmentSpecificVo vo = eqIotCodeList.get(0); * @param iotDatalist
topicEntity.setType(vo.getType()); */
topicEntity.setCode(vo.getCode()); public void realTimeDateProcessing(TopicEntityVo topicEntity, List<IotDataVO> iotDatalist) {
String iotCode = topicEntity.getIotCode();
JSONObject json = JSONObject.parseObject(message);
Iterator it = json.entrySet().iterator(); if (EquipAndCarEnum.equip.type.equals(topicEntity.getType())) {
List<IotDataVO> iotDatalist = new ArrayList<IotDataVO>(); List<EquipmentSpecificIndex> indexList = equipmentSpecificIndexService
while (it.hasNext()) { .getEquipmentSpeIndexBySpeIotCode(iotCode);
IotDataVO iotDataVO = new IotDataVO(); if (ObjectUtils.isEmpty(indexList)) {
Map.Entry<String, Object> entry = (Map.Entry<String, Object>) it.next(); return;
iotDataVO.setKey(entry.getKey()); }
iotDataVO.setValue(entry.getValue()); equipRealTimeDate(iotDatalist, indexList, topicEntity);
iotDatalist.add(iotDataVO); } else {
} List<CarProperty> carProperties = carPropertyService.getCarPropListByIotCode(iotCode);
if (ObjectUtils.isEmpty(iotDatalist)) { if (ObjectUtils.isEmpty(carProperties)) {
return; return;
} }
log.info(String.format("收到mqtt消息:%s", message)); carRealTimeDate(iotDatalist, carProperties);
realTimeDateProcessing(topicEntity, iotDatalist); }
}
}
/**
* 物联数据处理 /**
* @param topicEntity * 装备实时数据处理
* @param iotDatalist *
*/ * @param iotDatalist
public void realTimeDateProcessing(TopicEntityVo topicEntity, List<IotDataVO> iotDatalist){ * @param indexList
String iotCode = topicEntity.getIotCode(); * @param topicEntity
*/
if(EquipAndCarEnum.equip.type.equals(topicEntity.getType())){ public void equipRealTimeDate(List<IotDataVO> iotDatalist, List<EquipmentSpecificIndex> indexList,
List<EquipmentSpecificIndex> indexList = equipmentSpecificIndexService.getEquipmentSpeIndexBySpeIotCode(iotCode); TopicEntityVo topicEntity) {
if (ObjectUtils.isEmpty(indexList)){ List<EquipmentSpecificIndex> equipmentSpecificIndexList = new ArrayList<>();
return; List<EquipmentSpecificAlarm> equipmentSpecificAlarms = new ArrayList<>();
} List<IndexStateVo> indexStateList = new ArrayList<>();
equipRealTimeDate(iotDatalist, indexList, topicEntity); // 存储温度数据至内存中(火眼)
}else{ iotDataListToCacheMap(iotDatalist);
List<CarProperty> carProperties = carPropertyService.getCarPropListByIotCode(iotCode); iotDatalist.forEach(iotDataVO -> {
if (ObjectUtils.isEmpty(carProperties)){ for (EquipmentSpecificIndex equipmentSpecificIndex : indexList) {
return; if (!ObjectUtils.isEmpty(equipmentSpecificIndex.getNameKey())
} && equipmentSpecificIndex.getNameKey().toLowerCase().equals(iotDataVO.getKey().toLowerCase())) {
carRealTimeDate(iotDatalist, carProperties); EquipmentSpecificIndex equipmentSpeIndex = new EquipmentSpecificIndex();
} BeanUtils.copyProperties(equipmentSpecificIndex, equipmentSpeIndex);
String value = iotDataVO.getValue().toString();
} equipmentSpeIndex.setValue(value);
equipmentSpeIndex.setValueLabel(valueTranslate(value, equipmentSpecificIndex.getValueEnum()));
equipmentSpeIndex.setUpdateDate(new Date());
public static List<EquipmentSpecificAlarmLog> upAlarmLogStatus(String iotCode, String equipmentSpecificIndexKey, IEquipmentSpecificAlarmLogService equipmentSpecificAlarmLogService) { equipmentSpecificIndexService.updateById(equipmentSpeIndex);
LambdaQueryWrapper<EquipmentSpecificAlarmLog> queryWrapper = new LambdaQueryWrapper();
queryWrapper.eq(EquipmentSpecificAlarmLog::getIotCode, iotCode); // 更新设备表指标状态
queryWrapper.eq(EquipmentSpecificAlarmLog::getEquipmentSpecificIndexKey, equipmentSpecificIndexKey); iEquipmentSpecificSerivce.updateEquipmentSpecIndexRealtimeData(equipmentSpeIndex);
queryWrapper.ne(EquipmentSpecificAlarmLog::getStatus, AlarmStatusEnum.HF.getCode());
List<EquipmentSpecificAlarmLog> logs = equipmentSpecificAlarmLogService.getBaseMapper().selectList(queryWrapper); equipmentSpecificIndexList.add(equipmentSpeIndex);
logs.forEach(x -> {
x.setCleanTime(new Date()); indexStateList.add(createIndexStateVo(equipmentSpeIndex));
x.setStatus(AlarmStatusEnum.HF.getCode());
}); // 添加指标报告
if (!logs.isEmpty()) { saveEquipmentAlarmReportDay(equipmentSpeIndex);
equipmentSpecificAlarmLogService.updateBatchById(logs);
} // 火眼数据构造告警指标逻辑
return logs; equipmentSpecificIndex = handleTemperatureAlarm(equipmentSpeIndex, iotDatalist);
}
// 指标告警处理
public void publishDataToCanvas(List<EquipmentSpecificIndex> indexList) { if (equipmentSpecificIndex.getIsAlarm() != null && 1 == equipmentSpecificIndex.getIsAlarm()) {
if (!ObjectUtils.isEmpty(indexList)) { equipmentSpecificAlarms.addAll(createIndexAlarmRecord(equipmentSpecificIndex));
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { }
@Override }
public void afterCommit() { }
EquipmentSpecificIndex index = indexList.stream().filter(x -> x.getUpdateDate() != null) });
.sorted(Comparator.comparing(EquipmentSpecificIndex::getUpdateDate).reversed())
.collect(Collectors.toList()).get(0); // 报警数据保存
EquipmentStateVo equipmentStateVo = new EquipmentStateVo(); List<EquipmentSpecificAlarmLog> alarmLogs = saveOrUpdateEquipAlarm(equipmentSpecificAlarms);
equipmentStateVo.setEquipName(index.getEquipmentSpecificName());
equipmentStateVo.setOrgCode(index.getOrgCode()); // 需要在事务提交之后,否侧事务隔离查询不出数据
equipmentStateVo.setSpecificId(index.getEquipmentSpecificId()); TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
equipmentStateVo.setEquipCode(index.getQrCode()); @Override
equipmentStateVo.setEquipIotCode(index.getIotCode()); public void afterCommit() {
equipmentStateVo.setStatus(""); // 向预控系统发送消息
equipmentStateVo.setColor(index.getEmergencyLevelColor()); sendEquipSpecIndexToAutosysTopic(equipmentSpecificIndexList);
// 添加性能指标项
//flag 无意义 getSpeIndex 方法其他地方共用 做了额外封装 为0时走原逻辑 // 首页性能指标数据订阅
int flag = 0; mqttSendGateway.sendToMqtt(indexTopic, JSON.toJSONString(indexStateList));
equipmentStateVo.setSpeindexList(fireFightingSystemService.getSpeIndex(index.getEquipmentSpecificId(),flag));
// 组态大屏消息推送,设备表实时指标修改
Map<String, Object> topicObject = new HashMap<>(); intePageSysDataRefresh(equipmentSpecificIndexList, topicEntity);
topicObject.put("equipCode", equipmentStateVo.getEquipCode());
if (TrueOrFalseEnum.real.value.toUpperCase().equals(index.getValue().toUpperCase())) { // 数字换流站同步指标修改
topicObject.put("color", equipmentStateVo.getColor()); syncSpecificIndexsToGS(equipmentSpecificIndexList);
} else {
topicObject.put("color", ""); // 则更新拓扑节点数据及告警状态
} updateNodeDateByEquipId(equipmentSpecificIndexList);
Map<String, Object> map = JSON.parseObject(JSON.toJSONString(equipmentStateVo));
map.put(canvasTopic, topicObject); // 向画布推送
// 发送数据至画布 publishDataToCanvas(equipmentSpecificIndexList);
mqttSendGateway.sendToMqtt(canvasTopic, JSON.toJSONString(map));
} // 向其他系统推送报警
}); equipmentAlarmLogsToOtherSystems(alarmLogs);
} }
} });
}
void syncSystemctlMsg(EquipmentSpecificAlarmLog equipmentSpecificAlarmLog) {
try { public void carRealTimeDate(List<IotDataVO> iotDatalist, List<CarProperty> carProperties) {
MessageModel model = new MessageModel(); List<CarProperty> carIndexsList = new ArrayList<>();
String alarmReason = ValidationUtil.isEmpty(equipmentSpecificAlarmLog.getAlarmReason()) ? "" : equipmentSpecificAlarmLog.getAlarmReason(); iotDatalist.forEach(iotDataVO -> {
if (alarmReason.contains(":")) { // 对指标key为labels的数据处理
String[] split = alarmReason.split(":"); if (EquipmentIndexLabelsEnum.labels.name.equals(iotDataVO.getKey())) {
alarmReason = split[1]; StringBuilder sb = new StringBuilder("equipmentOnCar_");
} EquipmentIndexLabelsVo labelsVo = new EquipmentIndexLabelsVo();
model.setTitle(equipmentSpecificAlarmLog.getEquipmentSpecificIndexName()); Object obj = iotDataVO.getValue();
String body = String.format("警情类型:%s;报警设备:%s;报警位置:%s;报警原因:%s;报警时间:%s", if (obj instanceof JSONArray) {
equipmentSpecificAlarmLog.getEquipmentSpecificIndexName(), equipmentSpecificAlarmLog.getEquipmentSpecificName(), List<String> labelList = (List<String>) obj;
equipmentSpecificAlarmLog.getLocation(), alarmReason, labelList.forEach(code -> {
DateUtils.date2LongStr(equipmentSpecificAlarmLog.getCreateDate())); String key = sb.append(code).toString();
model.setBody(body); labelsVo.setEquipmentIotCode(code);
model.setMsgType("iotMonitor"); labelsVo.setTime(new Date());
if (isSendApp) { redisUtils.set(key, com.alibaba.fastjson.JSONObject.toJSONString(labelsVo), redisExpireTime);
model.setIsSendApp(true); });
model.setTerminal("APP/WEB"); }
} else { }
model.setIsSendApp(false); List<CarPropertyVo> carPropertyVos = new ArrayList<>();
model.setTerminal("WEB"); carProperties.forEach(carProperty -> {
} if (iotDataVO.getKey().equals(carProperty.getNameKey())) {
model.setIsSendWeb(true); carProperty.setValue(iotDataVO.getValue().toString());
model.setCategory(1); carProperty.setUpdateDate(new Date());
model.setRelationId(String.valueOf(equipmentSpecificAlarmLog.getId())); carPropertyVos.add(carPropertyToCarPropertyVo(carProperty));
Token token = remoteSecurityService.getServerToken(); carIndexsList.add(carProperty);
systemctlFeign.create(token.getAppKey(), token.getProduct(), token.getToke(), model); }
log.info(String.format("调用平台消息服务成功:%s", JSON.toJSONString(model))); });
} catch (Exception e) {
// e.printStackTrace(); boolean updateBatchById = carPropertyService.updateBatchById(carIndexsList);
log.error("告警消息同步平台失败:syncSystemctlMsg,===>>>" + e.getMessage());
} if (updateBatchById) {
} carTransactionSynch(carProperties, carPropertyVos);
}
public List<EquipmentSpecificAlarm> addIndexAlarmRecord(EquipmentSpecificIndex equipmentSpcIndex, List<IotDataVO> iotDatalist) { });
// 处理火眼视频异常 }
EquipmentSpecificIndex equipmentSpecificIndex = handleTemperatureAlarm(equipmentSpcIndex, iotDatalist);
List<EquipmentSpecificAlarm> equipmentSpecificAlarms = new ArrayList<>(); public static List<EquipmentSpecificAlarmLog> upAlarmLogStatus(String iotCode, String equipmentSpecificIndexKey,
EquipmentSpecificAlarm equipmentSpecificAlarm = new EquipmentSpecificAlarm(); IEquipmentSpecificAlarmLogService equipmentSpecificAlarmLogService) {
equipmentSpecificAlarm.setSystemIds(equipmentSpcIndex.getSystemId()); LambdaQueryWrapper<EquipmentSpecificAlarmLog> queryWrapper = new LambdaQueryWrapper();
equipmentSpecificAlarm.setSystemCodes(this.getSystemCodeBySpeId(equipmentSpcIndex.getSystemId())); queryWrapper.eq(EquipmentSpecificAlarmLog::getIotCode, iotCode);
if (EquipmentRiskTypeEnum.GZ.getCode().equals(equipmentSpecificIndex.getTypeCode()) || EquipmentRiskTypeEnum.HZGJ.getCode().equals(equipmentSpecificIndex.getTypeCode()) queryWrapper.eq(EquipmentSpecificAlarmLog::getEquipmentSpecificIndexKey, equipmentSpecificIndexKey);
|| EquipmentRiskTypeEnum.PB.getCode().equals(equipmentSpecificIndex.getTypeCode())) { queryWrapper.ne(EquipmentSpecificAlarmLog::getStatus, AlarmStatusEnum.HF.getCode());
List<EquipmentSpecificAlarm> indexAlarms = equipmentSpecificAlarmMapper.findEquipmentSpecificAlarmByEquipmentSpecificIdAndEquipmentIndexIdAndStatusIstrue(equipmentSpecificIndex.getEquipmentSpecificId(), equipmentSpecificIndex.getEquipmentIndexId()); List<EquipmentSpecificAlarmLog> logs = equipmentSpecificAlarmLogService.getBaseMapper()
// NB设备告警 .selectList(queryWrapper);
if (verifyNB(equipmentSpecificIndex.getNameKey())) { logs.forEach(x -> {
return getNbEquipAlarmList(indexAlarms, equipmentSpecificIndex, equipmentSpecificAlarm); x.setCleanTime(new Date());
} x.setStatus(AlarmStatusEnum.HF.getCode());
// 报警表新增信息 });
if (ObjectUtils.isEmpty(indexAlarms) && (TrueOrFalseEnum.real.value.equals(equipmentSpecificIndex.getValue()))) { if (!logs.isEmpty()) {
addEquipmentSpecificAlarm(equipmentSpecificAlarms, equipmentSpecificIndex, equipmentSpecificAlarm); equipmentSpecificAlarmLogService.updateBatchById(logs);
} else { }
// 报警表更新信息 return logs;
indexAlarms.forEach(action -> { }
if (TrueOrFalseEnum.real.value.equals(equipmentSpecificIndex.getValue())) {
// 报警,修改发生频率 /**
action.setFrequency((action.getFrequency() + 1)); * 画布数据消息推送
} else { *
// 报警恢复,修改数据为恢复状态 * @param indexList
action.setRecoveryDate(new Date()); */
action.setEquipmentSpecificIndexValue(TrueOrFalseEnum.fake.value); public void publishDataToCanvas(List<EquipmentSpecificIndex> indexList) {
action.setStatus(AlarmStatusEnum.HF.getCode()); if (!ObjectUtils.isEmpty(indexList)) {
} EquipmentSpecificIndex index = indexList.stream().filter(x -> x.getUpdateDate() != null)
action.setUpdateDate(new Date()); .sorted(Comparator.comparing(EquipmentSpecificIndex::getUpdateDate).reversed())
// 更新所在系统,设备可能编辑过,更新所在系统、装备名称、装备定义code .collect(Collectors.toList()).get(0);
action.setSystemIds(equipmentSpcIndex.getSystemId()); EquipmentStateVo equipmentStateVo = new EquipmentStateVo();
action.setSystemCodes(this.getSystemCodeBySpeId(equipmentSpcIndex.getSystemId())); equipmentStateVo.setEquipName(index.getEquipmentSpecificName());
action.setEquipmentSpecificName(equipmentSpcIndex.getEquipmentSpecificName()); equipmentStateVo.setOrgCode(index.getOrgCode());
action.setEquipmentCode(equipmentSpcIndex.getEquipmentCode()); equipmentStateVo.setSpecificId(index.getEquipmentSpecificId());
// 冗余字段,alarm_log表更新时使用 equipmentStateVo.setEquipCode(index.getQrCode());
action.setEquipmentSpecificCode(equipmentSpcIndex.getEquipmentSpecificCode()); equipmentStateVo.setEquipIotCode(index.getIotCode());
equipmentSpecificAlarms.add(action); equipmentStateVo.setStatus("");
}); equipmentStateVo.setColor(index.getEmergencyLevelColor());
} // 添加性能指标项
} //flag 无意义 getSpeIndex 方法其他地方共用 做了额外封装 为0时走原逻辑
int flag = 0;
return equipmentSpecificAlarms; equipmentStateVo.setSpeindexList(fireFightingSystemService.getSpeIndex(index.getEquipmentSpecificId(),flag));
} Map<String, Object> topicObject = new HashMap<>();
topicObject.put("equipCode", equipmentStateVo.getEquipCode());
private String getSystemCodeBySpeId(String sysIds) { if (TrueOrFalseEnum.real.value.toUpperCase().equals(index.getValue().toUpperCase())) {
if (StringUtil.isNotEmpty(sysIds)) { topicObject.put("color", equipmentStateVo.getColor());
List<FireFightingSystemEntity> sys = fireFightingSystemMapper.getFightingSysByIds(sysIds.split(",")); } else {
return sys.stream().map(FireFightingSystemEntity::getCode).collect(Collectors.joining(",")); topicObject.put("color", "");
} else { }
return null; Map<String, Object> map = JSON.parseObject(JSON.toJSONString(equipmentStateVo));
} map.put(canvasTopic, topicObject);
}
// 发送数据至画布
private EquipmentAlarmReportDay addEquipAlarmReportRecord(EquipmentSpecificIndex equipmentSpecificIndex) { mqttSendGateway.sendToMqtt(canvasTopic, JSON.toJSONString(map));
EquipmentAlarmReportDay equipmentAlarmReportDay = new EquipmentAlarmReportDay(); }
equipmentAlarmReportDay.setOrgCode(equipmentSpecificIndex.getOrgCode()); }
equipmentAlarmReportDay.setReportDate(new Date());
equipmentAlarmReportDay.setUpdateDate(new Date()); /**
equipmentAlarmReportDay.setSystemIds(equipmentSpecificIndex.getSystemId()); * 报警消息推送amos平台
equipmentAlarmReportDay.setLastReportDate(new Date()); *
equipmentAlarmReportDay.setEquipmentSpecificId(equipmentSpecificIndex.getEquipmentSpecificId()); * @param equipmentSpecificAlarmLog
equipmentAlarmReportDay.setEquipmentSpecificName(equipmentSpecificIndex.getEquipmentSpecificName()); */
equipmentAlarmReportDay.setEquipmentDetailId(equipmentSpecificIndex.getEquipmentDetailId()); void syncSystemctlMsg(EquipmentSpecificAlarmLog equipmentSpecificAlarmLog) {
equipmentAlarmReportDay.setEquipmentId(equipmentSpecificIndex.getEquipmentId()); try {
equipmentAlarmReportDay.setEquipmentCode(equipmentSpecificIndex.getEquipmentCode()); MessageModel model = new MessageModel();
equipmentAlarmReportDay.setIndexTrueNum(TrueOrFalseEnum.real.value.equals(equipmentSpecificIndex.getValue()) ? 1L : 0L); String alarmReason = ValidationUtil.isEmpty(equipmentSpecificAlarmLog.getAlarmReason()) ? ""
equipmentAlarmReportDay.setAlarmType(equipmentSpecificIndex.getTypeCode()); : equipmentSpecificAlarmLog.getAlarmReason();
equipmentAlarmReportDay.setAlarmTypeName(equipmentSpecificIndex.getTypeName()); if (alarmReason.contains(":")) {
equipmentAlarmReportDay.setIndexId(equipmentSpecificIndex.getEquipmentIndexId()); String[] split = alarmReason.split(":");
equipmentAlarmReportDay.setIndexName(equipmentSpecificIndex.getEquipmentSpecificIndexName()); alarmReason = split[1];
equipmentAlarmReportDay.setIndexType(equipmentSpecificIndex.getNameKey()); }
equipmentAlarmReportDay.setValue(equipmentSpecificIndex.getValue()); model.setTitle(equipmentSpecificAlarmLog.getEquipmentSpecificIndexName());
equipmentAlarmReportDay.setIsAlarm(equipmentSpecificIndex.getIsAlarm()); String body = String.format("警情类型:%s;报警设备:%s;报警位置:%s;报警原因:%s;报警时间:%s",
return equipmentAlarmReportDay; equipmentSpecificAlarmLog.getEquipmentSpecificIndexName(),
} equipmentSpecificAlarmLog.getEquipmentSpecificName(), equipmentSpecificAlarmLog.getLocation(),
alarmReason, DateUtils.date2LongStr(equipmentSpecificAlarmLog.getCreateDate()));
private EquipmentSpecificAlarmLog addEquipAlarmLogRecord(EquipmentSpecificAlarm equipmentSpecificAlarm) { model.setBody(body);
EquipmentSpecificAlarmLog equipmentSpecificAlarmLog = new EquipmentSpecificAlarmLog(); model.setMsgType("iotMonitor");
BeanUtils.copyProperties(equipmentSpecificAlarm, equipmentSpecificAlarmLog); if (isSendApp) {
equipmentSpecificAlarmLog.setId(null); model.setIsSendApp(true);
equipmentSpecificAlarmLog.setCreateDate(new Date()); model.setTerminal("APP/WEB");
equipmentSpecificAlarmLog.setEquipmentSpecificAlarmId(equipmentSpecificAlarm.getId()); } else {
boolean bool = equipmentSpecificAlarmLogService.save(equipmentSpecificAlarmLog); model.setIsSendApp(false);
// 同步告警消息给平台 model.setTerminal("WEB");
if (amosSwitch && bool) { }
EquipmentSpecificAlarmLog alarmLog = equipmentSpecificAlarmLogService.getById(equipmentSpecificAlarmLog.getId()); model.setIsSendWeb(true);
new Thread(new Runnable() { model.setCategory(1);
@Override model.setRelationId(String.valueOf(equipmentSpecificAlarmLog.getId()));
public void run() { Token token = remoteSecurityService.getServerToken();
syncSystemctlMsg(alarmLog); systemctlFeign.create(token.getAppKey(), token.getProduct(), token.getToke(), model);
} log.info(String.format("调用平台消息服务成功:%s", JSON.toJSONString(model)));
}).start(); } catch (Exception e) {
} // e.printStackTrace();
return equipmentSpecificAlarmLog; log.error("告警消息同步平台失败:syncSystemctlMsg,===>>>" + e.getMessage());
} }
}
/**
* 添加告警 private String getSystemCodeBySpeId(String sysIds) {
* if (StringUtil.isNotEmpty(sysIds)) {
* @param equipmentSpecificAlarms List<FireFightingSystemEntity> sys = fireFightingSystemMapper.getFightingSysByIds(sysIds.split(","));
* @param equipmentSpecificIndex return sys.stream().map(FireFightingSystemEntity::getCode).collect(Collectors.joining(","));
* @return } else {
*/ return null;
private List<EquipmentSpecificAlarm> addEquipmentSpecificAlarm(List<EquipmentSpecificAlarm> equipmentSpecificAlarms, EquipmentSpecificIndex equipmentSpecificIndex, EquipmentSpecificAlarm equipmentSpecificAlarm) { }
BeanUtils.copyProperties(equipmentSpecificIndex, equipmentSpecificAlarm); }
equipmentSpecificAlarm.setId(null);
equipmentSpecificAlarm.setFrequency(1); private EquipmentAlarmReportDay addEquipAlarmReportRecord(EquipmentSpecificIndex equipmentSpecificIndex) {
equipmentSpecificAlarm.setStatus(AlarmStatusEnum.BJ.getCode()); EquipmentAlarmReportDay equipmentAlarmReportDay = new EquipmentAlarmReportDay();
equipmentSpecificAlarm.setEquipmentSpecificIndexKey(equipmentSpecificIndex.getNameKey()); equipmentAlarmReportDay.setOrgCode(equipmentSpecificIndex.getOrgCode());
equipmentSpecificAlarm.setEquipmentSpecificIndexValue(equipmentSpecificIndex.getValue()); equipmentAlarmReportDay.setReportDate(new Date());
equipmentSpecificAlarm.setEquipmentSpecificIndexLabel(equipmentSpecificIndex.getValueLabel()); equipmentAlarmReportDay.setUpdateDate(new Date());
equipmentSpecificAlarm.setType(equipmentSpecificIndex.getTypeCode()); equipmentAlarmReportDay.setSystemIds(equipmentSpecificIndex.getSystemId());
equipmentSpecificAlarm.setCreateDate(new Date()); equipmentAlarmReportDay.setLastReportDate(new Date());
equipmentSpecificAlarm.setUpdateDate(new Date()); equipmentAlarmReportDay.setEquipmentSpecificId(equipmentSpecificIndex.getEquipmentSpecificId());
equipmentSpecificAlarm.setEquipmentCode(equipmentSpecificIndex.getEquipmentCode()); equipmentAlarmReportDay.setEquipmentSpecificName(equipmentSpecificIndex.getEquipmentSpecificName());
equipmentSpecificAlarm.setEquipmentId(equipmentSpecificIndex.getEquipmentId()); equipmentAlarmReportDay.setEquipmentDetailId(equipmentSpecificIndex.getEquipmentDetailId());
equipmentSpecificAlarm.setEquipmentDetailId(equipmentSpecificIndex.getEquipmentDetailId()); equipmentAlarmReportDay.setEquipmentId(equipmentSpecificIndex.getEquipmentId());
equipmentSpecificAlarm.setEquipmentSpecificCode(equipmentSpecificIndex.getEquipmentSpecificCode()); equipmentAlarmReportDay.setEquipmentCode(equipmentSpecificIndex.getEquipmentCode());
equipmentSpecificAlarm.setEmergencyLevel(equipmentSpecificIndex.getEmergencyLevel()); equipmentAlarmReportDay
equipmentSpecificAlarm.setEmergencyLevelColor(equipmentSpecificIndex.getEmergencyLevelColor()); .setIndexTrueNum(TrueOrFalseEnum.real.value.equals(equipmentSpecificIndex.getValue()) ? 1L : 0L);
equipmentSpecificAlarm.setEmergencyLevelDescribe(equipmentSpecificIndex.getEmergencyLevelDescribe()); equipmentAlarmReportDay.setAlarmType(equipmentSpecificIndex.getTypeCode());
equipmentSpecificAlarms.add(equipmentSpecificAlarm); equipmentAlarmReportDay.setAlarmTypeName(equipmentSpecificIndex.getTypeName());
return equipmentSpecificAlarms; equipmentAlarmReportDay.setIndexId(equipmentSpecificIndex.getEquipmentIndexId());
} equipmentAlarmReportDay.setIndexName(equipmentSpecificIndex.getEquipmentSpecificIndexName());
equipmentAlarmReportDay.setIndexType(equipmentSpecificIndex.getNameKey());
// NB装备告警 equipmentAlarmReportDay.setValue(equipmentSpecificIndex.getValue());
private List<EquipmentSpecificAlarm> getNbEquipAlarmList(List<EquipmentSpecificAlarm> indexAlarms, EquipmentSpecificIndex equipmentSpecificIndex, EquipmentSpecificAlarm equipmentSpecificAlarm) { equipmentAlarmReportDay.setIsAlarm(equipmentSpecificIndex.getIsAlarm());
List<EquipmentSpecificAlarm> equipmentSpecificAlarmList = new ArrayList<>(); return equipmentAlarmReportDay;
if (ValidationUtil.isEmpty(indexAlarms)) { // 告警表为空,新增告警数据 }
addEquipmentSpecificAlarm(equipmentSpecificAlarmList, equipmentSpecificIndex, equipmentSpecificAlarm);
if (!checkStateIsNormal(equipmentSpecificAlarm, equipmentSpecificIndex)) { private EquipmentSpecificAlarmLog addEquipAlarmLogRecord(EquipmentSpecificAlarm equipmentSpecificAlarm) {
return equipmentSpecificAlarmList; EquipmentSpecificAlarmLog equipmentSpecificAlarmLog = new EquipmentSpecificAlarmLog();
} else { BeanUtils.copyProperties(equipmentSpecificAlarm, equipmentSpecificAlarmLog);
equipmentSpecificAlarmList.clear(); equipmentSpecificAlarmLog.setId(null);
} equipmentSpecificAlarmLog.setCreateDate(new Date());
} else { equipmentSpecificAlarmLog.setEquipmentSpecificAlarmId(equipmentSpecificAlarm.getId());
indexAlarms.forEach(action -> { boolean bool = equipmentSpecificAlarmLogService.save(equipmentSpecificAlarmLog);
// 状态为正常或报警解除 // 同步告警消息给平台
if (checkStateIsNormal(action, equipmentSpecificIndex)) { if (amosSwitch && bool) {
//修改报警数据为正常 EquipmentSpecificAlarmLog alarmLog = equipmentSpecificAlarmLogService
action.setRecoveryDate(new Date()); .getById(equipmentSpecificAlarmLog.getId());
action.setStatus(AlarmStatusEnum.HF.getCode()); new Thread(new Runnable() {
// 修改之前数据为已处理 @Override
action.setResolveResult(action.getAlamReason()); public void run() {
action.setConfirmUserName("系统"); syncSystemctlMsg(alarmLog);
action.setConfirmType(action.getType()); }
equipmentSpecificAlarmLogService.updateAlarmLogByIotCodeAndIndexKey(action); }).start();
} else { }
action.setFrequency((action.getFrequency() + 1)); return equipmentSpecificAlarmLog;
} }
// 更新所在系统,设备可能编辑过
action.setSystemIds(equipmentSpecificIndex.getSystemId()); /**
action.setSystemCodes(this.getSystemCodeBySpeId(equipmentSpecificIndex.getSystemId())); * 添加告警
action.setUpdateDate(new Date()); *
equipmentSpecificAlarmList.add(action); * @param equipmentSpecificAlarms
}); * @param equipmentSpecificIndex
} * @return
return equipmentSpecificAlarmList; */
} private List<EquipmentSpecificAlarm> addEquipmentSpecificAlarm(List<EquipmentSpecificAlarm> equipmentSpecificAlarms,
EquipmentSpecificIndex equipmentSpecificIndex, EquipmentSpecificAlarm equipmentSpecificAlarm) {
private boolean ifSendToGis(List<CarIndexGisVo> list) { BeanUtils.copyProperties(equipmentSpecificIndex, equipmentSpecificAlarm);
boolean flag = true; equipmentSpecificAlarm.setId(null);
List<CarIndexGisVo> list1 = list.stream().filter(x -> CarForGisEnum.JD.getNameKey().equals(x.getNameKey())).collect(Collectors.toList()); equipmentSpecificAlarm.setFrequency(1);
List<CarIndexGisVo> list2 = list.stream().filter(x -> CarForGisEnum.WD.getNameKey().equals(x.getNameKey())).collect(Collectors.toList()); equipmentSpecificAlarm.setStatus(AlarmStatusEnum.BJ.getCode());
for (CarIndexGisVo gisVo : list) { equipmentSpecificAlarm.setEquipmentSpecificIndexKey(equipmentSpecificIndex.getNameKey());
if (CarForGisEnum.JD.getNameKey().equals(gisVo.getNameKey())) { equipmentSpecificAlarm.setEquipmentSpecificIndexValue(equipmentSpecificIndex.getValue());
if (!StringUtil.isNotEmpty(gisVo.getValue()) || "0".equals(gisVo.getValue())) { equipmentSpecificAlarm.setEquipmentSpecificIndexLabel(equipmentSpecificIndex.getValueLabel());
flag = false; equipmentSpecificAlarm.setType(equipmentSpecificIndex.getTypeCode());
continue; equipmentSpecificAlarm.setCreateDate(new Date());
} equipmentSpecificAlarm.setUpdateDate(new Date());
} equipmentSpecificAlarm.setEquipmentCode(equipmentSpecificIndex.getEquipmentCode());
if (CarForGisEnum.WD.getNameKey().equals(gisVo.getNameKey()) || "0".equals(gisVo.getValue())) { equipmentSpecificAlarm.setEquipmentId(equipmentSpecificIndex.getEquipmentId());
if (!StringUtil.isNotEmpty(gisVo.getValue())) { equipmentSpecificAlarm.setEquipmentDetailId(equipmentSpecificIndex.getEquipmentDetailId());
flag = false; equipmentSpecificAlarm.setEquipmentSpecificCode(equipmentSpecificIndex.getEquipmentSpecificCode());
continue; equipmentSpecificAlarm.setEmergencyLevel(equipmentSpecificIndex.getEmergencyLevel());
} equipmentSpecificAlarm.setEmergencyLevelColor(equipmentSpecificIndex.getEmergencyLevelColor());
} equipmentSpecificAlarm.setEmergencyLevelDescribe(equipmentSpecificIndex.getEmergencyLevelDescribe());
} equipmentSpecificAlarms.add(equipmentSpecificAlarm);
if (list1.size() == 0 || list2.size() == 0) { return equipmentSpecificAlarms;
flag = false; }
}
return flag; // NB装备告警
} private List<EquipmentSpecificAlarm> getNbEquipAlarmList(List<EquipmentSpecificAlarm> indexAlarms,
EquipmentSpecificIndex equipmentSpecificIndex, EquipmentSpecificAlarm equipmentSpecificAlarm) {
/** List<EquipmentSpecificAlarm> equipmentSpecificAlarmList = new ArrayList<>();
* 接收到的IOT数据为火眼存储到Map中 if (ValidationUtil.isEmpty(indexAlarms)) { // 告警表为空,新增告警数据
*/ addEquipmentSpecificAlarm(equipmentSpecificAlarmList, equipmentSpecificIndex, equipmentSpecificAlarm);
private void iotDataListToCacheMap(List<IotDataVO> iotDatalist) { if (!checkStateIsNormal(equipmentSpecificAlarm, equipmentSpecificIndex)) {
List<IotDataVO> iotDataVOs = iotDatalist.stream().filter(x -> "alarmLevel".equals(x.getKey()) || "alarmType".equals(x.getKey()) || "temperature".equals(x.getKey()) return equipmentSpecificAlarmList;
|| "ruleTemperature".equals(x.getKey()) || "thermometryUnit".equals(x.getKey()) || "alarmRule".equals(x.getKey())).collect(Collectors.toList()); } else {
if (iotDataVOs.size() > 0) { equipmentSpecificAlarmList.clear();
Map<String, Object> map = iotDatalist.stream().collect(Collectors.toMap(IotDataVO::getKey, IotDataVO::getValue)); }
putTemperatureMap(map.get("traceId").toString(), map); } else {
} indexAlarms.forEach(action -> {
} // 状态为正常或报警解除
if (checkStateIsNormal(action, equipmentSpecificIndex)) {
/** // 修改报警数据为正常
* 处理火眼逻辑合并为一条告警 action.setRecoveryDate(new Date());
*/ action.setStatus(AlarmStatusEnum.HF.getCode());
private EquipmentSpecificIndex handleTemperatureAlarm(EquipmentSpecificIndex equipmentSpecificIndex, List<IotDataVO> iotDatalist) { // 修改之前数据为已处理
List<IotDataVO> collect = iotDatalist.stream().filter(x -> "traceId".equals(x.getKey())).collect(Collectors.toList()); action.setResolveResult(action.getAlamReason());
if (collect.size() > 0 && temperatureMapIsEmpty(String.valueOf(collect.get(0).getValue()))) { action.setConfirmUserName("系统");
String traceId = String.valueOf(collect.get(0).getValue()); action.setConfirmType(action.getType());
TemperatureAlarmDto dto = temperatureMap.get(traceId); equipmentSpecificAlarmLogService.updateAlarmLogByIotCodeAndIndexKey(action);
equipmentSpecificIndex.setEquipmentSpecificIndexName(AlarmTypeEnum.getTypeByCode(AlarmTypeEnum.GZGJ.getCode())); } else {
equipmentSpecificIndex.setNameKey(AlarmTypeEnum.GZGJ.getCode()); action.setFrequency((action.getFrequency() + 1));
equipmentSpecificIndex.setAlamReason(TemperatureAlarm.getAlarmContent(dto.getAlarmLevel(), dto.getAlarmType(), dto.getAlarmRule(), dto.getRuleTemperature(), dto.getTemperature(), dto.getThermometryUnit())); }
equipmentSpecificIndex.setValue("true"); // 更新所在系统,设备可能编辑过
equipmentSpecificIndex.setIsAlarm(1); action.setSystemIds(equipmentSpecificIndex.getSystemId());
temperatureMap.remove(traceId); action.setSystemCodes(this.getSystemCodeBySpeId(equipmentSpecificIndex.getSystemId()));
} action.setUpdateDate(new Date());
return equipmentSpecificIndex; equipmentSpecificAlarmList.add(action);
} });
}
/** return equipmentSpecificAlarmList;
* temperatureMap存储数据 }
*/
private void putTemperatureMap(String traceId, Map<String, Object> map) { private boolean ifSendToGis(List<CarIndexGisVo> list) {
TemperatureAlarmDto cacheTemperatureAlarmDto = temperatureMap.get(traceId); boolean flag = true;
if (ValidationUtil.isEmpty(cacheTemperatureAlarmDto)) { List<CarIndexGisVo> list1 = list.stream().filter(x -> CarForGisEnum.JD.getNameKey().equals(x.getNameKey()))
cacheTemperatureAlarmDto = new TemperatureAlarmDto(); .collect(Collectors.toList());
} List<CarIndexGisVo> list2 = list.stream().filter(x -> CarForGisEnum.WD.getNameKey().equals(x.getNameKey()))
TemperatureAlarmDto newMap = JSON.parseObject(JSON.toJSONString(map), TemperatureAlarmDto.class); .collect(Collectors.toList());
BeanUtil.copyPropertiesIgnoreNull(newMap, cacheTemperatureAlarmDto); for (CarIndexGisVo gisVo : list) {
temperatureMap.put(traceId, cacheTemperatureAlarmDto); if (CarForGisEnum.JD.getNameKey().equals(gisVo.getNameKey())) {
} if (!StringUtil.isNotEmpty(gisVo.getValue()) || "0".equals(gisVo.getValue())) {
flag = false;
private boolean temperatureMapIsEmpty(String traceId) { continue;
TemperatureAlarmDto dto = temperatureMap.get(traceId); }
if (!ValidationUtil.isEmpty(dto) && !ValidationUtil.isEmpty(dto.getAlarmLevel()) && !ValidationUtil.isEmpty(dto.getAlarmType()) && !ValidationUtil.isEmpty(dto.getAlarmRule()) }
&& !ValidationUtil.isEmpty(dto.getRuleTemperature()) && !ValidationUtil.isEmpty(dto.getTemperature()) && !ValidationUtil.isEmpty(dto.getThermometryUnit())) { if (CarForGisEnum.WD.getNameKey().equals(gisVo.getNameKey()) || "0".equals(gisVo.getValue())) {
return true; if (!StringUtil.isNotEmpty(gisVo.getValue())) {
} flag = false;
return false; continue;
} }
}
}
/** if (list1.size() == 0 || list2.size() == 0) {
* 判断是否为NB物联监测设备参数 flag = false;
* }
* @param nameKey return flag;
* @return }
*/
private boolean verifyNB(String nameKey) { /**
return nameKey.startsWith("NB_"); * 接收到的IOT数据为火眼存储到Map中
} */
private void iotDataListToCacheMap(List<IotDataVO> iotDatalist) {
/** List<IotDataVO> iotDataVOs = iotDatalist.stream()
* 判断状态为正常或报警解除 .filter(x -> "alarmLevel".equals(x.getKey()) || "alarmType".equals(x.getKey())
*/ || "temperature".equals(x.getKey()) || "ruleTemperature".equals(x.getKey())
private boolean checkStateIsNormal(EquipmentSpecificAlarm equipmentSpecificAlarm, EquipmentSpecificIndex equipmentSpecificIndex) { || "thermometryUnit".equals(x.getKey()) || "alarmRule".equals(x.getKey()))
String enumKey = String.format("%s_%s", equipmentSpecificAlarm.getEquipmentSpecificIndexKey(), equipmentSpecificIndex.getValue()); .collect(Collectors.toList());
equipmentSpecificAlarm.setAlamReason(equipmentSpecificAlarm.getEquipmentSpecificIndexName().replace("NB_", "") if (iotDataVOs.size() > 0) {
+ ":" + NBalarmEnum.getDescByKey(enumKey)); Map<String, Object> map = iotDatalist.stream()
boolean flag = false; .collect(Collectors.toMap(IotDataVO::getKey, IotDataVO::getValue));
if (!ValidationUtil.isEmpty(equipmentSpecificAlarm.getType()) putTemperatureMap(map.get("traceId").toString(), map);
&& !ValidationUtil.isEmpty(equipmentSpecificAlarm.getIotCode()) }
&& !ValidationUtil.isEmpty(equipmentSpecificAlarm.getEquipmentSpecificIndexKey()) }
&& (NBalarmEnum.NB_liquid_level_state_0.getKey().equals(enumKey)
|| NBalarmEnum.NB_error_code_0.getKey().equals(enumKey) /**
|| NBalarmEnum.NB_battery_state_0.getKey().equals(enumKey) * 处理火眼逻辑合并为一条告警
|| NBalarmEnum.NB_hydraulic_state_0.getKey().equals(enumKey) */
|| NBalarmEnum.NB_hydraulic_state_2.getKey().equals(enumKey) private EquipmentSpecificIndex handleTemperatureAlarm(EquipmentSpecificIndex equipmentSpecificIndex,
|| NBalarmEnum.NB_hydraulic_state_4.getKey().equals(enumKey) List<IotDataVO> iotDatalist) {
|| NBalarmEnum.NB_alarm_status_4.getKey().equals(enumKey))) { List<IotDataVO> collect = iotDatalist.stream().filter(x -> "traceId".equals(x.getKey()))
flag = true; .collect(Collectors.toList());
} if (collect.size() > 0 && temperatureMapIsEmpty(String.valueOf(collect.get(0).getValue()))) {
return flag; String traceId = String.valueOf(collect.get(0).getValue());
} TemperatureAlarmDto dto = temperatureMap.get(traceId);
equipmentSpecificIndex
.setEquipmentSpecificIndexName(AlarmTypeEnum.getTypeByCode(AlarmTypeEnum.GZGJ.getCode()));
/** equipmentSpecificIndex.setNameKey(AlarmTypeEnum.GZGJ.getCode());
* 装备实时数据处理 equipmentSpecificIndex.setAlamReason(
* @param iotDatalist TemperatureAlarm.getAlarmContent(dto.getAlarmLevel(), dto.getAlarmType(), dto.getAlarmRule(),
* @param indexList dto.getRuleTemperature(), dto.getTemperature(), dto.getThermometryUnit()));
* @param topicEntity equipmentSpecificIndex.setValue("true");
*/ equipmentSpecificIndex.setIsAlarm(1);
private void equipRealTimeDate(List<IotDataVO> iotDatalist, List<EquipmentSpecificIndex> indexList, TopicEntityVo topicEntity){ temperatureMap.remove(traceId);
List<EquipmentSpecificIndex> equipmentSpecificIndexList = new ArrayList<>(); }
List<EquipmentSpecificAlarm> equipmentSpecificAlarms = new ArrayList<>(); return equipmentSpecificIndex;
List<IndexStateVo> indexStateList = new ArrayList<>(); }
// 存储温度数据至内存中(火眼)
iotDataListToCacheMap(iotDatalist); /**
* temperatureMap存储数据
iotDatalist.forEach( iotDataVO -> { */
for (EquipmentSpecificIndex equipmentSpecificIndex : indexList) { private void putTemperatureMap(String traceId, Map<String, Object> map) {
if (!ObjectUtils.isEmpty(equipmentSpecificIndex.getNameKey()) TemperatureAlarmDto cacheTemperatureAlarmDto = temperatureMap.get(traceId);
&& equipmentSpecificIndex.getNameKey().toLowerCase().equals(iotDataVO.getKey().toLowerCase())) { if (ValidationUtil.isEmpty(cacheTemperatureAlarmDto)) {
EquipmentSpecificIndex equipmentSpeIndex = new EquipmentSpecificIndex(); cacheTemperatureAlarmDto = new TemperatureAlarmDto();
BeanUtils.copyProperties(equipmentSpecificIndex, equipmentSpeIndex); }
String value = iotDataVO.getValue().toString(); TemperatureAlarmDto newMap = JSON.parseObject(JSON.toJSONString(map), TemperatureAlarmDto.class);
equipmentSpeIndex.setValue(value); BeanUtil.copyPropertiesIgnoreNull(newMap, cacheTemperatureAlarmDto);
equipmentSpeIndex.setValueLabel(valueTranslate(value, equipmentSpecificIndex.getValueEnum())); temperatureMap.put(traceId, cacheTemperatureAlarmDto);
equipmentSpeIndex.setUpdateDate(new Date()); }
equipmentSpecificIndexService.updateById(equipmentSpeIndex);
private boolean temperatureMapIsEmpty(String traceId) {
equipmentSpecificIndexList.add(equipmentSpeIndex); TemperatureAlarmDto dto = temperatureMap.get(traceId);
if (!ValidationUtil.isEmpty(dto) && !ValidationUtil.isEmpty(dto.getAlarmLevel())
indexStateList.add(createIndexStateVo(equipmentSpeIndex)); && !ValidationUtil.isEmpty(dto.getAlarmType()) && !ValidationUtil.isEmpty(dto.getAlarmRule())
&& !ValidationUtil.isEmpty(dto.getRuleTemperature()) && !ValidationUtil.isEmpty(dto.getTemperature())
// 向预控系统发送消息 && !ValidationUtil.isEmpty(dto.getThermometryUnit())) {
sendEquipSpecIndexToAutosysTopic(equipmentSpeIndex); return true;
}
return false;
// 添加指标报告 }
saveEquipmentAlarmReportDay(equipmentSpeIndex);
/**
//火眼数据构造告警指标逻辑 * 判断是否为NB物联监测设备参数
equipmentSpecificIndex = handleTemperatureAlarm(equipmentSpeIndex, iotDatalist); *
* @param nameKey
//指标告警处理 * @return
if(equipmentSpecificIndex.getIsAlarm() !=null && 1 == equipmentSpecificIndex.getIsAlarm()){ */
equipmentSpecificAlarms.addAll(createIndexAlarmRecord(equipmentSpecificIndex)); private boolean verifyNB(String nameKey) {
} return nameKey.startsWith("NB_");
}
}
} /**
}); * 判断状态为正常或报警解除
*/
// 首页性能指标数据订阅 private boolean checkStateIsNormal(EquipmentSpecificAlarm equipmentSpecificAlarm,
mqttSendGateway.sendToMqtt(indexTopic, JSON.toJSONString(indexStateList)); EquipmentSpecificIndex equipmentSpecificIndex) {
String enumKey = String.format("%s_%s", equipmentSpecificAlarm.getEquipmentSpecificIndexKey(),
//组态大屏消息推送,设备表实时指标修改 equipmentSpecificIndex.getValue());
intePageSysDataRefresh(equipmentSpecificIndexList, topicEntity); equipmentSpecificAlarm.setAlamReason(equipmentSpecificAlarm.getEquipmentSpecificIndexName().replace("NB_", "")
+ ":" + NBalarmEnum.getDescByKey(enumKey));
//数字换流站同步指标修改 boolean flag = false;
syncSpecificIndexsToGS(equipmentSpecificIndexList); if (!ValidationUtil.isEmpty(equipmentSpecificAlarm.getType())
&& !ValidationUtil.isEmpty(equipmentSpecificAlarm.getIotCode())
// 报警数据保存 && !ValidationUtil.isEmpty(equipmentSpecificAlarm.getEquipmentSpecificIndexKey())
saveOrUpdateEquipAlarm(equipmentSpecificAlarms); && (NBalarmEnum.NB_liquid_level_state_0.getKey().equals(enumKey)
|| NBalarmEnum.NB_error_code_0.getKey().equals(enumKey)
//则更新拓扑节点数据及告警状态 || NBalarmEnum.NB_battery_state_0.getKey().equals(enumKey)
updateNodeDateByEquipId(equipmentSpecificIndexList); || NBalarmEnum.NB_hydraulic_state_0.getKey().equals(enumKey)
|| NBalarmEnum.NB_hydraulic_state_2.getKey().equals(enumKey)
//向画布推送 || NBalarmEnum.NB_hydraulic_state_4.getKey().equals(enumKey)
publishDataToCanvas(equipmentSpecificIndexList); || NBalarmEnum.NB_alarm_status_4.getKey().equals(enumKey))) {
} flag = true;
}
return flag;
public void saveOrUpdateEquipAlarm(List<EquipmentSpecificAlarm> equipmentSpecificAlarms){ }
if(ObjectUtils.isEmpty(equipmentSpecificAlarms)){
return; public List<EquipmentSpecificAlarmLog> saveOrUpdateEquipAlarm(
} List<EquipmentSpecificAlarm> equipmentSpecificAlarms) {
equipmentSpecificAlarmService.saveOrUpdateBatch(equipmentSpecificAlarms); List<EquipmentSpecificAlarmLog> equipmentAlarmLogs = new ArrayList<>();
List<EquipmentSpecificAlarmLog> equipmentAlarmLogs = new ArrayList<>(); if (ObjectUtils.isEmpty(equipmentSpecificAlarms)) {
equipmentSpecificAlarms.forEach(action->{ return equipmentAlarmLogs;
if (AlarmStatusEnum.BJ.getCode() == action.getStatus()) { }
equipmentAlarmLogs.add(addEquipAlarmLogRecord(action)); equipmentSpecificAlarmService.saveOrUpdateBatch(equipmentSpecificAlarms);
if (ValidationUtil.isEmpty(action.getAlamContent())) { equipmentSpecificAlarms.forEach(action -> {
action.setAlamContent(action.getEquipmentSpecificName() + action.getEquipmentSpecificIndexName()); if (AlarmStatusEnum.BJ.getCode() == action.getStatus()) {
} equipmentAlarmLogs.add(addEquipAlarmLogRecord(action));
mqttSendGateway.sendToMqtt(TopicEnum.EQDQR.getTopic(), JSONArray.toJSON(action).toString()); if (ValidationUtil.isEmpty(action.getAlamContent())) {
} else { action.setAlamContent(action.getEquipmentSpecificName() + action.getEquipmentSpecificIndexName());
equipmentAlarmLogs.addAll(upAlarmLogStatus(action.getIotCode(), action.getEquipmentSpecificIndexKey(), equipmentSpecificAlarmLogService)); }
mqttSendGateway.sendToMqtt(TopicEnum.EQYQR.getTopic(), JSONArray.toJSON(action).toString()); mqttSendGateway.sendToMqtt(TopicEnum.EQDQR.getTopic(), JSONArray.toJSON(action).toString());
bool = Boolean.TRUE; } else {
} equipmentAlarmLogs.addAll(upAlarmLogStatus(action.getIotCode(), action.getEquipmentSpecificIndexKey(),
equipmentSpecificAlarmLogService));
}); mqttSendGateway.sendToMqtt(TopicEnum.EQYQR.getTopic(), JSONArray.toJSON(action).toString());
bool = Boolean.TRUE;
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { }
@Override });
public void afterCommit() { return equipmentAlarmLogs;
JSONObject jsonObject = new JSONObject(); }
jsonObject.put("seqNo", UUID.randomUUID().toString().replace("-", "").toLowerCase());
mqttSendGateway.sendToMqtt(TopicEnum.ALARM_LOG_INSERT.getTopic(), jsonObject.toString()); /**
mqttSendGateway.sendToMqtt(TopicEnum.EQZXDT.getTopic(), ""); * 报警日志同步其他系统
// 数字换流站数据处理(高斯库同步及南瑞告警推送) *
if (syncSwitch) { * @param equipmentAlarmLogs
List<FireEquipmentFireAlarm> alarmList = createFireEquipmentFireAlarmVo(equipmentAlarmLogs); */
if (!CollectionUtils.isEmpty(alarmList)) { public void equipmentAlarmLogsToOtherSystems(List<EquipmentSpecificAlarmLog> equipmentAlarmLogs) {
Map<String, List<FireEquipmentFireAlarm>> collect = alarmList.stream().collect(Collectors.groupingBy(FireEquipmentFireAlarm::getType)); if (ObjectUtils.isEmpty(equipmentAlarmLogs)) {
for (String key : collect.keySet()) { return;
List<FireEquipmentFireAlarm> list = collect.get(key); }
if (!CollectionUtils.isEmpty(list)) { JSONObject jsonObject = new JSONObject();
if ("FIREALARM".equalsIgnoreCase(key)) { jsonObject.put("seqNo", UUID.randomUUID().toString().replace("-", "").toLowerCase());
syncDataService.syncCreatedFireEquipAlarm(list); mqttSendGateway.sendToMqtt(TopicEnum.ALARM_LOG_INSERT.getTopic(), jsonObject.toString());
} else if ("BREAKDOWN".equalsIgnoreCase(key)) { mqttSendGateway.sendToMqtt(TopicEnum.EQZXDT.getTopic(), "");
List<FireEquipmentFaultAlarm> faultAlarms = list.stream().map(x -> { // 数字换流站数据处理(高斯库同步及南瑞告警推送)
FireEquipmentFaultAlarm fireEquipmentFaultAlarm = new FireEquipmentFaultAlarm(); if (syncSwitch) {
BeanUtils.copyProperties(x, fireEquipmentFaultAlarm); List<FireEquipmentFireAlarm> alarmList = createFireEquipmentFireAlarmVo(equipmentAlarmLogs);
return fireEquipmentFaultAlarm; if (!CollectionUtils.isEmpty(alarmList)) {
}).collect(Collectors.toList()); Map<String, List<FireEquipmentFireAlarm>> collect = alarmList.stream()
syncDataService.syncCreatedFireEquiptFaultAlarm(faultAlarms); .collect(Collectors.groupingBy(FireEquipmentFireAlarm::getType));
} else if ("SHIELD".equalsIgnoreCase(key)) { for (String key : collect.keySet()) {
List<FireEquipmentDefectAlarm> defectAlarms = list.stream().map(x -> { List<FireEquipmentFireAlarm> list = collect.get(key);
FireEquipmentDefectAlarm fireEquipmentFaultAlarm = new FireEquipmentDefectAlarm(); if (!CollectionUtils.isEmpty(list)) {
BeanUtils.copyProperties(x, fireEquipmentFaultAlarm); if ("FIREALARM".equalsIgnoreCase(key)) {
return fireEquipmentFaultAlarm; syncDataService.syncCreatedFireEquipAlarm(list);
}).collect(Collectors.toList()); } else if ("BREAKDOWN".equalsIgnoreCase(key)) {
syncDataService.syncCreatedFireEquipDefectAlarm(defectAlarms); List<FireEquipmentFaultAlarm> faultAlarms = list.stream().map(x -> {
} FireEquipmentFaultAlarm fireEquipmentFaultAlarm = new FireEquipmentFaultAlarm();
} BeanUtils.copyProperties(x, fireEquipmentFaultAlarm);
} return fireEquipmentFaultAlarm;
} }).collect(Collectors.toList());
syncDataService.syncCreatedFireEquiptFaultAlarm(faultAlarms);
// 向南瑞平台推送报警消息 } else if ("SHIELD".equalsIgnoreCase(key)) {
if(!bool){ List<FireEquipmentDefectAlarm> defectAlarms = list.stream().map(x -> {
syncDataService.syncCreatedSendAlarm(equipmentAlarmLogs); FireEquipmentDefectAlarm fireEquipmentFaultAlarm = new FireEquipmentDefectAlarm();
} BeanUtils.copyProperties(x, fireEquipmentFaultAlarm);
} return fireEquipmentFaultAlarm;
} }).collect(Collectors.toList());
}); syncDataService.syncCreatedFireEquipDefectAlarm(defectAlarms);
}
} }
}
/** }
* 组装数字换流站平台告警数据
* @param // 向南瑞平台推送报警消息
* @return if (!bool) {
*/ syncDataService.syncCreatedSendAlarm(equipmentAlarmLogs);
private List<FireEquipmentFireAlarm> createFireEquipmentFireAlarmVo(List<EquipmentSpecificAlarmLog> equipmentAlarmLogs){ }
Map<String,String> stationInfo = equipmentSpecificMapper.getStationInfo().get(0); }
List<FireEquipmentFireAlarm> alarmList = new ArrayList<>(); }
equipmentAlarmLogs.forEach(action->{
FireEquipmentFireAlarm alarm = new FireEquipmentFireAlarm(); /**
BeanUtils.copyProperties(action, alarm); * 组装数字换流站平台告警数据
alarm.setAliasname(StringUtil.toNotEmptyString(action.getEquipmentSpecificIndexName())); *
alarm.setEquipmentMeasurementId(StringUtil.toNotEmptyString(action.getEquipmentIndexId().toString())); * @param
alarm.setEquipmentMeasurementMRid(StringUtil.toNotEmptyString(action.getEquipmentIndexId().toString())); * @return
alarm.setFieldLabel(StringUtil.toNotEmptyString(action.getEquipmentSpecificIndexKey())); */
alarm.setFieldName(StringUtil.toNotEmptyString(action.getEquipmentSpecificIndexName())); private List<FireEquipmentFireAlarm> createFireEquipmentFireAlarmVo(
alarm.setFireEquipmentId(StringUtil.toNotEmptyString(action.getEquipmentSpecificId().toString())); List<EquipmentSpecificAlarmLog> equipmentAlarmLogs) {
alarm.setFireEquipmentMRid(StringUtil.toNotEmptyString(action.getEquipmentSpecificCode())); Map<String, String> stationInfo = equipmentSpecificMapper.getStationInfo().get(0);
alarm.setFireEquipmentName(StringUtil.toNotEmptyString(action.getEquipmentSpecificName())); List<FireEquipmentFireAlarm> alarmList = new ArrayList<>();
alarm.setFrequency(1); equipmentAlarmLogs.forEach(action -> {
alarm.setId(StringUtil.toNotEmptyString(action.getId().toString())); FireEquipmentFireAlarm alarm = new FireEquipmentFireAlarm();
alarm.setMrid(action.getId().toString()); BeanUtils.copyProperties(action, alarm);
alarm.setName(action.getEquipmentSpecificIndexName()); alarm.setAliasname(StringUtil.toNotEmptyString(action.getEquipmentSpecificIndexName()));
alarm.setRecoveryDate(action.getUpdateDate()); alarm.setEquipmentMeasurementId(StringUtil.toNotEmptyString(action.getEquipmentIndexId().toString()));
alarm.setStationCode(StringUtil.toNotEmptyString(stationInfo.get("stationCode"))); alarm.setEquipmentMeasurementMRid(StringUtil.toNotEmptyString(action.getEquipmentIndexId().toString()));
alarm.setStationName(StringUtil.toNotEmptyString(stationInfo.get("stationName"))); alarm.setFieldLabel(StringUtil.toNotEmptyString(action.getEquipmentSpecificIndexKey()));
alarm.setValue(StringUtil.toNotEmptyString(action.getEquipmentSpecificIndexValue())); alarm.setFieldName(StringUtil.toNotEmptyString(action.getEquipmentSpecificIndexName()));
alarmList.add(alarm); alarm.setFireEquipmentId(StringUtil.toNotEmptyString(action.getEquipmentSpecificId().toString()));
}); alarm.setFireEquipmentMRid(StringUtil.toNotEmptyString(action.getEquipmentSpecificCode()));
return alarmList; alarm.setFireEquipmentName(StringUtil.toNotEmptyString(action.getEquipmentSpecificName()));
} alarm.setFrequency(1);
alarm.setId(StringUtil.toNotEmptyString(action.getId().toString()));
/** alarm.setMrid(action.getId().toString());
* 高斯库同步指标修改 alarm.setName(action.getEquipmentSpecificIndexName());
* @param equipmentSpecificIndexList alarm.setRecoveryDate(action.getUpdateDate());
*/ alarm.setStationCode(StringUtil.toNotEmptyString(stationInfo.get("stationCode")));
private void syncSpecificIndexsToGS(List<EquipmentSpecificIndex> equipmentSpecificIndexList){ alarm.setStationName(StringUtil.toNotEmptyString(stationInfo.get("stationName")));
if (!ObjectUtils.isEmpty(equipmentSpecificIndexList) && syncSwitch) { alarm.setValue(StringUtil.toNotEmptyString(action.getEquipmentSpecificIndexValue()));
// 数据同步 alarmList.add(alarm);
List<EquipmentIndexVO> fireEquipMeasurementCollect = new ArrayList<>(); });
equipmentSpecificIndexList.forEach(action->{ return alarmList;
EquipmentIndexVO equipmentIndexVO = new EquipmentIndexVO(); }
BeanUtils.copyProperties(action, equipmentIndexVO);
fireEquipMeasurementCollect.add(equipmentIndexVO); /**
}); * 高斯库同步指标修改
if (0 < fireEquipMeasurementCollect.size()) { *
syncDataService.syncCreatedFireEquipMeasurement(fireEquipMeasurementCollect); * @param equipmentSpecificIndexList
} */
} private void syncSpecificIndexsToGS(List<EquipmentSpecificIndex> equipmentSpecificIndexList) {
} if (!ObjectUtils.isEmpty(equipmentSpecificIndexList) && syncSwitch) {
// 数据同步
List<EquipmentIndexVO> fireEquipMeasurementCollect = new ArrayList<>();
private IndexStateVo createIndexStateVo(EquipmentSpecificIndex equipmentSpecificIndex){ equipmentSpecificIndexList.forEach(action -> {
IndexStateVo indexStateVo = new IndexStateVo(); EquipmentIndexVO equipmentIndexVO = new EquipmentIndexVO();
BeanUtils.copyProperties(equipmentSpecificIndex, indexStateVo); BeanUtils.copyProperties(action, equipmentIndexVO);
indexStateVo.setId(equipmentSpecificIndex.getIotCode() + "_" + equipmentSpecificIndex.getNameKey()); fireEquipMeasurementCollect.add(equipmentIndexVO);
indexStateVo.setData(equipmentSpecificIndex.getValue()); });
indexStateVo.setIndexKey(equipmentSpecificIndex.getNameKey()); if (0 < fireEquipMeasurementCollect.size()) {
return indexStateVo; syncDataService.syncCreatedFireEquipMeasurement(fireEquipMeasurementCollect);
} }
}
}
public List<EquipmentSpecificAlarm> createIndexAlarmRecord(EquipmentSpecificIndex equipmentSpcIndex) {
// 处理火眼视频异常 private IndexStateVo createIndexStateVo(EquipmentSpecificIndex equipmentSpecificIndex) {
List<EquipmentSpecificAlarm> equipmentSpecificAlarms = new ArrayList<>(); IndexStateVo indexStateVo = new IndexStateVo();
EquipmentSpecificAlarm equipmentSpecificAlarm = new EquipmentSpecificAlarm(); BeanUtils.copyProperties(equipmentSpecificIndex, indexStateVo);
equipmentSpecificAlarm.setSystemIds(equipmentSpcIndex.getSystemId()); indexStateVo.setId(equipmentSpecificIndex.getIotCode() + "_" + equipmentSpecificIndex.getNameKey());
equipmentSpecificAlarm.setSystemCodes(this.getSystemCodeBySpeId(equipmentSpcIndex.getSystemId())); indexStateVo.setData(equipmentSpecificIndex.getValue());
List<EquipmentSpecificAlarm> indexAlarms = equipmentSpecificAlarmMapper.findEquipmentSpecificAlarmByEquipmentSpecificIdAndEquipmentIndexIdAndStatusIstrue(equipmentSpcIndex.getEquipmentSpecificId() indexStateVo.setIndexKey(equipmentSpecificIndex.getNameKey());
, equipmentSpcIndex.getEquipmentIndexId()); return indexStateVo;
// NB设备告警 }
if (verifyNB(equipmentSpcIndex.getNameKey())) {
return getNbEquipAlarmList(indexAlarms, equipmentSpcIndex, equipmentSpecificAlarm); public List<EquipmentSpecificAlarm> createIndexAlarmRecord(EquipmentSpecificIndex equipmentSpcIndex) {
} // 处理火眼视频异常
// 报警表新增信息 List<EquipmentSpecificAlarm> equipmentSpecificAlarms = new ArrayList<>();
if (ObjectUtils.isEmpty(indexAlarms) && (TrueOrFalseEnum.real.value.equals(equipmentSpcIndex.getValue()))) { EquipmentSpecificAlarm equipmentSpecificAlarm = new EquipmentSpecificAlarm();
addEquipmentSpecificAlarm(equipmentSpecificAlarms, equipmentSpcIndex, equipmentSpecificAlarm); equipmentSpecificAlarm.setSystemIds(equipmentSpcIndex.getSystemId());
} else { equipmentSpecificAlarm.setSystemCodes(this.getSystemCodeBySpeId(equipmentSpcIndex.getSystemId()));
// 报警表更新信息 List<EquipmentSpecificAlarm> indexAlarms = equipmentSpecificAlarmMapper
indexAlarms.forEach(action -> { .findEquipmentSpecificAlarmByEquipmentSpecificIdAndEquipmentIndexIdAndStatusIstrue(
if (TrueOrFalseEnum.real.value.equals(equipmentSpcIndex.getValue())) { equipmentSpcIndex.getEquipmentSpecificId(), equipmentSpcIndex.getEquipmentIndexId());
// 报警,修改发生频率 // NB设备告警
action.setFrequency((action.getFrequency() + 1)); if (verifyNB(equipmentSpcIndex.getNameKey())) {
} else { return getNbEquipAlarmList(indexAlarms, equipmentSpcIndex, equipmentSpecificAlarm);
// 报警恢复,修改数据为恢复状态 }
action.setRecoveryDate(new Date()); // 报警表新增信息
action.setEquipmentSpecificIndexValue(TrueOrFalseEnum.fake.value); if (ObjectUtils.isEmpty(indexAlarms) && (TrueOrFalseEnum.real.value.equals(equipmentSpcIndex.getValue()))) {
action.setStatus(AlarmStatusEnum.HF.getCode()); addEquipmentSpecificAlarm(equipmentSpecificAlarms, equipmentSpcIndex, equipmentSpecificAlarm);
} } else {
action.setUpdateDate(new Date()); // 报警表更新信息
// 更新所在系统,设备可能编辑过,更新所在系统、装备名称、装备定义code indexAlarms.forEach(action -> {
action.setSystemIds(equipmentSpcIndex.getSystemId()); if (TrueOrFalseEnum.real.value.equals(equipmentSpcIndex.getValue())) {
action.setSystemCodes(this.getSystemCodeBySpeId(equipmentSpcIndex.getSystemId())); // 报警,修改发生频率
action.setEquipmentSpecificName(equipmentSpcIndex.getEquipmentSpecificName()); action.setFrequency((action.getFrequency() + 1));
action.setEquipmentCode(equipmentSpcIndex.getEquipmentCode()); } else {
// 冗余字段,alarm_log表更新时使用 // 报警恢复,修改数据为恢复状态
action.setEquipmentSpecificCode(equipmentSpcIndex.getEquipmentSpecificCode()); action.setRecoveryDate(new Date());
equipmentSpecificAlarms.add(action); action.setEquipmentSpecificIndexValue(TrueOrFalseEnum.fake.value);
}); action.setStatus(AlarmStatusEnum.HF.getCode());
} }
action.setUpdateDate(new Date());
return equipmentSpecificAlarms; // 更新所在系统,设备可能编辑过,更新所在系统、装备名称、装备定义code
} action.setSystemIds(equipmentSpcIndex.getSystemId());
action.setSystemCodes(this.getSystemCodeBySpeId(equipmentSpcIndex.getSystemId()));
action.setEquipmentSpecificName(equipmentSpcIndex.getEquipmentSpecificName());
/** action.setEquipmentCode(equipmentSpcIndex.getEquipmentCode());
* 发送数据至换流站 // 冗余字段,alarm_log表更新时使用
* @param action.setEquipmentSpecificCode(equipmentSpcIndex.getEquipmentSpecificCode());
*/ action.setBuildId(equipmentSpcIndex.getBuildId());
private void sendEquipSpecIndexToAutosysTopic(EquipmentSpecificIndex equipmentSpeIndex){ equipmentSpecificAlarms.add(action);
});
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { }
@Override
public void afterCommit() { return equipmentSpecificAlarms;
String topic = ""; }
if (TrueOrFalseEnum.real.value.equals(equipmentSpeIndex.getValue()) && EquipmentRiskTypeEnum.HZGJ.getCode().equals(equipmentSpeIndex.getTypeCode())) {
equipmentSpeIndex.setType(EquipmentRiskTypeEnum.HZGJ.getCode()); /**
topic = String.format("%s.%s%s", serverName, "equipment/", RiskLeverForAutoSys.BJ.getCode()); * 发送数据至换流站
} else if (TrueOrFalseEnum.real.value.equals(equipmentSpeIndex.getValue()) && EquipmentRiskTypeEnum.GZ.getCode().equals(equipmentSpeIndex.getTypeCode())) { *
equipmentSpeIndex.setType(EquipmentRiskTypeEnum.GZ.getCode()); * @param
topic = String.format("%s.%s%s", serverName, "equipment/", RiskLeverForAutoSys.GZ.getCode()); */
} else { public void sendEquipSpecIndexToAutosysTopic(List<EquipmentSpecificIndex> equipmentSpeIndexs) {
equipmentSpeIndex.setType(EquipmentRiskTypeEnum.QT.getCode()); equipmentSpeIndexs.forEach(equipmentSpeIndex -> {
topic = String.format("%s.%s%s", serverName, "equipment/", RiskLeverForAutoSys.JC.getCode()); String topic = "";
} if (TrueOrFalseEnum.real.value.equals(equipmentSpeIndex.getValue())
TopicEntityVo topicEntityVo = new TopicEntityVo(); && EquipmentRiskTypeEnum.HZGJ.getCode().equals(equipmentSpeIndex.getTypeCode())) {
topicEntityVo.setIotCode(equipmentSpeIndex.getIotCode()); equipmentSpeIndex.setType(EquipmentRiskTypeEnum.HZGJ.getCode());
topicEntityVo.setTopic(topic); topic = String.format("%s.%s%s", serverName, "equipment/", RiskLeverForAutoSys.BJ.getCode());
topicEntityVo.setMessage(JSON.toJSONString(equipmentSpeIndex)); } else if (TrueOrFalseEnum.real.value.equals(equipmentSpeIndex.getValue())
mqttSendGateway.sendToMqtt(topic, JSON.toJSONString(topicEntityVo)); && EquipmentRiskTypeEnum.GZ.getCode().equals(equipmentSpeIndex.getTypeCode())) {
} equipmentSpeIndex.setType(EquipmentRiskTypeEnum.GZ.getCode());
}); topic = String.format("%s.%s%s", serverName, "equipment/", RiskLeverForAutoSys.GZ.getCode());
} } else {
equipmentSpeIndex.setType(EquipmentRiskTypeEnum.QT.getCode());
topic = String.format("%s.%s%s", serverName, "equipment/", RiskLeverForAutoSys.JC.getCode());
/** }
* 组态大屏消息推送,设备表实时指标修改 TopicEntityVo topicEntityVo = new TopicEntityVo();
* @param equipmentSpecificIndexList topicEntityVo.setIotCode(equipmentSpeIndex.getIotCode());
* @param topicEntity topicEntityVo.setTopic(topic);
*/ topicEntityVo.setMessage(JSON.toJSONString(equipmentSpeIndex));
public void intePageSysDataRefresh(List<EquipmentSpecificIndex> equipmentSpecificIndexList, TopicEntityVo topicEntity){ mqttSendGateway.sendToMqtt(topic, JSON.toJSONString(topicEntityVo));
//TODO 数字化换流站组态屏数据推送,需要在事务提交之后,否侧事务隔离查询不出数据 });
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { }
@Override
public void afterCommit() { /**
mqttSendGateway.sendToMqtt(TopicEnum.EQXXTJ.getTopic(), ""); * 组态大屏消息推送
iEquipmentSpecificSerivce.integrationPageSysDataRefresh(topicEntity.getCode()); *
iEquipmentSpecificSerivce.updateEquipmentSpecIndexRealtimeData(equipmentSpecificIndexList); * @param equipmentSpecificIndexList
} * @param topicEntity
}); */
} public void intePageSysDataRefresh(List<EquipmentSpecificIndex> equipmentSpecificIndexList,
TopicEntityVo topicEntity) {
/** mqttSendGateway.sendToMqtt(TopicEnum.EQXXTJ.getTopic(), "");
* 更新数据报表表 iEquipmentSpecificSerivce.integrationPageSysDataRefresh(topicEntity.getCode());
* @param equipmentSpecificIndex }
*/
private void saveEquipmentAlarmReportDay(EquipmentSpecificIndex equipmentSpecificIndex){ /**
SimpleDateFormat sdf = new SimpleDateFormat(DateUtils.DATE_PATTERN); * 更新数据报表表
EquipmentAlarmReportDay equipmentAlarmReportDay = addEquipAlarmReportRecord(equipmentSpecificIndex); *
LambdaQueryWrapper<EquipmentAlarmReportDay> wrapper = new LambdaQueryWrapper<>(); * @param equipmentSpecificIndex
wrapper.eq(EquipmentAlarmReportDay::getReportDate, sdf.format(equipmentAlarmReportDay.getReportDate())).eq(EquipmentAlarmReportDay::getIndexId, equipmentAlarmReportDay.getIndexId()) */
.eq(EquipmentAlarmReportDay::getEquipmentSpecificId, equipmentAlarmReportDay.getEquipmentSpecificId()); private void saveEquipmentAlarmReportDay(EquipmentSpecificIndex equipmentSpecificIndex) {
List<EquipmentAlarmReportDay> reportDayList = iEquipmentAlarmReportDayService.list(wrapper); SimpleDateFormat sdf = new SimpleDateFormat(DateUtils.DATE_PATTERN);
if (reportDayList.isEmpty()) { EquipmentAlarmReportDay equipmentAlarmReportDay = addEquipAlarmReportRecord(equipmentSpecificIndex);
equipmentAlarmReportDay.setReportDate(new Date()); LambdaQueryWrapper<EquipmentAlarmReportDay> wrapper = new LambdaQueryWrapper<>();
equipmentAlarmReportDay.setFrequency(1); wrapper.eq(EquipmentAlarmReportDay::getReportDate, sdf.format(equipmentAlarmReportDay.getReportDate()))
iEquipmentAlarmReportDayService.save(equipmentAlarmReportDay); .eq(EquipmentAlarmReportDay::getIndexId, equipmentAlarmReportDay.getIndexId())
} else { .eq(EquipmentAlarmReportDay::getEquipmentSpecificId, equipmentAlarmReportDay.getEquipmentSpecificId());
EquipmentAlarmReportDay reportDay = reportDayList.get(0); List<EquipmentAlarmReportDay> reportDayList = iEquipmentAlarmReportDayService.list(wrapper);
reportDay.setLastReportDate(new Date()); if (reportDayList.isEmpty()) {
reportDay.setValue(equipmentAlarmReportDay.getValue()); equipmentAlarmReportDay.setReportDate(new Date());
reportDay.setFrequency(reportDay.getFrequency() + 1); equipmentAlarmReportDay.setFrequency(1);
reportDay.setIndexTrueNum(reportDay.getIndexTrueNum() == null ? equipmentAlarmReportDay.getIndexTrueNum() : reportDay.getIndexTrueNum() + equipmentAlarmReportDay.getIndexTrueNum()); iEquipmentAlarmReportDayService.save(equipmentAlarmReportDay);
iEquipmentAlarmReportDayService.updateById(reportDay); } else {
} EquipmentAlarmReportDay reportDay = reportDayList.get(0);
reportDay.setLastReportDate(new Date());
} reportDay.setValue(equipmentAlarmReportDay.getValue());
reportDay.setFrequency(reportDay.getFrequency() + 1);
private String valueTranslate(String value, String enumStr){ reportDay.setIndexTrueNum(reportDay.getIndexTrueNum() == null ? equipmentAlarmReportDay.getIndexTrueNum()
if(ObjectUtils.isEmpty(enumStr)){ : reportDay.getIndexTrueNum() + equipmentAlarmReportDay.getIndexTrueNum());
return ""; iEquipmentAlarmReportDayService.updateById(reportDay);
} }
try {
JSONArray jsonArray = JSONArray.parseArray(enumStr); }
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i); private String valueTranslate(String value, String enumStr) {
if (jsonObject.get("key").equals(value)) { if (ObjectUtils.isEmpty(enumStr)) {
return jsonObject.getString("label"); return "";
} }
} try {
} catch (Exception e) { JSONArray jsonArray = JSONArray.parseArray(enumStr);
e.printStackTrace(); for (int i = 0; i < jsonArray.size(); i++) {
} JSONObject jsonObject = jsonArray.getJSONObject(i);
return ""; if (jsonObject.get("key").equals(value)) {
} return jsonObject.getString("label");
}
private void carRealTimeDate(List<IotDataVO> iotDatalist, List<CarProperty> carProperties){ }
} catch (Exception e) {
e.printStackTrace();
List<CarProperty> carIndexsList = new ArrayList<>(); }
iotDatalist.forEach(iotDataVO->{ return "";
// 对指标key为labels的数据处理 }
if (EquipmentIndexLabelsEnum.labels.name.equals(iotDataVO.getKey())) {
StringBuilder sb = new StringBuilder("equipmentOnCar_"); /**
EquipmentIndexLabelsVo labelsVo = new EquipmentIndexLabelsVo(); * 车辆数据推送及同步
Object obj = iotDataVO.getValue(); *
if (obj instanceof JSONArray) { * @param carProperties
List<String> labelList = (List<String>) obj; * @param carPropertyVos
labelList.forEach(code -> { */
String key = sb.append(code).toString(); public void carTransactionSynch(List<CarProperty> carProperties, List<CarPropertyVo> carPropertyVos) {
labelsVo.setEquipmentIotCode(code); // TODO 数字化换流站组态屏数据推送,需要在事务提交之后,否侧事务隔离查询不出数据
labelsVo.setTime(new Date()); TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
redisUtils.set(key, com.alibaba.fastjson.JSONObject.toJSONString(labelsVo), redisExpireTime); @Override
}); public void afterCommit() {
} List<CarIndexGisVo> list = createCarIndexGisVo(carProperties);
} mqttSendGateway.sendToMqtt(TopicEnum.CARZXDT.getTopic(), "");
List<CarPropertyVo> carPropertyVos = new ArrayList<>(); boolean flag = ifSendToGis(list);
carProperties.forEach(carProperty->{ if (flag) {
if (iotDataVO.getKey().equals(carProperty.getNameKey())) { mqttSendGateway.sendToMqtt(carTopic, JSON.toJSONString(list));
carProperty.setValue(iotDataVO.getValue().toString()); }
carProperty.setUpdateDate(new Date());
carPropertyVos.add(carPropertyToCarPropertyVo(carProperty)); if (syncSwitch) {
carIndexsList.add(carProperty); syncDataService.syncCreatedFireVehicleMeasurement(carPropertyVos);
} }
}); }
});
boolean updateBatchById = carPropertyService.updateBatchById(carIndexsList); }
if(updateBatchById){ private CarPropertyVo carPropertyToCarPropertyVo(CarProperty property) {
carTransactionSynch(carProperties,carPropertyVos); CarPropertyVo carPropertyVo = new CarPropertyVo();
} carPropertyVo.setCarId(property.getCarId());
}); carPropertyVo.setCreateDate(property.getCreateDate());
} carPropertyVo.setId(property.getId());
carPropertyVo.setIsIot(1);
/** carPropertyVo.setMRid(property.getEquipmentIndexId().toString());
* 车辆数据推送及同步 carPropertyVo.setName(property.getEquipmentIndexName());
* @param carProperties carPropertyVo.setNameKey(property.getEquipmentIndexKey());
* @param carPropertyVos carPropertyVo.setSort(1);
*/ carPropertyVo.setUnit(property.getUnitName());
public void carTransactionSynch(List<CarProperty> carProperties, List<CarPropertyVo> carPropertyVos){ carPropertyVo.setValue(property.getValue());
//TODO 数字化换流站组态屏数据推送,需要在事务提交之后,否侧事务隔离查询不出数据 return carPropertyVo;
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { }
@Override
public void afterCommit() { private List<CarIndexGisVo> createCarIndexGisVo(List<CarProperty> carProperties) {
List<CarIndexGisVo> list = createCarIndexGisVo(carProperties); List<CarIndexGisVo> list = new ArrayList<>();
mqttSendGateway.sendToMqtt(TopicEnum.CARZXDT.getTopic(), ""); long id = 0l;
boolean flag = ifSendToGis(list); String iotCode = "";
if (flag) { for (CarProperty action : carProperties) {
mqttSendGateway.sendToMqtt(carTopic, JSON.toJSONString(list)); CarIndexGisVo v = new CarIndexGisVo();
} id = action.getCarId();
iotCode = action.getIotCode();
if (syncSwitch) { v.setId(action.getCarId());
syncDataService.syncCreatedFireVehicleMeasurement(carPropertyVos); v.setIotCode(action.getIotCode());
} v.setNameKey(action.getEquipmentIndexKey());
} v.setValue(ObjectUtils.isEmpty(action.getValue()) ? "0" : action.getValue());
}); list.add(v);
} }
private CarPropertyVo carPropertyToCarPropertyVo(CarProperty property){ CarIndexGisVo time = new CarIndexGisVo();
CarPropertyVo carPropertyVo = new CarPropertyVo(); time.setId(id);
carPropertyVo.setCarId(property.getCarId()); time.setIotCode(iotCode);
carPropertyVo.setCreateDate(property.getCreateDate()); time.setNameKey(CarForGisEnum.SJ.getNameKey());
carPropertyVo.setId(property.getId()); time.setValue(String.valueOf(new Date().getTime()));
carPropertyVo.setIsIot(1); list.add(time);
carPropertyVo.setMRid(property.getEquipmentIndexId().toString());
carPropertyVo.setName(property.getEquipmentIndexName()); return list;
carPropertyVo.setNameKey(property.getEquipmentIndexKey()); }
carPropertyVo.setSort(1);
carPropertyVo.setUnit(property.getUnitName()); /**
carPropertyVo.setValue(property.getValue()); * //若为物联设备,则更新拓扑节点数据及告警状态
return carPropertyVo; *
} * @param indexList
*/
private List<CarIndexGisVo> createCarIndexGisVo(List<CarProperty> carProperties){ public void updateNodeDateByEquipId(List<EquipmentSpecificIndex> indexList) {
List<CarIndexGisVo> list = new ArrayList<>(); if (!ObjectUtils.isEmpty(indexList)) {
long id =0l; EquipmentVo equipmentVo = equipmentService.getEquipBySpecific(indexList.get(0).getEquipmentSpecificId());
String iotCode = ""; if (equipmentVo.getIsIot().equals("1")) {
for(CarProperty action : carProperties){ List<EquipmentSpecificAlarm> alarmList = equipmentSpecificAlarmService.getEquipListBySpecific(true,
CarIndexGisVo v = new CarIndexGisVo(); indexList.get(0).getEquipmentSpecificId());
id = action.getCarId(); topographyService.updateNodeDateByEquipId(indexList.get(0).getEquipmentSpecificId(), indexList,
iotCode = action.getIotCode(); alarmList);
v.setId(action.getCarId()); }
v.setIotCode(action.getIotCode()); }
v.setNameKey(action.getEquipmentIndexKey()); }
v.setValue(ObjectUtils.isEmpty(action.getValue())?"0":action.getValue());
list.add(v);
}
CarIndexGisVo time = new CarIndexGisVo();
time.setId(id);
time.setIotCode(iotCode);
time.setNameKey(CarForGisEnum.SJ.getNameKey());
time.setValue(String.valueOf(new Date().getTime()));
list.add(time);
return list;
}
/**
* //若为物联设备,则更新拓扑节点数据及告警状态
* @param indexList
*/
public void updateNodeDateByEquipId(List<EquipmentSpecificIndex> indexList){
if (!ObjectUtils.isEmpty(indexList)) {
EquipmentVo equipmentVo = equipmentService.getEquipBySpecific(indexList.get(0).getEquipmentSpecificId());
if (equipmentVo.getIsIot().equals("1")) {
List<EquipmentSpecificAlarm> alarmList = equipmentSpecificAlarmService.getEquipListBySpecific(true, indexList.get(0).getEquipmentSpecificId());
topographyService.updateNodeDateByEquipId(indexList.get(0).getEquipmentSpecificId(), indexList, alarmList);
}
}
}
} }
package com.yeejoin.amos.boot.module.jcs.biz.controller; package com.yeejoin.amos.boot.module.jcs.biz.controller;
import java.util.Arrays; import java.util.Arrays;
import java.util.Objects;
import com.yeejoin.amos.boot.module.common.biz.service.impl.SourceFileServiceImpl;
import com.yeejoin.amos.boot.module.jcs.api.entity.JcSituationDetail;
import com.yeejoin.amos.boot.module.jcs.api.mapper.JcSituationDetailMapper;
import com.yeejoin.amos.component.rule.config.RuleConfig;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.typroject.tyboot.component.emq.EmqKeeper;
import org.typroject.tyboot.core.foundation.enumeration.UserType; import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation; import org.typroject.tyboot.core.restful.doc.TycloudOperation;
...@@ -22,6 +30,9 @@ import com.yeejoin.amos.boot.module.jcs.biz.service.impl.PowerTransferCompanySer ...@@ -22,6 +30,9 @@ import com.yeejoin.amos.boot.module.jcs.biz.service.impl.PowerTransferCompanySer
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
/** /**
...@@ -38,6 +49,18 @@ public class PowerTransferCompanyController extends BaseController { ...@@ -38,6 +49,18 @@ public class PowerTransferCompanyController extends BaseController {
@Autowired @Autowired
PowerTransferCompanyServiceImpl powerTransferCompanyService; PowerTransferCompanyServiceImpl powerTransferCompanyService;
@Autowired
SourceFileServiceImpl sourceFileService;
@Autowired
JcSituationDetailMapper jcSituationDetailMapper;
@Autowired
private EmqKeeper emqKeeper;
@Value("${mqtt.topic.command.power.deployment}")
private String topic;
/** /**
* 新增调派单位 * 新增调派单位
* *
...@@ -139,5 +162,29 @@ public class PowerTransferCompanyController extends BaseController { ...@@ -139,5 +162,29 @@ public class PowerTransferCompanyController extends BaseController {
page = powerTransferCompanyService.page(pageBean, powerTransferCompanyQueryWrapper); page = powerTransferCompanyService.page(pageBean, powerTransferCompanyQueryWrapper);
return page; return page;
} }
/**
* 新增文字信息图片信息
*
* @return 返回结果
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@RequestMapping(value = "/jcSituationDetail/save", method = RequestMethod.POST)
@ApiOperation(httpMethod = "POST", value = "新增文字信息图片信息", notes = "新增文字信息图片信息")
public ResponseModel<Boolean> saveJcSituationDetail(@RequestBody JcSituationDetail jcSituationDetail) throws MqttException {
if (Objects.isNull(jcSituationDetail.getAlertCalledId())) {
throw new BadRequest("警情ID不能为空");
}
jcSituationDetailMapper.insert(jcSituationDetail);
// if (ObjectUtils.isNotEmpty(jcSituationDetail.getAttachments())) {
// sourceFileService.saveAttachments(jcSituationDetail.getSequenceNbr(), jcSituationDetail.getAttachments());
// }
// 自定义指令信息消息推送
// 定义指令信息消息推送 页面发送mqtt 默认发送 String 类型 0, 新警情 1 警情状态变化
emqKeeper.getMqttClient().publish(topic, "0".getBytes(), RuleConfig.DEFAULT_QOS, false);
return ResponseHelper.buildResponse(Boolean.TRUE);
}
} }
...@@ -32,6 +32,9 @@ import java.util.stream.IntStream; ...@@ -32,6 +32,9 @@ import java.util.stream.IntStream;
import com.yeejoin.amos.boot.module.command.api.dto.FrontlineLiaisonDto; import com.yeejoin.amos.boot.module.command.api.dto.FrontlineLiaisonDto;
import com.yeejoin.amos.boot.module.command.biz.service.impl.FrontlineLiaisonServiceImpl; import com.yeejoin.amos.boot.module.command.biz.service.impl.FrontlineLiaisonServiceImpl;
import com.yeejoin.amos.boot.module.common.api.service.ISourceFileService;
import com.yeejoin.amos.boot.module.jcs.api.entity.*;
import com.yeejoin.amos.boot.module.jcs.api.mapper.JcSituationDetailMapper;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTable;
...@@ -113,10 +116,6 @@ import com.yeejoin.amos.boot.module.jcs.api.dto.SchedulingReportingDto; ...@@ -113,10 +116,6 @@ import com.yeejoin.amos.boot.module.jcs.api.dto.SchedulingReportingDto;
import com.yeejoin.amos.boot.module.jcs.api.dto.TemplateDto; import com.yeejoin.amos.boot.module.jcs.api.dto.TemplateDto;
import com.yeejoin.amos.boot.module.jcs.api.dto.TemplateExtendDto; import com.yeejoin.amos.boot.module.jcs.api.dto.TemplateExtendDto;
import com.yeejoin.amos.boot.module.jcs.api.dto.VoiceRecordFileDto; import com.yeejoin.amos.boot.module.jcs.api.dto.VoiceRecordFileDto;
import com.yeejoin.amos.boot.module.jcs.api.entity.AlertCalled;
import com.yeejoin.amos.boot.module.jcs.api.entity.AlertSubmitted;
import com.yeejoin.amos.boot.module.jcs.api.entity.AlertSubmittedObject;
import com.yeejoin.amos.boot.module.jcs.api.entity.Template;
import com.yeejoin.amos.boot.module.jcs.api.enums.AlertBusinessTypeEnum; import com.yeejoin.amos.boot.module.jcs.api.enums.AlertBusinessTypeEnum;
import com.yeejoin.amos.boot.module.jcs.api.enums.AlertSchedulingTypeEnum; import com.yeejoin.amos.boot.module.jcs.api.enums.AlertSchedulingTypeEnum;
import com.yeejoin.amos.boot.module.jcs.api.enums.AlertStageEnums; import com.yeejoin.amos.boot.module.jcs.api.enums.AlertStageEnums;
...@@ -214,6 +213,9 @@ public class AlertSubmittedServiceImpl extends BaseService<AlertSubmittedDto, Al ...@@ -214,6 +213,9 @@ public class AlertSubmittedServiceImpl extends BaseService<AlertSubmittedDto, Al
private FrontlineLiaisonServiceImpl frontlineLiaisonServiceImpl; private FrontlineLiaisonServiceImpl frontlineLiaisonServiceImpl;
@Autowired
JcSituationDetailMapper jcSituationDetailMapper;
@Value("${mqtt.topic.command.alert.noticeJa}") @Value("${mqtt.topic.command.alert.noticeJa}")
private String topicJa; private String topicJa;
...@@ -1434,6 +1436,20 @@ public class AlertSubmittedServiceImpl extends BaseService<AlertSubmittedDto, Al ...@@ -1434,6 +1436,20 @@ public class AlertSubmittedServiceImpl extends BaseService<AlertSubmittedDto, Al
listInstructionsZHDto.add(instruct); listInstructionsZHDto.add(instruct);
}); });
//增加自定义指令信息:实战指挥需求【1575】
LambdaQueryWrapper<JcSituationDetail> qw = new LambdaQueryWrapper();
qw.eq(JcSituationDetail::getAlertCalledId, id);
List<JcSituationDetail> jcSituationDetailList = jcSituationDetailMapper.selectList(qw);
jcSituationDetailList.stream().forEach(item -> {
InstructionsZHDto instructionsZHDto = new InstructionsZHDto();
instructionsZHDto.setSequenceNbr(item.getSequenceNbr());
instructionsZHDto.setType(item.getInfoType());
instructionsZHDto.setContent(item.getInfo());
instructionsZHDto.setSubmissionTime(item.getRecDate());
listInstructionsZHDto.add(instructionsZHDto);
});
// ;
//排序时间倒序 //排序时间倒序
/* Bug 2613 修改排序 按照发送时间排序 2021-09-01 陈召 开始*/ /* Bug 2613 修改排序 按照发送时间排序 2021-09-01 陈召 开始*/
Collections.sort(listInstructionsZHDto, new Comparator<InstructionsZHDto>() { Collections.sort(listInstructionsZHDto, new Comparator<InstructionsZHDto>() {
......
...@@ -378,22 +378,9 @@ public class PlanTaskServiceImpl implements IPlanTaskService { ...@@ -378,22 +378,9 @@ public class PlanTaskServiceImpl implements IPlanTaskService {
continue; continue;
paramMap.clear(); paramMap.clear();
paramMap.put("id", plan.getId()); paramMap.put("id", plan.getId());
// 2.1计划数据合法性校验
Boolean fileFlag = PlanTaskUtil.checkMustFile(plan);
if (!fileFlag) {
paramMap.put("next_gen_date", tomorrow);
planMapper.updPlanStatusOrGenDate(paramMap);// 更新为明天
continue;
}
// 2.2.计算生成数据的日期区间 // 2.2.计算生成数据的日期区间
CalDateVo vo = PlanTaskUtil.reGenPlanTaskData(plan, tomorrow, tomorrow); CalDateVo vo = PlanTaskUtil.reGenPlanTaskData(plan, tomorrow, tomorrow);
// 计划未开始,则更新生成时间为明天
if (null == vo) {
paramMap.put("next_gen_date", tomorrow);
planMapper.updPlanStatusOrGenDate(paramMap);// 更新为明天
continue;
}
// 计划已过期,则更新status = 7,已完成 // 计划已过期,则更新status = 7,已完成
if (!vo.getIsGenData()) { if (!vo.getIsGenData()) {
int num = 0; int num = 0;
...@@ -413,9 +400,28 @@ public class PlanTaskServiceImpl implements IPlanTaskService { ...@@ -413,9 +400,28 @@ public class PlanTaskServiceImpl implements IPlanTaskService {
paramMap.put("status", PlanStatusEnum.COMPLETED.getValue()); paramMap.put("status", PlanStatusEnum.COMPLETED.getValue());
} }
} }
if (plan.getIsFixedDate().equals("2")){
paramMap.put("status", PlanStatusEnum.OUT_TIME.getValue());
planMapper.updPlanStatusOrGenDate(paramMap);
continue;
}
planMapper.updPlanStatusOrGenDate(paramMap); planMapper.updPlanStatusOrGenDate(paramMap);
continue; continue;
} }
// 2.1计划数据合法性校验
Boolean fileFlag = PlanTaskUtil.checkMustFile(plan);
if (!fileFlag) {
paramMap.put("next_gen_date", tomorrow);
planMapper.updPlanStatusOrGenDate(paramMap);// 更新为明天
continue;
}
// 计划未开始,则更新生成时间为明天
if (null == vo) {
paramMap.put("next_gen_date", tomorrow);
planMapper.updPlanStatusOrGenDate(paramMap);// 更新为明天
continue;
}
// 2.3.执行数据生成(具体时间 + 人员) // 2.3.执行数据生成(具体时间 + 人员)
List<HashMap<String, Object>> list = genAllExeDate(plan, vo, XJConstant.SCHED_FLAG); List<HashMap<String, Object>> list = genAllExeDate(plan, vo, XJConstant.SCHED_FLAG);
...@@ -757,7 +763,7 @@ public class PlanTaskServiceImpl implements IPlanTaskService { ...@@ -757,7 +763,7 @@ public class PlanTaskServiceImpl implements IPlanTaskService {
ReginParams reginParam = JSON.parseObject(redisUtils ReginParams reginParam = JSON.parseObject(redisUtils
.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), .get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(),
ReginParams.class); ReginParams.class);
params.put("loginUserId", reginParam.getPersonIdentity().getPersonSeq()); // params.put("loginUserId", reginParam.getPersonIdentity().getPersonSeq());
long total = planTaskMapper.getPlanTasksCount(params); long total = planTaskMapper.getPlanTasksCount(params);
if (total == 0) { if (total == 0) {
return new PageImpl<>(content, pageParam, total); return new PageImpl<>(content, pageParam, total);
......
...@@ -2860,4 +2860,31 @@ ...@@ -2860,4 +2860,31 @@
create unique index uni on wl_equipment_standard (`type`, `equipment_id`, `org_code`); create unique index uni on wl_equipment_standard (`type`, `equipment_id`, `org_code`);
</sql> </sql>
</changeSet> </changeSet>
<changeSet author="ls" id="20220601-1">
<comment>`getChildListdate`</comment>
<sql endDelimiter="#">
DROP FUNCTION IF EXISTS `getChildListdate`#
CREATE DEFINER=`root`@`%` FUNCTION `getChildListdate`(`p_id` VARCHAR(1000)) RETURNS varchar(5000) CHARSET latin1
BEGIN
DECLARE sTemp TEXT;
DECLARE sTempChd VARCHAR(5000);
SET sTemp='';
SET sTempChd = CAST(p_id AS CHAR);
WHILE sTempChd IS NOT NULL DO
SET sTemp = CONCAT(sTemp,',',sTempChd);
SELECT GROUP_CONCAT(distinct a.instance_id) INTO sTempChd FROM
(select wl_form_instance.instance_id ,wl_form_instance.field_value from wl_form_instance where wl_form_instance.group_type in('building','room','floor') and field_name='parentId') a
WHERE FIND_IN_SET(a.field_value,sTempChd) > 0;
END WHILE;
RETURN SUBSTRING(sTemp,LENGTH(CONCAT(',',p_id))+1);
END
</sql>
</changeSet>
</databaseChangeLog> </databaseChangeLog>
\ No newline at end of file
...@@ -247,6 +247,18 @@ ...@@ -247,6 +247,18 @@
AND AND
wc.iot_code = #{iotCode} wc.iot_code = #{iotCode}
</select> </select>
<select id="getCarsByIotCodeExcludeCarId" resultType="com.yeejoin.equipmanage.common.entity.Car">
SELECT
wc.car_num
FROM
wl_car wc
WHERE
wc.iot_code IS NOT NULL
AND
wc.iot_code = #{iotCode}
AND wc.id != #{carId}
</select>
<select id="getCarsInfoByOrgCode" resultMap="carIotInfoMap"> <select id="getCarsInfoByOrgCode" resultMap="carIotInfoMap">
......
...@@ -2899,5 +2899,38 @@ ...@@ -2899,5 +2899,38 @@
</sql> </sql>
</changeSet> </changeSet>
<changeSet author="zs" id="2022-05-31-01">
<preConditions onFail="MARK_RAN">
<not>
<tableExists tableName="jc_situation_detail"/>
</not>
</preConditions>
<comment>增加自定义指令表</comment>
<sql>
CREATE TABLE `jc_situation_detail` (
`sequence_nbr` bigint(20) NOT NULL AUTO_INCREMENT,
`info` longtext COMMENT '内容图片信息',
`alert_called_id` bigint(20) DEFAULT NULL COMMENT '警情ID',
`rec_date` datetime DEFAULT NULL COMMENT '时间',
`rec_user_id` varchar(19) DEFAULT NULL COMMENT '发送人',
`rec_user_name` varchar(15) DEFAULT NULL COMMENT '发送人名称',
`is_delete` bit(1) NOT NULL COMMENT '是否删除',
`info_type` varchar(255) DEFAULT NULL COMMENT '消息类型',
PRIMARY KEY (`sequence_nbr`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
</sql>
</changeSet>
<changeSet author="ls" id="2022-06-01-1">
<preConditions onFail="MARK_RAN">
<not>
<columnExists tableName="jc_power_transfer_company_resources" columnName="arrival_time"/>
</not>
</preConditions>
<comment>jc_power_transfer_company_resources add column arrival_time 车辆到场时间</comment>
<sql>
ALTER TABLE jc_power_transfer_company_resources ADD arrival_time varchar(255) NULL COMMENT '车辆到场时间';
</sql>
</changeSet>
</databaseChangeLog> </databaseChangeLog>
...@@ -1041,8 +1041,8 @@ ...@@ -1041,8 +1041,8 @@
<if test="key == 'endDeadline' and value != null and value != ''"> <if test="key == 'endDeadline' and value != null and value != ''">
and a.reform_limit_date <![CDATA[ <= ]]> #{value} and a.reform_limit_date <![CDATA[ <= ]]> #{value}
</if> </if>
<if test="key == 'pointName' and value != null and value != ''"> <if test="key == 'pointId' and value != null and value != ''">
and a.biz_info like concat('%"pointName":"', #{value}, '"%') and a.biz_info like concat('%"pointId":"', #{value}, '"%')
</if> </if>
</foreach> </foreach>
</where> </where>
......
package com.yeejoin.amos.boot.module.tzs.flc.api.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.yeejoin.amos.boot.biz.common.dto.BaseDto;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 任务表
*
* @author system_generator
* @date 2022-05-31
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ApiModel(value="TaskDto", description="任务表")
public class TaskDto extends BaseDto {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "任务名称")
private String name;
@ApiModelProperty(value = "内容")
private String content;
@ApiModelProperty(value = "描述")
private String description;
@ApiModelProperty(value = "状态【0:待填报,1:待签收,2:已完成】")
private Integer status = 0;
@ApiModelProperty(value = "用户ID")
private String userId;
@ApiModelProperty(value = "创建时间")
private Date createDate;
@ApiModelProperty(value = "对接公司编码")
private String appId;
@ApiModelProperty(value = "单位ID")
private String deptId;
@ApiModelProperty(value = "单位名称")
private String deptName;
}
package com.yeejoin.amos.boot.module.tzs.flc.api.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yeejoin.amos.boot.biz.common.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.util.Date;
/**
* 任务表
*
* @author system_generator
* @date 2022-05-31
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("tz_task")
public class Task extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 任务名称
*/
@TableField("name")
private String name;
/**
* 内容
*/
@TableField("content")
private String content;
/**
* 描述
*/
@TableField("description")
private String description;
/**
* 状态【0:待填报,1:待签收,2:已完成】
*/
@TableField("status")
private Integer status;
/**
* 用户ID
*/
@TableField("user_id")
private String userId;
/**
* 创建时间
*/
@TableField("create_date")
private Date createDate;
/**
* 对接公司编码
*/
@TableField("app_id")
private String appId;
/**
* 单位ID
*/
@TableField("dept_id")
private String deptId;
/**
* 单位名称
*/
@TableField("dept_name")
private String deptName;
}
package com.yeejoin.amos.boot.module.tzs.flc.api.enums;
import lombok.Getter;
/**
* 任务状态枚举
*/
@Getter
public enum TaskStatusEnum {
待填报(0, "待填报"),
待签收(1, "待签收"),
已完成(2, "已完成");
private Integer key;
private String desc;
TaskStatusEnum(Integer key, String desc) {
this.key = key;
this.desc = desc;
}
}
package com.yeejoin.amos.boot.module.tzs.flc.api.mapper;
import com.yeejoin.amos.boot.module.tzs.flc.api.entity.Task;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* 任务表 Mapper 接口
*
* @author system_generator
* @date 2022-05-31
*/
public interface TaskMapper extends BaseMapper<Task> {
}
package com.yeejoin.amos.boot.module.tzs.flc.api.service;
/**
* 任务表接口类
*
* @author system_generator
* @date 2022-05-31
*/
public interface ITaskService {
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeejoin.amos.boot.module.tzs.flc.api.mapper.TaskMapper">
</mapper>
package com.yeejoin.amos.boot.module.tzs.flc.biz.controller;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.module.tzs.flc.api.enums.TaskStatusEnum;
import org.springframework.web.bind.annotation.RequestMapping;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RestController;
import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.yeejoin.amos.boot.module.tzs.flc.biz.service.impl.TaskServiceImpl;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.module.tzs.flc.api.dto.TaskDto;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
/**
* 任务表
*
* @author system_generator
* @date 2022-05-31
*/
@RestController
@Api(tags = "任务表Api")
@RequestMapping(value = "/task")
public class TaskController extends BaseController {
@Autowired
TaskServiceImpl taskServiceImpl;
/**
* 新增任务表
*
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/save")
@ApiOperation(httpMethod = "POST", value = "新增任务表", notes = "新增任务表")
public ResponseModel<TaskDto> save(@RequestBody TaskDto model) {
model.setCreateDate(new Date());
model.setUserId(RequestContext.getExeUserId());
model = taskServiceImpl.createWithModel(model);
return ResponseHelper.buildResponse(model);
}
/**
* 根据sequenceNbr更新
*
* @param sequenceNbr 主键
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PutMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "PUT", value = "根据sequenceNbr更新任务表", notes = "根据sequenceNbr更新任务表")
public ResponseModel<TaskDto> updateBySequenceNbrTask(@RequestBody TaskDto model, @PathVariable(value = "sequenceNbr") Long sequenceNbr) {
model.setSequenceNbr(sequenceNbr);
return ResponseHelper.buildResponse(taskServiceImpl.updateWithModel(model));
}
/**
* 根据sequenceNbr删除
*
* @param sequenceNbr 主键
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@DeleteMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "DELETE", value = "根据sequenceNbr删除任务表", notes = "根据sequenceNbr删除任务表")
public ResponseModel deleteBySequenceNbr(HttpServletRequest request, @PathVariable(value = "sequenceNbr") Long sequenceNbr) {
taskServiceImpl.deleteById(sequenceNbr);
return ResponseHelper.buildResponse(null);
}
/**
* 根据sequenceNbr查询
*
* @param sequenceNbr 主键
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/{sequenceNbr}")
@ApiOperation(httpMethod = "GET", value = "根据sequenceNbr查询单个任务表", notes = "根据sequenceNbr查询单个任务表")
public ResponseModel<TaskDto> selectOne(@PathVariable Long sequenceNbr) {
return ResponseHelper.buildResponse(taskServiceImpl.queryBySeq(sequenceNbr));
}
/**
* 列表分页查询
*
* @param current 当前页
* @param current 每页大小
* @param status TODO(uncomplete: 待办,complete:已办)
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/page")
@ApiOperation(httpMethod = "GET", value = "任务表分页查询", notes = "任务表分页查询")
public ResponseModel<Page<TaskDto>> queryForPage(@RequestParam(value = "current") int current,
@RequestParam(value = "size") int size,
@RequestParam(value = "status", required = false) String status) {
Page<TaskDto> page = new Page<TaskDto>();
page.setCurrent(current);
page.setSize(size);
return ResponseHelper.buildResponse(taskServiceImpl.queryForTaskPageByStatus(page, RequestContext.getExeUserId(), status));
}
/**
* 统计任务数量
*
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "任务数量查询", notes = "任务数量查询")
@GetMapping(value = "/queryCount")
public ResponseModel<JSONObject> queryCountForMap() {
return ResponseHelper.buildResponse(taskServiceImpl.queryCountForMap(RequestContext.getExeUserId()));
}
/**
* 列表全部数据查询
*
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "任务表列表全部数据查询", notes = "任务表列表全部数据查询")
@GetMapping(value = "/list")
public ResponseModel<List<TaskDto>> selectForList() {
return ResponseHelper.buildResponse(taskServiceImpl.queryForTaskList());
}
}
package com.yeejoin.amos.boot.module.tzs.flc.biz.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.utils.DateUtils;
import com.yeejoin.amos.boot.module.tzs.flc.api.dto.TaskDto;
import com.yeejoin.amos.boot.module.tzs.flc.api.entity.Task;
import com.yeejoin.amos.boot.module.tzs.flc.api.enums.TaskStatusEnum;
import com.yeejoin.amos.boot.module.tzs.flc.api.mapper.TaskMapper;
import com.yeejoin.amos.boot.module.tzs.flc.api.service.ITaskService;
import org.springframework.stereotype.Component;
import org.typroject.tyboot.core.rdbms.annotation.Condition;
import org.typroject.tyboot.core.rdbms.annotation.Operator;
import org.typroject.tyboot.core.rdbms.service.BaseService;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 任务表服务实现类
*
* @author system_generator
* @date 2022-05-31
*/
@Component
public class TaskServiceImpl extends BaseService<TaskDto, Task, TaskMapper> implements ITaskService {
public void deleteById(Long sequenceNbr) {
TaskDto taskDto = this.queryBySeq(sequenceNbr);
taskDto.setIsDelete(true);
this.updateWithModel(taskDto);
}
public Page<TaskDto> queryForTaskPageByStatus(Page<TaskDto> page, String userId, String status) {
List<Integer> statusList = getStatus(status);
return this.queryForTaskPage(page, userId, statusList);
}
public JSONObject queryCountForMap(String userId){
Date[] recDate = new Date[2];
Date now = DateUtils.getDateNow();
recDate[0] = DateUtils.getCurrentDayStartTime(now);
recDate[1] = DateUtils.getCurrentDayEndTime(now);
// 我的任务
Integer myTaskCount = this.queryForCount(userId, null, null);
// 今日待办
List<Integer> statusList = getStatus("uncomplete");
Integer todyUnCompletedTaskCount = this.queryForCount(userId, recDate, statusList);
// 未完结业务
Integer unCompletedTaskCount = this.queryForCount(userId, null, statusList);
JSONObject jsonObject = new JSONObject();
jsonObject.put("myTask", myTaskCount);
jsonObject.put("todyUnCompletedTask", todyUnCompletedTaskCount);
jsonObject.put("unCompletedTask", unCompletedTaskCount);
return jsonObject;
}
/**
* 分页查询
*/
public Page<TaskDto> queryForTaskPage(Page<TaskDto> page, String userId, @Condition(Operator.in) List<Integer> status) {
return this.queryForPage(page, null, false, userId, status);
}
/**
* 列表查询 示例
*/
public List<TaskDto> queryForTaskList() {
return this.queryForList("", false);
}
/**
* 列表查询 示例
*/
public Integer queryForCount(String userId, @Condition(Operator.between) Date[] recDate, @Condition(Operator.in) List<Integer> status) {
return this.queryCount(userId, recDate, status);
}
private List<Integer> getStatus (String status) {
List<Integer> statusList = new ArrayList<>();
if ("uncomplete".equals(status)) {
statusList.add(TaskStatusEnum.待填报.getKey());
statusList.add(TaskStatusEnum.待签收.getKey());
} else if ("complete".equals(status)) {
statusList.add(TaskStatusEnum.已完成.getKey());
}
return statusList;
}
}
\ No newline at end of file
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