南昌市物联网技防平台-后台
Administrator
2021-03-20 d5b43ef0da42eaf50a08ce17e5fd3351eeb26a5e
blade-service/blade-jfpts/src/main/java/org/springblade/jfpt/parcel/service/impl/ParcelServiceImpl.java
@@ -1,18 +1,18 @@
package org.springblade.jfpt.parcel.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.common.utils.JacksonUtils;
import org.springblade.jfpt.parcel.service.ParcelService;
import org.springblade.jfpt.parcel.util.DateUtils;
import org.springblade.jfpt.parcel.util.HttpClientUtils;
import org.springblade.jfpt.parcel.util.JacksonUtil;
import org.springblade.jfpt.parcel.vo.ConditionVo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import springfox.documentation.spring.web.json.Json;
import java.text.SimpleDateFormat;
import java.util.*;
import static org.springblade.core.tool.utils.DateUtil.now;
/**
 * 包裹服务实现层
@@ -28,36 +28,251 @@
   @Value("${PARCEL_CONTRABAND_URL}")
   private String PARCEL_CONTRABAND_URL;
   @Value("${PARCEL_URL}")
   private String PARCEL_URL;
   /**
    * 获取查询条件
    * @param conditionVo 查询条件对象
    * 获取违禁包裹统计数据,远程调用接口
    * @param conditionVo 查询条件对象  status 状态码 0:本天    1:近7天   2:本月  3:本周
    * @return
    */
   @Override
   public List<Map<String, Object>> parcelKindStatis(ConditionVo conditionVo) {
      //1.判空
      if (null!=conditionVo.getStatus()) {
         //获取数据
         List<Object> objectList = getParcelData(conditionVo,PARCEL_CONTRABAND_URL,PARCEL_KEY,PARCEL_SECRET);
         Map<String,String> mapCode = new HashMap<>();
         //遍历集合,存储所有的违禁包裹编码
         for (Object object : objectList) {
            //取出list里面的值转为map
            Map<String, Object> objectMap = (Map<String, Object>) object;
            //将所有的违禁包裹编码存起来
            mapCode.put(objectMap.get("objCode").toString(),objectMap.get("objCode").toString());
         }
         System.out.println("mapCode = " + mapCode);
         //遍历违禁编码map数据
         List<Map<String,Object>> list = new ArrayList<>();
         for (String value:mapCode.values()) {
            Integer count = 0;
            HashMap<String, Object> map = new HashMap<>();
            for (Object object : objectList) {
               Map<String, Object> objectMap = (Map<String, Object>) object;//取出list里面的值转为map
               //将所有的违禁包裹编码存起来
               if (value.equals(objectMap.get("objCode").toString())){
                  count+=Integer.parseInt(objectMap.get("objCount").toString());
                  map.put("name",objectMap.get("objName").toString());
                  map.put("value",count);
               }
            }
            list.add(map);
         }
         return list;
      }
      return null;
   }
   /**
    * 获取包裹统计数据,远程调用接口获取数据
    * @param conditionVo 查询条件对象  status 状态码 0:本天    1:本周   2:本月
    * @return
    */
   @Override
   public Object getParcelStatis(ConditionVo conditionVo) {
      List<Object> list = new ArrayList<>();//返回
      //1.判空
      if (null!=conditionVo.getStatus()){
         //2.获取数据
         List<Object> objectList = getParcelData(conditionVo,PARCEL_URL,PARCEL_KEY,PARCEL_SECRET);
         System.out.println("objectList = " + objectList);
         //3.创建时间集合,包裹集合数据
         List<String> listTime = new ArrayList<>();
         List<Map<String,Object>> parcelList = new ArrayList<>();
         if (conditionVo.getStatus() == 1) {
            //3.获取今天之前的每一天数组   2021-3-12 arsn修改
            listTime = DateUtils.pastDay(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
            List<String> percelTimeList = new ArrayList<>();
            for (Object object:objectList) {
               //4.取出list里面的值转为map
               Map<String, Object> objectMap = (Map<String, Object>) object;
               //5.将远程时间数据存入集合
               percelTimeList.add(objectMap.get("dateStr").toString());
            }
            for (String time:listTime) {
               //6.创建map,用于存储包裹数据
               HashMap<String, Object> hashMap = new HashMap<>();
               //7.如果远程数据哪天数据没有,则为0
               if (!percelTimeList.contains(time)){
                  hashMap.put("dateStr",time);
                  hashMap.put("checkCount",0);
                  hashMap.put("dangerCount",0);
                  parcelList.add(hashMap);
               }else {
                  //8.遍历,分别取出数据
                  for (Object object : objectList) {
                     //9.取出list里面的值转为map
                     Map<String, Object> objectMap = (Map<String, Object>) object;
                     String dateStr = objectMap.get("dateStr").toString();  //安检时间
                     Integer checkCount = Integer.parseInt(objectMap.get("checkCount").toString()); //安检包裹数量
                     Integer dangerCount = Integer.parseInt(objectMap.get("dangerCount").toString()); //违禁包裹数量
                     //10.判断,存入数据
                     if (time.equals(dateStr)) {
                        Set<Map.Entry<String, Object>> entries = objectMap.entrySet();
                        for (Map.Entry<String, Object> m : entries) {
                           if (m.getKey().equals("checkCount")) {
                              hashMap.put("checkCount", checkCount);
                              hashMap.put("dateStr", dateStr);
                           }
                           if (m.getKey().equals("dangerCount")) {
                              hashMap.put("dangerCount", dangerCount);
                           }
                        }
                     }
                  }
                  //11.加入到集合中
                  parcelList.add(hashMap);
               }
            }
         }
         //12.封装数据
         list.add(listTime);
         list.add(parcelList);
         list.add(getKindServenDataList());
         //13.返回
         return list;
      }
      return null;
   }
   /**
    * 数据请求处理
    * @param conditionVo  条件
    * @param url url
    * @param key 请求Key
    * @param secret 请求 secret
    * @return
    */
   private List<Object> getParcelData(ConditionVo conditionVo, String url, String key, String secret) {
      //1.创建map对象,用于存储请求接口的秘钥
      Map<String, String> map = new HashMap<>();
       //2.时间不为空
      if (null!=conditionVo.getStartDate() && null!=conditionVo.getEndDate()) {
         map.put("startDate", conditionVo.getStartDate());
         map.put("endDate", conditionVo.getEndDate());
      String startDate = null;
      String endDate = null;
      //2.2查询本天的数据
      if (conditionVo.getStatus() == 0) {
         //3.获取本天开始时间和结束时间
         startDate = DateUtils.getToday();
         endDate = DateUtils.getToday();
      }
      //3.调用远程接口获取数据
      String params = HttpClientUtils.httpPost(PARCEL_CONTRABAND_URL, PARCEL_KEY, PARCEL_SECRET, map);
      //4.数据转换
      Map<String,Object> data = (Map<String, Object>) JSONObject.parse(params);
      List<Object> objectList = JSON.parseArray(data.get("result").toString());
      //5.遍历,分别取出数据
      for (Object object:objectList) {
         Map <String,Object> objectMap = (Map<String, Object>) object;//取出list里面的值转为map
         System.out.println("liMap.get(\"objCode\") = " + objectMap.get("objCode"));
         System.out.println("liMap.get(\"objCode\") = " + objectMap.get("objCount"));
         System.out.println("liMap.get(\"objCode\") = " + objectMap.get("dateStr"));
         System.out.println("liMap.get(\"objCode\") = " + objectMap.get("objName"));
      //2.2查询过去6天及当天的的数据
      if (conditionVo.getStatus() == 1) {
         //3.获取过去6天及当天开始时间和结束时间
         startDate = DateUtils.getPastDate(6,now());
         endDate = DateUtils.getToday();
      }
      //2.4查询本周的数据
      if (conditionVo.getStatus() == 3) {
         //3.获取过去6天及当天开始时间和结束时间
         startDate = DateUtils.getWeekStart();
         endDate = DateUtils.getWeekEnd();
      }
      //2.2查询本月的数据
      if (conditionVo.getStatus() == 2) {
         //3.获取本月开始时间和结束时间
         startDate = DateUtils.getMonthStart();
         endDate = DateUtils.getMonthEnd();
      }
      map.put("startDate", startDate);
      map.put("endDate", endDate);
      //4.远程调用数据
      String params = HttpClientUtils.httpPost(url, key, secret, map);
      //5.数据转换
      Map<String, Object> data = (Map<String, Object>) JSONObject.parse(params);
      //System.out.println("data = " + data);
      return JSON.parseArray(data.get("result").toString());
   }
      return null;
   /**
    * 查询包裹,违禁品总数
    * @param status 状态码 0:本天    1:本周   2:本月
    * @return
    */
   @Override
   public List<Integer> selectParcelCount(Integer status) {
      List<Integer> list = new ArrayList<>();
      ConditionVo conditionVo = new ConditionVo();
      conditionVo.setStatus(status);
      //获取包裹数据
      List<Object> parcelData = getParcelData(conditionVo, PARCEL_URL, PARCEL_KEY, PARCEL_SECRET);
      //查询当天的包裹总数
      Integer dangerCount = null;
      Integer contrabandCount = null;
      if (status == 0) {
         for (Object object : parcelData) {
            //取出list里面的值转为map
            Map<String, Object> objectMap = (Map<String, Object>) object;
            dangerCount = Integer.parseInt(objectMap.get("dangerCount").toString()); //违禁包裹数量
            contrabandCount = Integer.parseInt(objectMap.get("contrabandCount").toString()); //违禁物品数量
         }
      }
      //封装数据
      list.add(dangerCount);
      list.add(contrabandCount);
      //返回数据
      return list;
   }
   /**
    * 查询7天内违禁品每天的数量(需筛选危险品)
    * @return
    */
   @Override
   public Map<String, Object> selectParcelData() {
      HashMap<String, Object> map = new HashMap<>();
      map.put("parcelData",getKindServenDataList());
      return map;
   }
   /**
    * 获取危险违禁品7天内每天的数量集合
    * @return
    */
   public List<Integer> getKindServenDataList(){
      ConditionVo conditionVo = new ConditionVo();
      conditionVo.setStatus(1);//近7天status 为 1
      //获取数据
      List<Object> objectList = getParcelData(conditionVo,PARCEL_CONTRABAND_URL,PARCEL_KEY,PARCEL_SECRET);
      //遍历违禁编码map数据
      List<String> times = DateUtils.pastDay(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
      List<Integer> list = new ArrayList<>();
      for (String time:times) {
         Integer count = 0;
         //遍历集合数据获取每一天的count
         for (Object object : objectList) {
            Map<String, Object> objectMap = (Map<String, Object>) object;//取出list里面的值转为map
            //对比时间和objCode,危险品,刀具,枪支等
            if (time.equals(objectMap.get("dateStr").toString()) ){
//               //枪支
//               if (objectMap.get("objCode").toString().equals("gan")) {
//                  count += Integer.parseInt(objectMap.get("objCount").toString());
//               }
//               //刀具
//               if (objectMap.get("objCode").toString().equals("knife")) {
//                  count += Integer.parseInt(objectMap.get("objCount").toString());
//               }
//               //爆炸物
//               if (objectMap.get("objCode").toString().equals("boomExplosive")) {
//                  count += Integer.parseInt(objectMap.get("objCount").toString());
//               }
               //3-20 修改不筛选危险品,由第三方筛选好
               count += Integer.parseInt(objectMap.get("objCount").toString());
            }
         }
         list.add(count);
      }
      return list;
   }
}