From 63edade94bb54e20e622098ce096a66e7cb641cf Mon Sep 17 00:00:00 2001 From: Administrator <1144154118@qq.com> Date: 星期五, 11 八月 2023 17:29:33 +0800 Subject: [PATCH] 巡检计划日历下指定天数打卡记录 --- ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java | 252 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 238 insertions(+), 14 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 f4d6bf2..a57558f 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,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()); @@ -561,8 +591,12 @@ @Override public Results getCarGPSTrack(Map<String,String> map,String syURL, ArdSyUser ardSyUser){ String carId = map.get("carId"); - String startTime = map.get("startTime").replace(" ", "").replace("-", "").replace(":", ""); - String endTime = map.get("endTime").replace(" ", "").replace("-", "").replace(":", ""); + //String startTime = map.get("startTime").replace(" ", "").replace("-", "").replace(":", ""); + //String endTime = map.get("endTime").replace(" ", "").replace("-", "").replace(":", ""); + String time = map.get("time"); + time = time.replace("-", ""); + String startTime = time + "000000"; + String endTime = time +"235959"; String maxSpeed = map.get("maxSpeed"); //31鐢ㄦ埛鍚嶅瘑鐮� String username31 = ardSyUser.getUserId(); @@ -609,8 +643,10 @@ String[] sgnTypes = {"杩戝厜鐏俊鍙�","杩滃厜鐏俊鍙�","鍙宠浆鍚戠伅淇″彿","宸﹁浆鍚戠伅淇″彿","鍒跺姩淇″彿","鍊掓。淇″彿","闆剧伅淇″彿","绀哄粨鐏�","鍠囧彮淇″彿","绌鸿皟鐘舵��", "绌烘尅淇″彿","缂撻�熷櫒宸ヤ綔","ABS 宸ヤ綔","鍔犵儹鍣ㄥ伐浣�","绂诲悎鍣ㄧ姸鎬�","淇濈暀","淇濈暀","淇濈暀","淇濈暀","淇濈暀","淇濈暀","淇濈暀","淇濈暀","淇濈暀","淇濈暀","淇濈暀", "淇濈暀","淇濈暀","淇濈暀","淇濈暀","淇濈暀","淇濈暀"}; - Integer sttsHex = Integer.parseInt(stts, 16); - String sttsBin = Integer.toBinaryString(sttsHex); + //Integer sttsHex = Integer.parseInt(stts, 16); + Long sttsHex = Long.parseLong(stts, 16); + //String sttsBin = Integer.toBinaryString(sttsHex); + String sttsBin = Long.toBinaryString(sttsHex); if(sttsBin.length() < 32){ while(sttsBin.length() < 32){ sttsBin = "0" + sttsBin; @@ -707,9 +743,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 +758,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 +808,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(); + } + } } -- Gitblit v1.9.3