| | |
| | | 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; |
| | |
| | | import com.ruoyi.common.core.redis.RedisCache; |
| | | import com.ruoyi.common.utils.SecurityUtils; |
| | | import com.ruoyi.common.utils.uuid.IdUtils; |
| | | 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; |
| | |
| | | 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; |
| | |
| | | RedisCache redisCache; |
| | | @Resource |
| | | private ArdSyCarDayMapper ardSyCarDayMapper; |
| | | |
| | | @Value("${minio.endpoint}") |
| | | private String minioEndpoint; |
| | | |
| | | private Map<Integer, Map<String, String>> logInMap = new HashMap(); |
| | | |
| | |
| | | objectNames.add(ardSyCar.getCarPicture().split("/sycar/")[1]); |
| | | } |
| | | } |
| | | MinioUtils.removeObjects("sycar", objectNames); |
| | | MinioUtil.removeObjects("sycar", objectNames); |
| | | return ardSyCarMapper.deleteArdSyCarByIds(ids); |
| | | } |
| | | |
| | |
| | | |
| | | @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; |
| | |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | }*/ |
| | | listObjetcName.add(map); |
| | | } |
| | | return listObjetcName; |
| | | } catch (Exception ex) { |
| | | ex.printStackTrace(); |
| | | //log.error("minio获取桶下对象异常:" + ex.getMessage()); |
| | | } |
| | | } |
| | |
| | | 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(); |
| | |
| | | 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 |
| | |
| | | .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); |
| | |
| | | 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); |
| | | } |
| | | } |
| | |
| | | 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()); |
| | |
| | | /** |
| | | * 获取附近范围内的车辆信息 |
| | | */ |
| | | |
| | | @Override |
| | | public List<Map<String, Object>> getNearCar(SchedulingParam param) { |
| | | Double longitude = param.getLongitude(); |
| | |
| | | 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); |
| | | filteredList.add(carMap); // 将满足条件的车辆添加到筛选列表中 |
| | | } |
| | | } |
| | | 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; |
| | | } |
| | | } |