智慧保安后台管理-外网
tangzy
2021-11-30 bb72c40ff327fc6a7a1b3a96e0589507711f0cdf
src/main/java/org/springblade/modules/location/controller/LocusController.java
@@ -1,17 +1,41 @@
package org.springblade.modules.location.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.csvreader.CsvReader;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import liquibase.pro.packaged.E;
import liquibase.pro.packaged.S;
import lombok.AllArgsConstructor;
import net.sf.json.JSONArray;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.springblade.common.utils.DowloadZipUtil;
import org.springblade.common.utils.FileZip;
import org.springblade.common.utils.HttpReqUtil;
import org.springblade.common.utils.Md5SignUtil;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springblade.modules.FTP.FtpUtil;
import org.springblade.modules.equipage.service.CarService;
import org.springblade.modules.location.entity.Locus;
import org.springblade.modules.location.service.LocusService;
import org.springblade.modules.location.vo.LocusVo;
import org.springblade.modules.system.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.List;
/**
 * @author zhongrj
@@ -24,9 +48,12 @@
public class LocusController {
   private final LocusService locusService;
   private final CarService carService;
   private IUserService userService;
   /**
    * 自定义分页
    *
    * @param query page,size
    * @param locus 轨迹信息对象
    */
@@ -38,6 +65,7 @@
   /**
    * 新增
    *
    * @param locus 轨迹信息对象
    */
   @PostMapping("/save")
@@ -48,6 +76,7 @@
   /**
    * 修改
    *
    * @param locus 轨迹信息对象
    */
   @PostMapping("/update")
@@ -57,6 +86,7 @@
   /**
    * 新增或修改
    *
    * @param locus 轨迹信息对象
    */
   @PostMapping("/submit")
@@ -66,6 +96,7 @@
   /**
    * 删除
    *
    * @param ids 轨迹信息ids 数组
    */
   @PostMapping("/remove")
@@ -75,6 +106,7 @@
   /**
    * 详情
    *
    * @param locus 轨迹信息对象
    */
   @GetMapping("/detail")
