| ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java | ●●●●● patch | view | raw | blame | history | |
| ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java | ●●●●● patch | view | raw | blame | history | |
| ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java | ●●●●● patch | view | raw | blame | history | |
| ard-work/src/main/java/com/ruoyi/sy/mapper/ArdSyCarMapper.java | ●●●●● patch | view | raw | blame | history | |
| ard-work/src/main/java/com/ruoyi/sy/service/IArdSyCarService.java | ●●●●● patch | view | raw | blame | history | |
| ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
| ard-work/src/main/resources/mapper/sy/ArdSyCarMapper.xml | ●●●●● patch | view | raw | blame | history |
ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java
@@ -1,9 +1,6 @@ package com.ruoyi.sy.controller; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.*; import javax.annotation.PostConstruct; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -18,6 +15,8 @@ import com.ruoyi.sy.service.SysParaService; import com.ruoyi.system.domain.SysConfig; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.system.service.ISysDeptService; import com.ruoyi.system.service.ISysUserService; import com.ruoyi.utils.httpclient.SYCarClient; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -36,6 +35,8 @@ import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.multipart.MultipartFile; import static com.ruoyi.common.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS; /** * 三一车辆Controller @@ -85,6 +86,15 @@ PushClientImplPosition pushClientImplPosition = new PushClientImplPosition(ip,ardSyUserList.get(0).getUserId(),ardSyUserList.get(0).getPassword()); Thread pushClientImplPositionThread = new Thread(pushClientImplPosition); pushClientImplPositionThread.start(); Date date = new Date(); Timer carPositionTimer = new Timer();//定时推送实时位置 TimerTask carPositionTask =new TimerTask(){ public void run(){ ardSyCarService.sendArdSyCarPosition(); } }; carPositionTimer.scheduleAtFixedRate(carPositionTask,date,3*1000);//启用 } /** ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java
New file @@ -0,0 +1,19 @@ package com.ruoyi.sy.gps31; import java.util.HashMap; import java.util.List; import java.util.Map; public class PositionContainer { private static Map<String, Map<String,Map<String,Object>>> deptPositionMap = new HashMap();//依部门存放实施车辆位置:deptId,carId,车辆位置 public static Map<String, Map<String, Map<String,Object>>> getDeptPositionMap() { return deptPositionMap; } public static void setDeptPositionMap(Map<String, Map<String, Map<String,Object>>> deptPositionMap) { PositionContainer.deptPositionMap = deptPositionMap; } } ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java
@@ -12,6 +12,8 @@ import com.gps31.push.netty.PushMsg; import com.gps31.push.netty.client.TcpClient; import com.gps31.push.util.MapUtil; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.sy.service.impl.ArdSyCarServiceImpl; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -64,13 +66,46 @@ }else if("8003".equals(pushMsg.getCmd())){//订阅动态消息应答 String rspResult = MapUtil.getStrVal(pushMsg.getJsonMap(),"rspResult","1"); log.error(String.format(" 订阅应答:%s", "0".equals(rspResult)?"成功":"失败")); //log.error(String.format(" 订阅应答:%s", "0".equals(rspResult)?"成功":"失败")); }else if("0200".equals(pushMsg.getCmd())) {//定位信息 Map<String,Object> gpsMap = pushMsg.getJsonMap(); String carName = MapUtil.getStrVal(gpsMap, "carName","");//获取车牌号 /*String carName = MapUtil.getStrVal(gpsMap, "carName","");//获取车牌号 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(sdf.format(new Date())); log.error(String.format(" ---->收到定位数据:%s",JSON.toJSONString(gpsMap))); log.error(String.format(" ---->收到定位数据:%s",JSON.toJSONString(gpsMap)));*/ String carId = (String)gpsMap.get("carId"); Map<String,Object> result = ((ArdSyCarServiceImpl)SpringUtils.getBean("ardSyCarServiceImpl")).getArdSyCarAndDeptByCarId(carId);//查询车辆及部门 gpsMap.putAll(result); String ancestors = (String) gpsMap.get("ancestors");//获取父级部门 String[] ancestorsArray = ancestors.split(","); if(ancestorsArray.length == 1){//最高级部门 String deptId = String.valueOf(gpsMap.get("deptId")); Map<String,Map<String,Object>> deptMap = PositionContainer.getDeptPositionMap().get(deptId); if(deptMap == null){ deptMap = new HashMap(); } deptMap.put((String)gpsMap.get("carId"),gpsMap);//首次加入容器,再次去重 PositionContainer.getDeptPositionMap().put(deptId,deptMap); }else{ //加入本部门容器 String deptId = String.valueOf(gpsMap.get("deptId")); Map<String,Map<String,Object>> deptMap = PositionContainer.getDeptPositionMap().get(deptId); if(deptMap == null){ deptMap = new HashMap(); } deptMap.put((String)gpsMap.get("carId"),gpsMap);//首次加入容器,再次去重 PositionContainer.getDeptPositionMap().put(deptId,deptMap); //加入父级部门容器 for(int i = 1;i <= ancestorsArray.length - 1;i++){ String deptIdp = String.valueOf(gpsMap.get(ancestorsArray[i])); Map<String,Map<String,Object>> deptMapp = PositionContainer.getDeptPositionMap().get(deptIdp); if(deptMapp == null){ deptMapp = new HashMap(); } deptMapp.put((String)gpsMap.get("carId"),gpsMap);//首次加入容器,再次去重 PositionContainer.getDeptPositionMap().put(deptIdp,deptMap); } } /** * * 请加入三方集成方的业务逻辑 @@ -79,7 +114,7 @@ }else if("0300".equals(pushMsg.getCmd())) {//报警消息 Map<String,Object> alarmMap = pushMsg.getJsonMap(); String carName = MapUtil.getStrVal(alarmMap, "carName","");//获取车牌号 log.error(String.format(" ---->收到报警数据:%s",JSON.toJSONString(alarmMap))); //log.error(String.format(" ---->收到报警数据:%s",JSON.toJSONString(alarmMap))); /** * * 请加入三方集成方的业务逻辑 @@ -88,7 +123,7 @@ }else if("0401".equals(pushMsg.getCmd())) {//透传消息 Map<String,Object> dataMap = pushMsg.getJsonMap(); String carName = MapUtil.getStrVal(dataMap, "carName","");//获取车牌号 log.error(String.format(" ---->收到透传数据:%s",JSON.toJSONString(dataMap))); //log.error(String.format(" ---->收到透传数据:%s",JSON.toJSONString(dataMap))); /** * * 请加入三方集成方的业务逻辑 @@ -100,7 +135,7 @@ public void sendMassage() { try { PushClientImplPosition client = new PushClientImplPosition(); client.setLog(true);//是否打印明文 client.setLog(false);//是否打印明文 client.setHost(this.ip);//服务器IP client.setPort(10100);//服务器端口 client.setUserName(this.userId);//系统用户名 ard-work/src/main/java/com/ruoyi/sy/mapper/ArdSyCarMapper.java
@@ -1,6 +1,8 @@ package com.ruoyi.sy.mapper; import java.util.List; import java.util.Map; import com.ruoyi.sy.domain.ArdSyCar; /** @@ -73,4 +75,9 @@ * @return */ List<ArdSyCar> carListById(String id); /** * 根据车辆id查询三一车辆及对应部门 */ public Map<String, Object> getArdSyCarAndDeptByCarId(String carId); } ard-work/src/main/java/com/ruoyi/sy/service/IArdSyCarService.java
@@ -83,4 +83,14 @@ public String uploadCarPicture(String id, MultipartFile carPicture); List<ArdSyCar> carListById(String id); /** * 根据车辆id查询三一车辆及对应部门 */ public Map<String,Object> getArdSyCarAndDeptByCarId(String carId); /** * 根据部门发送车辆实时位置 */ public void sendArdSyCarPosition(); } ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java
@@ -8,13 +8,18 @@ import java.util.function.Predicate; import java.util.stream.Collectors; import com.alibaba.fastjson.JSON; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.common.websocket.util.WebSocketUtils; import com.ruoyi.device.hiksdk.config.MinioClientSingleton; import com.ruoyi.device.hiksdk.util.minio.MinioUtils; import com.ruoyi.sy.domain.ArdSyUser; import com.ruoyi.sy.gps31.PositionContainer; import com.ruoyi.sy.mapper.ArdSyUserMapper; import com.ruoyi.system.domain.SysConfig; import com.ruoyi.system.mapper.SysConfigMapper; import com.ruoyi.system.mapper.SysUserMapper; import com.ruoyi.utils.httpclient.SYCarClient; import io.minio.GetPresignedObjectUrlArgs; import io.minio.ListObjectsArgs; @@ -29,6 +34,8 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import static com.ruoyi.common.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS; /** * 三一车辆Service业务层处理 @@ -46,6 +53,9 @@ @Resource private ArdSyUserMapper ardSyUserMapper; @Resource private SysUserMapper userMapper; /** @@ -324,8 +334,30 @@ } } @Override public List<ArdSyCar> carListById(String id) { return ardSyCarMapper.carListById(id); } @Override public Map<String, Object> getArdSyCarAndDeptByCarId(String carId) { Map<String, Object> result = ardSyCarMapper.getArdSyCarAndDeptByCarId(carId); return result; } @Override public void sendArdSyCarPosition() { for(String key : ONLINE_USER_SESSIONS.keySet()){ SysUser sysUser = userMapper.selectUserById(key); String deptId = String.valueOf(sysUser.getDeptId()); Map<String,Map<String,Object>> map = PositionContainer.getDeptPositionMap().get(deptId); List<Map<String,Object>> positionList = (List<Map<String, Object>>) map.values(); if(positionList.size() != 0){ Map<Integer,Object> data = new HashMap(); data.put(30000,positionList); WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(key), JSON.toJSONString(positionList)); } } } } ard-work/src/main/resources/mapper/sy/ArdSyCarMapper.xml
@@ -105,4 +105,12 @@ <select id="carListById" parameterType="String" resultMap="ArdSyCarResult"> select * from ard_sy_car where id = #{id} </select> <select id="getArdSyCarAndDeptByCarId" parameterType="String" resultType="java.util.Map"> select asc0.id,asc0.car_id as "carId",coalesce(asc0.car_model,'') as "carModel", coalesce(asc0.car_type,'') as "carType",coalesce(asc0.car_brand,'') as "carBrand", asc0.dept_id as "deptId",asc0.car_picture as "carPicture",sd.ancestors, sd.dept_name as "deptName" from ard_sy_car asc0 inner join sys_dept sd on asc0.dept_id = sd.dept_id where asc0.car_id = #{carId} </select> </mapper>