r>   konghl 12d7573f2e 新增功能:地图标记增删改查 4 jaren geleden   wangkang3 8f7b30e3be 地图标记模块接口接入 4 jaren geleden   chenxr3 1013865ef3 设备管理页面 4 jaren geleden   wangchao 97dca84162 修改设备验证 4 jaren geleden   wangchao 0c9930d3e3 Merge branch 'master' of http://10.1.235.20:3000/asiainfo/ebc 4 jaren geleden   wangchao 8bd1ff2323 终端关联,终端解绑等接口 4 jaren geleden   wangchao d01adabd91 Merge branch 'master' of http://10.1.235.20:3000/asiainfo/ebc 4 jaren geleden   wangchao d40c613702 修改gis接口等 4 jaren geleden   wangchao 35550a3e47 Merge branch 'master' of http://10.1.235.20:3000/asiainfo/ebc 4 jaren geleden   wangchao bd86ba7a47 设备增删改查以及关联与解绑终端 4 jaren geleden   wangchao a8c7c1cf4d 项目配置修改以及剔除uspa 4 jaren geleden   wangchao c251472c3d gis获取token接口 4 jaren geleden   wangchao fba9354c6a Merge branch 'master' of http://10.1.235.20:3000/asiainfo/ebc 4 jaren geleden   wangchao 5ff38a7f9b 解决跨域问题 4 jaren geleden   wangchao 74f666ab34 添加注释,增加轨迹文件等 4 jaren geleden   wangchao 5f13388aac 修改地图管理文件 4 jaren geleden   wangchao 41aea6126c Merge branch 'master' of http://10.1.235.20:3000/asiainfo/ebc 4 jaren geleden   wangchao 24f1743496 按评审要求修改文件 4 jaren geleden   wangchao 666c0f81c2 Merge branch 'master' of http://10.1.235.20:3000/asiainfo/ebc 4 jaren geleden   wangchao 779c6e3826 修改日志文件 4 jaren geleden   wangchao 0e5599165c 修改日志文件 4 jaren geleden   wangchao c217a49b3a 更新项目 4 jaren geleden   wangchao 408a2042a9 后台项目初始化 4 jaren geleden   wangkang3 7bbf8eb6a8 页面初始化提交 4 jaren geleden   liuchang 000ebd90c9 更新文件 4 jaren geleden   liuchang 46a262ab4b 删除 4 jaren geleden   liuchang d1d76df146 更新提交 4 jaren geleden   wanyao 1d2d95bc39 删除 4 jaren geleden   wanyao f74da4a0dd 删除 4 jaren geleden   wanyao b667fddfbc 初始化 4 jaren geleden
9 gewijzigde bestanden met toevoegingen van 204 en 24 verwijderingen
  1. 29 23
      monitor-manage-service/src/main/java/com/ai/bss/monitorManage/service/impl/KafkaProcessImpl.java
  2. 32 0
      monitor-manage-service/src/main/java/com/ai/bss/monitorManage/utils/ArrayUtils.java
  3. 1 1
      monitor-manage-service/src/main/resources/application.properties
  4. 12 0
      security-protection-service/pom.xml
  5. 10 0
      security-protection-service/src/main/java/com/ai/bss/security/protection/SecurityProtectionApp.java
  6. 15 0
      security-protection-service/src/main/java/com/ai/bss/security/protection/config/MyCorsFilter.java
  7. 10 0
      security-protection-service/src/main/java/com/ai/bss/security/protection/service/task/AiResultRecordKafkaTask.java
  8. 41 0
      security-protection-service/src/main/java/com/ai/bss/security/protection/service/task/MirrorManagement.java
  9. 54 0
      security-protection-service/src/main/java/com/ai/bss/security/protection/service/task/MirrorSendAiDataThread.java

+ 29 - 23
monitor-manage-service/src/main/java/com/ai/bss/monitorManage/service/impl/KafkaProcessImpl.java

