智慧保安后台管理项目备份
zhongrj
2022-08-26 f1426e0387d0c2b5d9a4ca5a4b7c0666889ee4b2
src/main/java/org/springblade/modules/location/service/impl/LiveLocationServiceImpl.java
@@ -1,15 +1,26 @@
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.apache.commons.lang3.StringUtils;
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.List;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
 * 实时位置服务实现类
@@ -17,6 +28,9 @@
 */
@Service
public class LiveLocationServiceImpl extends ServiceImpl<LiveLocationMapper, LiveLocation> implements LiveLocationService {
   @Autowired
   private GunService gunService;
   /**
    * 实时位置分页信息
@@ -45,6 +59,151 @@
    */
   @Override
   public List<LocusVo> getLocusInfoList(LiveLocationVo liveLocationVo) {
      return baseMapper.getLocusInfoList(liveLocationVo);
   }
   /**
    * 首页实时定位
    * @return
    */
   @Override
   public List<LiveLocationVo> getLiveLocationVoList(LiveLocationVo liveLocationVo) {
      //保安人员
      if (liveLocationVo.getType()==1){
         return baseMapper.getSecurityLocusInfoList(liveLocationVo);
      }
      //车辆
      if (liveLocationVo.getType()==2){
         return baseMapper.getCarLocusInfoList(liveLocationVo);
      }
      //枪支
      if (liveLocationVo.getType()==3){
         //获取枪支数据
         List<Gun> gunList = gunService.list();
         //创建集合
         List<LiveLocationVo> list = new ArrayList<>();
         if (gunList.size()>0){
            String startTime = "2020-05-25";
            String endTime = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
            //遍历
            for (Gun gun : gunList) {
               if (!StringUtils.isBlank(gun.getCardNo()) && !gun.getCardNo().equals("null")) {
                  //远程调用
                  String body = InvestigateUtil.httpGetGunPosition(gun.getCardNo(), null, startTime, endTime, 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<GunLiveLocationVO> gunLiveLocationVOS = JSON.parseArray(resToString, GunLiveLocationVO.class);
                        //按时间排序(降序)
                        List<GunLiveLocationVO> 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());
                        if (null != gun.getIssueUnit() && !gun.getIssueUnit().equals("")) {
                           locationVo.setIssueUnit(gun.getIssueUnit());
                        }
                        if (null != gun.getIssueTime() && !gun.getIssueTime().equals("")) {
                           locationVo.setIssueTime(gun.getIssueTime());
                        }
                        if (null != gun.getValidTime() && !gun.getValidTime().equals("")) {
                           locationVo.setValidTime(gun.getValidTime());
                        }
                        //存入集合
                        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<LiveLocationVo> getDirectiveLiveLocationVoList(LiveLocationVo liveLocationVo) {
      ArrayList<LiveLocationVo> arrayList = new ArrayList<>();
      //人员
      if (liveLocationVo.getType()==1){
         String userIds = liveLocationVo.getUserIds();
         if (null!=userIds && userIds!=""){
            List<String> 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<List<LocusVo>> getDirectiveLocusInfoList(LiveLocationVo liveLocationVo) {
      List<List<LocusVo>> arrayList = new ArrayList<>();
      //人员
      if (liveLocationVo.getType()==1){
         String userIds = liveLocationVo.getUserIds();
         if (null!=userIds && userIds!=""){
            List<String> list = Arrays.asList(userIds.split(","));
            if (list.size()>0){
               list.forEach(userId->{
                  liveLocationVo.setWorkerId(userId);
                  List<LocusVo> directiveLocusInfoList = baseMapper.getDirectiveLocusInfoList(liveLocationVo);
                  //如果存在轨迹数据
                  if (directiveLocusInfoList.size()>0){
                     arrayList.add(directiveLocusInfoList);
                  }
               });
            }
         }
      }
      return arrayList;
   }
}