记得上下班打卡 | git大法好,push需谨慎

Commit 4110704e authored by 胡佳晨's avatar 胡佳晨

Merge remote-tracking branch 'origin/dev' into dev

parents 833e2f63 5d21969e
...@@ -18,6 +18,7 @@ public class KylinRedisConst { ...@@ -18,6 +18,7 @@ public class KylinRedisConst {
public static final String SURPLUS_EXCHANGE = "surplusExchange"; public static final String SURPLUS_EXCHANGE = "surplusExchange";
public static final String TICKET = "kylin:ticket:id:"; public static final String TICKET = "kylin:ticket:id:";
public static final String ORDER = "kylin:order:id:"; public static final String ORDER = "kylin:order:id:";
public static final String ORDER_ROUTE_INFO = "kylin::order:route_info:id:";
public static final String ORDER_ENTITIES = "kylin:order_entities:id:"; public static final String ORDER_ENTITIES = "kylin:order_entities:id:";
public static final String TIMES = "kylin:times:id:"; public static final String TIMES = "kylin:times:id:";
public static final String AGENT = "kylin:agent:info"; public static final String AGENT = "kylin:agent:info";
......
package com.liquidnet.service.kylin.dto.vo.express;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* <p>
* 快递路由信息
* </p>
*
* @author jiangxiulong
* @since 2021-06-30
*/
@Data
@ApiModel
public class KylinOrderExpressRouteVo implements Serializable {
@ApiModelProperty(value = "orderExpressRouteId")
private String orderExpressRouteId;
@ApiModelProperty(value = "orderExpressId")
private String orderExpressId;
@ApiModelProperty(value = "路由节点发生的城市")
private String acceptAddress;
@ApiModelProperty(value = "YYYY-MM-DD")
private String acceptDate;
@ApiModelProperty(value = "HH24:MM:SS")
private String acceptTime;
@ApiModelProperty(value = "YYYY-MM-DD HH24:MM:SS")
private String acceptTotaltime;
@ApiModelProperty(value = "路由节点具体描述")
private String remark;
@ApiModelProperty(value = "路由节点操作码")
private String opcode;
@ApiModelProperty(value = "createdAt")
private String createdAt;
@ApiModelProperty(value = "updatedAt")
private String updatedAt;
}
package com.liquidnet.service.platform.controller.express.shunfeng; package com.liquidnet.service.platform.controller.express.shunfeng;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.kylin.dto.param.PerformanceExpressPushFreightParam; import com.liquidnet.service.kylin.dto.param.PerformanceExpressPushFreightParam;
import com.liquidnet.service.kylin.dto.param.PerformanceExpressPushRouteParam; import com.liquidnet.service.kylin.dto.param.PerformanceExpressPushRouteParam;
import com.liquidnet.service.kylin.dto.param.PerformanceExpressPushStatusParam; import com.liquidnet.service.kylin.dto.param.PerformanceExpressPushStatusParam;
import com.liquidnet.service.kylin.dto.vo.express.KylinOrderExpressRouteVo;
import com.liquidnet.service.platform.service.express.shunfeng.PerformancesExpressCallbackServiceImpl; import com.liquidnet.service.platform.service.express.shunfeng.PerformancesExpressCallbackServiceImpl;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
/** /**
* <p> * <p>
...@@ -67,4 +72,16 @@ public class PerformancesExpressCallbackController { ...@@ -67,4 +72,16 @@ public class PerformancesExpressCallbackController {
return objectObjectHashMap; return objectObjectHashMap;
} }
@GetMapping("orderRoute/{orderTicketsId}")
@ApiOperation("获取物流信息")
@ApiImplicitParam(name = "orderTicketsId", value = "订单ID", required = true, dataType = "String", paramType = "path")
public ResponseDto<List<KylinOrderExpressRouteVo>> orderRouteDetail(@PathVariable() String orderTicketsId) {
List<KylinOrderExpressRouteVo> routeVoList = performancesExpressServiceImpl.orderRouteDetail(orderTicketsId);
if (null != routeVoList) {
return ResponseDto.success(routeVoList);
} else {
return ResponseDto.failure(ErrorMapping.get("20800"));
}
}
} }
package com.liquidnet.service.platform.service.express.shunfeng; package com.liquidnet.service.platform.service.express.shunfeng;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.*; import com.liquidnet.commons.lang.util.*;
import com.liquidnet.service.kylin.constant.KylinRedisConst;
import com.liquidnet.service.kylin.dto.param.*; import com.liquidnet.service.kylin.dto.param.*;
import com.liquidnet.service.kylin.dto.vo.express.KylinOrderExpressRouteVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo;
import com.liquidnet.service.kylin.entity.*; import com.liquidnet.service.kylin.entity.*;
import com.liquidnet.service.kylin.mapper.*; import com.liquidnet.service.kylin.mapper.*;
import com.liquidnet.service.kylin.service.IKylinOrderExpress; import com.liquidnet.service.kylin.service.IKylinOrderExpress;
...@@ -10,12 +14,16 @@ import com.liquidnet.service.platform.utils.ShunfengSignUtils; ...@@ -10,12 +14,16 @@ import com.liquidnet.service.platform.utils.ShunfengSignUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.List; import java.util.List;
import java.util.regex.Pattern;
/** /**
* <p> * <p>
...@@ -66,6 +74,9 @@ public class PerformancesExpressCallbackServiceImpl extends ServiceImpl<KylinOrd ...@@ -66,6 +74,9 @@ public class PerformancesExpressCallbackServiceImpl extends ServiceImpl<KylinOrd
@Autowired @Autowired
HttpServletRequest httpServletRequest; HttpServletRequest httpServletRequest;
@Autowired
private RedisUtil redisUtil;
public boolean orderStatus(PerformanceExpressPushStatusParam performanceExpressPushStatusParam) { public boolean orderStatus(PerformanceExpressPushStatusParam performanceExpressPushStatusParam) {
boolean res = shunfengSignUtils.receiveRequestAndCheckSign(JsonUtils.toJson(performanceExpressPushStatusParam), httpServletRequest); boolean res = shunfengSignUtils.receiveRequestAndCheckSign(JsonUtils.toJson(performanceExpressPushStatusParam), httpServletRequest);
...@@ -135,4 +146,14 @@ public class PerformancesExpressCallbackServiceImpl extends ServiceImpl<KylinOrd ...@@ -135,4 +146,14 @@ public class PerformancesExpressCallbackServiceImpl extends ServiceImpl<KylinOrd
return false; return false;
} }
public List<KylinOrderExpressRouteVo> orderRouteDetail(String orderTicketsId) {
String redisKey = KylinRedisConst.ORDER_ROUTE_INFO.concat(orderTicketsId);
if (!redisUtil.hasKey(redisKey)) {
Query query = new Query();
query.addCriteria(Criteria.where("orderTicketsId").is(orderTicketsId));
List<KylinOrderExpressRouteVo> routeList = mongoTemplate.find(query, KylinOrderExpressRouteVo.class, KylinOrderExpressRouteVo.class.getSimpleName());
redisUtil.set(redisKey, routeList);
}
return (List<KylinOrderExpressRouteVo>) redisUtil.get(redisKey);
}
} }
\ No newline at end of file
package com.liquidnet.service.platform.utils; package com.liquidnet.service.platform.utils;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.UserPathDto;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.HashMap;
/** /**
* <p> * <p>
...@@ -31,86 +20,16 @@ import java.util.HashMap; ...@@ -31,86 +20,16 @@ import java.util.HashMap;
@Component @Component
@Slf4j @Slf4j
public class ShunfengSignUtils { public class ShunfengSignUtils {
/**
* appId
*/
@Value("${liquidnet.shunfeng.appid}")
private String APP_ID;
/** /**
* sk * sk
*/ */
@Value("${liquidnet.shunfeng.sk}") @Value("${liquidnet.shunfeng.sk}")
private String SK; private String SK;
/**
* url
*/
@Value("${liquidnet.shunfeng.url}")
private String URL;
/** /**
* 签名有效期(可根据实际业务设定)单位:毫秒 * 签名有效期(可根据实际业务设定)单位:毫秒
*/ */
private final static Long CHECK_TIME = 600000L; private final static Long CHECK_TIME = 600000L;
/**
* 生成签名并请求
* @param hbody 请求body
* @return
*/
public String generateSignatureAndRequest(HashMap<String, Object> hbody, String url) {
long currentTimeMillis = System.currentTimeMillis(); // 时间戳
String timestamp = currentTimeMillis + "";
hbody.put("companyId", APP_ID);
String body = JsonUtils.toJson(hbody);
// 生成签名
String sign = genSign(timestamp,body);
CloseableHttpClient client = HttpClients.createDefault();
// 请求下单地址
HttpPost httpPost = new HttpPost(URL + url);
// sendAppId(sendAppId需赋值appId)
httpPost.addHeader("sendAppId", APP_ID);
// 时间戳需和获取验签时一致!!!
httpPost.addHeader("timestamp", timestamp);
// 签名
httpPost.addHeader("sign", sign);
httpPost.addHeader("Content-Type", "application/json;charset=utf-8");
httpPost.addHeader("Accept", "application/json");
// 请求body体需和获取验签时一致且编码UTF8!!!
httpPost.setEntity(new StringEntity(body, "utf-8"));
CloseableHttpResponse response = null;
log.info(UserPathDto.setData("header", "", httpPost.getAllHeaders()));
log.info(UserPathDto.setData("body", "", body));
try {
response = client.execute(httpPost);
if (response.getStatusLine().getStatusCode() == 200) {
System.out.println("发送请求成功");
HttpEntity entity = response.getEntity();
// 发送响应且编码UTF8!!!
return EntityUtils.toString(entity, "utf-8");
}
} catch (Exception e) {
System.out.println("发送请求失败");
e.printStackTrace();
} finally {
if (client != null) {
try {
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (response != null) {
try {
response.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
/** /**
* 生成签名 * 生成签名
* @param timestamp 时间戳 * @param timestamp 时间戳
......
...@@ -4,6 +4,9 @@ ...@@ -4,6 +4,9 @@
# ------------------------ 4开头错误码作系统保留 # ------------------------ 4开头错误码作系统保留
30000=请求频繁,稍后再试 30000=请求频繁,稍后再试
# 快递
20800=订单物流信息获取失败
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment