地图人员定位

pull/15/head
DESKTOP-7VLMG81\Administrator 2024-01-08 14:17:14 +08:00
parent 331e779e11
commit 84245b934c
16 changed files with 323 additions and 6 deletions

View File

@ -56,6 +56,12 @@
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- DevTools 热部署 --> <!-- DevTools 热部署 -->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>

View File

@ -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();
}
}

View File

@ -1,5 +1,6 @@
package com.zcloud.config; package com.zcloud.config;
import com.zcloud.plugins.websocketPositioning.PositioningServer;
import org.java_websocket.WebSocketImpl; import org.java_websocket.WebSocketImpl;
import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner; import org.springframework.boot.ApplicationRunner;
@ -25,6 +26,7 @@ public class StartWebsocketServer implements ApplicationRunner{
public void run(ApplicationArguments var1) throws Exception{ public void run(ApplicationArguments var1) throws Exception{
startWebsocketOnline(); //启动在线管理服务 startWebsocketOnline(); //启动在线管理服务
startWebsocketInstantMsg(); //启动即时聊天服务 startWebsocketInstantMsg(); //启动即时聊天服务
startWebsocketPositioning();
System.out.println("-------------------系统启动成功-------------------"); System.out.println("-------------------系统启动成功-------------------");
} }
@ -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();
}
}
} }

View File

@ -4,6 +4,8 @@ import com.zcloud.controller.base.BaseController;
import com.zcloud.entity.Page; import com.zcloud.entity.Page;
import com.zcloud.entity.PageData; import com.zcloud.entity.PageData;
import com.zcloud.service.map.MapEightService; import com.zcloud.service.map.MapEightService;
import com.zcloud.service.system.UserInfoService;
import com.zcloud.service.system.UsersService;
import com.zcloud.util.Jurisdiction; import com.zcloud.util.Jurisdiction;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -28,6 +30,8 @@ public class MapEightController extends BaseController {
@Autowired @Autowired
private MapEightService mapEightService; private MapEightService mapEightService;
@Autowired @Autowired
private UsersService usersService;
@Autowired
private RestTemplate restTemplate; private RestTemplate restTemplate;
/** /**
@ -186,4 +190,23 @@ public class MapEightController extends BaseController {
return map; return map;
} }
/**
*
*
* @param
* @throws Exception
*/
@RequestMapping(value = "/findEightsByUserCardNo")
@ResponseBody
public Object findEightsByUserId() throws Exception {
Map<String, Object> map = new HashMap<String, Object>();
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;
}
} }

View File

@ -105,6 +105,10 @@ public class HeadController extends BaseController {
String imPort = IniFileUtil.readCfgValue(infFilePath, "SysSet1", "imPort", "8869"); //即时聊天端口 String imPort = IniFileUtil.readCfgValue(infFilePath, "SysSet1", "imPort", "8869"); //即时聊天端口
map.put("wimadress", imIp+":"+imPort); //即时聊天websocket地址 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 alarmIp = IniFileUtil.readCfgValue(infFilePath, "SysSet1", "alarmIp", "127.0.0.1"); //即时聊天IP
String alarmPort = IniFileUtil.readCfgValue(infFilePath, "SysSet1", "alarmPort", "8889"); //即时聊天端口 String alarmPort = IniFileUtil.readCfgValue(infFilePath, "SysSet1", "alarmPort", "8889"); //即时聊天端口
map.put("alarmAdress", alarmIp+":"+alarmPort); //重大危险源报警推送websocket地址 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("onlinePort", IniFileUtil.readCfgValue(infFilePath, "SysSet1", "onlinePort", "8869")); //在线管理端口
pd.put("imIp", IniFileUtil.readCfgValue(infFilePath, "SysSet1", "imIp", "127.0.0.1")); //即时聊天IP pd.put("imIp", IniFileUtil.readCfgValue(infFilePath, "SysSet1", "imIp", "127.0.0.1")); //即时聊天IP
pd.put("imPort", IniFileUtil.readCfgValue(infFilePath, "SysSet1", "imPort", "8879")); //即时聊天端口 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("fhsmsSound", IniFileUtil.readCfgValue(infFilePath, "SysSet1", "fhsmsSound", "m1")); //信息提示音
pd.put("SMTP", IniFileUtil.readCfgValue(infFilePath, "SysSet1", "SMTP", "smtp.qq.com")); //邮箱服务器SMTP pd.put("SMTP", IniFileUtil.readCfgValue(infFilePath, "SysSet1", "SMTP", "smtp.qq.com")); //邮箱服务器SMTP
pd.put("PORT", IniFileUtil.readCfgValue(infFilePath, "SysSet1", "PORT", "465")); //邮箱服务器端口 pd.put("PORT", IniFileUtil.readCfgValue(infFilePath, "SysSet1", "PORT", "465")); //邮箱服务器端口

View File

@ -305,4 +305,6 @@ public interface UsersMapper {
PageData getPersonByCardNo(PageData pd); PageData getPersonByCardNo(PageData pd);
PageData findByCardNo(PageData pd); PageData findByCardNo(PageData pd);
void updateCardNoByPhone(String phone, String cardId);
} }

View File

@ -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() );
}
}

View File

@ -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<WebSocket,String> userconnections = new HashMap<WebSocket,String>();
/**
*
* @param inbound
*/
public static void addUser(String user, WebSocket conn){
userconnections.put(conn,user); //添加连接
}
/**
*
* @param message
*/
public static void sendMessage(String message){
Set<WebSocket> keySet = userconnections.keySet();
for (WebSocket conn : keySet) {
conn.send(message);
}
}
/**
*
* @param conn
*/
public static void remove(WebSocket conn){
userconnections.remove(conn);
}
}

View File

@ -0,0 +1,13 @@
package com.zcloud.service.bus;
import com.zcloud.entity.PageData;
import java.util.List;
public interface PositioningService {
public List<String> findRedisAll();
void syncCardNo() throws Exception;
}

View File

@ -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<String> findRedisAll() {
Set<String> 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"));
}
}
}
}

View File

@ -364,4 +364,6 @@ public interface UsersService {
Object getPersonPositioningStatistics(PageData pd) throws Exception; Object getPersonPositioningStatistics(PageData pd) throws Exception;
Object getCurrentLocationCount(PageData pd); Object getCurrentLocationCount(PageData pd);
void updateCardNoByPhone(String phone, String cardId);
} }

View File

@ -548,6 +548,11 @@ public class UsersServiceImpl implements UsersService {
} }
@Override
public void updateCardNoByPhone(String phone, String cardId) {
usersMapper.updateCardNoByPhone(phone, cardId);
}
/** /**
* 线 * 线
* @param pd * @param pd

View File

@ -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<String> 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();
}
}
}

View File

@ -106,3 +106,22 @@ mq.group.docking=scheduled_tasks_docking
base.info.USER_IDENTITY=GWJ base.info.USER_IDENTITY=GWJ
base.info.baseImgPath=https://qgqy.qhdsafety.com/file/ base.info.baseImgPath=https://qgqy.qhdsafety.com/file/
base.info.BACKENDADDR=http://192.168.0.31:8992/qa-regulatory-gwj/ 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

View File

@ -29,3 +29,8 @@ imPort=8879
alarmIp=192.168.210.7 alarmIp=192.168.210.7
;重大危险源报警推送端口 ;重大危险源报警推送端口
alarmPort=8889 alarmPort=8889
;人员定位
alarmIp=127.0.0.1
;人员定位
alarmPort=8899

View File

@ -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 = null where CARDNO = #{CARDNO}
</update> </update>
<update id="updateCardNoByPhone">
update sys_user
set CARDNO = #{cardId}
where USERNAME = #{phone}
</update>
<!-- 通过岗位ID查用户列表--> <!-- 通过岗位ID查用户列表-->
<select id="findByPostId" parameterType="pd" resultType="pd"> <select id="findByPostId" parameterType="pd" resultType="pd">
select select
@ -1397,9 +1403,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
d.NAME as DEPARTMENT_NAME, d.NAME as DEPARTMENT_NAME,
p.NAME as POST_NAME p.NAME as POST_NAME
from from
`qa-czks-prevention`.sys_user u sys_user u
left join `qa-czks-prevention`oa_department d on d.DEPARTMENT_ID = u.DEPARTMENT_ID left join oa_department d on d.DEPARTMENT_ID = u.DEPARTMENT_ID
left join `qa-czks-prevention`sys_post p on p.POST_ID = u.POST_ID left join sys_post p on p.POST_ID = u.POST_ID
where where
u.CARDNO = #{CARDNO} u.CARDNO = #{CARDNO}
</select> </select>