From 92dba8e44a911c92832ecc22e4c98968409d5c68 Mon Sep 17 00:00:00 2001 From: aijinhui <aijinhui> Date: 星期二, 14 十一月 2023 15:01:37 +0800 Subject: [PATCH] 远程封印 --- ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java | 202 +++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 166 insertions(+), 36 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 bf19a74..2efbc05 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 @@ -2,9 +2,12 @@ import java.io.IOException; import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; +import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.function.Predicate; @@ -16,24 +19,23 @@ import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.sy.domain.ArdAccessFence; +import com.ruoyi.utils.gis.GisUtil; +import com.ruoyi.utils.gis.Point; import com.ruoyi.scheduling.domian.SchedulingParam; import com.ruoyi.sy.domain.ArdSyCarDay; import com.ruoyi.sy.mapper.ArdSyCarDayMapper; -import com.ruoyi.utils.tools.GisTool; +import com.ruoyi.utils.minio.MinioUtil; import com.ruoyi.utils.websocket.util.WebSocketUtils; -import com.ruoyi.device.hiksdk.config.MinioClientSingleton; -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; -import com.ruoyi.system.domain.SysConfig; +import com.ruoyi.common.core.domain.entity.SysConfig; import com.ruoyi.system.mapper.SysConfigMapper; import com.ruoyi.system.mapper.SysUserMapper; import com.ruoyi.utils.forest.SYClient; import com.ruoyi.utils.result.Results; import io.minio.GetPresignedObjectUrlArgs; -import io.minio.ListObjectsArgs; -import io.minio.PutObjectArgs; import io.minio.Result; import io.minio.http.Method; import io.minio.messages.Item; @@ -43,6 +45,7 @@ import okhttp3.Response; import okhttp3.ResponseBody; import org.apache.commons.codec.digest.DigestUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import com.ruoyi.sy.mapper.ArdSyCarMapper; import com.ruoyi.sy.domain.ArdSyCar; @@ -80,6 +83,9 @@ RedisCache redisCache; @Resource private ArdSyCarDayMapper ardSyCarDayMapper; + + @Value("${minio.endpoint}") + private String minioEndpoint; private Map<Integer, Map<String, String>> logInMap = new HashMap(); @@ -144,7 +150,7 @@ objectNames.add(ardSyCar.getCarPicture().split("/sycar/")[1]); } } - MinioUtils.removeObjects("sycar", objectNames); + MinioUtil.removeObjects("sycar", objectNames); return ardSyCarMapper.deleteArdSyCarByIds(ids); } @@ -261,17 +267,19 @@ @Override public List<Map<String, String>> getAllCarModel() { - boolean exsit = MinioUtils.exitsBucket("sycar"); + boolean exsit = MinioUtil.exitsBucket("sycar"); if (exsit) { List<Map<String, String>> listObjetcName = new ArrayList<>(); try { - ListObjectsArgs listObjectsArgs = ListObjectsArgs.builder().prefix("carmodel/").bucket("sycar").build(); - Iterable<Result<Item>> myObjects = MinioClientSingleton.getMinioClient().listObjects(listObjectsArgs); + // ListObjectsArgs listObjectsArgs = ListObjectsArgs.builder().prefix("carmodel/").bucket("sycar").build(); + Iterable<Result<Item>> myObjects = MinioUtil.getObjectsByBucket("sycar","carmodel"); for (Result<Item> result : myObjects) { Item item = result.get(); Map<String, String> map = new HashMap(); + String[] strArr = item.objectName().split("/"); + map.put("carType", strArr[1]); map.put("carModel", "sycar/" + item.objectName()); - switch (item.objectName()) { + /*switch (item.objectName()) { case "carmodel/aodi.glb": map.put("carType", "濂ヨ开"); break; @@ -310,11 +318,12 @@ break; default: break; - } + }*/ listObjetcName.add(map); } return listObjetcName; } catch (Exception ex) { + ex.printStackTrace(); //log.error("minio鑾峰彇妗朵笅瀵硅薄寮傚父锛�" + ex.getMessage()); } } @@ -329,16 +338,16 @@ if (ardSyCarr.getCarPicture() != null || !ardSyCarr.getCarPicture().equals("")) { String objectName = ardSyCarr.getCarPicture().split("/sycar/")[1]; objectNames.add(objectName); - MinioUtils.removeObjects("sycar", objectNames); + MinioUtil.removeObjects("sycar", objectNames); } } //鍒ゆ柇鏂囦欢鏄惁涓虹┖ if (null == carPicture || 0 == carPicture.getSize()) { return ""; } - boolean exsit = MinioUtils.exitsBucket("sycar"); + boolean exsit = MinioUtil.exitsBucket("sycar"); if (!exsit) { - boolean bucket = MinioUtils.createBucket("sycar"); + boolean bucket = MinioUtil.createBucket("sycar"); } //鏂囦欢鍚� String originalFilename = carPicture.getOriginalFilename(); @@ -347,14 +356,15 @@ try { InputStream inputStream = carPicture.getInputStream(); /*涓婁紶瀵硅薄*/ - PutObjectArgs putObjectArgs = PutObjectArgs - .builder() - .bucket("sycar") - .object(fileName) - .stream(inputStream, carPicture.getSize(), -1) - .contentType(carPicture.getContentType()) - .build(); - MinioClientSingleton.getMinioClient().putObject(putObjectArgs); +// PutObjectArgs putObjectArgs = PutObjectArgs +// .builder() +// .bucket("sycar") +// .object(fileName) +// .stream(inputStream, carPicture.getSize(), -1) +// .contentType(carPicture.getContentType()) +// .build(); +// MinioConfig.getMinioClient().putObject(putObjectArgs); + MinioUtil.uploadObject("sycar",fileName,inputStream,carPicture.getSize(),carPicture.getContentType()); inputStream.close(); /*鑾峰彇url*/ GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs @@ -363,8 +373,8 @@ .object(fileName) .method(Method.GET) .build(); - String presignedObjectUrl = MinioClientSingleton.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs); - String ObjectUrl = presignedObjectUrl.substring(0, presignedObjectUrl.indexOf("?")); + //String presignedObjectUrl = MinioConfig.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs); + String ObjectUrl = MinioUtil.getBucketObjectUrl("sycar", fileName); if (id != null && !id.equals("")) {//id涓洪潪蹇呰 ArdSyCar ardSyCar = new ArdSyCar(); ardSyCar.setId(id); @@ -405,8 +415,9 @@ 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"); + /*String url = ((String) result.get("carPicture")).split("sycar")[0]; + String carModel = url + (String) result.get("carModel");*/ + String carModel = this.minioEndpoint + "/" + (String) result.get("carModel"); result.put("carModel", carModel); } } @@ -617,13 +628,13 @@ for (int i = 0; i < carList.size(); i++) { ArdSyCar ardSyCar = carList.get(i); if (carId.equals(ardSyCar.getCarId())) { - String url = ""; + /*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", this.minioEndpoint + "/" + ardSyCar.getCarModel());//zns //m.put("carModel",ardSyCar.getCarModel()); m.put("carTypeArd", ardSyCar.getCarType()); m.put("carBrand", ardSyCar.getCarBrand()); @@ -771,7 +782,7 @@ } @Override - public Results getCarGPSBycarId(String usersId, String carId, String syURL, ArdSyUser ardSyUser) { + public Map<String, Object> getCarGPSBycarId(String usersId, String carId, String syURL, ArdSyUser ardSyUser) { Map<String, String> result = logInMap.get(Integer.parseInt(usersId)); //31鐢ㄦ埛鍚嶅瘑鐮� String username31 = ardSyUser.getUserId(); @@ -781,10 +792,58 @@ 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); + return sYClient.getCarNearPositionByCarId(syURL, carId, result.get("userId"), result.get("sessionId")); } + + @Override + public Map<String, Object> getCarPicture(String carId, String syURL, String sessionId) { + return sYClient.getCarPicture(syURL, carId, sessionId); + } + + @Override + public String getSessionId(String syURL,ArdSyUser ardSyUser) { + String username31 = ardSyUser.getUserId(); + String password31 = ardSyUser.getPassword(); + String passwordMd5 = DigestUtils.md5Hex(password31); + System.out.println(passwordMd5); + Map<String, Object> result1 = sYClient.logIn(syURL, passwordMd5, username31); + return (String) result1.get("sessionId"); + } + + @Override + public Map<String, Object> sendCmd(String userId,String syURL, String sessionId, String carId, List<String> channelList) throws UnsupportedEncodingException { +// for (int i = 0; i < channelList.size(); i++) { + Map<String,String> params = new HashMap(); + params.put("channel", channelList.get(1));//閫夋嫨閫氶亾1 + params.put("interval", "0");//姣忛殧0s鐓т竴娆� + params.put("photoNum", "1");//鐓�1寮� + params.put("action", "0");//涓婁紶妯″紡 + String paramsStr = com.alibaba.fastjson2.JSON.toJSONString(params); + paramsStr = URLEncoder.encode(paramsStr,"UTF-8"); + System.out.println("鎷嶇収鍙傛暟锛�"+paramsStr); + return sYClient.sendCmd(syURL,userId,carId,301,"MediaTake",paramsStr,sessionId); +// } +// return sendCmdMap; + } + + @Override + public Map<String, Object> getPhoto(String syURL, String carId, String sessionId,String startTime) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); + String endTime = sdf.format(new Date()); + System.out.println("寮�濮嬫椂闂达細"+startTime+" 缁撴潫鏃堕棿锛�"+endTime); + return sYClient.getPhoto(syURL,carId,startTime,endTime,sessionId); + } + + @Override + public Map<String, Object> getVideo(String syURL,String carId,ArdSyUser ardSyUser) { + //31鐢ㄦ埛鍚嶅瘑鐮� + String username = ardSyUser.getUserId(); + String password31 = ardSyUser.getPassword(); + String password = DigestUtils.md5Hex(password31); +// Map<String, Object> result1 = sYClient.logIn(syURL, passwordMd5, username31); + return sYClient.getVideo(syURL,username,password,"榛慐12401",1); + } + @Override public Results chaseCarByCarId(String usersId, String carId, String cycle) { @@ -1032,7 +1091,6 @@ /** * 鑾峰彇闄勮繎鑼冨洿鍐呯殑杞﹁締淇℃伅 */ - @Override public List<Map<String, Object>> getNearCar(SchedulingParam param) { Double longitude = param.getLongitude(); @@ -1083,7 +1141,7 @@ List<Map<String, Object>> carGPSMap = (List<Map<String, Object>>) carGPSTrack.get("list"); Double lng = Double.valueOf((String) carGPSMap.get(0).get("lng")); Double lat = Double.valueOf((String) carGPSMap.get(0).get("lat")); - double distance = GisTool.getDistance( new double[]{longitude,latitude}, new double[]{lng, lat}); + double distance = GisUtil.getDistance( new double[]{longitude,latitude}, new double[]{lng, lat}); if (distance <= radius) { carMap.put("longitude",lng); carMap.put("latitude",lat); @@ -1092,4 +1150,76 @@ } return filteredList; } + /** + * 鑾峰彇鑼冨洿鍐呯殑杞﹁締淇℃伅(澶氳竟褰�) + */ + @Override + public List<Map<String, Object>> getNearCarWithPolygon(SchedulingParam param) { + List<Map<String, Object>> filteredList = new ArrayList<>(); + try { + List<Point> partitionLocation = param.getPartitionLocation(); + if (partitionLocation == null) { + log.debug("澶氳竟褰㈠潗鏍囬泦鍚堜负绌�"); + return null; + } + String userId = SecurityUtils.getUserId(); + ArdSyUser syUser = new ArdSyUser(); + syUser.setSysUserId(userId); + List<ArdSyUser> ardSyUserList = ardSyUserMapper.selectArdSyUserList(syUser); + if (ardSyUserList.size() == 0) { + log.debug("鐢ㄦ埛鏈寕鎺ヤ笁涓�杞﹁締"); + return null; + } + ArdSyUser ardSyUser = ardSyUserList.get(0); + String syUrl = redisCache.getCacheObject("sys_config:syCarPT"); + String passwordMd5 = DigestUtils.md5Hex(ardSyUser.getPassword()); + Map<String, Object> LogInResult = sYClient.logIn(syUrl, passwordMd5, ardSyUser.getUserId()); + String sessionId = (String) LogInResult.get("sessionId"); + + Map<String, Object> teamList = sYClient.getTeamList(syUrl, ardSyUser.getUserId(), sessionId); + List<Map<String, Object>> listMap = (List<Map<String, Object>>) teamList.get("list"); + List<Map<String, Object>> allList = new ArrayList<>(); + for (Map<String, Object> team : listMap) { + String teamId = (String) team.get("teamId"); + Map<String, Object> carListMap = sYClient.getCarList1(syUrl, teamId, ardSyUser.getUserId(), sessionId); + if (((String) carListMap.get("rspCode")).equals("1")) { + List<Map<String, Object>> list = (List<Map<String, Object>>) carListMap.get("list"); + allList.addAll(list); + } + } + //杩囨护鍦ㄧ嚎杞﹁締 + List<Map<String, Object>> onlineList = allList.stream() + .filter(map -> !"绂荤嚎".equals(map.get("stateCn"))) + .collect(Collectors.toList()); + + //杩囨护鍗婂緞 + for (Map<String, Object> carMap : onlineList) { + String carId = (String) carMap.get("carId"); + Map<String, Object> carGPSTrack = sYClient.getCarNearPositionByCarId(syUrl, carId, ardSyUser.getUserId(), sessionId); + List<Map<String, Object>> carGPSMap = (List<Map<String, Object>>) carGPSTrack.get("list"); + Double lng = Double.valueOf((String) carGPSMap.get(0).get("lng")); + Double lat = Double.valueOf((String) carGPSMap.get(0).get("lat")); + Point point = new Point(lng,lat); + boolean inPolygon = GisUtil.isInPolygon(point, partitionLocation); + if (inPolygon) { + carMap.put("longitude", lng); + carMap.put("latitude", lat); + filteredList.add(carMap); // 灏嗘弧瓒虫潯浠剁殑杞﹁締娣诲姞鍒扮瓫閫夊垪琛ㄤ腑 + } + } + } + catch (Exception ex) + { + log.error("鑾峰彇鑼冨洿鍐呯殑杞﹁締淇℃伅(澶氳竟褰�)寮傚父:" + ex.getMessage()); + } + return filteredList; + } + + @Override + public List<ArdSyCar> all() { + QueryWrapper<ArdSyCar> queryWrapper = new QueryWrapper<>(); + queryWrapper.ne("reserved_1",""); + return ardSyCarMapper.selectList(queryWrapper); + } + } -- Gitblit v1.9.3