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.springblade.modules.system.service.MyAsyncService; 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; import static org.springblade.common.config.FtpConfig.localPath; /** * @author zhongrj * @time 2021-07-06 * @desc 轨迹管理控制层 */ @RestController @AllArgsConstructor @RequestMapping("/locus") public class LocusController { private final LocusService locusService; private final CarService carService; private IUserService userService; private final MyAsyncService myAsyncService; /** * 自定义分页 * * @param query page,size * @param locus 轨迹信息对象 */ @GetMapping("/page") public R> page(LocusVo locus, Query query) { IPage pages = locusService.selectLocusPage(Condition.getPage(query), locus); return R.data(pages); } /** * 新增 * * @param locus 轨迹信息对象 */ @PostMapping("/save") @ApiOperation(value = "新增", notes = "传入locus") public R save(@RequestBody Locus locus) { return R.status(locusService.save(locus)); } /** * 修改 * * @param locus 轨迹信息对象 */ @PostMapping("/update") public R update(@RequestBody Locus locus) { return R.status(locusService.updateById(locus)); } /** * 新增或修改 * * @param locus 轨迹信息对象 */ @PostMapping("/submit") public R submit(@RequestBody Locus locus) { return R.status(locusService.saveOrUpdate(locus)); } /** * 删除 * * @param ids 轨迹信息ids 数组 */ @PostMapping("/remove") public R remove(@ApiParam(value = "主键集合") @RequestParam String ids) { return R.status(locusService.removeByIds(Func.toLongList(ids))); } /** * 详情 * * @param locus 轨迹信息对象 */ @GetMapping("/detail") @ApiOperation(value = "详情", notes = "传入locus") public R detail(Locus locus) { LocusVo detail = locusService.selectLocusInfo(locus); return R.data(detail); } /** * 查询车辆轨迹 */ @GetMapping("/locationhistoryTrack") public void locationhistoryTrack() { String url = "http://dvopenapi.aimap.net.cn/openapi/device/historyTrack"; String res = null; List> maps = carService.selectCar(); for (int i = 0; i < maps.size(); i++) { Map 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, "/usr/local/nginx/dist/enterprises/car"); //文件名 String name = file.getName(); String substring = name.substring(0, name.length() - 4); //解压数据 FileZip fileZip = new FileZip(); fileZip.ZipUncompress("/usr/local/nginx/dist/enterprises/car/" + substring + ".zip", "/usr/local/nginx/dist/enterprises/car"); try { // 用来保存数据 ArrayList csvFileList = new ArrayList(); // 定义一个CSV路径 String csvFilePath = "/usr/local/nginx/dist/enterprises/car/" + 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 = ""; if (csvFileList.size() != 0) { //遍历读取的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); myAsyncService.dataSync(s1); deletescsv(substring); } deletescsv(substring); } 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> 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 params = new HashMap<>(); // String equipmentCode = list.get(i).get("code").toString(); // //设备imei号 // params.put("number", 7730); // params.put("acc", equipmentCode); // params.put("startTime", "2021-12-01"); // params.put("endTime", "2021-12-02"); // 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 = ""; // 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 += "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 (j != jsonArray1.size() - 1) { // s1 += ";"; // } // } // FtpUtil.sqlFileUpload(s1); // } // } /** * 删除本地csv文件 * * @param fileName */ public static void deletescsv(String fileName) { File file = new File("D:\\caiji\\" + fileName + ".csv"); if (file.isFile() && file.exists()) { file.delete(); } } }