From 85681b3f89d2287b948870f79a2eef780480b6a7 Mon Sep 17 00:00:00 2001 From: Administrator <1144154118@qq.com> Date: 星期二, 08 八月 2023 11:02:53 +0800 Subject: [PATCH] 日子返回格式 --- ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java | 437 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 379 insertions(+), 58 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java index 50a72bc..eb3fa5c 100644 --- a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java +++ b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java @@ -1,21 +1,24 @@ package com.ruoyi.sy.service.impl; +import java.io.IOException; import java.io.InputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +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; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.common.core.domain.entity.SysUser; -import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.uuid.IdUtils; -import com.ruoyi.common.websocket.util.WebSocketUtils; +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; @@ -30,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; @@ -39,7 +46,7 @@ import javax.annotation.Resource; -import static com.ruoyi.common.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS; +import static com.ruoyi.utils.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS; /** * 涓変竴杞﹁締Service涓氬姟灞傚鐞� @@ -64,7 +71,12 @@ @Resource private SYClient sYClient; + @Resource + private ArdSyCarDayMapper ardSyCarDayMapper; + private Map<Integer,Map<String,String>> logInMap = new HashMap(); + + private Map<String, Timer> userCarTimerMap = new HashMap(); /** * 鏌ヨ涓変竴杞﹁締 @@ -359,19 +371,58 @@ @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; } @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); - if(map != null){ - Map<String,Object> data = new HashMap(); - data.put("30000", map.values()); - WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(key), JSON.toJSONString(data)); + if(PositionContainer.getUserPositionMap().keySet().contains(key)){//褰撹拷韪殑杞﹁締瀹瑰櫒鍖呭惈姝ょ敤鎴稩d锛屽垯瀹炴椂浣嶇疆鎺ㄩ�侀渶瑕佸墧闄よ杞﹁締 + SysUser sysUser = userMapper.selectUserById(key); + if(sysUser == null){ + //return; + continue; + } + String deptId = String.valueOf(sysUser.getDeptId()); + Map<String,Map<String,Object>> map = PositionContainer.getDeptPositionMap().get(deptId); + List<String> carIdList = new ArrayList(); + carIdList.addAll(PositionContainer.getUserPositionMap().get(key).keySet()); + String carId = carIdList.get(0); + map.remove(carId); + if(map != null){ + Map<String,Object> data = new HashMap(); + data.put("30000", map.values()); + WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(key), JSON.toJSONString(data)); + } + }else{ + SysUser sysUser = userMapper.selectUserById(key); + if(sysUser == null){ + //return; + continue; + } + String deptId = String.valueOf(sysUser.getDeptId()); + Map<String,Map<String,Object>> map = PositionContainer.getDeptPositionMap().get(deptId); + if(map != null){ + Map<String,Object> data = new HashMap(); + data.put("30000", map.values()); + WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(key), JSON.toJSONString(data)); + } + } + } + for(String userId : userCarTimerMap.keySet()){//鐢ㄦ埛绂荤嚎鍚庡皢杞﹁締杩借釜璧勬簮閲婃斁 + if(!ONLINE_USER_SESSIONS.keySet().contains(userId)){ + userCarTimerMap.get(userId).cancel(); + userCarTimerMap.remove(userId); + PositionContainer.getUserPositionMap().remove(userId); } } } @@ -452,49 +503,53 @@ carList31 = sYClient.getCarList1(syURL,teamId, result.get("userId"),result.get("sessionId")); //鎷垮埌杞﹁締鏁版嵁 list= (List) carList31.get("list"); - List<String> carIdList = new ArrayList(); - //鎵�鏈塩arId - for(Map<String,String> m : list){ - carIdList.add(m.get("carId")); - } - if(carIdList.size() == 0){ - Map<String,String> map0 = new HashMap(); - map0.put("list", "{}"); - map0.put("rspCode", "1"); - list.add(map0); + if(list.isEmpty()){ return list; - } - //娣诲姞杞﹁締灞炴�� - for(Map<String,String> m : list){ - switch (m.get("state")) { - case "1": - m.put("carState", "绂荤嚎-浠庢湭鎶ュ畾浣�");break; - case "2": - m.put("carState", "绂荤嚎-娆犺垂");break; - case "3": - m.put("carState", "绂荤嚎");break; - case "4": - m.put("carState", "绂荤嚎-鎶ヨ");break; - case "5": - m.put("carState", "鍦ㄧ嚎-浠庢湭鎶ュ畾浣�");break; - case "6": - m.put("carState", "鍦ㄧ嚎-娆犺垂");break; - case "7": - m.put("carState", "鍦ㄧ嚎-琛岄┒");break; - case "8": - m.put("carState", "鍦ㄧ嚎-琛岄┒-鎶ヨ");break; - case "9": - m.put("carState", "鍦ㄧ嚎-鍋滆溅-ACC鍏�");break; - case "10": - m.put("carState", "鍦ㄧ嚎-鍋滆溅-ACC寮�");break; - case "11": - m.put("carState", "鍦ㄧ嚎-鍋滆溅-ACC鍏�-鎶ヨ");break; - case "12": - m.put("carState", "鍦ㄧ嚎-鍋滆溅-ACC寮�-鎶ヨ");break; - case "13": - m.put("carState", "鍦ㄧ嚎-鏃犳晥瀹氫綅");break; - default: - break; + }else { + List<String> carIdList = new ArrayList(); + //鎵�鏈塩arId + for(Map<String,String> m : list){ + carIdList.add(m.get("carId")); + } + if(carIdList.size() == 0){ + Map<String,String> map0 = new HashMap(); + map0.put("list", "{}"); + map0.put("rspCode", "1"); + list.add(map0); + return list; + } + //娣诲姞杞﹁締灞炴�� + for(Map<String,String> m : list){ + switch (m.get("state")) { + case "1": + m.put("carState", "绂荤嚎-浠庢湭鎶ュ畾浣�");break; + case "2": + m.put("carState", "绂荤嚎-娆犺垂");break; + case "3": + m.put("carState", "绂荤嚎");break; + case "4": + m.put("carState", "绂荤嚎-鎶ヨ");break; + case "5": + m.put("carState", "鍦ㄧ嚎-浠庢湭鎶ュ畾浣�");break; + case "6": + m.put("carState", "鍦ㄧ嚎-娆犺垂");break; + case "7": + m.put("carState", "鍦ㄧ嚎-琛岄┒");break; + case "8": + m.put("carState", "鍦ㄧ嚎-琛岄┒-鎶ヨ");break; + case "9": + m.put("carState", "鍦ㄧ嚎-鍋滆溅-ACC鍏�");break; + case "10": + m.put("carState", "鍦ㄧ嚎-鍋滆溅-ACC寮�");break; + case "11": + m.put("carState", "鍦ㄧ嚎-鍋滆溅-ACC鍏�-鎶ヨ");break; + case "12": + m.put("carState", "鍦ㄧ嚎-鍋滆溅-ACC寮�-鎶ヨ");break; + case "13": + m.put("carState", "鍦ㄧ嚎-鏃犳晥瀹氫綅");break; + default: + break; + } } } return list; @@ -516,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()); @@ -655,4 +717,263 @@ return new HashMap<String,List<String>>(); } } + + @Override + public Results getCarGPSBycarId(String usersId,String carId,String syURL,ArdSyUser ardSyUser){ + Map<String, String> result = logInMap.get(Integer.parseInt(usersId)); + //31鐢ㄦ埛鍚嶅瘑鐮� + String username31 = ardSyUser.getUserId(); + String password31 = ardSyUser.getPassword(); + String passwordMd5 = DigestUtils.md5Hex(password31); + Map<String, Object> result1 = sYClient.logIn(syURL,passwordMd5, username31); + result = new HashMap(); + result.put("userId", username31); + result.put("sessionId", (String) result1.get("sessionId")); + Map<String,Object> result0 = new HashMap(); + result0 = sYClient.getCarNearPositionByCarId(syURL,carId,result.get("userId"),result.get("sessionId")); + return Results.succeed(result0); + } + + @Override + public Results chaseCarByCarId(String usersId, String carId, String cycle) { + try{ + /*Map<String,Map<String,Object>> map = new HashMap(); + map.put(carId,new HashMap()); + PositionContainer.getUserPositionMap().put(usersId,map);*/ + if(cycle.equals("0")){ + if(userCarTimerMap.get(usersId) != null){ + userCarTimerMap.get(usersId).cancel(); + userCarTimerMap.remove(usersId); + PositionContainer.getUserPositionMap().remove(usersId); + } + return Results.succeed("鍋滄杩借釜"); + }else{ + if(userCarTimerMap.get(usersId) != null){ + 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); + 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); + 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("寮�濮嬭拷韪�"); + } + } + }catch(Exception e){ + e.printStackTrace(); + 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(); + } + } } -- Gitblit v1.9.3