package com.ruoyi.sy.service.impl;
|
|
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;
|
import java.util.stream.Collectors;
|
|
import com.alibaba.fastjson.JSON;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.dtflys.forest.annotation.Var;
|
import com.github.pagehelper.PageInfo;
|
import com.ruoyi.app.application.domain.ArdAppApplication;
|
import com.ruoyi.app.application.mapper.ArdAppApplicationMapper;
|
import com.ruoyi.app.position.mapper.ArdAppPositionMapper;
|
import com.ruoyi.common.core.domain.AjaxResult;
|
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.sy.domain.ArdAccessFence;
|
import com.ruoyi.sy.mapper.ArdTankLockMapper;
|
import com.ruoyi.sy.param.ArdSyCarParam;
|
import com.ruoyi.sy.vo.ArdSyCarVo;
|
import com.ruoyi.system.mapper.SysDeptMapper;
|
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.minio.MinioUtil;
|
import com.ruoyi.utils.websocket.util.WebSocketUtils;
|
import com.ruoyi.sy.domain.ArdSyUser;
|
import com.ruoyi.sy.gps31.PositionContainer;
|
import com.ruoyi.sy.mapper.ArdSyUserMapper;
|
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.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;
|
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;
|
import com.ruoyi.sy.service.IArdSyCarService;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.annotation.Resource;
|
|
import static com.ruoyi.utils.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS;
|
|
/**
|
* 三一车辆Service业务层处理
|
*
|
* @author ard
|
* @date 2023-06-26
|
*/
|
@Service
|
@Slf4j(topic = "sy")
|
public class ArdSyCarServiceImpl implements IArdSyCarService {
|
@Resource
|
private ArdSyCarMapper ardSyCarMapper;
|
|
@Resource
|
private SysConfigMapper sysConfigMapper;
|
|
@Resource
|
private ArdSyUserMapper ardSyUserMapper;
|
|
@Resource
|
private SysUserMapper userMapper;
|
|
@Resource
|
private SYClient sYClient;
|
@Resource
|
RedisCache redisCache;
|
@Resource
|
private ArdSyCarDayMapper ardSyCarDayMapper;
|
|
@Resource
|
private ArdAppApplicationMapper ardAppApplicationMapper;
|
|
@Resource
|
private SysDeptMapper sysDeptMapper;
|
|
@Resource
|
private ArdTankLockMapper ardTankLockMapper;
|
|
@Value("${minio.endpoint}")
|
private String minioEndpoint;
|
|
private Map<Integer, Map<String, String>> logInMap = new HashMap();
|
|
private Map<String, Timer> userCarTimerMap = new HashMap();
|
|
/**
|
* 查询三一车辆
|
*
|
* @param id 三一车辆主键
|
* @return 三一车辆
|
*/
|
@Override
|
public ArdSyCar selectArdSyCarById(String id) {
|
return ardSyCarMapper.selectArdSyCarById(id);
|
}
|
|
/**
|
* 查询三一车辆列表
|
*
|
* @param ardSyCar 三一车辆
|
* @return 三一车辆
|
*/
|
@Override
|
public List<ArdSyCar> selectArdSyCarList(ArdSyCar ardSyCar) {
|
return ardSyCarMapper.selectArdSyCarList(ardSyCar);
|
}
|
|
@Override
|
public AjaxResult ardSyCarList(ArdSyCarParam ardSyCarParam,Map<String,Object> result) {
|
QueryWrapper<ArdSyCar> queryWrapper = new QueryWrapper<>();
|
queryWrapper.like(ardSyCarParam.getCarBrand()!=null,"car_brand",ardSyCarParam.getCarBrand())
|
.like(ardSyCarParam.getCarType()!=null,"car_type",ardSyCarParam.getCarType());
|
List<ArdSyCar> ardSyCars = ardSyCarMapper.selectList(queryWrapper);
|
List<ArdSyCarVo> ardSyCarVoList = new ArrayList<>();
|
if(((String)result.get("code")).equals("200")){
|
List<Map<String,Object>> list = (List<Map<String, Object>>) result.get("data");
|
for (int i = 0; i < ardSyCars.size(); i++) {
|
ArdSyCar ardSyCar = ardSyCars.get(i);
|
String carId = ardSyCar.getCarId();
|
for (int j = 0; j < list.size(); j++) {
|
String carId31 = (String) list.get(j).get("carId");
|
if(carId.equals(carId31)){
|
ArdSyCarVo ardSyCarVo = new ArdSyCarVo();
|
ardSyCarVo.setId(ardSyCar.getId());
|
ardSyCarVo.setCarId(carId);
|
ardSyCarVo.setCarBrand(ardSyCar.getCarBrand());
|
ardSyCarVo.setCarModel(ardSyCar.getCarModel());
|
ardSyCarVo.setCarPicture(ardSyCar.getCarPicture());
|
ardSyCarVo.setCarType(ardSyCar.getCarType());
|
ardSyCarVo.setDeptId(ardSyCar.getDeptId());
|
ardSyCarVo.setRemark(ardSyCar.getRemark());
|
ardSyCarVo.setCarPlate((String) list.get(j).get("carPlate"));
|
ardSyCarVoList.add(ardSyCarVo);
|
break;
|
}
|
}
|
}
|
if(ardSyCarParam.getCarPlate()!=null){
|
List<ArdSyCarVo> newList = new ArrayList<>();
|
for (int i = 0; i < ardSyCarVoList.size(); i++) {
|
String carPlate = ardSyCarVoList.get(i).getCarPlate();
|
if(!carPlate.contains(ardSyCarParam.getCarPlate())){
|
newList.add(ardSyCarVoList.get(i));
|
}
|
}
|
ardSyCarVoList.removeAll(newList);
|
}
|
return AjaxResult.success(new PageInfo<>(ardSyCarVoList));
|
}else {
|
return AjaxResult.error("31平台连接失败,车牌号获取失败!",new PageInfo<>(ardSyCars));
|
}
|
}
|
|
/**
|
* 新增三一车辆
|
*
|
* @param ardSyCar 三一车辆
|
* @return 结果
|
*/
|
@Override
|
public int insertArdSyCar(ArdSyCar ardSyCar) {
|
return ardSyCarMapper.insertArdSyCar(ardSyCar);
|
}
|
|
/**
|
* 修改三一车辆
|
*
|
* @param ardSyCar 三一车辆
|
* @return 结果
|
*/
|
@Override
|
public int updateArdSyCar(ArdSyCar ardSyCar) {
|
return ardSyCarMapper.updateArdSyCar(ardSyCar);
|
}
|
|
/**
|
* 批量删除三一车辆
|
*
|
* @param ids 需要删除的三一车辆主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteArdSyCarByIds(String[] ids) {
|
List<ArdSyCar> result = ardSyCarMapper.selectArdSyCarByIds(ids);
|
List<String> objectNames = new ArrayList();
|
for (ArdSyCar ardSyCar : result) {
|
if (ardSyCar.getCarPicture() != null && !ardSyCar.getCarPicture().equals("")) {
|
objectNames.add(ardSyCar.getCarPicture().split("/sycar/")[1]);
|
}
|
}
|
MinioUtil.removeObjects("sycar", objectNames);
|
try{
|
return ardSyCarMapper.deleteArdSyCarByIds(ids);
|
}finally {
|
List<String> carIds = new ArrayList();
|
for(ArdSyCar ardSyCar : result){
|
carIds.add(ardSyCar.getCarId());
|
}
|
ardTankLockMapper.deleteArdTankLockAndWallByCarIds(carIds);
|
}
|
|
}
|
|
/**
|
* 删除三一车辆信息
|
*
|
* @param id 三一车辆主键
|
* @return 结果
|
*/
|
@Override
|
public int deleteArdSyCarById(String id) {
|
return ardSyCarMapper.deleteArdSyCarById(id);
|
}
|
|
/**
|
* 获取未挂接权限的三一车辆
|
*/
|
@Override
|
public Map<String, Object> getArdSyCarNoRight(String userId) {
|
SysConfig config = new SysConfig();
|
config.setConfigKey("syCarPT");
|
List<SysConfig> sysConfigResult = sysConfigMapper.selectConfigList(config);
|
String syURL = "";
|
Map<String, Object> result = new HashMap();
|
if (sysConfigResult.size() == 0) {
|
result.put("data", "三一车辆url没有录入");
|
result.put("code", "500");
|
return result;
|
} else {
|
syURL = sysConfigResult.get(0).getConfigValue();
|
ArdSyUser ardSyUserPara = new ArdSyUser();
|
ardSyUserPara.setSysUserId(userId);
|
List<ArdSyUser> ardSyUserList = ardSyUserMapper.selectArdSyUserList(ardSyUserPara);
|
if (ardSyUserList.size() == 0) {
|
result.put("data", "用户未挂接三一车辆");
|
result.put("code", "500");
|
return result;
|
} else {
|
ArdSyUser ardSyUser = ardSyUserList.get(0);
|
//Map<String,Object> LogInResult = SYCarClient.logIn(syURL,ardSyUser.getUserId(), ardSyUser.getPassword());
|
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> carListMap = SYCarClient.getCarList(syURL,sessionId);
|
Map<String, Object> carListMap = sYClient.getCarList(syURL, sessionId);
|
if (((String) carListMap.get("rspCode")).equals("1")) {
|
List<Map<String, Object>> list = (List<Map<String, Object>>) carListMap.get("list");
|
ArdSyCar ardSyCar = new ArdSyCar();
|
List<ArdSyCar> ardSyCarList = ardSyCarMapper.selectArdSyCarList(ardSyCar);
|
List<String> carIdList = new ArrayList();
|
for (ArdSyCar innerArdSyCar : ardSyCarList) {
|
carIdList.add(innerArdSyCar.getCarId());
|
}
|
|
List<Map<String, Object>> carList = list.stream().filter(new Predicate<Map<String, Object>>() {
|
@Override
|
public boolean test(Map<String, Object> map) {
|
return !carIdList.contains((String) map.get("carId"));
|
}
|
}).collect(Collectors.toList());
|
result.put("data", carList);
|
result.put("code", "200");
|
return result;
|
} else {
|
result.put("data", "三一车辆平台出错");
|
result.put("code", "500");
|
return result;
|
}
|
}
|
}
|
}
|
|
@Override
|
public Map<String, Object> getArdSyCarAll(String userId) {
|
SysConfig config = new SysConfig();
|
config.setConfigKey("syCarPT");
|
List<SysConfig> sysConfigResult = sysConfigMapper.selectConfigList(config);
|
String syURL = "";
|
Map<String, Object> result = new HashMap();
|
if (sysConfigResult.size() == 0) {
|
result.put("data", "三一车辆url没有录入");
|
result.put("code", "500");
|
return result;
|
} else {
|
syURL = sysConfigResult.get(0).getConfigValue();
|
ArdSyUser ardSyUserPara = new ArdSyUser();
|
ardSyUserPara.setSysUserId(userId);
|
List<ArdSyUser> ardSyUserList = ardSyUserMapper.selectArdSyUserList(ardSyUserPara);
|
if (ardSyUserList.size() == 0) {
|
result.put("data", "用户未挂接三一车辆");
|
result.put("code", "500");
|
return result;
|
} else {
|
ArdSyUser ardSyUser = ardSyUserList.get(0);
|
//Map<String,Object> LogInResult = SYCarClient.logIn(syURL,ardSyUser.getUserId(), ardSyUser.getPassword());
|
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> carListMap = SYCarClient.getCarList(syURL,sessionId);
|
Map<String, Object> carListMap = sYClient.getCarList(syURL, sessionId);
|
if (((String) carListMap.get("rspCode")).equals("1")) {
|
List<Map<String, Object>> list = (List<Map<String, Object>>) carListMap.get("list");
|
result.put("data", list);
|
result.put("code", "200");
|
return result;
|
} else {
|
result.put("data", "三一车辆平台出错");
|
result.put("code", "500");
|
return result;
|
}
|
}
|
}
|
}
|
|
@Override
|
public List<Map<String, String>> getAllCarModel() {
|
boolean exsit = MinioUtil.exitsBucket("system");
|
if (exsit) {
|
List<Map<String, String>> listObjetcName = new ArrayList<>();
|
try {
|
//Iterable<Result<Item>> myObjects = MinioUtil.getObjectsByBucket("sycar","carmodel");
|
Iterable<Result<Item>> myObjects = MinioUtil.getObjectsByBucket("system","model/car");
|
for (Result<Item> result : myObjects) {
|
Item item = result.get();
|
Map<String, String> map = new HashMap();
|
String[] strArr = item.objectName().split("/");
|
try{
|
String carType = strArr[2];
|
if(!carType.contains(".")){
|
map.put("carType", carType);
|
map.put("carModel", "system/" + item.objectName());
|
listObjetcName.add(map);
|
}
|
}catch(Exception e){
|
e.printStackTrace();
|
}
|
}
|
return listObjetcName;
|
} catch (Exception ex) {
|
ex.printStackTrace();
|
//log.error("minio获取桶下对象异常:" + ex.getMessage());
|
}
|
}
|
return null;
|
}
|
|
@Override
|
public String uploadCarPicture(String id, MultipartFile carPicture) {
|
if (id != null && !id.equals("")) {//id为非必要
|
ArdSyCar ardSyCarr = ardSyCarMapper.selectArdSyCarById(id);
|
List<String> objectNames = new ArrayList();
|
if (ardSyCarr.getCarPicture() != null || !ardSyCarr.getCarPicture().equals("")) {
|
String objectName = ardSyCarr.getCarPicture().split("/sycar/")[1];
|
objectNames.add(objectName);
|
MinioUtil.removeObjects("sycar", objectNames);
|
}
|
}
|
//判断文件是否为空
|
if (null == carPicture || 0 == carPicture.getSize()) {
|
return "";
|
}
|
boolean exsit = MinioUtil.exitsBucket("sycar");
|
if (!exsit) {
|
boolean bucket = MinioUtil.createBucket("sycar");
|
}
|
//文件名
|
String originalFilename = carPicture.getOriginalFilename();
|
//新的文件名
|
String fileName = "carpicture/" + IdUtils.fastSimpleUUID() + "_" + originalFilename;
|
try {
|
InputStream inputStream = carPicture.getInputStream();
|
/*上传对象*/
|
// 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
|
.builder()
|
.bucket("sycar")
|
.object(fileName)
|
.method(Method.GET)
|
.build();
|
//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);
|
ardSyCar.setCarPicture(ObjectUrl);
|
ardSyCarMapper.updateArdSyCar(ardSyCar);
|
}
|
return ObjectUrl;
|
} catch (Exception ex) {
|
return "";
|
}
|
}
|
|
// @Override
|
// public List<ArdSyCar> getArdSyCarWithRightByCarIdList(List<String> carIdList) {
|
// List<ArdSyCar> result = ardSyCarMapper.getArdSyCarWithRightByCarIdList(carIdList);
|
// return result;
|
// }
|
|
|
@Override
|
public Results carListById(String id) {
|
try {
|
List<ArdSyCar> list = ardSyCarMapper.carListById(id);
|
if (list.size() > 0) {
|
ArdSyCar ardSyCar = list.get(0);
|
return Results.succeed(ardSyCar);
|
} else {
|
return Results.succeed();
|
}
|
} catch (Exception e) {
|
return Results.error(e.toString());
|
}
|
}
|
|
@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 carModel = this.minioEndpoint + "/" + (String) result.get("carModel");
|
result.put("carModel", carModel);
|
}
|
}*/
|
if(result.get("carModel") != null || "".equals(result.get("carModel"))){
|
String carModel = this.minioEndpoint + "/" + (String) result.get("carModel");
|
result.put("carModel", carModel);
|
}
|
}
|
return result;
|
}
|
|
@Override
|
public void sendArdSyCarPosition() {
|
for (String key : ONLINE_USER_SESSIONS.keySet()) {
|
if (PositionContainer.getUserPositionMap().keySet().contains(key)) {//当追踪的车辆容器包含此用户Id,则实时位置推送需要剔除该车辆
|
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);
|
}
|
}
|
}
|
|
@Override
|
public void sendArdSyCarAlarmByCarId(String carId, Map<String, Object> data) {
|
List<SysUser> result = userMapper.getSysUserByCarId(carId);
|
for (SysUser sysUser : result) {
|
WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(sysUser.getUserId()), JSON.toJSONString(data));
|
}
|
}
|
|
/**
|
* 根据用户获取三一列表
|
*
|
* @return
|
*/
|
@Override
|
public Map<String, Object> allListByUser(ArdSyUser ardSyUser, String syURL, String usersId, List<Long> deptList) {
|
Map<String, Object> result0 = new HashMap();
|
//判断关联表是否有数据
|
if (ardSyUser != null) {
|
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"));
|
try {
|
result0 = sYClient.getTeamList(syURL, result.get("userId"), result.get("sessionId"));
|
} catch (Exception e) {
|
Map<String, Object> map = new HashMap();
|
map.put("rspCode", 0);
|
map.put("list", new ArrayList());
|
return map;
|
}
|
QueryWrapper<ArdSyCar> queryWrapper = new QueryWrapper<>();
|
queryWrapper.in("dept_id", deptList);
|
List<ArdSyCar> carListTable = ardSyCarMapper.selectList(queryWrapper);
|
int online = 0;
|
for (Map<String, Object> map : (List<Map<String, Object>>) result0.get("list")) {
|
Map<String, Object> resultMap = sYClient.getTeamCarList(syURL, (String) map.get("teamId"), result.get("sessionId"));
|
List<Map<String, Object>> carList = (List<Map<String, Object>>) resultMap.get("carList");
|
if(carList.size()>0){
|
for (int i = 0; i < carList.size(); i++) {
|
String carId = (String) carList.get(i).get("carId");
|
Boolean isCar = false;
|
for (int j = 0; j < carListTable.size(); j++) {
|
ArdSyCar ardSyCar = carListTable.get(j);
|
if (carId.equals(ardSyCar.getCarId())) {
|
isCar = true;
|
break;
|
}
|
}
|
if(!isCar){
|
carList.remove(carList.get(i));
|
}
|
}
|
}
|
for (Map<String, Object> m : carList) {
|
if (((String) m.get("stateCn")).contains("在线")) {
|
online = online + 1;
|
} else {
|
continue;
|
}
|
}
|
// for (Map<String, Object> m : (List<Map<String, Object>>) result0.get("list")) {
|
// if (((String) m.get("teamId")).equals(((String) map.get("teamId")))) {
|
// map.put("count", Integer.parseInt((String) m.get("carNum")));
|
// }
|
// }
|
map.put("count", carList.size());
|
map.put("online", online);
|
online = 0;
|
}
|
} else {
|
result0.put("列表为空!", "无关联账号!");
|
}
|
return result0;
|
}
|
|
@Override
|
public List<Map<String, String>> getCarList(ArdSyUser ardSyUser, String syURL, String usersId, String teamId) {
|
List<Map<String, String>> list = new ArrayList<>();
|
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"));
|
//查询该teamId下的车辆数据
|
Map<String, Object> carList31 = new HashMap();
|
carList31 = sYClient.getCarList1(syURL, teamId, result.get("userId"), result.get("sessionId"));
|
//拿到车辆数据
|
list = (List) carList31.get("list");
|
if (list.isEmpty()) {
|
return list;
|
} else {
|
List<String> carIdList = new ArrayList();
|
//所有carId
|
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;
|
}
|
|
/**
|
* 根据dept集合查询出所有对应的carId
|
*
|
* @param deptList
|
* @return
|
*/
|
@Override
|
public List<Map<String, String>> carIdByDeptList(List<Long> deptList, List<Map<String, String>> list) {
|
QueryWrapper<ArdSyCar> queryWrapper = new QueryWrapper<>();
|
queryWrapper.in("dept_id", deptList);
|
List<ArdSyCar> carList = ardSyCarMapper.selectList(queryWrapper);
|
//对比把匹配到的数据添加到list中
|
for (int i = 0; i < list.size(); i++) {
|
String carId = list.get(i).get("carId");
|
Boolean isCar = false;
|
for (int j = 0; j < carList.size(); j++) {
|
ArdSyCar ardSyCar = carList.get(j);
|
if (carId.equals(ardSyCar.getCarId())) {
|
/*String url = "";
|
if (ardSyCar.getCarPicture() != null) {
|
if (!ardSyCar.getCarPicture().equals("")) {
|
url = ardSyCar.getCarPicture().split("sycar")[0];
|
}
|
}*/
|
list.get(i).put("carModel", this.minioEndpoint + "/" + ardSyCar.getCarModel());//zns
|
//m.put("carModel",ardSyCar.getCarModel());
|
list.get(i).put("carTypeArd", ardSyCar.getCarType());
|
list.get(i).put("carBrand", ardSyCar.getCarBrand());
|
list.get(i).put("carPicture", ardSyCar.getCarPicture());
|
isCar = true;
|
break;
|
}
|
}
|
if(!isCar){
|
list.remove(list.get(i));
|
}
|
}
|
return list;
|
}
|
|
@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 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();
|
String password31 = ardSyUser.getPassword();
|
String passwordMd5 = DigestUtils.md5Hex(password31);
|
Map<String, Object> result1 = sYClient.logIn(syURL, passwordMd5, username31);
|
Map<String, Object> result0 = new HashMap();
|
//result0 = sYClient.getCarGPSTrack(syURL, carId, startTime, endTime, maxSpeed, (String) result1.get("sessionId"));
|
try {
|
result0 = getCarGPSTrack(syURL, carId, startTime, endTime, maxSpeed, (String) result1.get("sessionId"));
|
} catch (Exception e) {
|
return Results.error("查询历史数据数量过多导致超时,请缩小范围查询!");
|
}
|
List<Map<String, Object>> list = (List<Map<String, Object>>) result0.get("list");
|
if (list.isEmpty()) {
|
return Results.succeed();
|
} else {
|
for (Map<String, Object> m : list) {
|
String alarmStts = (String) m.get("alarmStts");
|
Map<String, List<String>> alarmMap = getInfo("alarm", alarmStts);
|
m.putAll(alarmMap);
|
String carStts = (String) m.get("carStts");
|
Map<String, List<String>> carMap = getInfo("car", carStts);
|
m.putAll(carMap);
|
String sgnStts = (String) m.get("sgnStts");
|
Map<String, List<String>> sgnMap = getInfo("sgn", sgnStts);
|
m.putAll(sgnMap);
|
}
|
return Results.succeed(list);
|
}
|
}
|
|
public static Map<String,Object> getCarGPSTrack(String syURL,String carId,String startTime,String endTime,String maxSpeed,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 + "&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();
|
}
|
}
|
|
|
public Map<String, List<String>> getInfo(String type, String stts) {
|
if (stts.isEmpty()) {
|
return new HashMap<>();
|
}
|
String[] alarmTypes = {"紧急报警", "超速报警", "疲劳驾驶", "危险预警", "GNSS 模块发生故障", "GNSS 天线未接或被剪断", "GNSS 天线短路",
|
"终端主电源欠压", "终端主电源掉电", "终端LCD 或显示器故障", "TTS 模块故障", "摄像头故障", "道路运输证IC 卡模块故障", "超速预警",
|
"疲劳驾驶预警", "违规行驶报警", "胎压预警", "右转盲区异常报警", "当天累计驾驶超时", "超时停车", "进出区域", "进出路线", "路段行驶时间不足/过长",
|
"路线偏离报警", "车辆VSS 故障", "车辆油量异常", "车辆被盗", "车辆非法点火", "车辆非法位移", "碰撞预警", "侧翻预警", "非法开门报警"};
|
|
String[] carTypes89 = {"空车", "半载", "保留", "满载"};
|
|
Object[] carTypes = {"ACC开", "定位", "南纬", "西经", "停运状态", "经纬度已经保密插件加密", "保留", "保留", carTypes89, "车辆油路断开", "车门加锁",
|
"车辆电路断开", "门1开(前门)", "门2开(中门)", "门3开(后门", "门4开(驾驶席门", "门5开", "使用GPS 卫星进行定位", "使用北斗卫星进行定位",
|
"使用GLONASS卫星进行定位", "使用Galileo卫星进行定位", "保留", "保留", "保留", "保留", "保留", "保留", "保留", "保留", "保留", "保留"};
|
|
String[] sgnTypes = {"近光灯信号", "远光灯信号", "右转向灯信号", "左转向灯信号", "制动信号", "倒档信号", "雾灯信号", "示廓灯", "喇叭信号", "空调状态",
|
"空挡信号", "缓速器工作", "ABS 工作", "加热器工作", "离合器状态", "保留", "保留", "保留", "保留", "保留", "保留", "保留", "保留", "保留", "保留", "保留",
|
"保留", "保留", "保留", "保留", "保留", "保留"};
|
//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;
|
}
|
}
|
String[] sttsBinArray = sttsBin.split("");
|
switch (type) {
|
case "alarm":
|
List<String> alarmTypeArray = new ArrayList();
|
for (int i = 0; i < sttsBinArray.length; i++) {
|
if (sttsBinArray[i].equals("1")) {
|
alarmTypeArray.add(alarmTypes[i]);
|
}
|
}
|
Map<String, List<String>> alarmMap = new HashMap();
|
alarmMap.put(type, alarmTypeArray);
|
return alarmMap;
|
case "car":
|
List<String> carTypeArray = new ArrayList();
|
for (int i = 0; i < sttsBinArray.length; i++) {
|
if (i <= 7 || i >= 10) {
|
if (sttsBinArray[i].equals("1")) {
|
carTypeArray.add(alarmTypes[i]);
|
}
|
} else if (i == 8) {
|
switch (sttsBinArray[8] + sttsBinArray[9]) {
|
case "00":
|
carTypeArray.add(carTypes89[0]);
|
break;
|
case "01":
|
carTypeArray.add(carTypes89[1]);
|
break;
|
case "10":
|
carTypeArray.add(carTypes89[2]);
|
break;
|
case "11":
|
carTypeArray.add(carTypes89[3]);
|
break;
|
default:
|
break;
|
}
|
} else if (i == 9) {
|
continue;
|
} else {
|
break;
|
}
|
}
|
Map<String, List<String>> carMap = new HashMap();
|
List<String> carTypeArray0 = new ArrayList();
|
for (String str : carTypeArray) {
|
if (!str.equals("保留")) {
|
carTypeArray0.add(str);
|
}
|
}
|
carMap.put(type, carTypeArray0);
|
return carMap;
|
case "sgn":
|
List<String> sgnTypeArray = new ArrayList();
|
for (int i = 0; i < sttsBinArray.length; i++) {
|
if (sttsBinArray[i].equals("1")) {
|
sgnTypeArray.add(alarmTypes[i]);
|
}
|
}
|
Map<String, List<String>> sgnMap = new HashMap();
|
List<String> sgnTypeArray0 = new ArrayList();
|
for (String str : sgnTypeArray) {
|
if (!str.equals("保留")) {
|
sgnTypeArray0.add(str);
|
}
|
}
|
sgnMap.put(type, sgnTypeArray0);
|
return sgnMap;
|
default:
|
return new HashMap<String, List<String>>();
|
}
|
}
|
|
@Override
|
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();
|
String password31 = ardSyUser.getPassword();
|
String passwordMd5 = DigestUtils.md5Hex(password31);
|
Map<String, Object> result1 = sYClient.logIn(syURL, passwordMd5, username31);
|
Map<String, String> result = new HashMap();
|
result.put("userId", username31);
|
result.put("sessionId", (String) result1.get("sessionId"));
|
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,"黑E12401",1);
|
}
|
|
|
@Override
|
public Results chaseCarByCarId(String usersId, String carId, String cycle) {
|
ArdSyUser ardSyUser = ardSyUserMapper.userById(usersId);
|
String userId ="";
|
String password = "";
|
if(ardSyUser != null){
|
userId = ardSyUser.getUserId();
|
password = DigestUtils.md5Hex(ardSyUser.getPassword());
|
}else{
|
return Results.error("没有挂接三一车辆用户");
|
}
|
List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
|
String syURL = "";
|
if(syURLResult.size() != 0){
|
syURL = syURLResult.get(0).getConfigValue();
|
}else{
|
return Results.error("三一车辆地址未录入");
|
}
|
|
String sessionId = "";
|
for(String key : ONLINE_USER_SESSIONS.keySet()){
|
if(key.startsWith(usersId + "_")){
|
sessionId = key;
|
}
|
}
|
if(sessionId.equals("")){//没有session就返回失败
|
return Results.error("追踪失败");
|
}
|
try {
|
if (cycle.equals("0")) {
|
if (userCarTimerMap.get(usersId) != null) {
|
userCarTimerMap.get(usersId).cancel();
|
userCarTimerMap.remove(usersId);
|
PositionContainer.getUserPositionMap().remove(usersId);
|
Map<String,Object> loginResult = sYClient.logIn(syURL, password, userId);
|
String sySessionId = (String) loginResult.get("sessionId");
|
String params = "%7B%220020%22:%220%22,%220029%22:%2230%22%7d";
|
sYClient.changePositionSendMode(syURL, carId,104,"CmdSetParam",params,sySessionId);//停止追踪,改为定时30s推送
|
System.out.println("停止追踪");
|
}
|
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);
|
|
Map<String,Object> loginResult = sYClient.logIn(syURL, password, userId);
|
String sySessionId = (String) loginResult.get("sessionId");
|
List<SysConfig> distanceSYResult = sysConfigMapper.selectByType("31time");
|
String time = "";
|
if(distanceSYResult.size() != 0){
|
time = distanceSYResult.get(0).getConfigValue();
|
}else{
|
return Results.error("三一车辆定时未录入");
|
}
|
String params = "%7B%220020%22:%220%22,%220029%22:%22"+time+"%22%7d";
|
sYClient.changePositionSendMode(syURL, carId,104,"CmdSetParam",params,sySessionId);//开始追踪,改为定时推送
|
|
Map<String, Object> position = PositionContainer.getCarPositionMap().get(carId);//查询当前车辆位置
|
if (position != null) {
|
if (position.size() != 0) {
|
position.put("elng",position.get("lng"));
|
position.put("elat",position.get("lat"));
|
Map<String, Map<String, Object>> data = new HashMap();
|
data.put("31000", position);
|
WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(sessionId), JSON.toJSONString(data));
|
}
|
}
|
|
Date date = new Date();
|
Timer carPositionTimer = new Timer(sessionId);//定时推送实时位置
|
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);
|
String sessionId = Thread.currentThread().getName();
|
if(ONLINE_USER_SESSIONS.get(sessionId) == null){//用户离线释放资源
|
if (userCarTimerMap.get(usersId) != null) {
|
userCarTimerMap.get(usersId).cancel();
|
userCarTimerMap.remove(usersId);
|
PositionContainer.getUserPositionMap().remove(usersId);
|
|
ArdSyUser ardSyUser = ardSyUserMapper.userById(usersId);
|
String userId ="";
|
String password = "";
|
if(ardSyUser != null){
|
userId = ardSyUser.getUserId();
|
password = ardSyUser.getPassword();
|
}
|
List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
|
String syURL = "";
|
if(syURLResult.size() != 0){
|
syURL = syURLResult.get(0).getConfigValue();
|
}
|
if(!userId.equals("") && !password.equals("") && !syURL.equals("")){
|
Map<String,Object> loginResult = sYClient.logIn(syURL, password, userId);
|
String sySessionId = (String) loginResult.get("sessionId");
|
String params = "%7B%220020%22:%220%22,%220029%22:%2230%22%7d";
|
sYClient.changePositionSendMode(syURL, carId,104,"CmdSetParam",params,sySessionId);//停止追踪,改为定时30s
|
}
|
System.out.println("用户离线,停止追踪");
|
}
|
}
|
WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(sessionId), 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);
|
|
Map<String,Object> loginResult = sYClient.logIn(syURL, password, userId);
|
String sySessionId = (String) loginResult.get("sessionId");
|
List<SysConfig> distanceSYResult = sysConfigMapper.selectByType("31time");
|
String time = "";
|
if(distanceSYResult.size() != 0){
|
time = distanceSYResult.get(0).getConfigValue();
|
}else{
|
return Results.error("三一车辆定时未录入");
|
}
|
String params = "%7B%220020%22:%220%22,%220029%22:%22"+time+"%22%7d";
|
sYClient.changePositionSendMode(syURL, carId,104,"CmdSetParam",params,sySessionId);//开始追踪,改为定时推送
|
|
Map<String, Object> position = PositionContainer.getCarPositionMap().get(carId);//查询当前车辆位置
|
if (position != null) {
|
if (position.size() != 0) {
|
position.put("elng",position.get("lng"));
|
position.put("elat",position.get("lat"));
|
Map<String, Map<String, Object>> data = new HashMap();
|
data.put("31000", position);
|
WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(sessionId), JSON.toJSONString(data));
|
}
|
}
|
|
Date date = new Date();
|
Timer carPositionTimer = new Timer(sessionId);//定时推送实时位置
|
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);
|
String sessionId = Thread.currentThread().getName();
|
if(ONLINE_USER_SESSIONS.get(sessionId) == null){//用户离线释放资源
|
if (userCarTimerMap.get(usersId) != null) {
|
userCarTimerMap.get(usersId).cancel();
|
userCarTimerMap.remove(usersId);
|
PositionContainer.getUserPositionMap().remove(usersId);
|
|
ArdSyUser ardSyUser = ardSyUserMapper.userById(usersId);
|
String userId ="";
|
String password = "";
|
if(ardSyUser != null){
|
userId = ardSyUser.getUserId();
|
password = ardSyUser.getPassword();
|
}
|
List<SysConfig> syURLResult = sysConfigMapper.selectByType("syCarPT");
|
String syURL = "";
|
if(syURLResult.size() != 0){
|
syURL = syURLResult.get(0).getConfigValue();
|
}
|
if(!userId.equals("") && !password.equals("") && !syURL.equals("")){
|
Map<String,Object> loginResult = sYClient.logIn(syURL, password, userId);
|
String sySessionId = (String) loginResult.get("sessionId");
|
String params = "%7B%220020%22:%220%22,%220029%22:%2230%22%7d";
|
sYClient.changePositionSendMode(syURL, carId,104,"CmdSetParam",params,sySessionId);//停止追踪,改为定时30s
|
}
|
System.out.println("用户离线,停止追踪");
|
}
|
}
|
WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(sessionId), 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();
|
}
|
}
|
|
/**
|
* 获取附近范围内的车辆信息
|
*/
|
@Override
|
public List<Map<String, Object>> getNearCar(SchedulingParam param) {
|
try {
|
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");
|
if(carGPSMap.size()>0) {
|
Double lng = Double.valueOf((String) carGPSMap.get(0).get("lng"));
|
Double lat = Double.valueOf((String) carGPSMap.get(0).get("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;
|
}catch (Exception e)
|
{
|
log.error("获取附近范围内的车辆信息异常:"+e.getMessage());
|
return null;
|
}
|
}
|
/**
|
* 获取范围内的车辆信息(多边形)
|
*/
|
@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);
|
}
|
|
@Override
|
public Map<String, Object> getAlarmHPfmCountDetail(String sessionId, String usersId, String carId, String startTime, String endTime, String syURL) {
|
// System.out.println("sessionId------"+sessionId+",usersId-----"+usersId+",carId-----"+carId+",startTime----"+startTime+",endTime----"+endTime+",syURL----"+syURL);
|
return sYClient.getAlarmHPfmCountDetail(syURL,carId,sessionId,startTime,endTime);
|
}
|
|
@Override
|
public Map<String, Object> getOnlineSYCarPosition(String soilderId) {
|
Map<String,Object> result = new HashMap();
|
ArdSyUser ardSyUserPara = new ArdSyUser();
|
ardSyUserPara.setSysUserId(soilderId);
|
List<ArdSyUser> ardSyUserList = ardSyUserMapper.selectArdSyUserList(ardSyUserPara);
|
if(ardSyUserList.size() == 0){
|
result.put("code","0");
|
result.put("msg","登录用户未挂接三一车辆账号");
|
result.put("SYCarPositionList",new ArrayList());
|
return result;
|
}
|
ArdAppApplication ardAppApplicationPara = new ArdAppApplication();
|
ardAppApplicationPara.setSoilderId(soilderId);
|
ardAppApplicationPara.setApplicationType("SYCar");
|
ardAppApplicationPara.setState("1");
|
List<ArdAppApplication> ardAppApplicationList = ardAppApplicationMapper.selectArdAppApplicationList(ardAppApplicationPara);
|
if(ardAppApplicationList.size() == 0){
|
result.put("code","0");
|
result.put("msg","登录用户未经指挥端同意");
|
result.put("SYCarPositionList",new ArrayList());
|
return result;
|
}
|
SysUser sysUser = userMapper.selectUserById(soilderId);//获取系统用户
|
List<Long> deptIdList = new ArrayList();
|
deptIdList.add(sysUser.getDeptId());
|
deptIdList = getOwnAndChildrenDeptIdList(deptIdList,new ArrayList());//递归查询下属部门主键
|
List<String> carIdList = ardSyCarMapper.selectArdSyCarByDeptIds(deptIdList);
|
String carIds = "";
|
for(String carId : carIdList){
|
carIds = carIds + carId + ",";
|
}
|
carIds = carIds.substring(0,carIds.length() - 1);
|
String syURL = "";
|
List<SysConfig> sysConfigResult = sysConfigMapper.selectByType("syCarPT");
|
if(sysConfigResult.size() > 0){
|
syURL = sysConfigResult.get(0).getConfigValue();
|
}else{
|
result.put("code","0");
|
result.put("msg","三一车辆url没有录入");
|
result.put("SYCarPositionList",new ArrayList());
|
return result;
|
}
|
String passwordMd5 = DigestUtils.md5Hex(ardSyUserList.get(0).getPassword());
|
Map<String,Object> syLoginResult = sYClient.logIn(syURL, passwordMd5, ardSyUserList.get(0).getUserId());
|
String sessionId = (String) syLoginResult.get("sessionId");
|
Map<String,Object> carNearPositionResult = sYClient.getCarNearPositionByCarId(syURL, carIds, ardSyUserList.get(0).getUserId(),sessionId);
|
if(((String)carNearPositionResult.get("rspCode")).equals("1")){
|
result.put("code","1");
|
result.put("msg","三一车辆查询成功");
|
List<Map<String,Object>> SYCarPositionList = (List<Map<String, Object>>) carNearPositionResult.get("list");
|
//筛选在线
|
SYCarPositionList = SYCarPositionList.stream().filter(map -> ((String)map.get("stateCn")).startsWith("在线")).collect(Collectors.toList());
|
for(Map<String,Object> sycar : SYCarPositionList){
|
Map<String,Object> map = ardSyCarMapper.getArdSyCarAndDeptByCarId((String)sycar.get("carId"));
|
sycar.putAll(map);
|
}
|
result.put("SYCarPositionList",SYCarPositionList);
|
return result;
|
}else{
|
result.put("code","0");
|
result.put("msg","三一车辆查询失败");
|
result.put("SYCarPositionList",new ArrayList());
|
return result;
|
}
|
}
|
|
public List<Long> getOwnAndChildrenDeptIdList(List<Long> deptIdList,List<Long> deptIdListr){
|
deptIdListr.addAll(deptIdList);
|
List<Long> result = sysDeptMapper.getChildrenDeptIdList(deptIdList);
|
if(result.size() != 0){
|
deptIdListr.addAll(result);
|
result = getOwnAndChildrenDeptIdList(result,deptIdListr);
|
}
|
deptIdListr = deptIdListr.stream().distinct().collect(Collectors.toList());
|
return deptIdListr;
|
}
|
}
|