package org.springblade.modules.location.service.impl; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.json.JSONArray; import org.json.JSONObject; import org.springblade.common.utils.InvestigateUtil; import org.springblade.modules.equipage.entity.Gun; import org.springblade.modules.equipage.service.GunService; import org.springblade.modules.location.entity.LiveLocation; import org.springblade.modules.location.mapper.LiveLocationMapper; import org.springblade.modules.location.service.LiveLocationService; import org.springblade.modules.location.vo.GunLiveLocationVO; import org.springblade.modules.location.vo.LiveLocationVo; import org.springblade.modules.location.vo.LocusVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; /** * 实时位置服务实现类 * @author zhongrj */ @Service public class LiveLocationServiceImpl extends ServiceImpl implements LiveLocationService { @Autowired private GunService gunService; /** * 实时位置分页信息 * @param page * @param liveLocation 实时位置信息对象 * @return */ @Override public IPage selectLiveLocationPage(IPage page, LiveLocationVo liveLocation) { return page.setRecords(baseMapper.selectLiveLocationPage(page, liveLocation)); } /** * 详情 * @param liveLocation 实时位置信息对象 */ @Override public LiveLocationVo selectLiveLocationInfo(LiveLocation liveLocation) { return baseMapper.selectLiveLocationInfo(liveLocation); } /** * 获取轨迹数据 * @param liveLocationVo 实时对象信息 * @return */ @Override public List getLocusInfoList(LiveLocationVo liveLocationVo) { return baseMapper.getLocusInfoList(liveLocationVo); } /** * 首页实时定位 * @return */ @Override public List getLiveLocationVoList(LiveLocationVo liveLocationVo) { //保安人员 if (liveLocationVo.getType()==1){ return baseMapper.getSecurityLocusInfoList(liveLocationVo); } //车辆 if (liveLocationVo.getType()==2){ return baseMapper.getCarLocusInfoList(liveLocationVo); } //枪支 if (liveLocationVo.getType()==3){ //获取枪支数据 List gunList = gunService.list(); //创建集合 List list = new ArrayList<>(); if (gunList.size()>0){ //遍历 gunList.forEach(gun -> { //远程调用 String body = InvestigateUtil.httpGetGunPosition(gun.getCardNo(),null,null,null,null,null); // System.out.println("body = " + body); if (null != body && !body.equals("")) { JSONObject jsonObject = new JSONObject(body); Object data = jsonObject.get("data"); JSONObject jsonData = new JSONObject(data.toString()); JSONArray res = jsonData.getJSONArray("res"); //转换string String resToString = res.toString(); if (res.length() == 0) { } else { LiveLocationVo locationVo = new LiveLocationVo(); List gunLiveLocationVOS = JSON.parseArray(resToString, GunLiveLocationVO.class); //按时间排序(降序) List gunLiveLocationVOList = gunLiveLocationVOS.stream().sorted(Comparator.comparing(GunLiveLocationVO::getDwsj).reversed()).collect(Collectors.toList()); GunLiveLocationVO gunLiveLocationVO = gunLiveLocationVOList.get(0); //取出第一个 locationVo.setRecordTime(gunLiveLocationVO.getDwsj()); locationVo.setLinkman(gunLiveLocationVO.getHwy()); locationVo.setCardNo(gunLiveLocationVO.getHwysfzh()); locationVo.setGunNum(gunLiveLocationVO.getQzbh()); locationVo.setNumber(gunLiveLocationVO.getQzxh()); locationVo.setQh(gunLiveLocationVO.getQh()); locationVo.setLongitude(gunLiveLocationVO.getDwjd().toString()); locationVo.setLatitude(gunLiveLocationVO.getDwwd().toString()); locationVo.setCompany(gunLiveLocationVO.getSzdw()); //存入集合 list.add(locationVo); } } }); } return list; } return baseMapper.selectSecurityAndCarAndGunLiveLocationPage(liveLocationVo); } /** * 获取实时位置信息 * @param liveLocation * @return */ @Override public LiveLocation getLiveLocationInfo(LiveLocation liveLocation) { return baseMapper.getLiveLocationInfo(liveLocation); } /** * 获取指令接收人的定位信息 * @param liveLocationVo 定位数据信息 * @return */ @Override public List getDirectiveLiveLocationVoList(LiveLocationVo liveLocationVo) { ArrayList arrayList = new ArrayList<>(); //人员 if (liveLocationVo.getType()==1){ String userIds = liveLocationVo.getUserIds(); if (null!=userIds && userIds!=""){ List list = Arrays.asList(userIds.split(",")); if (list.size()>0){ list.forEach(userId->{ liveLocationVo.setWorkerId(userId); LiveLocationVo directiveLiveLocationVo = baseMapper.getDirectiveLiveLocationVo(liveLocationVo); //如果存在定位数据 if (null!=directiveLiveLocationVo){ arrayList.add(directiveLiveLocationVo); } }); } } } return arrayList; } /** * 获取指令接收人的轨迹数据 * @param liveLocationVo 实时对象信息 * @return */ @Override public List> getDirectiveLocusInfoList(LiveLocationVo liveLocationVo) { List> arrayList = new ArrayList<>(); //人员 if (liveLocationVo.getType()==1){ String userIds = liveLocationVo.getUserIds(); if (null!=userIds && userIds!=""){ List list = Arrays.asList(userIds.split(",")); if (list.size()>0){ list.forEach(userId->{ liveLocationVo.setWorkerId(userId); List directiveLocusInfoList = baseMapper.getDirectiveLocusInfoList(liveLocationVo); //如果存在轨迹数据 if (directiveLocusInfoList.size()>0){ arrayList.add(directiveLocusInfoList); } }); } } } return arrayList; } }