| | |
| | | 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 |
| | |
| | | public class LocusController { |
| | | |
| | | private final LocusService locusService; |
| | | private final CarService carService; |
| | | private IUserService userService; |
| | | private final MyAsyncService myAsyncService; |
| | | |
| | | /** |
| | | * 自定义分页 |
| | | * |
| | | * @param query page,size |
| | | * @param locus 轨迹信息对象 |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 新增 |
| | | * |
| | | * @param locus 轨迹信息对象 |
| | | */ |
| | | @PostMapping("/save") |
| | |
| | | |
| | | /** |
| | | * 修改 |
| | | * |
| | | * @param locus 轨迹信息对象 |
| | | */ |
| | | @PostMapping("/update") |
| | |
| | | |
| | | /** |
| | | * 新增或修改 |
| | | * |
| | | * @param locus 轨迹信息对象 |
| | | */ |
| | | @PostMapping("/submit") |
| | |
| | | |
| | | /** |
| | | * 删除 |
| | | * |
| | | * @param ids 轨迹信息ids 数组 |
| | | */ |
| | | @PostMapping("/remove") |
| | |
| | | |
| | | /** |
| | | * 详情 |
| | | * |
| | | * @param locus 轨迹信息对象 |
| | | */ |
| | | @GetMapping("/detail") |
| | |
| | | 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, "/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<String[]> csvFileList = new ArrayList<String[]>(); |
| | | // 定义一个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<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-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(); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |