Commit 490a13b7 authored by 张森's avatar 张森

预警相关需求开发

parent 027eeeb1
......@@ -91,6 +91,7 @@
<file url="file://$PROJECT_DIR$/amos-boot-system-kgd" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/amos-boot-system-knowledgebase" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/amos-boot-system-knowledgebase/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/amos-boot-system-knowledgebase/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/amos-boot-system-latentdanger" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/amos-boot-system-latentdanger/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/amos-boot-system-maintenance" charset="UTF-8" />
......@@ -111,6 +112,7 @@
<file url="file://$PROJECT_DIR$/amos-boot-system-tzs/amos-boot-module-tzs-biz/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/amos-boot-utils" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/amos-boot-utils/amos-boot-utils-adpter" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/amos-boot-utils/amos-boot-utils-adpter/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/amos-boot-utils/amos-boot-utils-jpush" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/amos-boot-utils/amos-boot-utils-jpush/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/amos-boot-utils/amos-boot-utils-message" charset="UTF-8" />
......
......@@ -5,6 +5,7 @@
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
<option value="$PROJECT_DIR$/amos-boot-system-knowledgebase/pom.xml" />
</list>
</option>
<option name="ignoredFiles">
......
package com.yeejoin.equipmanage.common.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
/**
* @author LiuLin
* @date 2023年08月02日 11:02
*/
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class BizMessage {
private String indexKey;
private String indexValue;
private String traceId;
private RiskBizInfoVo bizInfo;
/**
* 数据来源:实时数据、周期数据
*/
String dataSource;
private String traceId2;
}
package com.yeejoin.equipmanage.common.vo;
import lombok.Data;
/**
* @author Administrator
* 自定义扩展内容项
*/
@Data
public class CustomizeItems {
/**
* 自定义的问题名称
*/
private String questionName;
/**
* 自定义的问题内容
*/
private String questionContent;
/**
* 自定义的预警内容 content
*/
private String warningContent;
}
......@@ -3,6 +3,7 @@ package com.yeejoin.equipmanage.common.vo;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
* @author keyong
......@@ -29,5 +30,11 @@ public class RiskBizInfoVo {
private List<RiskDynamicDetailsVo> dynamicDetails;
private String warningObjectType;
private CustomizeItems customizeItems;
private Object extra;
}
package com.yeejoin.equipmanage.controller;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
......@@ -36,7 +38,6 @@ import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpResponse;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
......@@ -1614,4 +1615,21 @@ public class CarController extends AbstractBaseController {
return carListByPage;
}
/**
* 消防车辆信息查询 - 根据biz_org_code查询
*
* @return
*/
@RequestMapping(value = "/getCarListByCode", method = RequestMethod.GET)
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "GET", value = "消防车辆信息查询 - 根据biz_org_code查询", notes = "消防车辆信息查询 - 根据biz_org_code查询")
public Integer getCarListByCode(@RequestParam String bizOrgCode) {
LambdaQueryWrapper<Car> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Car::getBizOrgCode, bizOrgCode);
List<Car> list = iCarService.list(wrapper);
if (CollUtil.isEmpty(list)) {
return 0;
}
return list.size();
}
}
package com.yeejoin.equipmanage.dto;
import com.yeejoin.equipmanage.common.vo.CustomizeItems;
import com.yeejoin.equipmanage.common.vo.RiskDynamicDetailsVo;
import lombok.Data;
import java.util.List;
/**
* @author LiuLin
* @date 2023年08月02日 11:02
*/
@Data
public class RiskBizInfoVo {
private String warningObjectName;
private String warningObjectCode;
private String warningTime;
private String sourceAttribution;
private String sourceAttributionDesc;
private String sourceSupplyField;
private String bussId;
private String bussName;
private String type;
private List<RiskDynamicDetailsVo> dynamicDetails;
private String warningObjectType;
private CustomizeItems customizeItems;
private String warningObjectLinkUrl;
}
package com.yeejoin.equipmanage.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
......@@ -2060,6 +2061,15 @@ public class EquipmentSpecificSerivceImpl extends ServiceImpl<EquipmentSpecificM
log.info(String.format("发送eqm转kafka消息失败:%s", exp.getMessage()));
}
}
List<Map<String, Object>> collect = mapPatrol.stream().filter(t -> !"0".equals(t.get("isFinishOnce").toString())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(collect)) {
try {
emqKeeper.getMqttClient().publish("assess/patrol/record", JSON.toJSONString(collect).getBytes(), 2, false);
} catch (MqttException exp) {
log.info(String.format("发送eqm转kafka消息失败:%s", exp.getMessage()));
}
}
}
void syncSystemctlMsg(Map<String, Object> map, String scrapTime, int i) {
......
......@@ -18,7 +18,6 @@ import com.yeejoin.equipmanage.common.datasync.entity.FireEquipmentFireAlarm;
import com.yeejoin.equipmanage.common.dto.TemperatureAlarmDto;
import com.yeejoin.equipmanage.common.dto.EquipIndexDto;
import com.yeejoin.equipmanage.common.entity.*;
import com.yeejoin.equipmanage.common.entity.dto.EquipQrDateDto;
import com.yeejoin.equipmanage.common.entity.publics.BaseEntity;
import com.yeejoin.equipmanage.common.entity.vo.*;
import com.yeejoin.equipmanage.common.enums.*;
......@@ -26,6 +25,8 @@ import com.yeejoin.equipmanage.common.utils.DateUtils;
import com.yeejoin.equipmanage.common.utils.StringUtil;
import com.yeejoin.equipmanage.common.utils.UUIDUtils;
import com.yeejoin.equipmanage.common.vo.*;
import com.yeejoin.equipmanage.common.vo.BizMessage;
import com.yeejoin.equipmanage.common.vo.CustomizeItems;
import com.yeejoin.equipmanage.fegin.IotFeign;
import com.yeejoin.equipmanage.fegin.SystemctlFeign;
import com.yeejoin.equipmanage.mapper.*;
......@@ -1350,10 +1351,14 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
boolean alarmFlag = false;
MessageModel model = new MessageModel();
Map<String, Object> map = new HashMap<>();
String indexKey = "";
if (iotDataVO.getKey().equalsIgnoreCase(CAFS_FoamTank_FoamTankLevel) || iotDataVO.getKey().equalsIgnoreCase(CAFS_WaterTank_WaterTankLevel)) {
map = fireFightingSystemMapper.getFoamTankLevel(equipmentSpecificIndex.getEquipmentSpecificId());
indexKey = iotDataVO.getKey().equalsIgnoreCase(CAFS_FoamTank_FoamTankLevel) ? "CAFS_FOAM_TANK" : "WATER_TANK_LEVEL";
} else {
map = fireFightingSystemMapper.getPipeNetwork(equipmentSpecificIndex.getEquipmentSpecificId());
indexKey = "PIPE_PRESSURE";
}
BigDecimal minValue = getBigDecimal(map.get("minValues"));
BigDecimal maxValue = getBigDecimal(map.get("maxValues"));
......@@ -1362,6 +1367,25 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
if (!ObjectUtils.isEmpty(checkValue)) {
nowValue = checkValue;
}
//预警业务 泡沫罐 或 者管网压力
HashMap<String, String> extra = new HashMap<>();
extra.put("useSource", "center");
extra.put("codingSystem", "center");
extra.put("codingType", "equipment");
extra.put("problemReception", "station");
extra.put("bussId", String.valueOf(equipmentSpecificIndex.getEquipmentSpecificId()));
extra.put("clearUniqueCode", "equip-level");
handleWarning(minValue,
maxValue,
nowValue,
equipmentSpecificIndex,
String.valueOf(equipmentSpecificIndex.getEquipmentSpecificId()),
"equip/data/analysis",
indexKey,
extra);
if (nowValue.compareTo(minValue) < 0 || nowValue.compareTo(maxValue) > 0) {
String body = "";
if (nowValue.compareTo(minValue) < 0) {
......@@ -1437,6 +1461,25 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
if (!ObjectUtils.isEmpty(checkValue)) {
nowValue = checkValue;
}
if ("pool".equals(map.get("resourceType").toString()) || "waterTank".equals(map.get("resourceType").toString())) {
HashMap<String, String> extra = new HashMap<>();
extra.put("useSource", "center");
extra.put("codingSystem", "center");
extra.put("codingType", "water");
extra.put("problemReception", "station");
extra.put("bussId", map.get("id").toString());
extra.put("clearUniqueCode", "water-resource");
//预警业务 消防水池和消防水箱
handleWarning(minValue,
maxValue,
nowValue,
equipmentSpecificIndex,
map.get("id").toString(),
"water/data/analysis",
"WATER_POOL_LEVEL",
extra);
}
if (nowValue.compareTo(minValue) < 0 || nowValue.compareTo(maxValue) > 0) {
String body = "";
if (nowValue.compareTo(minValue) < 0) {
......@@ -1475,6 +1518,56 @@ public class MqttReceiveServiceImpl implements MqttReceiveService {
return alarmFlag;
}
private void handleWarning(BigDecimal minValue,
BigDecimal maxValue,
BigDecimal nowValue,
EquipmentSpecificIndex equipmentSpecificIndex,
String businessId,
String topic,
String indexKey,
Object extra) {
if (minValue.compareTo(new BigDecimal(0)) > 0
&& maxValue.compareTo(new BigDecimal(0)) > 0) {
BigDecimal divide = new BigDecimal(0);
if (minValue.compareTo(nowValue) > 0) {
divide = minValue.subtract(nowValue).divide(minValue, 4, BigDecimal.ROUND_HALF_UP);
} else if (nowValue.compareTo(maxValue) > 0) {
divide = nowValue.subtract(maxValue).divide(maxValue, 4, BigDecimal.ROUND_HALF_UP);
}
// 触发预警业务
BizMessage bizMessage = new BizMessage();
bizMessage.setIndexKey(indexKey);
bizMessage.setIndexValue(String.valueOf(divide));
RiskBizInfoVo riskBizInfoVo = fetchData(equipmentSpecificIndex, extra);
bizMessage.setBizInfo(riskBizInfoVo);
bizMessage.setTraceId(businessId);
try {
emqKeeper.getMqttClient().publish(topic,
JSON.toJSONString(bizMessage).getBytes(StandardCharsets.UTF_8), 2, false);
} catch (MqttException e) {
e.printStackTrace();
}
}
}
public RiskBizInfoVo fetchData(EquipmentSpecificIndex equipmentSpecificIndex, Object extra) {
RiskBizInfoVo riskBizInfoVo = new RiskBizInfoVo();
riskBizInfoVo.setWarningObjectName("当前值低于或高于报警阈值≥10%");
riskBizInfoVo.setWarningObjectCode(equipmentSpecificIndex.getEquipmentSpecificCode());
riskBizInfoVo.setSourceAttribution(equipmentSpecificIndex.getBizOrgCode());
riskBizInfoVo.setSourceAttributionDesc(equipmentSpecificIndex.getBizOrgName());
List<RiskDynamicDetailsVo> detailsVos = new ArrayList<>();
RiskDynamicDetailsVo dynamicDetailsVo = new RiskDynamicDetailsVo();
dynamicDetailsVo.setTabName("预警详情");
detailsVos.add(dynamicDetailsVo);
riskBizInfoVo.setDynamicDetails(detailsVos);
CustomizeItems customizeItems = new CustomizeItems();
customizeItems.setWarningContent("当前值低于或高于报警阈值≥10%");
riskBizInfoVo.setCustomizeItems(customizeItems);
riskBizInfoVo.setExtra(extra);
return riskBizInfoVo;
}
private BigDecimal checkUnit(Long equipmentSpecificId, String indexKey, BigDecimal nowValue) {
LambdaQueryWrapper<EquipmentSpecificIndex> lambda = new QueryWrapper<EquipmentSpecificIndex>().lambda();
lambda.eq(EquipmentSpecificIndex::getEquipmentSpecificId, equipmentSpecificId);
......
......@@ -188,7 +188,7 @@ public class SignServiceImpl extends BaseService<SignDto,Sign,SignMapper> implem
* 每日计算当天打卡记录,统计至少8人出勤。。
*
*/
@Scheduled(cron = "${jcs.sign.cron:0 0/3 * * * ?}")
@Scheduled(cron = "${jcs.sign.cron:0 40 23 * * ?}")
@Transactional(rollbackFor = Exception.class)
public void jcsSignStatic() {
log.info("开始出勤统计=========");
......
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url = jdbc:mysql://172.16.11.201:3306/dl_business?useUnicode=true&allowMultiQueries=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
spring.datasource.url = jdbc:mysql://172.16.10.216:3306/dl_business_v3.0.1.3?useUnicode=true&allowMultiQueries=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=ENC(ooSbV2vO5UUB3BuAVYjYxm4OVY4rCv275/HxXJNz+Nbf2I8EjuylP9tTh30s2j7g)
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
......@@ -17,7 +17,7 @@ eureka.instance.prefer-ip-address = true
#服务实例ip地址,若eureka.instance.prefer-ip-address=false,ip-address设置失效,一般情况不用设置。
#eureka.instance.ip-address= 172.16.3.135
#eureka服务ip配置,可填写固定ip地址
eureka.instance.hostname=172.16.11.201
eureka.instance.hostname=172.16.10.216
#eureka服务配置的校验账号及密码,配置需和eureka服务后台配置文件中一致
#eureka????????????,????eureka???????????
spring.security.user.name=admin
......@@ -28,7 +28,7 @@ eureka.client.serviceUrl.defaultZone=http://${spring.security.user.name}:${sprin
#redis
spring.redis.database=1
spring.redis.host=172.16.11.201
spring.redis.host=172.16.10.216
spring.redis.port=6379
spring.redis.password=ENC(/T7d22Zy0QgL+Ff1+FC81syDFAVOpo4CoWrDVUELyjR2XEXuk+gmNnzkyK3B5ibi)
spring.redis.lettuce.pool.max-active=200
......@@ -40,15 +40,17 @@ spring.redis.expire.time=30000
## emqx
emqx.clean-session=true
emqx.client-id=${spring.application.name}-${security-random-int}
emqx.broker=tcp://172.16.11.201:1883
emqx.broker=tcp://172.16.10.216:1883
emqx.user-name=admin
emqx.password=ENC(GGQmxuyl6uOxAsDhjRo+USgUybWC8Ns4Q7mlnyq3JqJE9LsFgYBNK8gzJ7H/Znw+)
mqtt.scene.host=mqtt://172.16.11.201:8083/mqtt
emqx.client-user-name=admin
emqx.client-password=ENC(GGQmxuyl6uOxAsDhjRo+USgUybWC8Ns4Q7mlnyq3JqJE9LsFgYBNK8gzJ7H/Znw+)
mqtt.scene.host=mqtt://172.16.10.216:8083/mqtt
mqtt.client.product.id=mqtt
mqtt.topic=topic_mqtt
spring.mqtt.completionTimeout=3000
# influxDB
spring.influx.url=http://172.16.11.201:8086
spring.influx.url=http://172.16.10.216:8086
spring.influx.password=ENC(ooSbV2vO5UUB3BuAVYjYxm4OVY4rCv275/HxXJNz+Nbf2I8EjuylP9tTh30s2j7g)
spring.influx.user=root
spring.influx.database=iot_platform
......@@ -59,8 +61,8 @@ spring.influx.bufferLimit=20000
#系统机器人账号
amos.system.user.user-name=fas_system
amos.system.user.password=ENC(y/vybU3OfM6Sn1s/2Ts6JSYje9LEnOi9pbwMmAXI7ngaWE//yIubxY98Ij866qez)
amos.system.user.user-name=gw_ys4
amos.system.user.password=Aa1234567
amos.system.user.app-key=studio_normalapp_3056965
amos.system.user.product=STUDIO_APP_WEB
security.productApp=STUDIO_APP_MOBILE
......@@ -185,4 +187,4 @@ message.alarm.char=\u51FA\u73B0
update.car.qrCode=-
power.station.url=-
equip.patrol.cron=0 0 23 * * ?
\ No newline at end of file
equip.patrol.cron=0 21 17 * * ?
\ No newline at end of file
spring.application.name=AMOS-EQUIPMANAGE-xxz
spring.application.name=AMOS-EQUIPMANAGE
server.servlet.context-path=/equip
server.port=8100
......@@ -25,7 +25,7 @@ pagehelper.support-methods-arguments=true
spring.main.allow-bean-definition-overriding=true
#liquibase
spring.liquibase.change-log=classpath:/changelog/changelog-master.xml
spring.liquibase.enabled=true
spring.liquibase.enabled=false
#\u4E0A\u4F20\u6587\u4EF6\u8BBE\u7F6E
spring.servlet.multipart.maxFileSize=100MB
......
## DB properties:
spring.datasource.url=jdbc:mysql://172.16.11.201:3306/dl_amos_common_biz?allowMultiQueries=true&serverTimezone=GMT%2B8&characterEncoding=utf8
spring.datasource.url=jdbc:mysql://172.16.10.216:3306/dl_amos_common_biz?allowMultiQueries=true&serverTimezone=GMT%2B8&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=ENC(tPXldVBJjiRAQ0rk11qOVCSJFWtkGGvlTqcWtmkxrNA/W9PJ7TibZdTQfd3K5fjy)
## eureka properties:
eureka.client.serviceUrl.defaultZone=http://${spring.security.user.name}:${spring.security.user.password}@172.16.11.201:10001/eureka/
eureka.client.serviceUrl.defaultZone=http://${spring.security.user.name}:${spring.security.user.password}@172.16.10.216:10001/eureka/
spring.security.user.name=admin
spring.security.user.password=ENC(rHjQVV3WgAJnhci3sOKjqyXfNB7E/bj8g9NCQfbDSFGUlq6oxRzZp/Fp2+KZoxF5)
## redis properties:danger/list
spring.redis.database=1
spring.redis.host=172.16.11.201
spring.redis.host=172.16.10.216
spring.redis.port=6379
spring.redis.password=ENC(lWqTEY3X3h2PiIxJKR073v5L9aiF6MWZlhglsLr+8QrIGeV3M28y+ByVpFVrGItf)
## ES properties:
biz.elasticsearch.address=172.16.10.215
biz.elasticsearch.address=172.16.11.201
spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.cluster-nodes=${biz.elasticsearch.address}:9300
spring.elasticsearch.rest.uris=http://${biz.elasticsearch.address}:9200
......@@ -28,12 +28,12 @@ elasticsearch.password=ENC(tPXldVBJjiRAQ0rk11qOVCSJFWtkGGvlTqcWtmkxrNA/W9PJ7TibZ
## emqx properties:
emqx.clean-session=true
emqx.client-id=${spring.application.name}-${security-random-int}
emqx.broker=tcp://172.16.11.201:1883
emqx.broker=tcp://172.16.10.216:1883
emqx.user-name=admin
emqx.password=ENC(yVcJLlSl9/CXSEMT/SjcyzaLAvGU4o8OhU0AVnaF40Olfvo9kT+VxykM6bunDzcb)
#activeMq
spring.activemq.broker-url=tcp://172.16.11.201:61616
spring.activemq.broker-url=tcp://172.16.10.216:61616
spring.activemq.user=admin
spring.activemq.password=ENC(yVcJLlSl9/CXSEMT/SjcyzaLAvGU4o8OhU0AVnaF40Olfvo9kT+VxykM6bunDzcb)
spring.jms.pub-sub-domain=false
......@@ -47,13 +47,13 @@ spring.activemq.packages.trust-all=true
rule.definition.load=false
rule.definition.model-package=com.yeejoin.amos.boot.module.jcs.api.dto
rule.definition.default-agency=jcs
#rule.definition.local-ip=172.16.11.201
#rule.definition.local-ip=172.16.10.216
## mongodb properties:
#spring.data.mongodb.uri=mongodb://172.16.6.60:27017/command_db
## file properties:
file.url=http://172.16.11.201:9000/
file.url=http://172.16.10.216:9000/
video.url=https://11.11.16.4:443/
ifc.url=http://11.11.16.17/IFCInterface
......
spring.application.name=JCS
spring.application.name=JCS-ZS
server.servlet.context-path=/jcs
server.port=11100
spring.profiles.active=dev
......@@ -97,7 +97,7 @@ jcs.company.topic.delete=jcs/company/topic/delete
iot.fegin.name=AMOS-API-IOT
equip.fegin.name=AMOS-EQUIPMANAGE
equip.fegin.name=AMOS-EQUIPMANAGE-ZS
## 设备联动服务(车库门、广播、警铃)
control.fegin.name=JCS-API-CONTROL
......@@ -149,3 +149,5 @@ spring.security.user.password=ENC(rHjQVV3WgAJnhci3sOKjqyXfNB7E/bj8g9NCQfbDSFGUlq
##代码中有部分逻辑冲突需要处理 为区分机场和电力逻辑 增加开关 若为true 则为机场逻辑 为false 则为电力逻辑
logic=false
jcs.sign.cron=0 45 17 * * ?
......@@ -342,7 +342,7 @@
<!-- <module>amos-boot-system-supervision</module>-->
<module>amos-boot-system-equip</module>
<!-- <module>amos-boot-core</module>-->
<!-- <module>amos-boot-utils</module>-->
<module>amos-boot-utils</module>
<!-- <module>amos-boot-system-latentdanger</module>-->
<!-- <module>amos-boot-system-ccs</module>-->
<!-- <module>amos-boot-data</module>-->
......
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