Administrator
2023-08-08 85681b3f89d2287b948870f79a2eef780480b6a7
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java
@@ -1,7 +1,12 @@
package com.ruoyi.sy.service.impl;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@@ -9,9 +14,11 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.sy.domain.ArdSyCarDay;
import com.ruoyi.sy.mapper.ArdSyCarDayMapper;
import com.ruoyi.utils.websocket.util.WebSocketUtils;
import com.ruoyi.device.hiksdk.config.MinioClientSingleton;
import com.ruoyi.device.hiksdk.util.minio.MinioUtils;
import com.ruoyi.storage.minio.utils.MinioUtils;
import com.ruoyi.sy.domain.ArdSyUser;
import com.ruoyi.sy.gps31.PositionContainer;
import com.ruoyi.sy.mapper.ArdSyUserMapper;
@@ -26,6 +33,10 @@
import io.minio.Result;
import io.minio.http.Method;
import io.minio.messages.Item;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.stereotype.Service;
import com.ruoyi.sy.mapper.ArdSyCarMapper;
@@ -59,6 +70,9 @@
    @Resource
    private SYClient sYClient;
    @Resource
    private ArdSyCarDayMapper ardSyCarDayMapper;
    private Map<Integer,Map<String,String>> logInMap = new HashMap();
@@ -357,6 +371,15 @@
    @Override
    public Map<String, Object> getArdSyCarAndDeptByCarId(String carId) {
        Map<String, Object> result = ardSyCarMapper.getArdSyCarAndDeptByCarId(carId);
        if(result != null){
            if(result.get("carPicture") != null){
                if(!((String)result.get("carPicture")).equals("")){
                    String url = ((String)result.get("carPicture")).split("sycar")[0];
                    String carModel = url + (String)result.get("carModel");
                    result.put("carModel",carModel);
                }
            }
        }
        return result;
    }
