zhangnaisong
2023-07-22 2a83dc06a43087f7ca6bebd5440530b2b3c16b85
三一车辆消息打印取消提交
已添加1个文件
已修改6个文件
141 ■■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/sy/controller/ArdSyCarController.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/gps31/PositionContainer.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/gps31/PushClientImplPosition.java 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/mapper/ArdSyCarMapper.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/IArdSyCarService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/sy/ArdSyCarMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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
¶Ô±ÈÐÂÎļþ
@@ -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>