@@ -84,4 +116,182 @@
      return R.data(detail);
   }
   /**
    * 查询车辆轨迹
    */
   @GetMapping("/locationhistoryTrack")
   public void locationhistoryTrack() {
      String url = "http://dvopenapi.aimap.net.cn/openapi/device/historyTrack";
      String res = null;
      List<Map<Object, Object>> maps = carService.selectCar();
      for (int i = 0; i < maps.size(); i++) {
         Map<String, Object> params = new HashMap<>();
         params.put("imei", maps.get(i).get("code").toString());
         params.put("beginTime", "2021112510");
         params.put("endTime", "2021112511");
         params.put("rectify", 0);
         params.put("callbackUrl", "http://2h3f861221.wicp.vip/locus/SaveUrl");
         params.put("callbackId", maps.get(i).get("carnumber").toString());
         params.put("appId", "PO00000761");
         params.put("timestamp", System.currentTimeMillis());
         String secert = "dXRGb2pRNVdWOGQ3d1ouV29UYzc1MnJaUnBwTzUx";
         String computeSign = "";
         try {
            computeSign = Md5SignUtil.signRequest(params, secert);
         } catch (IOException e1) {
            e1.printStackTrace();
         }
         params.put("sign", computeSign);
         try {
            res = HttpReqUtil.getInstance().doPost(url, params, null);
         } catch (Exception e) {
            e.printStackTrace();
         }
      }
   }
   /**
    * 轨迹回调
    *
    * @param callbackId
    * @param fileUrl
    */
   @PostMapping("/SaveUrl")
   @ApiOperation(value = "详情", notes = "传入car")
   public void SaveUrl(String callbackId, String fileUrl) throws Exception {
      DowloadZipUtil dowloadZipUtil = new DowloadZipUtil();
      File file = dowloadZipUtil.downloadFile(fileUrl, "D:\\caiji");
      //文件名
      String name = file.getName();
      String substring = name.substring(0, name.length() - 4);
      //解压数据
      FileZip fileZip = new FileZip();
      fileZip.ZipUncompress("D:\\caiji\\" + substring + ".zip", "D:\\caiji");
      try {
         // 用来保存数据
         ArrayList<String[]> csvFileList = new ArrayList<String[]>();
         // 定义一个CSV路径
         String csvFilePath = "D:\\caiji\\" + substring + ".csv";
         // 创建CSV读对象 例如:CsvReader(文件路径,分隔符,编码格式);
         CsvReader reader = new CsvReader(csvFilePath, ',', Charset.forName("UTF-8"));
         // 跳过表头 如果需要表头的话,这句可以忽略
         reader.readHeaders();
         // 逐行读入除表头的数据
         while (reader.readRecord()) {
            csvFileList.add(reader.getValues());
         }
         reader.close();
         Locus locus = new Locus();
         String s1 = "";
         //遍历读取的CSV文件
         for (int row = 0; row < csvFileList.size(); row++) {
            // 取得第row行第0列的数据
            String cell = csvFileList.get(row)[0];
            String cell1 = csvFileList.get(row)[1];
            String cell2 = csvFileList.get(row)[2];
            Date date = timeStamp2Date(cell2);
            locus.setType(2);
            locus.setLongitude(cell);
            locus.setLatitude(cell1);
            locus.setRecordTime(date);
            locus.setWorkerId(callbackId);
            locusService.save(locus);
            //数据推送
            s1 +=
               "insert into sys_locus(id,type,worker_id,longitude,latitude,record_time) " +
                  "values(" + "'" + locus.getId() + "'" + "," +
                  "'" + locus.getType() + "'" + "," +
                  "'" + locus.getWorkerId() + "'" + "," +
                  "'" + locus.getLongitude() + "'" + "," +
                  "'" + locus.getLatitude() + "'" + "," +
                  "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(locus.getRecordTime()) + "'" + ")";
            if (row != csvFileList.size() - 1) {
               s1 += ";";
            }
         }
         FtpUtil.sqlFileUpload(s1);
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
   public static Date timeStamp2Date(String time) {
      Long timeLong = Long.parseLong(time);
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//要转换的时间格式
      Date date;
      try {
         date = sdf.parse(sdf.format(timeLong));
         return date;
      } catch (ParseException e) {
         e.printStackTrace();
         return null;
      }
   }
   @PostMapping("/ss")
   public void Peog() throws Exception {
      String url = "http://47.104.104.46/api/client/getgistrack.php";
      Calendar calendar = Calendar.getInstance();
      calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - 1);
      SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:00:00");
      //查询有押运人员的数据
      List<Map<String, Object>> list = userService.selectEquipent();
      for (int i = 0; i < list.size(); i++) {
         //实时位置实体类
         Locus locus = new Locus();
         locus.setType(1);
         String id = list.get(i).get("id").toString();
         locus.setWorkerId(id);
         Map<String, Object> params = new HashMap<>();
         String equipmentCode = list.get(i).get("code").toString();
         //设备imei号
         params.put("number", 7730);
         params.put("acc", equipmentCode);
         params.put("startTime", "2021-06-01");
         params.put("endTime", "2021-08-01");
         String res = null;
         res = HttpReqUtil.getInstance().doPost(url, params, null);
         String a = "[" + res + "]";
         JSONArray jsonArray = JSONArray.fromObject(a);
         String track = jsonArray.getJSONObject(0).get("track").toString();
         JSONArray jsonArray1 = JSONArray.fromObject(track);
         String s1 = "";
         String sql="insert into sys_locus(id,type,worker_id,longitude,latitude,record_time) values ";
         for (int j = 0; j < jsonArray1.size(); j++) {
            String gis_jd = jsonArray1.getJSONObject(j).get("gis_jd").toString();
            String gis_wd = jsonArray1.getJSONObject(j).get("gis_wd").toString();
            String date = jsonArray1.getJSONObject(j).get("date").toString();
            SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            try {
               //使用SimpleDateFormat的parse()方法生成Date
               Date dates = sf.parse(date);
               locus.setRecordTime(dates);
               //打印Date
            } catch (ParseException e) {
               e.printStackTrace();
            }
            locus.setLongitude(gis_jd);
            locus.setLatitude(gis_wd);
            locusService.save(locus);
            //数据推送
            s1 += "(" + "'" + locus.getId() + "'" + "," +
               "'" + locus.getType() + "'" + "," +
               "'" + locus.getWorkerId() + "'" + "," +
               "'" + locus.getLongitude() + "'" + "," +
               "'" + locus.getLatitude() + "'" + "," +
               "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(locus.getRecordTime()) + "'" + ")";
            if (j != jsonArray1.size() - 1) {
               s1 += ",";
            }
            else {
               s1+=";";
            }
         }
         String c = "a" +sql+ s1;
         FtpUtil.sqlFileUpload(c);
      }
   }
}