@@ -548,7 +571,14 @@
            for (int i = 0; i < carList.size(); i++) {
                ArdSyCar ardSyCar = carList.get(i);
                if(carId.equals(ardSyCar.getCarId())){
                    m.put("carModel",ardSyCar.getCarModel());
                    String url = "";
                    if(ardSyCar.getCarPicture() != null){
                        if(!ardSyCar.getCarPicture().equals("")){
                            url = ardSyCar.getCarPicture().split("sycar")[0];
                        }
                    }
                    m.put("carModel",url + ardSyCar.getCarModel());//zns
                    //m.put("carModel",ardSyCar.getCarModel());
                    m.put("carTypeArd",ardSyCar.getCarType());
                    m.put("carBrand",ardSyCar.getCarBrand());
                    m.put("carPicture",ardSyCar.getCarPicture());
@@ -707,9 +737,9 @@
    @Override
    public Results chaseCarByCarId(String usersId, String carId, String cycle) {
        try{
            Map<String,Map<String,Object>> map = new HashMap();
            /*Map<String,Map<String,Object>> map = new HashMap();
            map.put(carId,new HashMap());
            PositionContainer.getUserPositionMap().put(usersId,map);
            PositionContainer.getUserPositionMap().put(usersId,map);*/
            if(cycle.equals("0")){
                if(userCarTimerMap.get(usersId) != null){
                    userCarTimerMap.get(usersId).cancel();
@@ -722,30 +752,44 @@
                    userCarTimerMap.get(usersId).cancel();
                    userCarTimerMap.remove(usersId);
                    PositionContainer.getUserPositionMap().remove(usersId);
                    Map<String,Map<String,Object>> map = new HashMap();
                    map.put(carId,new HashMap());
                    PositionContainer.getUserPositionMap().put(usersId,map);
                    Date date = new Date();
                    Timer carPositionTimer = new Timer();//定时推送实时位置
                    TimerTask carPositionTask =new TimerTask(){
                        @Override
                        public void run(){
                            Map<String,Object> position = PositionContainer.getUserPositionMap().get(usersId).get(carId);
                            Map<String,Map<String,Object>> data = new HashMap();
                            data.put("31000",position);
                            WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(usersId), JSON.toJSONString(data));
                            if(position != null){
                                if(position.size() != 0){
                                    Map<String,Map<String,Object>> data = new HashMap();
                                    data.put("31000",position);
                                    WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(usersId), JSON.toJSONString(data));
                                }
                            }
                        }
                    };
                    carPositionTimer.scheduleAtFixedRate(carPositionTask,date,Integer.parseInt(cycle));//启用
                    this.userCarTimerMap.put(usersId,carPositionTimer);
                    return Results.succeed("开始追踪");
                }else{
                    Map<String,Map<String,Object>> map = new HashMap();
                    map.put(carId,new HashMap());
                    PositionContainer.getUserPositionMap().put(usersId,map);
                    Date date = new Date();
                    Timer carPositionTimer = new Timer();//定时推送实时位置
                    TimerTask carPositionTask =new TimerTask(){
                        @Override
                        public void run(){
                            Map<String,Object> position = PositionContainer.getUserPositionMap().get(usersId).get(carId);
                            Map<String,Map<String,Object>> data = new HashMap();
                            data.put("31000",position);
                            WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(usersId), JSON.toJSONString(data));
                            if(position != null){
                                if(position.size() != 0){
                                    Map<String,Map<String,Object>> data = new HashMap();
                                    data.put("31000",position);
                                    WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(usersId), JSON.toJSONString(data));
                                }
                            }
                        }
                    };
                    carPositionTimer.scheduleAtFixedRate(carPositionTask,date,Integer.parseInt(cycle));//启用
@@ -758,4 +802,178 @@
            return Results.error("追踪失败");
        }
    }
    /*@Override
    public Results getExistTraceByCarIdAndMonth(String userId, String carId, String time) {
        SysConfig config = new SysConfig();
        config.setConfigKey("syCarPT");
        List<SysConfig> sysConfigResult = sysConfigMapper.selectConfigList(config);
        String syURL = "";
        if(sysConfigResult.size() == 0){
            return Results.succeed("三一车辆url没有录入");
        }else{
            syURL = sysConfigResult.get(0).getConfigValue();
            ArdSyUser ardSyUserPara = new ArdSyUser();
            ardSyUserPara.setSysUserId(userId);
            List<ArdSyUser> ardSyUserList = ardSyUserMapper.selectArdSyUserList(ardSyUserPara);
            if(ardSyUserList.size() == 0){
                return Results.succeed("用户未挂接三一车辆");
            }else{
                ArdSyUser ardSyUser = ardSyUserList.get(0);
                String passwordMd5 = DigestUtils.md5Hex(ardSyUser.getPassword());
                Map<String,Integer> existTraceMap = getExistTraceByCarIdAndMonth(syURL,ardSyUser.getUserId(),passwordMd5,carId,time);
                return Results.succeed(existTraceMap);
            }
        }
    }*/
    @Override
    public Results getExistTraceByCarIdAndMonth(String userId, String carId, String time) {
        List<ArdSyCarDay> result = ardSyCarDayMapper.selectArdSyCarDayByCarIdAndDay(carId,time + "%");
        List<String> list = new ArrayList();
        for(ArdSyCarDay ardSyCarDay : result){
//            list.add(ardSyCarDay.getDay().split("-")[2]);
            list.add(ardSyCarDay.getDay());
        }
        return Results.succeed(list);
    }
    public Map<String,Integer> getExistTraceByCarIdAndMonth(String url,String usersId,String password,String carId,String time){
        Map<String,Object> LogInResult = sYClient.logIn(url,password,usersId);
        String sessionId = (String) LogInResult.get("sessionId");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
        Date date = null;
        try {
            date = sdf.parse(time);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);//获取该月天数
        Map<String,Integer> existTraceMap = new HashMap();
        ExecutorService newCachedThreadPoll = Executors.newCachedThreadPool();
        for (int i = 1; i <= maxDay; i = i + 7) {
            int temp = i;
            String finalTime = time.replace("-","");
            String finalsyURL = url;
            newCachedThreadPoll.execute(new Runnable(){
                @Override
                public void run() {
                    int temp0 = temp + 6;
                    if(temp0 > maxDay){
                        temp0 = maxDay;
                    }
                    for (int j = temp; j <= temp0; j++) {
                        if(j <= 9){
                            existTraceMap.put("0" + String.valueOf(j), -1);
                        }else{
                            existTraceMap.put(String.valueOf(j), -1);
                        }
                    }
                    if(temp <= 9){
                        if(temp0 <= 9){
                            String startTime = finalTime + "0" + temp + "000000";
                            String endTime = finalTime + "0" + temp0 + "235959";
                            Map<String,Object> result = getCarGPSTrack(finalsyURL,carId,startTime,endTime,sessionId);
                            String rspCode = (String)result.get("rspCode");
                            if(rspCode.equals("1")){
                                List<Map<String,Object>> list = (List<Map<String, Object>>) result.get("list");
                                for(Map<String,Object> m : list){
                                    String time = (String) m.get("time");
                                    time = time.split(" ")[0];
                                    time = time.split("-")[2];
                                    existTraceMap.put(time, 1);
                                }
                            }
                        }else{
                            String startTime = finalTime + "0" + temp + "000000";
                            String endTime = finalTime + temp0 + "235959";
                            Map<String,Object> result = getCarGPSTrack(finalsyURL,carId,startTime,endTime,sessionId);
                            String rspCode = (String)result.get("rspCode");
                            if(rspCode.equals("1")){
                                List<Map<String,Object>> list = (List<Map<String, Object>>) result.get("list");
                                for(Map<String,Object> m : list){
                                    String time = (String) m.get("time");
                                    time = time.split(" ")[0];
                                    time = time.split("-")[2];
                                    existTraceMap.put(time, 1);
                                }
                            }
                        }
                    }else{
                        String startTime = finalTime + temp + "000000";
                        String endTime = finalTime + temp0 + "235959";
                        Map<String,Object> result = getCarGPSTrack(finalsyURL,carId,startTime,endTime,sessionId);
                        String rspCode = (String)result.get("rspCode");
                        if(rspCode.equals("1")){
                            List<Map<String,Object>> list = (List<Map<String, Object>>) result.get("list");
                            for(Map<String,Object> m : list){
                                String time = (String) m.get("time");
                                time = time.split(" ")[0];
                                time = time.split("-")[2];
                                existTraceMap.put(time, 1);
                            }
                        }
                    }
                    for(int j = temp; j <= temp0; j++){
                        String key = "";
                        if(j <= 9){
                            key = "0" + j;
                        }else{
                            key = String.valueOf(j);
                        }
                        if(existTraceMap.get(key) == -1){
                            existTraceMap.put(key, 0);
                        }
                    }
                }
            });
        }
        while(true){
            if(!existTraceMap.values().contains(-1)){
                if(existTraceMap.size() == maxDay){
                    break;
                }
            }
        }
        try {
            return existTraceMap;
        } finally {
            newCachedThreadPoll.shutdown();
        }
    }
    public static Map<String,Object> getCarGPSTrack(String syURL,String carId,String startTime,String endTime,String sessionId){
        OkHttpClient okHttpClient = new OkHttpClient();
        Request request = new Request.Builder()
                .url(syURL + "/gps-web/api/get_gps_h.jsp?carId="+carId+"&startTime="+startTime+"&endTime="+endTime+"&filter0=true&maxSpeed=&stopLong=5&queryAlarm=false&userId=yanshi&loginType=user&loginWay=android&loginLang=zh_CN&appDevId=&sessionId="+sessionId)
                .build();
        Response response = null;
        try {
            response = okHttpClient.newCall(request).execute();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        response.headers(); //响应头
        ResponseBody responseBody = response.body();
        try {
            String message = responseBody.string();// 响应体
            Map<String,Object> map = (Map<String, Object>) JSON.parse(message);
            //System.out.println(message);
            return map;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return new HashMap();
        }
    }
}