package com.ruoyi.order.service.impl;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.nacos.shaded.com.google.gson.Gson;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.kuaidi100.sdk.api.QueryTrack;
|
import com.kuaidi100.sdk.core.IBaseClient;
|
import com.kuaidi100.sdk.pojo.HttpResult;
|
import com.kuaidi100.sdk.request.QueryTrackParam;
|
import com.kuaidi100.sdk.request.QueryTrackReq;
|
import com.kuaidi100.sdk.utils.SignUtils;
|
import com.ruoyi.common.core.domain.R;
|
import com.ruoyi.order.mapper.LogisticsMapper;
|
import com.ruoyi.order.service.ILogisticsService;
|
import com.ruoyi.order.vo.KuaiDiCode;
|
import com.ruoyi.system.api.domain.Logistics;
|
import com.ruoyi.system.api.domain.dto.LogisticsDTO;
|
import com.ruoyi.system.api.domain.vo.Express100VO;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.http.HttpEntity;
|
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.ResponseEntity;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.LinkedMultiValueMap;
|
import org.springframework.util.MultiValueMap;
|
import org.springframework.web.client.RestTemplate;
|
|
import javax.annotation.Resource;
|
import java.io.BufferedReader;
|
import java.io.InputStreamReader;
|
import java.net.HttpURLConnection;
|
import java.net.URL;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* <p>
|
* 物流公司 服务实现类
|
* </p>
|
*
|
* @author mitao
|
* @since 2024-06-07
|
*/
|
@Service
|
public class LogisticsServiceImpl extends ServiceImpl<LogisticsMapper, Logistics> implements
|
ILogisticsService {
|
|
private String key="BltjQodT7186";
|
private String customer="56DE8E9E3D58CE73C60755C8B7483043";
|
|
private static final String AUTONUMBER_AUTO_URL = "http://www.kuaidi100.com/autonumber/auto?num=NUM&key=KEY";
|
|
@Autowired
|
private RestTemplate restTemplate;
|
|
|
@Override
|
public Express100VO getLogisticsList(LogisticsDTO logisticsDTO) {
|
QueryTrackReq queryTrackReq = new QueryTrackReq();
|
QueryTrackParam queryTrackParam = new QueryTrackParam();
|
queryTrackParam.setCom(logisticsDTO.getCompany());
|
queryTrackParam.setNum(logisticsDTO.getPostid());
|
String param = new Gson().toJson(queryTrackParam);
|
|
queryTrackReq.setParam(param);
|
queryTrackReq.setCustomer(customer);
|
queryTrackReq.setSign(SignUtils.querySign(param ,key,customer));
|
|
IBaseClient baseClient = new QueryTrack();
|
HttpResult execute = null;
|
try {
|
execute = baseClient.execute(queryTrackReq);
|
} catch (Exception e) {
|
throw new RuntimeException(e);
|
}
|
// 对返回的数据进行反序列化处理
|
Gson gson = new Gson();
|
String responseBody = execute.getBody();
|
Express100VO response = gson.fromJson(responseBody, Express100VO.class);
|
LambdaQueryWrapper<Logistics> wrapper= Wrappers.lambdaQuery();
|
wrapper.eq(Logistics::getLogisticsNum,logisticsDTO.getCompany());
|
Logistics one = this.getOne(wrapper);
|
response.setLogisticsName(one.getLogisticsName());
|
return response;
|
}
|
|
@Override
|
public Boolean isLogisticsOne(LogisticsDTO logisticsDTO) {
|
List<KuaiDiCode> m=findKuaiDiCode(logisticsDTO.getPostid());
|
Boolean b=false;
|
if (m.size()>0){
|
for (KuaiDiCode k:m){
|
if (k.getComCode().equals(logisticsDTO.getCompany())){
|
b=true;
|
}
|
}
|
|
}
|
|
return b;
|
}
|
|
public List<KuaiDiCode> findKuaiDiCode(String orderId) {
|
String url = AUTONUMBER_AUTO_URL.replace("NUM", orderId).replace("KEY", key);
|
// 发送快递参数处理
|
MultiValueMap<String, Object> sendBody = new LinkedMultiValueMap<>();
|
sendBody.add("num", orderId);
|
sendBody.add("key", key);
|
//设置请求头参数
|
HttpHeaders headers = new HttpHeaders();
|
headers.add("Content-type", "application/x-www-form-urlencoded");
|
HttpEntity<MultiValueMap<String, Object>> formEntity = new HttpEntity<>(sendBody, headers);
|
ResponseEntity<String> result = restTemplate.postForEntity(url, formEntity, String.class);
|
List<KuaiDiCode> kuaiDiCode = new ArrayList<>();
|
if (result.getBody() != null && result.getBody().length() > 0) {
|
ArrayList body = JSON.parseObject(result.getBody(), ArrayList.class);
|
body.forEach(i -> kuaiDiCode.add(JSON.parseObject(JSON.toJSONString(i), KuaiDiCode.class)));
|
}
|
return kuaiDiCode;
|
}
|
|
}
|