‘liusuyi’
2023-08-17 fb85b1053475a90d902f1dcfd1f1c24b368eabac
ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java
@@ -13,9 +13,13 @@
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.core.redis.RedisCache;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
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.websocket.util.WebSocketUtils;
import com.ruoyi.device.hiksdk.config.MinioClientSingleton;
import com.ruoyi.storage.minio.utils.MinioUtils;
@@ -33,6 +37,7 @@
import io.minio.Result;
import io.minio.http.Method;
import io.minio.messages.Item;
import lombok.extern.slf4j.Slf4j;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
@@ -55,6 +60,7 @@
 * @date 2023-06-26
 */
@Service
@Slf4j(topic = "sy")
public class ArdSyCarServiceImpl implements IArdSyCarService {
    @Resource
    private ArdSyCarMapper ardSyCarMapper;
@@ -70,7 +76,8 @@
    @Resource
    private SYClient sYClient;
    @Resource
    RedisCache redisCache;
    @Resource
    private ArdSyCarDayMapper ardSyCarDayMapper;
@@ -265,18 +272,42 @@
                    Map<String,String> map = new HashMap();
                    map.put("carModel","sycar/" + item.objectName());
                    switch(item.objectName()){
                        case "carmodel/aodi.glb":map.put("carType","奥迪");break;
                        case "carmodel/baolai.glb":map.put("carType","宝来");break;
                        case "carmodel/bieke.glb":map.put("carType","别克");break;
                        case "carmodel/bus1.glb":map.put("carType","大客车");break;
                        case "carmodel/car.glb":map.put("carType","小型车");break;
                        case "carmodel/fire(1).glb":map.put("carType","消防车");break;
                        case "carmodel/fute.glb":map.put("carType","福特");break;
                        case "carmodel/jingche_a.glb":map.put("carType","警车");break;
                        case "carmodel/jiuhu.glb":map.put("carType","救护车");break;
                        case "carmodel/oil.glb":map.put("carType","油罐车");break;
                        case "carmodel/truck.glb":map.put("carType","工程用车");break;
                        case "carmodel/van1.glb":map.put("carType","大货车");break;
                        case "carmodel/aodi.glb":
                            map.put("carType", "奥迪");
                            break;
                        case "carmodel/baolai.glb":
                            map.put("carType", "宝来");
                            break;
                        case "carmodel/bieke.glb":
                            map.put("carType", "别克");
                            break;
                        case "carmodel/bus1.glb":
                            map.put("carType", "大客车");
                            break;
                        case "carmodel/car.glb":
                            map.put("carType", "小型车");
                            break;
                        case "carmodel/fire(1).glb":
                            map.put("carType", "消防车");
                            break;
                        case "carmodel/fute.glb":
                            map.put("carType", "福特");
                            break;
                        case "carmodel/jingche_a.glb":
                            map.put("carType", "警车");
                            break;
                        case "carmodel/jiuhu.glb":
                            map.put("carType", "救护车");
                            break;
                        case "carmodel/oil.glb":
                            map.put("carType", "油罐车");
                            break;
                        case "carmodel/truck.glb":
                            map.put("carType", "工程用车");
                            break;
                        case "carmodel/van1.glb":
                            map.put("carType", "大货车");
                            break;
                        default:
                            break;
                    }
@@ -437,6 +468,7 @@
    /**
     * 根据用户获取三一列表
     *
     * @return
     */
    @Override
@@ -522,31 +554,44 @@
            for(Map<String,String> m : list){
                switch (m.get("state")) {
                    case "1":
                        m.put("carState", "离线-从未报定位");break;
                        m.put("carState", "离线-从未报定位");
                        break;
                    case "2":
                        m.put("carState", "离线-欠费");break;
                        m.put("carState", "离线-欠费");
                        break;
                    case "3":
                        m.put("carState", "离线");break;
                        m.put("carState", "离线");
                        break;
                    case "4":
                        m.put("carState", "离线-报警");break;
                        m.put("carState", "离线-报警");
                        break;
                    case "5":
                        m.put("carState", "在线-从未报定位");break;
                        m.put("carState", "在线-从未报定位");
                        break;
                    case "6":
                        m.put("carState", "在线-欠费");break;
                        m.put("carState", "在线-欠费");
                        break;
                    case "7":
                        m.put("carState", "在线-行驶");break;
                        m.put("carState", "在线-行驶");
                        break;
                    case "8":
                        m.put("carState", "在线-行驶-报警");break;
                        m.put("carState", "在线-行驶-报警");
                        break;
                    case "9":
                        m.put("carState", "在线-停车-ACC关");break;
                        m.put("carState", "在线-停车-ACC关");
                        break;
                    case "10":
                        m.put("carState", "在线-停车-ACC开");break;
                        m.put("carState", "在线-停车-ACC开");
                        break;
                    case "11":
                        m.put("carState", "在线-停车-ACC关-报警");break;
                        m.put("carState", "在线-停车-ACC关-报警");
                        break;
                    case "12":
                        m.put("carState", "在线-停车-ACC开-报警");break;
                        m.put("carState", "在线-停车-ACC开-报警");
                        break;
                    case "13":
                        m.put("carState", "在线-无效定位");break;
                        m.put("carState", "在线-无效定位");
                        break;
                    default:
                        break;
                }
@@ -557,6 +602,7 @@
    /**
     * 根据dept集合查询出所有对应的carId
     *
     * @param deptList
     * @return
     */
@@ -982,4 +1028,66 @@
            return new HashMap();
        }
    }
    /**
     * 获取附近范围内的车辆信息
     */
    @Override
    public List<Map<String, Object>> getNearCar(SchedulingParam param) {
        Double longitude = param.getLongitude();
        Double latitude = param.getLatitude();
        Integer radius = param.getSealingRadius();
        if (longitude == null && latitude == null) {
            log.debug("原点坐标为空");
            return null;
        }
        if (radius == 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());
        List<Map<String, Object>> filteredList = new ArrayList<>();
        //过滤半径
        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"));
            double distance = GisTool.getDistance( new double[]{longitude,latitude}, new double[]{lng, lat});
            if (distance <= radius) {
                filteredList.add(carMap); // 将满足条件的车辆添加到筛选列表中
            }
        }
        return filteredList;
    }
}