diff --git a/pom.xml b/pom.xml
index dcda5e8f..c95e2ebd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -56,6 +56,12 @@
test
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
org.springframework.boot
diff --git a/src/main/java/com/zcloud/config/MyRedisConfig.java b/src/main/java/com/zcloud/config/MyRedisConfig.java
new file mode 100644
index 00000000..85fbdab0
--- /dev/null
+++ b/src/main/java/com/zcloud/config/MyRedisConfig.java
@@ -0,0 +1,34 @@
+package com.zcloud.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.RedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+@Configuration
+public class MyRedisConfig {
+
+ @Bean(name = "redisTemplate")
+ public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
+ RedisTemplate redisTemplate = new RedisTemplate<>();
+ ////参照StringRedisTemplate内部实现指定序列化器
+ redisTemplate.setConnectionFactory(redisConnectionFactory);
+ redisTemplate.setKeySerializer(keySerializer());
+ redisTemplate.setHashKeySerializer(keySerializer());
+ redisTemplate.setValueSerializer(valueSerializer());
+ redisTemplate.setHashValueSerializer(valueSerializer());
+ return redisTemplate;
+ }
+
+ private RedisSerializer keySerializer(){
+ return new StringRedisSerializer();
+ }
+
+ //使用Jackson序列化器
+ private RedisSerializer valueSerializer(){
+ return new StringRedisSerializer();
+ }
+}
diff --git a/src/main/java/com/zcloud/config/StartWebsocketServer.java b/src/main/java/com/zcloud/config/StartWebsocketServer.java
index 7d27d319..5ab3b675 100644
--- a/src/main/java/com/zcloud/config/StartWebsocketServer.java
+++ b/src/main/java/com/zcloud/config/StartWebsocketServer.java
@@ -1,5 +1,6 @@
package com.zcloud.config;
+import com.zcloud.plugins.websocketPositioning.PositioningServer;
import org.java_websocket.WebSocketImpl;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
@@ -20,14 +21,15 @@ import com.zcloud.util.PathUtil;
@Component
@Order(value = 1) // 1 代表启动顺序
public class StartWebsocketServer implements ApplicationRunner{
-
+
@Override
public void run(ApplicationArguments var1) throws Exception{
startWebsocketOnline(); //启动在线管理服务
startWebsocketInstantMsg(); //启动即时聊天服务
+ startWebsocketPositioning();
System.out.println("-------------------系统启动成功-------------------");
}
-
+
/**
* 启动在线管理服务
*/
@@ -43,7 +45,7 @@ public class StartWebsocketServer implements ApplicationRunner{
e.printStackTrace();
}
}
-
+
/**
* 启动即时聊天服务
*/
@@ -60,4 +62,20 @@ public class StartWebsocketServer implements ApplicationRunner{
}
}
+ /**
+ * 启动即时人员定位推送
+ */
+ public void startWebsocketPositioning(){
+ WebSocketImpl.DEBUG = false;
+ PositioningServer s;
+ try {
+ String infFilePath = PathUtil.getClasspath()+Const.SYSSET; //启动即时人员定位推送
+ String positioningPort = IniFileUtil.readCfgValue(infFilePath, "SysSet1", "positioningPort", "8899"); //启动即时人员定位推送
+ s = new PositioningServer(Integer.parseInt(positioningPort));
+ s.start();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
}
diff --git a/src/main/java/com/zcloud/controller/map/MapEightController.java b/src/main/java/com/zcloud/controller/map/MapEightController.java
index e55d3ba1..9ff3acc1 100644
--- a/src/main/java/com/zcloud/controller/map/MapEightController.java
+++ b/src/main/java/com/zcloud/controller/map/MapEightController.java
@@ -4,6 +4,8 @@ import com.zcloud.controller.base.BaseController;
import com.zcloud.entity.Page;
import com.zcloud.entity.PageData;
import com.zcloud.service.map.MapEightService;
+import com.zcloud.service.system.UserInfoService;
+import com.zcloud.service.system.UsersService;
import com.zcloud.util.Jurisdiction;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -28,6 +30,8 @@ public class MapEightController extends BaseController {
@Autowired
private MapEightService mapEightService;
@Autowired
+ private UsersService usersService;
+ @Autowired
private RestTemplate restTemplate;
/**
@@ -186,4 +190,23 @@ public class MapEightController extends BaseController {
return map;
}
+ /**
+ * 获取动火防护措施
+ *
+ * @param
+ * @throws Exception
+ */
+ @RequestMapping(value = "/findEightsByUserCardNo")
+ @ResponseBody
+ public Object findEightsByUserId() throws Exception {
+ Map map = new HashMap();
+ String errInfo = "success";
+ PageData pd = new PageData();
+ pd = this.getPageData();
+ PageData byCardNo = usersService.findByCardNo(pd);
+ map.put("INFO", byCardNo);
+ map.put("result", errInfo);
+ return map;
+ }
+
}
diff --git a/src/main/java/com/zcloud/controller/system/HeadController.java b/src/main/java/com/zcloud/controller/system/HeadController.java
index 1ef1b2d2..9ff9cadb 100644
--- a/src/main/java/com/zcloud/controller/system/HeadController.java
+++ b/src/main/java/com/zcloud/controller/system/HeadController.java
@@ -105,6 +105,10 @@ public class HeadController extends BaseController {
String imPort = IniFileUtil.readCfgValue(infFilePath, "SysSet1", "imPort", "8869"); //即时聊天端口
map.put("wimadress", imIp+":"+imPort); //即时聊天websocket地址
+ String positioningIP = IniFileUtil.readCfgValue(infFilePath, "SysSet1", "positioningIP", "127.0.0.1"); //即时聊天IP
+ String positioningPort = IniFileUtil.readCfgValue(infFilePath, "SysSet1", "positioningPort", "8899"); //即时聊天端口
+ map.put("positioningAdress", positioningIP+":"+positioningPort); //即时聊天websocket地址
+
String alarmIp = IniFileUtil.readCfgValue(infFilePath, "SysSet1", "alarmIp", "127.0.0.1"); //即时聊天IP
String alarmPort = IniFileUtil.readCfgValue(infFilePath, "SysSet1", "alarmPort", "8889"); //即时聊天端口
map.put("alarmAdress", alarmIp+":"+alarmPort); //重大危险源报警推送websocket地址
@@ -251,6 +255,7 @@ public class HeadController extends BaseController {
pd.put("onlinePort", IniFileUtil.readCfgValue(infFilePath, "SysSet1", "onlinePort", "8869")); //在线管理端口
pd.put("imIp", IniFileUtil.readCfgValue(infFilePath, "SysSet1", "imIp", "127.0.0.1")); //即时聊天IP
pd.put("imPort", IniFileUtil.readCfgValue(infFilePath, "SysSet1", "imPort", "8879")); //即时聊天端口
+ pd.put("positioningPort", IniFileUtil.readCfgValue(infFilePath, "SysSet1", "positioningPort", "8899")); //即时聊天端口
pd.put("fhsmsSound", IniFileUtil.readCfgValue(infFilePath, "SysSet1", "fhsmsSound", "m1")); //信息提示音
pd.put("SMTP", IniFileUtil.readCfgValue(infFilePath, "SysSet1", "SMTP", "smtp.qq.com")); //邮箱服务器SMTP
pd.put("PORT", IniFileUtil.readCfgValue(infFilePath, "SysSet1", "PORT", "465")); //邮箱服务器端口
diff --git a/src/main/java/com/zcloud/mapper/datasource/system/UsersMapper.java b/src/main/java/com/zcloud/mapper/datasource/system/UsersMapper.java
index 634e4faf..80dc8f0e 100644
--- a/src/main/java/com/zcloud/mapper/datasource/system/UsersMapper.java
+++ b/src/main/java/com/zcloud/mapper/datasource/system/UsersMapper.java
@@ -305,4 +305,6 @@ public interface UsersMapper {
PageData getPersonByCardNo(PageData pd);
PageData findByCardNo(PageData pd);
+
+ void updateCardNoByPhone(String phone, String cardId);
}
diff --git a/src/main/java/com/zcloud/plugins/websocketPositioning/PositioningServer.java b/src/main/java/com/zcloud/plugins/websocketPositioning/PositioningServer.java
new file mode 100644
index 00000000..1662e899
--- /dev/null
+++ b/src/main/java/com/zcloud/plugins/websocketPositioning/PositioningServer.java
@@ -0,0 +1,53 @@
+package com.zcloud.plugins.websocketPositioning;
+
+import org.java_websocket.WebSocket;
+import org.java_websocket.WebSocketImpl;
+import org.java_websocket.handshake.ClientHandshake;
+import org.java_websocket.server.WebSocketServer;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+
+/**
+ * 人员的定位
+ */
+public class PositioningServer extends WebSocketServer {
+
+ public PositioningServer(int port) {
+ super(new InetSocketAddress(port));
+ }
+
+ @Override
+ public void onOpen(WebSocket conn, ClientHandshake handshake) {
+ PositioningServerPool.addUser(null,conn);
+ }
+
+ @Override
+ public void onClose(WebSocket conn, int code, String reason, boolean remote) {
+ PositioningServerPool.remove(conn);
+ }
+
+ @Override
+ public void onMessage(WebSocket conn, String message) {
+
+ }
+
+ @Override
+ public void onError(WebSocket conn, Exception ex) {
+
+ }
+
+ @Override
+ public void onStart() {
+
+ }
+
+ public static void main( String[] args ) throws InterruptedException , IOException {
+ WebSocketImpl.DEBUG = false;
+ int port = 8899; //端口
+ PositioningServer s = new PositioningServer(port);
+ s.start();
+ System.out.println( "服务器的端口" + s.getPort() );
+ }
+
+}
diff --git a/src/main/java/com/zcloud/plugins/websocketPositioning/PositioningServerPool.java b/src/main/java/com/zcloud/plugins/websocketPositioning/PositioningServerPool.java
new file mode 100644
index 00000000..ce31c8aa
--- /dev/null
+++ b/src/main/java/com/zcloud/plugins/websocketPositioning/PositioningServerPool.java
@@ -0,0 +1,41 @@
+package com.zcloud.plugins.websocketPositioning;
+
+import org.java_websocket.WebSocket;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+public class PositioningServerPool {
+
+ private static final Map userconnections = new HashMap();
+
+ /**
+ * 向连接池中添加连接
+ * @param inbound
+ */
+ public static void addUser(String user, WebSocket conn){
+ userconnections.put(conn,user); //添加连接
+ }
+
+ /**
+ * 向所有的用户发送消息
+ * @param message
+ */
+ public static void sendMessage(String message){
+ Set keySet = userconnections.keySet();
+ for (WebSocket conn : keySet) {
+ conn.send(message);
+ }
+ }
+
+ /**
+ * 移除
+ * @param conn
+ */
+ public static void remove(WebSocket conn){
+ userconnections.remove(conn);
+ }
+
+
+}
diff --git a/src/main/java/com/zcloud/service/bus/PositioningService.java b/src/main/java/com/zcloud/service/bus/PositioningService.java
new file mode 100644
index 00000000..758873a7
--- /dev/null
+++ b/src/main/java/com/zcloud/service/bus/PositioningService.java
@@ -0,0 +1,13 @@
+package com.zcloud.service.bus;
+
+import com.zcloud.entity.PageData;
+
+import java.util.List;
+
+public interface PositioningService {
+
+ public List findRedisAll();
+
+ void syncCardNo() throws Exception;
+
+}
diff --git a/src/main/java/com/zcloud/service/bus/impl/PositioningServiceImpl.java b/src/main/java/com/zcloud/service/bus/impl/PositioningServiceImpl.java
new file mode 100644
index 00000000..910dc944
--- /dev/null
+++ b/src/main/java/com/zcloud/service/bus/impl/PositioningServiceImpl.java
@@ -0,0 +1,47 @@
+package com.zcloud.service.bus.impl;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.zcloud.service.bus.PositioningService;
+import com.zcloud.service.system.UsersService;
+import com.zcloud.util.HttpRequestUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Set;
+
+@Service(value="iPositioningServiceImpl")
+public class PositioningServiceImpl implements PositioningService {
+
+ @Autowired
+ private RedisTemplate redisTemplate;
+
+ @Autowired
+ private UsersService usersService;
+
+ @Override
+ public List findRedisAll() {
+ Set keys = redisTemplate.keys("*");
+ return redisTemplate.opsForValue().multiGet(keys);
+ }
+
+ @Override
+ public void syncCardNo() throws Exception {
+ String _response = HttpRequestUtil.doGet("https://badge.hongchuankeji.com:7812/mapi/v1/queryWorkCardLocation");
+ JSONObject responseResult = JSONObject.parseObject(_response);
+ JSONArray jsonArray = responseResult.getJSONArray("data");
+ for (int i = 0; i < jsonArray.size() ; i++) {
+ JSONObject jsonObject = jsonArray.getJSONObject(i);
+ if (
+ StringUtils.isNotBlank(jsonObject.getString("phone"))
+ && StringUtils.isNotBlank(jsonObject.getString("cardId"))
+ ) {
+ usersService.updateCardNoByPhone(jsonObject.getString("phone"), jsonObject.getString("cardId"));
+ }
+ }
+ }
+
+}
diff --git a/src/main/java/com/zcloud/service/system/UsersService.java b/src/main/java/com/zcloud/service/system/UsersService.java
index ec65f300..38bd2157 100644
--- a/src/main/java/com/zcloud/service/system/UsersService.java
+++ b/src/main/java/com/zcloud/service/system/UsersService.java
@@ -364,4 +364,6 @@ public interface UsersService {
Object getPersonPositioningStatistics(PageData pd) throws Exception;
Object getCurrentLocationCount(PageData pd);
+
+ void updateCardNoByPhone(String phone, String cardId);
}
diff --git a/src/main/java/com/zcloud/service/system/impl/UsersServiceImpl.java b/src/main/java/com/zcloud/service/system/impl/UsersServiceImpl.java
index 91506371..abeb00ca 100644
--- a/src/main/java/com/zcloud/service/system/impl/UsersServiceImpl.java
+++ b/src/main/java/com/zcloud/service/system/impl/UsersServiceImpl.java
@@ -548,6 +548,11 @@ public class UsersServiceImpl implements UsersService {
}
+ @Override
+ public void updateCardNoByPhone(String phone, String cardId) {
+ usersMapper.updateCardNoByPhone(phone, cardId);
+ }
+
/**
* 查询人员在线统计数据
* @param pd
diff --git a/src/main/java/com/zcloud/util/PositioningScheduled.java b/src/main/java/com/zcloud/util/PositioningScheduled.java
new file mode 100644
index 00000000..31809038
--- /dev/null
+++ b/src/main/java/com/zcloud/util/PositioningScheduled.java
@@ -0,0 +1,38 @@
+package com.zcloud.util;
+
+import com.zcloud.plugins.websocketPositioning.PositioningServerPool;
+import com.zcloud.service.bus.PositioningService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+@Component
+public class PositioningScheduled {
+
+ @Autowired
+ private PositioningService positioningService;
+
+ @Scheduled(cron ="0/10 * * * * ? ")
+ public void syncPositioning(){
+ try {
+ System.out.println("==========定时发送人员定位信息==========");
+ List varList = positioningService.findRedisAll();
+ PositioningServerPool.sendMessage(varList.toString());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Scheduled(cron ="0 0 2 * * ? ") // 凌晨两点
+ public void syncCardNo(){
+ try {
+ System.out.println("==========定时同步定位卡号==========");
+ positioningService.syncCardNo();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+}
diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties
index c66f8fd1..6e8dcbb2 100644
--- a/src/main/resources/application-dev.properties
+++ b/src/main/resources/application-dev.properties
@@ -106,3 +106,22 @@ mq.group.docking=scheduled_tasks_docking
base.info.USER_IDENTITY=GWJ
base.info.baseImgPath=https://qgqy.qhdsafety.com/file/
base.info.BACKENDADDR=http://192.168.0.31:8992/qa-regulatory-gwj/
+
+# Redis数据库索引(默认为0)
+spring.redis.database=0
+# Redis服务器地址
+spring.redis.host=39.103.224.166
+# Redis服务器连接端口
+spring.redis.port=63799
+# Redis服务器连接密码(默认为空)
+spring.redis.password=redis@zcloud88888
+# 连接池最大连接数(使用负值表示没有限制)
+spring.redis.jedis.pool.max-active=20
+# 连接池最大阻塞等待时间(使用负值表示没有限制)
+spring.redis.jedis.pool.max-wait=-1
+# 连接池中的最大空闲连接
+spring.redis.jedis.pool.max-idle=10
+# 连接池中的最小空闲连接
+spring.redis.jedis.pool.min-idle=0
+# 连接超时时间(毫秒)
+spring.redis.timeout=1000
diff --git a/src/main/resources/config/sysSet.ini b/src/main/resources/config/sysSet.ini
index a3bfcffe..49f1911a 100644
--- a/src/main/resources/config/sysSet.ini
+++ b/src/main/resources/config/sysSet.ini
@@ -29,3 +29,8 @@ imPort=8879
alarmIp=192.168.210.7
;重大危险源报警推送端口
alarmPort=8889
+
+;人员定位
+alarmIp=127.0.0.1
+;人员定位
+alarmPort=8899
diff --git a/src/main/resources/mybatis/datasource/system/UsersMapper.xml b/src/main/resources/mybatis/datasource/system/UsersMapper.xml
index 0bceee93..dd4632dc 100644
--- a/src/main/resources/mybatis/datasource/system/UsersMapper.xml
+++ b/src/main/resources/mybatis/datasource/system/UsersMapper.xml
@@ -1205,6 +1205,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
update sys_user set CARDNO = null where CARDNO = #{CARDNO}
+
+ update sys_user
+ set CARDNO = #{cardId}
+ where USERNAME = #{phone}
+
+