package com.iam800.test.Files;/*
*@作者 yangshaoping.ex
*@时间 2023/2/3
*/
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.client.RestTemplate;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.sql.Date;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class BaidFileUtils {
//文本查经纬度
private static String url1="http://api.map.baidu.com/geocoding/v3/?address=param1&output=json&ak=ws13Yfk4Ox7ZFUq6LLsCzgmTT7U4SDOOYSP";
//经纬查距离
private static String url2="http://api.map.baidu.com/routematrix/v2/driving?output=json&tactics=11&origins=param1&destinations=param2&ak=ws13Yfk4Ox7ZFUq6LLsCzgmTT7U4SDOOYSP";
public static void main(String[] args) throws Exception{
//找到本地文件
FileInputStream fileInputStream = new FileInputStream("D:\\11.xlsx");
//读取参数
ImportParams importParams = new ImportParams();
//读取本地文件
List<XlsData> list = ExcelImportUtil.importExcel(fileInputStream, XlsData.class, importParams);
//调用百度接口
List<XlsData> all=new ArrayList<>();
Map<String,List<XlsData>> map=doExcel(list);
//异常补充调用逻辑
List<XlsData> newList=(List<XlsData>)map.get("newList");
List<XlsData> errList=(List<XlsData>)map.get("errList");
if(errList!=null&&errList.size()>0){
Thread.sleep(2000);
Map<String,List<XlsData>> errmap=doExcel(errList);
List<XlsData> newList2=(List<XlsData>)errmap.get("newList");
List<XlsData> errList2=(List<XlsData>)errmap.get("errList");
all.addAll(newList2);
}
all.addAll(newList);
//导出
doEx(all);
}
//百度调用
public static Map<String,List<XlsData>> doExcel(List<XlsData> list){
RestTemplate restTemplate = new RestTemplate();
List<XlsData> newList=new ArrayList<>();
List<XlsData> errList=new ArrayList<>();
Map<String,List<XlsData>> map=new HashMap<>();
map.put("newList",newList);
map.put("errList",errList);
int num=0;
try {
//找到本地文件
// FileInputStream fileInputStream = new FileInputStream("D:\\11.xlsx");
// //读取参数
// ImportParams importParams = new ImportParams();
// //读取本地文件
// List<XlsData> list = ExcelImportUtil.importExcel(fileInputStream, XlsData.class, importParams);
//打印到控制台
//System.out.println(userList);
for(XlsData data:list){
num+=1;
System.out.println("-------------------------------【条数num】-------"+num);
//接口1
String getStartJW="";
String getEndJW="";
String startUrl=url1.replace("param1",data.getAddress());
String str1 = restTemplate.getForObject(startUrl, String.class);
System.out.println("str-------"+str1);
BaiduData data1=JSONObject.parseObject(str1,BaiduData.class);
if(data1!=null){
getStartJW=data1.getResult().getLocation().getLat()+","+data1.getResult().getLocation().getLng();
data.setStartJW(getStartJW);
System.out.println("【地址1--出发地】"+data.getAddress()+"---【经纬度】"+getStartJW);
}else{
System.out.println("无数据");
}
//接口2
String endUrl=url1.replace("param1",data.getCity()+"人民政府");
System.out.println("--endUrl--"+endUrl);
String str2 = restTemplate.getForObject(endUrl, String.class);
BaiduData data2 = JSONObject.parseObject(str2, BaiduData.class);
System.out.println("--data2--"+data2.getResult().toString());
if(data2!=null){
getEndJW=data2.getResult().getLocation().getLat()+","+data2.getResult().getLocation().getLng();
data.setEndJW(getEndJW);
System.out.println("【地址2-目的地】"+data.getCity()+"---【经纬度】"+getEndJW);
}else{
System.out.println("无数据");
}
//接口3
double distance=0D;
String distanUrl=url2.replace("param1",getStartJW).replace("param2",getEndJW);
System.out.println("--distanUrl--"+distanUrl);
String str3 = restTemplate.getForObject(distanUrl, String.class);
JSONObject result = JSONObject.parseObject(str3);
System.out.println("--result--"+result);
String res=result.toString();
if(res.contains("result")){
String str33= result.get("result").toString();//JSONObject.parseObject(JSONObject.toJSONString(result.get("result")));
System.out.println("--msg--"+str33);
//BaiduData data3 = JSONObject.parseObject(str3, BaiduData.class);
JSONArray arr= JSON.parseArray(str33);
BaiduData data3 = JSONObject.parseObject(arr.get(0).toString(), BaiduData.class);
if(data3!=null){
distance=data3.getDistance().getValue();
data.setDistance(distance);
data.setText(data3.getDistance().getText());
data.setStartJW(getStartJW);
data.setEndJW(getEndJW);
System.out.println("【地址】"+data.getAddress()+"---【距离】"+distance);
}else{
System.out.println("无数据");
}
newList.add(data);
}else{
errList.add(data);
Thread.sleep(1000);
System.out.println("线程延迟"+num);
}
}
map.put("newList",newList);
map.put("errList",errList);
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
//easypoi 封装下载
public static void doEx(List<XlsData> lists)throws Exception{
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
for (XlsData data:lists){
Map<String, Object> map=new HashMap<>();
map.put("org",data.getOrg());
map.put("code",data.getCode());
map.put("address",data.getAddress());
map.put("startJW",data.getStartJW());
map.put("name",data.getName());
map.put("city",data.getCity());
map.put("endJW",data.getEndJW());
map.put("distance",data.getDistance());
map.put("text",data.getText());
list.add(map);
}
try {
List<ExcelExportEntity> entity = new ArrayList<ExcelExportEntity>();
//所属组织 路线代码 出发地 路线名称 收货人城市 里程
ExcelExportEntity excelentity = new ExcelExportEntity("所属组织", "org");
entity.add(new ExcelExportEntity("所属组织", "org"));
entity.add(new ExcelExportEntity("路线代码", "code"));
entity.add(new ExcelExportEntity("出发地", "address"));
entity.add(new ExcelExportEntity("出发地经纬", "startJW"));
entity.add(new ExcelExportEntity("路线名称", "name"));
entity.add(new ExcelExportEntity("收货人城市", "city"));
entity.add(new ExcelExportEntity("收货人经纬", "endJW"));
entity.add(new ExcelExportEntity("里程1", "distance"));
entity.add(new ExcelExportEntity("里程2", "text"));
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("里程", "里程"), entity,
list);
FileOutputStream fos = new FileOutputStream("D:/22.xls");
workbook.write(fos);
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
源数据
解析数据