完成任务联动
This commit is contained in:
parent
cd6377eae5
commit
805cc08607
@ -41,11 +41,22 @@ public class PollutantDataApplication {
|
|||||||
app.run(args);
|
app.run(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
@Scheduled(cron = "0 0/1 * * * ?")
|
@Scheduled(cron = "0 0/1 * * * ?")
|
||||||
public void clearOfflineCollector() {
|
public void clearOfflineCollector() {
|
||||||
CollectorManager.getInstance().clearTimeoutCollectors();
|
CollectorManager.getInstance().clearTimeoutCollectors();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 预警通知网格员
|
||||||
|
*/
|
||||||
|
@Scheduled(cron = "0 0/1 * * * ?")
|
||||||
|
public void alarmEnterpriseNotice() {
|
||||||
|
alarmLogService.alarmEnterpriseNotice();
|
||||||
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public ApplicationRunner applicationRunner() {
|
public ApplicationRunner applicationRunner() {
|
||||||
return (args) -> {
|
return (args) -> {
|
||||||
|
@ -2,6 +2,7 @@ package com.cm.tenlion.pollutantdata.dao.alarmlog;
|
|||||||
|
|
||||||
import com.cm.common.exception.SaveException;
|
import com.cm.common.exception.SaveException;
|
||||||
import com.cm.common.exception.SearchException;
|
import com.cm.common.exception.SearchException;
|
||||||
|
import com.cm.tenlion.pollutantdata.pojo.bos.alarmlog.AlarmLogCountBO;
|
||||||
import com.cm.tenlion.pollutantdata.pojo.dtos.alarmlog.AlarmLogDTO;
|
import com.cm.tenlion.pollutantdata.pojo.dtos.alarmlog.AlarmLogDTO;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
@ -46,4 +47,30 @@ public interface IAlarmLogDao {
|
|||||||
* @throws SearchException
|
* @throws SearchException
|
||||||
*/
|
*/
|
||||||
Integer count(Map<String, Object> params) throws SearchException;
|
Integer count(Map<String, Object> params) throws SearchException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 统计企业报警次数
|
||||||
|
*
|
||||||
|
* @param params
|
||||||
|
* @return
|
||||||
|
* @throws SearchException
|
||||||
|
*/
|
||||||
|
List<AlarmLogCountBO> listEnterpriseCount(Map<String, Object> params) throws SearchException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存通知
|
||||||
|
*
|
||||||
|
* @param params
|
||||||
|
* @throws SaveException
|
||||||
|
*/
|
||||||
|
void saveNotice(Map<String, Object> params) throws SaveException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通知企业ID列表
|
||||||
|
*
|
||||||
|
* @param params
|
||||||
|
* @return
|
||||||
|
* @throws SearchException
|
||||||
|
*/
|
||||||
|
List<String> listNoticeEnterpriseId(Map<String, Object> params) throws SearchException;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,23 @@
|
|||||||
|
package com.cm.tenlion.pollutantdata.pojo.bos.alarmlog;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When you feel like quitting. Think about why you started
|
||||||
|
* 当你想要放弃的时候,想想当初你为何开始
|
||||||
|
*
|
||||||
|
* @ClassName: AlarmLogCountBO
|
||||||
|
* @Description: 报警日志统计
|
||||||
|
* @Author: wanggeng
|
||||||
|
* @Date: 2021/3/26 5:12 下午
|
||||||
|
* @Version: 1.0
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ApiModel
|
||||||
|
public class AlarmLogCountBO {
|
||||||
|
|
||||||
|
private String enterpriseId;
|
||||||
|
private Integer count;
|
||||||
|
|
||||||
|
}
|
@ -64,4 +64,9 @@ public interface IAlarmLogService {
|
|||||||
* @throws SearchException
|
* @throws SearchException
|
||||||
*/
|
*/
|
||||||
Integer count(String day) throws SearchException;
|
Integer count(String day) throws SearchException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通知超时
|
||||||
|
*/
|
||||||
|
void alarmEnterpriseNotice();
|
||||||
}
|
}
|
||||||
|
@ -1,21 +1,30 @@
|
|||||||
package com.cm.tenlion.pollutantdata.service.alarmlog.impl;
|
package com.cm.tenlion.pollutantdata.service.alarmlog.impl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.cm.common.base.AbstractService;
|
import com.cm.common.base.AbstractService;
|
||||||
import com.cm.common.exception.SearchException;
|
import com.cm.common.exception.SearchException;
|
||||||
|
import com.cm.common.plugin.oauth.token.ClientTokenManager;
|
||||||
import com.cm.common.pojo.ListPage;
|
import com.cm.common.pojo.ListPage;
|
||||||
import com.cm.common.result.SuccessResultList;
|
import com.cm.common.result.SuccessResultList;
|
||||||
import com.cm.common.utils.DateUtil;
|
import com.cm.common.utils.DateUtil;
|
||||||
import com.cm.common.utils.HashMapUtil;
|
import com.cm.common.utils.HashMapUtil;
|
||||||
import com.cm.common.utils.UUIDUtil;
|
import com.cm.common.utils.UUIDUtil;
|
||||||
import com.cm.tenlion.pollutantdata.dao.alarmlog.IAlarmLogDao;
|
import com.cm.tenlion.pollutantdata.dao.alarmlog.IAlarmLogDao;
|
||||||
|
import com.cm.tenlion.pollutantdata.pojo.bos.alarmlog.AlarmLogCountBO;
|
||||||
import com.cm.tenlion.pollutantdata.pojo.dtos.alarmlog.AlarmLogDTO;
|
import com.cm.tenlion.pollutantdata.pojo.dtos.alarmlog.AlarmLogDTO;
|
||||||
import com.cm.tenlion.pollutantdata.pojo.vos.alarmlog.AlarmLogVO;
|
import com.cm.tenlion.pollutantdata.pojo.vos.alarmlog.AlarmLogVO;
|
||||||
import com.cm.tenlion.pollutantdata.service.alarmlog.IAlarmLogService;
|
import com.cm.tenlion.pollutantdata.service.alarmlog.IAlarmLogService;
|
||||||
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageHelper;
|
||||||
import com.github.pagehelper.PageInfo;
|
import com.github.pagehelper.PageInfo;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.http.*;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.web.client.HttpClientErrorException;
|
||||||
|
import org.springframework.web.client.RestTemplate;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@ -32,6 +41,10 @@ import java.util.Map;
|
|||||||
@Service
|
@Service
|
||||||
public class AlarmLogServiceImpl extends AbstractService implements IAlarmLogService {
|
public class AlarmLogServiceImpl extends AbstractService implements IAlarmLogService {
|
||||||
|
|
||||||
|
@Value("${api-path.inspection}")
|
||||||
|
private String inspectionUrl;
|
||||||
|
@Value("${system.alarm-notice-limit:5}")
|
||||||
|
private Integer alarmNoticeLimit;
|
||||||
@Autowired
|
@Autowired
|
||||||
private IAlarmLogDao alarmLogDao;
|
private IAlarmLogDao alarmLogDao;
|
||||||
|
|
||||||
@ -69,5 +82,96 @@ public class AlarmLogServiceImpl extends AbstractService implements IAlarmLogSer
|
|||||||
return count(params);
|
return count(params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void alarmEnterpriseNotice() {
|
||||||
|
String day = DateUtil.getDay();
|
||||||
|
Map<String, Object> params = getHashMap(2);
|
||||||
|
params.put("day", day);
|
||||||
|
List<AlarmLogCountBO> alarmLogCountBOs = alarmLogDao.listEnterpriseCount(params);
|
||||||
|
if (alarmLogCountBOs.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
List<String> enterpriseIds = listNoticeEnterpriseId(alarmLogCountBOs, params);
|
||||||
|
if (enterpriseIds.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 发送通知
|
||||||
|
sendNoticeTask(enterpriseIds);
|
||||||
|
// 保存通知记录
|
||||||
|
saveAlarmNotice(enterpriseIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 需要通知的企业ID
|
||||||
|
*
|
||||||
|
* @param alarmLogCountBOs
|
||||||
|
* @param params
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private List<String> listNoticeEnterpriseId(List<AlarmLogCountBO> alarmLogCountBOs, Map<String, Object> params) {
|
||||||
|
// 得到当日超过预警次数的企业
|
||||||
|
List<String> enterpriseIds = new ArrayList<>();
|
||||||
|
for (AlarmLogCountBO alarmLogCountBO : alarmLogCountBOs) {
|
||||||
|
if (alarmLogCountBO.getCount() <= alarmNoticeLimit) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
enterpriseIds.add(alarmLogCountBO.getEnterpriseId());
|
||||||
|
}
|
||||||
|
// 已经通知的企业
|
||||||
|
List<String> noticeEnterpriseIds = alarmLogDao.listNoticeEnterpriseId(params);
|
||||||
|
// 去除已经通知过的
|
||||||
|
for (int i = 0; i < enterpriseIds.size(); i++) {
|
||||||
|
for (String noticeEnterpriseId : noticeEnterpriseIds) {
|
||||||
|
if (StringUtils.equals(enterpriseIds.get(i), noticeEnterpriseId)) {
|
||||||
|
enterpriseIds.remove(i);
|
||||||
|
i--;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return enterpriseIds;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送任务通知
|
||||||
|
*
|
||||||
|
* @param enterpriseIds
|
||||||
|
*/
|
||||||
|
private void sendNoticeTask(List<String> enterpriseIds) {
|
||||||
|
HttpHeaders httpHeaders = new HttpHeaders();
|
||||||
|
httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);
|
||||||
|
|
||||||
|
JSONObject body = new JSONObject();
|
||||||
|
body.put("enterpriseIds", enterpriseIds);
|
||||||
|
HttpEntity<String> httpEntity = new HttpEntity<>(body.toJSONString(), httpHeaders);
|
||||||
|
|
||||||
|
String token = ClientTokenManager.getInstance().getClientToken().getAccessToken();
|
||||||
|
RestTemplate restTemplate = new RestTemplate();
|
||||||
|
String url = String.format("%s/resource/taskcheck/v2/save-pollutant-task?access_token=%s",
|
||||||
|
inspectionUrl, token);
|
||||||
|
try {
|
||||||
|
ResponseEntity<String> response = restTemplate.postForEntity(url, httpEntity, String.class);
|
||||||
|
if (response.getStatusCode().value() == HttpStatus.OK.value()) {
|
||||||
|
LOG.debug("下发任务成功");
|
||||||
|
}
|
||||||
|
} catch (HttpClientErrorException e) {
|
||||||
|
LOG.error(e.getMessage(), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存通知记录
|
||||||
|
*
|
||||||
|
* @param enterpriseIds
|
||||||
|
*/
|
||||||
|
private void saveAlarmNotice(List<String> enterpriseIds) {
|
||||||
|
Map<String, Object> params = getHashMap(6);
|
||||||
|
for (String enterpriseId : enterpriseIds) {
|
||||||
|
params.put("alarmNoticeId", UUIDUtil.getUUID());
|
||||||
|
params.put("enterpriseId", enterpriseId);
|
||||||
|
params.put("gmtCreate", DateUtil.getTime());
|
||||||
|
alarmLogDao.saveNotice(params);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -58,11 +58,14 @@ spring:
|
|||||||
api-path:
|
api-path:
|
||||||
user-center: ${security.oauth2.oauth-server}
|
user-center: ${security.oauth2.oauth-server}
|
||||||
inspection: http://192.168.0.106:7006/inspection
|
inspection: http://192.168.0.106:7006/inspection
|
||||||
|
system:
|
||||||
|
# 预警通知上限
|
||||||
|
alarm-notice-limit: 5
|
||||||
|
|
||||||
# 安全
|
# 安全
|
||||||
security:
|
security:
|
||||||
oauth2:
|
oauth2:
|
||||||
oauth-server: http://192.168.0.103:7001/usercenter
|
oauth-server: http://192.168.0.106:7001/usercenter
|
||||||
oauth-logout: ${security.oauth2.oauth-server}/logout?redirect_uri=${server.url}
|
oauth-logout: ${security.oauth2.oauth-server}/logout?redirect_uri=${server.url}
|
||||||
client:
|
client:
|
||||||
client-id: 74e4b55ad48840f9b4de86ce5da58b53
|
client-id: 74e4b55ad48840f9b4de86ce5da58b53
|
||||||
|
@ -17,6 +17,11 @@
|
|||||||
<result column="gmt_create" property="gmtCreate"/>
|
<result column="gmt_create" property="gmtCreate"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
|
<resultMap id="alarmLogCountBO" type="com.cm.tenlion.pollutantdata.pojo.bos.alarmlog.AlarmLogCountBO">
|
||||||
|
<result column="enterprise_id" property="enterpriseId"/>
|
||||||
|
<result column="count" property="count"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
<!-- 新增 -->
|
<!-- 新增 -->
|
||||||
<insert id="save" parameterType="map">
|
<insert id="save" parameterType="map">
|
||||||
INSERT INTO pollute_alarm_log (
|
INSERT INTO pollute_alarm_log (
|
||||||
@ -89,4 +94,48 @@
|
|||||||
</if>
|
</if>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<!-- 统计企业报警次数 -->
|
||||||
|
<select id="listEnterpriseCount" parameterType="map" resultMap="alarmLogCountBO">
|
||||||
|
SELECT
|
||||||
|
enterprise_id,
|
||||||
|
COUNT(enterprise_id) count
|
||||||
|
FROM
|
||||||
|
pollute_alarm_log
|
||||||
|
WHERE
|
||||||
|
1 = 1
|
||||||
|
<if test="day != null and day != ''">
|
||||||
|
AND
|
||||||
|
LEFT(gmt_create, 10) = #{day}
|
||||||
|
</if>
|
||||||
|
GROUP BY
|
||||||
|
enterprise_id
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- 保存通知 -->
|
||||||
|
<insert id="saveNotice" parameterType="map">
|
||||||
|
INSERT INTO pollute_alarm_notice(
|
||||||
|
alarm_notice_id,
|
||||||
|
enterprise_id,
|
||||||
|
gmt_create
|
||||||
|
) VALUES(
|
||||||
|
#{alarmNoticeId},
|
||||||
|
#{enterpriseId},
|
||||||
|
#{gmtCreate}
|
||||||
|
)
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
<!-- 通知企业ID列表 -->
|
||||||
|
<select id="listNoticeEnterpriseId" parameterType="map" resultType="java.lang.String">
|
||||||
|
SELECT
|
||||||
|
enterprise_id
|
||||||
|
FROM
|
||||||
|
pollute_alarm_notice
|
||||||
|
WHERE
|
||||||
|
1 = 1
|
||||||
|
<if test="day != null and day != ''">
|
||||||
|
AND
|
||||||
|
LEFT(gmt_create, 10) = #{day}
|
||||||
|
</if>
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
@ -228,7 +228,7 @@
|
|||||||
enterpriseId: self.enterpriseId
|
enterpriseId: self.enterpriseId
|
||||||
}, null, function(code, data) {
|
}, null, function(code, data) {
|
||||||
self.enterprisePollIds = data;
|
self.enterprisePollIds = data;
|
||||||
if(self.enterprisePollIds.size == 0) {
|
if(self.enterprisePollIds.length == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user