@ -7,6 +7,8 @@ import java.util.HashMap;
7 7
import java.util.List;
8 8
import java.util.Map;
9 9
10
import com.ai.bss.monitorManage.utils.*;
11
import com.sun.javafx.collections.MappingChange;
10 12
import org.apache.commons.lang.StringUtils;
11 13
import org.apache.logging.log4j.util.Strings;
12 14
import org.slf4j.Logger;
@ -29,11 +31,6 @@ import com.ai.bss.monitorManage.model.IdenResultDto;
29 31
import com.ai.bss.monitorManage.model.MonitorVideoLogDto;
30 32
import com.ai.bss.monitorManage.service.interfaces.FileManageService;
31 33
import com.ai.bss.monitorManage.service.interfaces.KafkaProcess;
32
import com.ai.bss.monitorManage.utils.DateUtils;
33
import com.ai.bss.monitorManage.utils.FileUtils;
34
import com.ai.bss.monitorManage.utils.HttpServiceUtil;
35
import com.ai.bss.monitorManage.utils.KafkaProducerConfig;
36
import com.ai.bss.monitorManage.utils.SecurityProtectionMinioConfig;
37 34
import com.alibaba.fastjson.JSON;
38 35
import com.alibaba.fastjson.JSONArray;
39 36
import com.alibaba.fastjson.JSONObject;
@ -320,6 +317,10 @@ public class KafkaProcessImpl implements KafkaProcess {
320 317
							idenResultDto.setAlarmEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
321 318
							idenResultDto.setAlarmType(aiClassName);
322 319
							idenResultDto.setAlarmMemo(aiClassName);
320
							Map resultMap = (Map)jsonoArray.get(i);
321
							int[] boxIntArr = ArrayUtils.JsonToArray((JSONArray)resultMap.get("box"));
322
							idenResultDto.setBox(boxIntArr);
323
323 324
							idenResultDtoList.add(idenResultDto);
324 325
							// aiIdenLogDto.setIdenResult(idenResultDtoList);
325 326
							aiIdenLogDto.setIdenResult(JSON.toJSONString(idenResultDtoList));
@ -331,6 +332,11 @@ public class KafkaProcessImpl implements KafkaProcess {
331 332
							idenResultDto.setAlarmEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
332 333
							idenResultDto.setAlarmType(MonitorManageConsts.AI_ALARM_TYPE_WEA);
333 334
							idenResultDto.setAlarmMemo("未戴安全帽");
335
336
							Map resultMap = (Map)jsonoArray.get(i);
337
							int[] boxIntArr = ArrayUtils.JsonToArray((JSONArray)resultMap.get("box"));
338
							idenResultDto.setBox(boxIntArr);
339
334 340
							aiIdenLogDto.setIdenResultType(MonitorManageConsts.AI_IDENTIFY_RESULT_ALARM);
335 341
							idenResultDtoList.add(idenResultDto);
336 342
							// aiIdenLogDto.setIdenResult(idenResultDtoList);
@ -434,12 +440,7 @@ public class KafkaProcessImpl implements KafkaProcess {
434 440
					resultDto.setSimi(score.setScale(4,BigDecimal.ROUND_HALF_UP).floatValue());
435 441
					resultDto.setIsMatch(0);
436 442
437
					JSONArray boxJSONArray = (JSONArray) resultMap.get("box");
438
					int[] boxIntArr=new int[boxJSONArray.size()];
439
					for(int i = 0;i<boxJSONArray.size();i++){
440
						BigDecimal boxValue=(BigDecimal) boxJSONArray.get(i);
441
						boxIntArr[i] =boxValue.intValue();
442
					}
443
					int[] boxIntArr = ArrayUtils.JsonToArray((JSONArray) resultMap.get("box"));
443 444
					resultDto.setBox(boxIntArr);
444 445
445 446
					aiIdenLogDto.setIdenResultType(MonitorManageConsts.AI_IDENTIFY_RESULT);
@ -449,12 +450,7 @@ public class KafkaProcessImpl implements KafkaProcess {
449 450
					resultDto.setSimi(score.setScale(4,BigDecimal.ROUND_HALF_UP).floatValue());
450 451
					resultDto.setIsMatch(1);
451 452
452
					JSONArray boxJSONArray = (JSONArray) resultMap.get("box");
453
					int[] boxIntArr=new int[boxJSONArray.size()];
454
					for(int i = 0;i<boxJSONArray.size();i++){
455
						BigDecimal boxValue=(BigDecimal) boxJSONArray.get(i);
456
						boxIntArr[i] =boxValue.intValue();
457
					}
453
					int[] boxIntArr = ArrayUtils.JsonToArray((JSONArray) resultMap.get("box"));
458 454
					resultDto.setBox(boxIntArr);
459 455
460 456
					aiIdenLogDto.setRelateEmployeeRoleId(faceId);
@ -512,12 +508,7 @@ public class KafkaProcessImpl implements KafkaProcess {
512 508
					idenResultDto.setAlarmType(MonitorManageConsts.AI_ALARM_TYPE_STA);
513 509
					idenResultDto.setAlarmMemo("陌生人");
514 510
515
					JSONArray boxJSONArray = (JSONArray) resultMap.get("box");
516
					int[] boxIntArr=new int[boxJSONArray.size()];
517
					for(int i = 0;i<boxJSONArray.size();i++){
518
						BigDecimal boxValue=(BigDecimal) boxJSONArray.get(i);
519
						boxIntArr[i] =boxValue.intValue();
520
					}
511
					int[] boxIntArr = ArrayUtils.JsonToArray((JSONArray) resultMap.get("box"));
521 512
					idenResultDto.setBox(boxIntArr);
522 513
523 514
					idenResultDtoList.add(idenResultDto);
@ -571,6 +562,11 @@ public class KafkaProcessImpl implements KafkaProcess {
571 562
                                    idenResultDto.setAlarmEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
572 563
                                    idenResultDto.setAlarmType(MonitorManageConsts.AI_ALARM_TYPE_VIO);
573 564
                                    idenResultDto.setAlarmMemo("违规吸烟");
565
566
								    Map resultMap = (Map) jsonArray.get(i);
567
									int[] boxIntArr = ArrayUtils.JsonToArray((JSONArray) resultMap.get("box"));
568
									idenResultDto.setBox(boxIntArr);
569
574 570
                                    log.info("检测到违规吸烟");
575 571
                                    aiIdenLogDto.setIdenResultType(MonitorManageConsts.AI_IDENTIFY_RESULT_ALARM);
576 572
                                    idenResultDtoList.add(idenResultDto);
@ -621,6 +617,10 @@ private AiIdenLogDto workClothesDetect(AiIdenLogDto aiIdenLogDto, String aifileP
621 617
						idenResultDto.setAlarmType(MonitorManageConsts.AI_ALARM_TYPE_WEA);
622 618
						idenResultDto.setAlarmMemo("未穿工作服");
623 619
						log.info("未穿工作服");
620
621
						int[] boxIntArr = ArrayUtils.JsonToArray((JSONArray) resultList.get(i).get("box"));
622
						idenResultDto.setBox(boxIntArr);
623
624 624
						aiIdenLogDto.setIdenResultType(MonitorManageConsts.AI_IDENTIFY_RESULT_ALARM);
625 625
						idenResultDtoList.add(idenResultDto);
626 626
						aiIdenLogDto.setIdenResult(JSON.toJSONString(idenResultDtoList));
@ -630,6 +630,10 @@ private AiIdenLogDto workClothesDetect(AiIdenLogDto aiIdenLogDto, String aifileP
630 630
						idenResultDto.setAlarmEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
631 631
						idenResultDto.setAlarmType(aiClassName);
632 632
						idenResultDto.setAlarmMemo(aiClassName);
633
634
						int[] boxIntArr = ArrayUtils.JsonToArray((JSONArray) resultList.get(i).get("box"));
635
						idenResultDto.setBox(boxIntArr);
636
633 637
						idenResultDtoList.add(idenResultDto);
634 638
						aiIdenLogDto.setIdenResult(JSON.toJSONString(idenResultDtoList));
635 639
						aiIdenLogDto.setIdenResultType(MonitorManageConsts.AI_IDENTIFY_RESULT);
@ -671,6 +675,8 @@ private AiIdenLogDto instrumentDetect(AiIdenLogDto aiIdenLogDto, String aifilePa
671 675
				aiIdenLogDto.setRelateEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
672 676
				log.info("返回的仪表信息为:"+jsonObjectpredictions.getString("Items"));
673 677
				aiIdenLogDto.setIdenResult(jsonObjectpredictions.getString("Items"));
678
679
674 680
				log.info("仪表识别成功,推送KAFKA消息");
675 681
				processKafka(aiIdenLogDto.getTopic(), JSONObject.toJSONString(aiIdenLogDto));
676 682
				log.info("消息推送完成");

+ 32 - 0
monitor-manage-service/src/main/java/com/ai/bss/monitorManage/utils/ArrayUtils.java

@ -0,0 +1,32 @@
1
package com.ai.bss.monitorManage.utils;
2
3
import com.alibaba.fastjson.JSONArray;
4
5
import java.math.BigDecimal;
6
import java.util.Calendar;
7
import java.util.Date;
8
9
/**
10
 * @Auther: 王超
11
 * @Date: 2021/2/3 17:49
12
 * @Description:
13
 */
14
public class ArrayUtils {
15
16
    /**
17
     * JSONArray转int[]
18
     * @param jsonArray 原json
19
     *
20
     * @return boxIntArr
21
     */
22
    public static int[] JsonToArray(JSONArray jsonArray) {
23
        int[] boxIntArr=new int[jsonArray.size()];
24
        for(int i = 0;i<jsonArray.size();i++){
25
            BigDecimal boxValue=(BigDecimal) jsonArray.get(i);
26
            boxIntArr[i] =boxValue.intValue();
27
        }
28
        return boxIntArr;
29
    }
30
31
32
}

+ 1 - 1
monitor-manage-service/src/main/resources/application.properties

@ -74,7 +74,7 @@ logging.level.org.springframework.data=debug
74 74
75 75
76 76
camera.filePath=/home/puaiuc/data/DAHUA
77
#camera.filePath=E:\\data\\DAHUA
77
#camera.filePath=D:\\data\\DAHUA
78 78
79 79
#AI\u05b4\ufffd\u043d\ufffd\ufffd
80 80
#kafka.topic.aitask=topicTaskTest

+ 12 - 0
security-protection-service/pom.xml

@ -186,6 +186,18 @@
186 186
            <version>2.6.12</version>
187 187
        </dependency>
188 188
189
        <!--  IPU 镜屏 -->
190
        <dependency>
191
            <groupId>com.ai.ipu.server</groupId>
192
            <artifactId>iot-stomp-server</artifactId>
193
            <version>3.1-SNAPSHOT</version>
194
            <exclusions>
195
                <exclusion>
196
                    <groupId>org.apache.logging.log4j</groupId>
197
                    <artifactId>log4j-slf4j-impl</artifactId>
198
                </exclusion>
199
            </exclusions>
200
        </dependency>
189 201
190 202
    </dependencies>
191 203
    <repositories>

+ 10 - 0
security-protection-service/src/main/java/com/ai/bss/security/protection/SecurityProtectionApp.java

@ -1,5 +1,8 @@
1 1
package com.ai.bss.security.protection;
2 2
3
import com.ai.ipu.server.connect.ConnectServerStart;
4
import com.ai.ipu.server.connect.util.ConnectServerManager;
5
import com.ai.ipu.server.stomp.WebSocketStompServer;
3 6
import org.springframework.boot.SpringApplication;
4 7
import org.springframework.boot.autoconfigure.SpringBootApplication;
5 8
import org.springframework.boot.autoconfigure.domain.EntityScan;
@ -18,6 +21,13 @@ import org.springframework.scheduling.annotation.EnableAsync;
18 21
@SpringBootApplication
19 22
public class SecurityProtectionApp {
20 23
    public static void main(String[] args) throws Exception {
24
        System.setProperty("websocket.port", "7200");
25
26
        //注册镜屏服务
27
        ConnectServerManager.registerServer("websocket.port", new WebSocketStompServer("/stomp"));
28
        //镜屏服务启动
29
        ConnectServerStart.start(args, false);
30
21 31
        SpringApplication.run(SecurityProtectionApp.class, args);
22 32
    }
23 33
}

+ 15 - 0
security-protection-service/src/main/java/com/ai/bss/security/protection/config/MyCorsFilter.java

@ -4,6 +4,8 @@ import com.ai.sso.filter.SessionUserFilter;
4 4
import org.springframework.boot.web.servlet.FilterRegistrationBean;
5 5
import org.springframework.context.annotation.Bean;
6 6
import org.springframework.context.annotation.Configuration;
7
import org.springframework.core.task.TaskExecutor;
8
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
7 9
import org.springframework.web.cors.CorsConfiguration;
8 10
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
9 11
import org.springframework.web.filter.CorsFilter;
@ -11,6 +13,7 @@ import org.springframework.web.filter.CorsFilter;
11 13
import java.util.Arrays;
12 14
import java.util.HashMap;
13 15
import java.util.Map;
16
import java.util.concurrent.ThreadPoolExecutor;
14 17
15 18
/**
16 19
 * 解决接口跨域问题
@ -58,4 +61,16 @@ public class MyCorsFilter {
58 61
        registrationBean.setInitParameters(initParameters);
59 62
        return registrationBean;
60 63
    }
64
65
    @Bean
66
    public ThreadPoolTaskExecutor executor(){
67
        ThreadPoolTaskExecutor executor=new ThreadPoolTaskExecutor();
68
        executor.setCorePoolSize(10); //核心线程数
69
        executor.setMaxPoolSize(20);  //最大线程数
70
        executor.setQueueCapacity(1000); //队列大小
71
        executor.setKeepAliveSeconds(300); //线程最大空闲时间
72
        executor.setThreadNamePrefix("fsx-Executor-"); //指定用于新创建的线程名称的前缀。
73
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
74
        return executor;
75
    }
61 76
}

+ 10 - 0
security-protection-service/src/main/java/com/ai/bss/security/protection/service/task/AiResultRecordKafkaTask.java

@ -2,11 +2,14 @@ package com.ai.bss.security.protection.service.task;
2 2
3 3
import java.util.List;
4 4
import java.util.Map;
5
import java.util.concurrent.FutureTask;
5 6
6 7
import org.apache.kafka.clients.consumer.ConsumerRecord;
7 8
import org.springframework.beans.factory.annotation.Autowired;
9
import org.springframework.core.task.TaskExecutor;
8 10
import org.springframework.kafka.annotation.KafkaListener;
9 11
import org.springframework.kafka.support.Acknowledgment;
12
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
10 13
import org.springframework.stereotype.Component;
11 14
import org.springframework.util.CollectionUtils;
12 15
@ -47,8 +50,11 @@ public class AiResultRecordKafkaTask {
47 50
	@Autowired
48 51
	private EmployeeService employeeService;
49 52
53
50 54
	@KafkaListener(containerFactory = "kafkaBatchListener6", topics = "${kafka.topic.aitask:topic_ai_task}", groupId = "ai_group")
51 55
	public void AiResultRecordListener(ConsumerRecord<String, String> records, Acknowledgment ack) throws Throwable {
56
	/*@KafkaListener(containerFactory = "kafkaBatchListener6", topics = "${kafka.topic.aitask:topicTaskTest}", groupId = "ai_group")
57
	public void AiResultRecordListener(ConsumerRecord<String, String> records, Acknowledgment ack) throws Throwable {*/
52 58
		try {
53 59
			log.debug("----------------AI任务执行结果信息消费开始---------------------------");
54 60
@ -58,6 +64,10 @@ public class AiResultRecordKafkaTask {
58 64
			AiIdenLog aiIdenLog = JSON.parseObject(message, new TypeReference<AiIdenLog>() {
59 65
			});
60 66
67
			//将结果使用一步方式用镜屏推送到前台
68
			FutureTask<Integer> integerFutureTask = new FutureTask<>(new MirrorSendAiDataThread(message));
69
			new Thread(integerFutureTask).start();
70
61 71
			JSONObject messageJson = JSONObject.parseObject(message);
62 72
			String resourceToolId = messageJson.getString("resourceToolId");
63 73
			String idenResultType = messageJson.getString("idenResultType");

+ 41 - 0
security-protection-service/src/main/java/com/ai/bss/security/protection/service/task/MirrorManagement.java

@ -0,0 +1,41 @@
1
package com.ai.bss.security.protection.service.task;
2
3
import com.ai.ipu.server.connect.ps.EventChannelTool;
4
import com.ai.ipu.server.connect.ps.EventChannelTool.PublisherEvent;
5
import com.ai.ipu.server.connect.ps.ISubscriber;
6
import com.ai.ipu.server.connect.ps.impl.Publisher;
7
import org.slf4j.Logger;
8
import org.slf4j.LoggerFactory;
9
10
/**
11
 * 镜屏推送消息
12
 * @author konghl@asiainfo.com
13
 * 2020-10-21
14
 */
15
public class MirrorManagement {
16
	private static Logger logger = LoggerFactory.getLogger(MirrorManagement.class);
17
18
	// ai返回结果topic
19
	public static final String SEND_AI_DATA = "sendAiData";
20
21
	public static void sendData(String topic, String msg) {
22
		logger.debug("推送镜屏数据: topic=" + topic + " , data=" + msg);
23
24
		if (!EventChannelTool.isExistSubscriber(topic)) {
25
			// 如果没有订阅 先不管
26
			logger.debug("未推送镜屏数据,原因是没有订阅:topic="+topic);
27
			return;
28
		}
29
30
		// 你发送的内容
31
		final Publisher publisher = new Publisher(topic);
32
		PublisherEvent<?> publisherEvent = new PublisherEvent<String>(msg) {
33
			@Override
34
			public void callback(String topic, ISubscriber... subscribers) {
35
				// 可记录消息发布后的统计日志
36
			}
37
		};
38
		publisher.publish(topic, publisherEvent);
39
		logger.debug("推送镜屏数据成功");
40
	}
41
}

+ 54 - 0
security-protection-service/src/main/java/com/ai/bss/security/protection/service/task/MirrorSendAiDataThread.java

@ -0,0 +1,54 @@
1
package com.ai.bss.security.protection.service.task;
2
3
import com.ai.abc.api.model.CommonRequest;
4
import com.ai.abc.api.model.CommonResponse;
5
import com.ai.bss.security.protection.service.interfaces.CharSpecService;
6
import com.ai.bss.work.task.model.common.WorkTask;
7
import com.ai.bss.worker.service.api.EntityAlarmHandle;
8
import com.alibaba.fastjson.JSON;
9
import com.alibaba.fastjson.JSONObject;
10
import org.apache.commons.collections4.map.HashedMap;
11
import org.slf4j.Logger;
12
import org.slf4j.LoggerFactory;
13
import org.springframework.beans.factory.annotation.Autowired;
14
import org.springframework.beans.factory.annotation.Qualifier;
15
import org.springframework.stereotype.Component;
16
17
import java.util.Map;
18
import java.util.concurrent.Callable;
19
20
public class MirrorSendAiDataThread implements Callable<Integer> {
21
	private Logger logger = LoggerFactory.getLogger(MirrorSendAiDataThread.class);
22
23
	private String message;
24
25
	public MirrorSendAiDataThread(String aimessage) {
26
		this.message = aimessage;
27
	}
28
29
	@Override
30
	public Integer call() throws Exception {
31
		System.out.println("执行call。。。。。。。。。。。。。。方法");
32
		mirrorSendAiData(message);
33
		return null;
34
	}
35
36
	/**
37
	 * 镜屏推送ai识别数据
38
	 *
39
	 * @param message
40
	 * @return
41
	 */
42
	public Object mirrorSendAiData(String message) {
43
		logger.debug("====================实时报警接收镜屏数据: " + message);
44
		try {
45
			logger.info("实时报警推送镜屏数据: " + message);
46
			MirrorManagement.sendData(MirrorManagement.SEND_AI_DATA, message);
47
48
		} catch (Exception e) {
49
			logger.error("实时报警推送镜屏失败: " + e.getMessage());
50
		}
51
52
		return null;
53
	}
54
}

chenlp5 - Nuosi Git Service

Following