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

Commit 1565a4b8 authored by jiangxiulong's avatar jiangxiulong

同步微信用户换位置,退款前详情增加数据,申请退款接口快递

parent a3e15c9d
package com.liquidnet.service.kylin.dto.vo.admin; package com.liquidnet.service.kylin.dto.vo.admin;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
/** /**
...@@ -9,9 +10,13 @@ import lombok.Data; ...@@ -9,9 +10,13 @@ import lombok.Data;
*/ */
@Data @Data
public class OrderRefundPoundage implements Cloneable { public class OrderRefundPoundage implements Cloneable {
@ApiModelProperty(value = "天数")
private int day; private int day;
@ApiModelProperty(value = "距离演出开始日期>15天")
private String content; private String content;
@ApiModelProperty(value = "费率 如果手续费是0.1 这里存的是0.9")
private float present; private float present;
@ApiModelProperty(value = "")
private int isCanRefund; private int isCanRefund;
private static final OrderRefundPoundage obj = new OrderRefundPoundage(); private static final OrderRefundPoundage obj = new OrderRefundPoundage();
......
...@@ -4,6 +4,9 @@ import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketEntitiesVo; ...@@ -4,6 +4,9 @@ import com.liquidnet.service.kylin.dto.vo.mongo.KylinOrderTicketEntitiesVo;
import com.liquidnet.service.kylin.entity.KylinOrderTicketRelations; import com.liquidnet.service.kylin.entity.KylinOrderTicketRelations;
import com.liquidnet.service.kylin.entity.KylinOrderTicketStatus; import com.liquidnet.service.kylin.entity.KylinOrderTicketStatus;
import com.liquidnet.service.kylin.entity.KylinOrderTickets; import com.liquidnet.service.kylin.entity.KylinOrderTickets;
import com.liquidnet.service.kylin.dto.vo.admin.OrderRefundAddress;
import com.liquidnet.service.kylin.dto.vo.admin.OrderRefundPoundage;
import com.liquidnet.service.kylin.entity.KylinOrderCoupons;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -13,13 +16,14 @@ import java.io.Serializable; ...@@ -13,13 +16,14 @@ import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.ArrayList;
@ApiModel(value = "KylinOrderTicketVo", description = "订单数据") @ApiModel(value = "KylinOrderTicketVo", description = "订单数据")
@Data @Data
public class KylinOrderTicketPreVo implements Serializable,Cloneable{ public class KylinOrderTicketPreVo implements Serializable, Cloneable {
private Integer mid; private Integer mid;
private static final long serialVersionUID = 5325511589667456213L; private static final long serialVersionUID = 5325511589667456213L;
@ApiModelProperty(position = 10, value = "ID") @ApiModelProperty(position = 10, value = "订单ID")
private String orderTicketsId; private String orderTicketsId;
@ApiModelProperty(position = 11, value = "用户ID[64]") @ApiModelProperty(position = 11, value = "用户ID[64]")
private String userId; private String userId;
...@@ -27,32 +31,68 @@ public class KylinOrderTicketPreVo implements Serializable,Cloneable{ ...@@ -27,32 +31,68 @@ public class KylinOrderTicketPreVo implements Serializable,Cloneable{
private String userName; private String userName;
@ApiModelProperty(position = 13, value = "用户手机号") @ApiModelProperty(position = 13, value = "用户手机号")
private String userMobile; private String userMobile;
@ApiModelProperty(position = 14, value = "演出名称") @ApiModelProperty(value = "购票数量")
private String performanceTitle;
private String ticketTitle;
private String timeStart;
private String useStart;
private String performanceImg;
private Integer number; private Integer number;
@ApiModelProperty(value = "应付价格")
private BigDecimal priceTotal; private BigDecimal priceTotal;
private BigDecimal priceVoucher; @ApiModelProperty(value = "优惠价格")
private BigDecimal priceActual; private BigDecimal priceActual;
@ApiModelProperty(value = "快递价格")
private BigDecimal priceExpress; private BigDecimal priceExpress;
@ApiModelProperty(value = "退款价格")
private BigDecimal priceRefund; private BigDecimal priceRefund;
@ApiModelProperty(value = "退款张数")
private Integer refundNumber; private Integer refundNumber;
@ApiModelProperty(value = "是否使用优惠卷 exchange/no")
private String couponType; private String couponType;
@ApiModelProperty(value = "取票方式 电子票electronic快递票express")
private String getTicketType; private String getTicketType;
@ApiModelProperty(value = "快递类型 1寄付 2到付")
private Integer expressType; private Integer expressType;
@ApiModelProperty(value = "订单状态 0待付款 1已付款 2已关闭 3正在退款 4已退款 5待关闭 6部分退款")
private Integer status; private Integer status;
private String performanceId; @ApiModelProperty(value = "场次ID")
private String timeId; private String timeId;
@ApiModelProperty(value = "票种ID")
private String ticketId; private String ticketId;
@ApiModelProperty(value = "场地名称")
private String fieldName; private String fieldName;
@ApiModelProperty(value = "是否实名")
private Integer isTrueName; private Integer isTrueName;
@ApiModelProperty(value = "入场人退款情况")
private List<KylinOrderTicketEntitiesPreRefundVo> entitiesPreRefundVos; private List<KylinOrderTicketEntitiesPreRefundVo> entitiesPreRefundVos;
@ApiModelProperty(value = "收货人")
private String expressContacts;
@ApiModelProperty(value = "收货地址")
private String expressAddress;
@ApiModelProperty(value = "收货人联系方式")
private String expressPhone;
@ApiModelProperty(value = "演出ID")
private String performanceId;
@ApiModelProperty(position = 14, value = "演出名称")
private String performanceTitle;
@ApiModelProperty(value = "票种名称")
private String ticketTitle;
@ApiModelProperty(value = "演出开始时间")
private String timeStart;
@ApiModelProperty(value = "演出结束时间")
private String useStart;
@ApiModelProperty(value = "演出图片")
private String performanceImg;
@ApiModelProperty(value = "是否开启退款手续费 0关闭 1开启")
private Integer isRefundPoundage;
@ApiModelProperty(value = "手续费规则列表")
private ArrayList<OrderRefundPoundage> refundPoundageList;
@ApiModelProperty(value = "订单使用优惠券列表")
private ArrayList<KylinOrderCoupons> orderCouponList;
@ApiModelProperty(value = "退款快递统一寄回地址")
private OrderRefundAddress refundAddress;
private static final KylinOrderTicketPreVo obj = new KylinOrderTicketPreVo(); private static final KylinOrderTicketPreVo obj = new KylinOrderTicketPreVo();
public static KylinOrderTicketPreVo getNew() { public static KylinOrderTicketPreVo getNew() {
try { try {
return (KylinOrderTicketPreVo) obj.clone(); return (KylinOrderTicketPreVo) obj.clone();
......
...@@ -46,7 +46,7 @@ public interface IKylinOrderTicketsService { ...@@ -46,7 +46,7 @@ public interface IKylinOrderTicketsService {
* @param picList 证据截图 * @param picList 证据截图
* @return 是否成功 * @return 是否成功
*/ */
String sendOrderRefund(String orderId, String orderTicketEntitiesId, String reason, String picList); String sendOrderRefund(String orderId, String orderTicketEntitiesId, String reason, String picList, Integer sendExpressType, String sendExpressAddress, String appointmentTime, String expressNumber);
//退款撤回 //退款撤回
ResponseDto<Boolean> orderRefundWithdraw(String orderRefundsId); ResponseDto<Boolean> orderRefundWithdraw(String orderRefundsId);
......
...@@ -141,6 +141,20 @@ liquidnet: ...@@ -141,6 +141,20 @@ liquidnet:
app-name: demo app-name: demo
client-id: YXA6x4Xs7cYDQcOv6BPuM3hUDA client-id: YXA6x4Xs7cYDQcOv6BPuM3hUDA
client-secret: YXA6olr2qaW65xlkFixS81kiWnplrW4 client-secret: YXA6olr2qaW65xlkFixS81kiWnplrW4
express:
shunfeng:
url: ${liquidnet.client.admin.shunfeng.url}
sk: ${liquidnet.client.admin.shunfeng.sk}
appid: ${liquidnet.client.admin.shunfeng.appid}
custid: ${liquidnet.client.admin.shunfeng.custid}
jCompany: 北京正在映画互联网有限公司
jContact: 摩登天空票务部
jTel: 4001680650
jProvince: 北京
jCity: 北京市
jAddress: 朝阳区广渠路1号北京市商业储运公司3-12号 摩登天空
expressType: 1 # 默认顺丰特快
depositumInfo: 演出纸质票
#application-dev-end #application-dev-end
...@@ -143,6 +143,20 @@ liquidnet: ...@@ -143,6 +143,20 @@ liquidnet:
app-name: demo app-name: demo
client-id: YXA6x4Xs7cYDQcOv6BPuM3hUDA client-id: YXA6x4Xs7cYDQcOv6BPuM3hUDA
client-secret: YXA6olr2qaW65xlkFixS81kiWnplrW4 client-secret: YXA6olr2qaW65xlkFixS81kiWnplrW4
express:
shunfeng:
url: ${liquidnet.client.admin.shunfeng.url}
sk: ${liquidnet.client.admin.shunfeng.sk}
appid: ${liquidnet.client.admin.shunfeng.appid}
custid: ${liquidnet.client.admin.shunfeng.custid}
jCompany: 北京正在映画互联网有限公司
jContact: 摩登天空票务部
jTel: 4001680650
jProvince: 北京
jCity: 北京市
jAddress: 朝阳区广渠路1号北京市商业储运公司3-12号 摩登天空
expressType: 1 # 默认顺丰特快
depositumInfo: 演出纸质票
#application-test-end #application-test-end
...@@ -10,6 +10,7 @@ import org.springframework.core.env.Environment; ...@@ -10,6 +10,7 @@ import org.springframework.core.env.Environment;
import java.net.InetAddress; import java.net.InetAddress;
import java.util.Arrays; import java.util.Arrays;
@EnableAsync
@Slf4j @Slf4j
@SpringBootApplication(scanBasePackages = {"com.liquidnet"}) @SpringBootApplication(scanBasePackages = {"com.liquidnet"})
public class ServiceKylinApplication implements CommandLineRunner { public class ServiceKylinApplication implements CommandLineRunner {
......
...@@ -89,18 +89,41 @@ public class KylinOrderTicketsController { ...@@ -89,18 +89,41 @@ public class KylinOrderTicketsController {
@GetMapping("toOrderRefundDetails") @GetMapping("toOrderRefundDetails")
@ApiOperation("想要退款订单详情") @ApiOperation("想要退款订单详情")
@ApiResponse(code = 200, message = "接口返回对象参数") @ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<KylinOrderTicketPreVo> toOrderRefundDetails(@RequestParam(value = "orderId", required = false) @NotNull(message = "订单ID不能为空") String orderId) { public ResponseDto<KylinOrderTicketPreVo> toOrderRefundDetails(
@RequestParam(value = "orderId", required = false) @NotNull(message = "订单ID不能为空") String orderId
) {
return orderTicketsService.toOrderRefundDetails(orderId); return orderTicketsService.toOrderRefundDetails(orderId);
} }
@PostMapping("sendOrderRefunds") @PostMapping("sendOrderRefunds")
@ApiOperation("发起退款申请") @ApiOperation("发起退款申请")
@ApiResponse(code = 200, message = "接口返回对象参数") @ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<HashMap<String, String>> sendOrderRefund(@RequestParam(value = "orderId", required = true) @NotNull(message = "订单ID不能为空") String orderId, @ApiImplicitParams({
@RequestParam(value = "orderTicketEntitiesId", required = true) @NotNull(message = "票单ID不能为空") String orderTicketEntitiesId, @ApiImplicitParam(type = "form", dataType = "String", name = "orderId", value = "订单ID", required = true),
@RequestParam(value = "reason", required = true) @NotNull(message = "退款原因不能为空") String reason, @ApiImplicitParam(type = "form", dataType = "String", name = "orderTicketEntitiesId", value = "订单入场人ID", required = true),
@RequestParam(value = "picList", required = false) String picList) { @ApiImplicitParam(type = "form", dataType = "String", name = "reason", value = "退款申请备注", required = true),
String orderRefundId = orderTicketsService.sendOrderRefund(orderId, orderTicketEntitiesId, reason, picList); @ApiImplicitParam(type = "form", dataType = "String", name = "picList", value = "图片"),
@ApiImplicitParam(type = "form", dataType = "Integer", name = "sendExpressType", value = "快递方式 1上门取件 2自主发货"),
@ApiImplicitParam(type = "form", dataType = "String", name = "sendExpressAddress", value = "取件地址"),
@ApiImplicitParam(type = "form", dataType = "String", name = "appointmentTime", value = "预约取件时间"),
@ApiImplicitParam(type = "form", dataType = "String", name = "expressNumber", value = "自主发货的顺丰订单号")
})
public ResponseDto<HashMap<String, String>> sendOrderRefund(
@RequestParam(value = "orderId", required = true) @NotNull(message = "订单ID不能为空") String orderId,
@RequestParam(value = "orderTicketEntitiesId", required = true) @NotNull(message = "票单ID不能为空") String orderTicketEntitiesId,
@RequestParam(value = "reason", required = true) @NotNull(message = "退款原因不能为空") String reason,
@RequestParam(value = "picList", required = false) String picList,
@RequestParam(value = "sendExpressType", required = false) Integer sendExpressType,
@RequestParam(value = "sendExpressAddress", required = false) String sendExpressAddress,
@RequestParam(value = "appointmentTime", required = false) String appointmentTime,
@RequestParam(value = "expressNumber", required = false) String expressNumber
) {
// 退款
String orderRefundId = orderTicketsService.sendOrderRefund(
orderId, orderTicketEntitiesId, reason, picList,
sendExpressType, sendExpressAddress, appointmentTime, expressNumber
);
if (orderRefundId.length() > 10) { if (orderRefundId.length() > 10) {
HashMap<String, String> map = CollectionUtil.mapStringString(); HashMap<String, String> map = CollectionUtil.mapStringString();
map.put("orderRefundsId", orderRefundId); map.put("orderRefundsId", orderRefundId);
......
...@@ -5,6 +5,8 @@ import com.liquidnet.commons.lang.util.CollectionUtil; ...@@ -5,6 +5,8 @@ import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DateUtil; import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.adam.constant.AdamRedisConst; import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.kylin.constant.KylinRedisConst; import com.liquidnet.service.kylin.constant.KylinRedisConst;
import com.liquidnet.service.kylin.dto.vo.admin.OrderRefundAddress;
import com.liquidnet.service.kylin.dto.vo.admin.OrderRefundPoundage;
import com.liquidnet.service.kylin.dto.vo.express.KylinOrderExpressRouteVo; import com.liquidnet.service.kylin.dto.vo.express.KylinOrderExpressRouteVo;
import com.liquidnet.service.kylin.dto.vo.express.KylinOrderExpressVo; import com.liquidnet.service.kylin.dto.vo.express.KylinOrderExpressVo;
import com.liquidnet.service.kylin.dto.vo.mongo.*; import com.liquidnet.service.kylin.dto.vo.mongo.*;
...@@ -707,4 +709,53 @@ public class DataUtils { ...@@ -707,4 +709,53 @@ public class DataUtils {
return kylinPerformanceVoList; return kylinPerformanceVoList;
} }
// 获取手续费
public ArrayList<OrderRefundPoundage> getRefundPoundage(Integer isRefundPoundage) {
ArrayList<OrderRefundPoundage> orderRefundPoundageArrayList = ObjectUtil.getOrderRefundPoundageArrayList();
if (isRefundPoundage > 0) { // 开启了演出退票有手续费
Object obj = redisUtil.get(KylinRedisConst.ORDER_REFUND_POUNDAGE);
if (obj == null) {
return orderRefundPoundageArrayList;
} else {
return (ArrayList<OrderRefundPoundage>) obj;
}
} else { // 退票不需要手续费
return orderRefundPoundageArrayList;
}
}
// 获取订单券的实用情况
public ArrayList<KylinOrderCoupons> getOrderCoupon(String orderId){
String redisKey = KylinRedisConst.ORDER_COUPON.concat(orderId);
Object obj = redisUtil.get(redisKey);
if (obj == null) {
return ObjectUtil.getKylinOrderCouponsArrayList();
} else {
return (ArrayList<KylinOrderCoupons>) obj;
}
}
// 快递地址
public OrderRefundAddress getRefundAddress(String getTicketType) {
if (getTicketType.equals("express")) { // 快递票
return null;
} else { // 电子票
Object obj = redisUtil.get(KylinRedisConst.ORDER_REFUND_ADDRESS);
if (obj == null) {
return null;
} else {
return (OrderRefundAddress) obj;
}
}
}
/**
* 演出订单快递信息
* @param orderId
* @param kylinOrderExpressVo
*/
public void setOrderExpressInfo(String orderId, KylinOrderExpressVo kylinOrderExpressVo) {
String redisKey = KylinRedisConst.ORDER_EXPRESS_INFO.concat(orderId);
redisUtil.set(redisKey, kylinOrderExpressVo);
}
} }
package com.liquidnet.service.kylin.utils;
import org.apache.http.*;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.util.EntityUtils;
import org.springframework.util.CollectionUtils;
import java.io.IOException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class HttpsUtils {
private static final String HTTP = "http";
private static final String HTTPS = "https";
private static SSLConnectionSocketFactory sslsf = null;
private static PoolingHttpClientConnectionManager cm = null;
private static SSLContextBuilder builder = null;
static {
try {
builder = new SSLContextBuilder();
// 全部信任 不做身份鉴定
builder.loadTrustMaterial(null, new TrustStrategy() {
@Override
public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
return true;
}
});
sslsf = new SSLConnectionSocketFactory(builder.build(), new String[]{"SSLv2Hello", "SSLv3", "TLSv1", "TLSv1.2"}, null, NoopHostnameVerifier.INSTANCE);
Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
.register(HTTP, new PlainConnectionSocketFactory())
.register(HTTPS, sslsf)
.build();
cm = new PoolingHttpClientConnectionManager(registry);
cm.setMaxTotal(200);//max connection
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* httpClient post请求
*
* @param url 请求url
* @param header 头部信息
* @param param 请求参数 form提交适用
* @param entity 请求实体 json/xml提交适用
* @return 可能为空 需要处理
* @throws Exception
*/
public static String post(String url, Map<String, String> header, Map<String, String> param, HttpEntity entity) throws Exception {
String result = "";
CloseableHttpClient httpClient = null;
try {
httpClient = getHttpClient();
HttpPost httpPost = new HttpPost(url);
// 设置头信息
if (CollectionUtils.isEmpty(header)) {
for (Map.Entry<String, String> entry : header.entrySet()) {
httpPost.addHeader(entry.getKey(), entry.getValue());
}
}
// 设置请求参数
if (CollectionUtils.isEmpty(param)) {
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
for (Map.Entry<String, String> entry : param.entrySet()) {
//给参数赋值
formparams.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
}
UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(formparams, Consts.UTF_8);
httpPost.setEntity(urlEncodedFormEntity);
}
// 设置实体 优先级高
if (entity != null) {
httpPost.setEntity(entity);
}
HttpResponse httpResponse = httpClient.execute(httpPost);
int statusCode = httpResponse.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK) {
HttpEntity resEntity = httpResponse.getEntity();
result = EntityUtils.toString(resEntity);
} else {
readHttpResponse(httpResponse);
}
} catch (Exception e) {
throw e;
} finally {
if (httpClient != null) {
httpClient.close();
}
}
return result;
}
public static CloseableHttpClient getHttpClient() throws Exception {
CloseableHttpClient httpClient = HttpClients.custom()
.setSSLSocketFactory(sslsf)
.setConnectionManager(cm)
.setConnectionManagerShared(true)
.build();
return httpClient;
}
public static String readHttpResponse(HttpResponse httpResponse)
throws ParseException, IOException {
StringBuilder builder = new StringBuilder();
// 获取响应消息实体
HttpEntity entity = httpResponse.getEntity();
// 响应状态
builder.append("status:" + httpResponse.getStatusLine());
builder.append("headers:");
HeaderIterator iterator = httpResponse.headerIterator();
while (iterator.hasNext()) {
builder.append("\t" + iterator.next());
}
// 判断响应实体是否为空
if (entity != null) {
String responseString = EntityUtils.toString(entity);
builder.append("response length:" + responseString.length());
builder.append("response content:" + responseString.replace("\r\n", ""));
}
return builder.toString();
}
}
\ No newline at end of file
...@@ -2,11 +2,13 @@ package com.liquidnet.service.kylin.utils; ...@@ -2,11 +2,13 @@ package com.liquidnet.service.kylin.utils;
import com.liquidnet.service.adam.dto.vo.AdamEntersVo; import com.liquidnet.service.adam.dto.vo.AdamEntersVo;
import com.liquidnet.service.base.PagedResult; import com.liquidnet.service.base.PagedResult;
import com.liquidnet.service.kylin.dto.vo.admin.OrderRefundPoundage;
import com.liquidnet.service.kylin.dto.vo.middle.KylinTicketTimesVo; import com.liquidnet.service.kylin.dto.vo.middle.KylinTicketTimesVo;
import com.liquidnet.service.kylin.dto.vo.middle.KylinTicketVo; import com.liquidnet.service.kylin.dto.vo.middle.KylinTicketVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo; import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo;
import com.liquidnet.service.kylin.dto.vo.returns.*; import com.liquidnet.service.kylin.dto.vo.returns.*;
import com.liquidnet.service.kylin.entity.KylinBanners; import com.liquidnet.service.kylin.entity.KylinBanners;
import com.liquidnet.service.kylin.entity.KylinOrderCoupons;
import com.mongodb.client.model.WriteModel; import com.mongodb.client.model.WriteModel;
import org.bson.Document; import org.bson.Document;
...@@ -26,6 +28,8 @@ public class ObjectUtil { ...@@ -26,6 +28,8 @@ public class ObjectUtil {
private static final ArrayList<KylinBanners> kylinBannerListArrayList = new ArrayList<>(); private static final ArrayList<KylinBanners> kylinBannerListArrayList = new ArrayList<>();
private static final PagedResult<KylinStationPerformanceVo> kylinStationPerformanceVoPagedResult = new PagedResult<>(); private static final PagedResult<KylinStationPerformanceVo> kylinStationPerformanceVoPagedResult = new PagedResult<>();
private static final ArrayList<AdamEntersVo> arrayListObject = new ArrayList<>(); private static final ArrayList<AdamEntersVo> arrayListObject = new ArrayList<>();
private static final ArrayList<OrderRefundPoundage> orderRefundPoundageArrayList = new ArrayList<>();
private static final ArrayList<KylinOrderCoupons> kylinOrderCouponsArrayList = new ArrayList<>();
public static ArrayList<KylinStationPerformanceVo> getKylinStationPerformanceVoArrayList() { public static ArrayList<KylinStationPerformanceVo> getKylinStationPerformanceVoArrayList() {
...@@ -79,4 +83,12 @@ public class ObjectUtil { ...@@ -79,4 +83,12 @@ public class ObjectUtil {
public static ArrayList<AdamEntersVo> cloneArrayListObject() { public static ArrayList<AdamEntersVo> cloneArrayListObject() {
return (ArrayList<AdamEntersVo>) arrayListObject.clone(); return (ArrayList<AdamEntersVo>) arrayListObject.clone();
} }
public static ArrayList<OrderRefundPoundage> getOrderRefundPoundageArrayList() {
return (ArrayList<OrderRefundPoundage>) orderRefundPoundageArrayList.clone();
}
public static ArrayList<KylinOrderCoupons> getKylinOrderCouponsArrayList() {
return (ArrayList<KylinOrderCoupons>) kylinOrderCouponsArrayList.clone();
}
} }
package com.liquidnet.service.kylin.utils;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.UserPathDto;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
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.stereotype.Component;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* <p>
* 顺丰 ShunfengSignUtils ß
* </p>
*
* @author jiangxiulong
* @since 2021-06-24 8:00 下午
*/
@Component
@Slf4j
public class ShunfengSignUtils {
/**
* appId
*/
@Value("${liquidnet.express.shunfeng.appid}")
private String APP_ID;
/**
* sk
*/
@Value("${liquidnet.express.shunfeng.sk}")
private String SK;
/**
* url
*/
@Value("${liquidnet.express.shunfeng.url}")
private String URL;
/**
* 签名有效期(可根据实际业务设定)单位:毫秒
*/
private final static Long CHECK_TIME = 600000L;
/**
* 生成签名并请求
* @param hbody 请求body
* @return
*/
public String generateSignatureAndRequestNew(Map<String, String> 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);
Map<String, String> headers = new HashMap<>();
headers.put("sendAppId", APP_ID);
headers.put("timestamp", timestamp);
headers.put("sign", sign);
headers.put("Content-Type", "application/json;charset=utf-8");
headers.put("Accept", "application/json");
Map<String, String> querys = new HashMap<>();
try {
HttpEntity httpEntity = new StringEntity(body, "utf-8");
String post = HttpsUtils.post(URL + url, headers, querys, httpEntity);
return post;
} catch (Exception e) {
System.out.println("发送请求失败");
e.printStackTrace();
return e.getMessage();
}
}
/**
* 生成签名并请求 线上Received fatal alert:handshake_failure 废弃
* @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.createSystem();
/*SSLContext sslContext = SSLContexts.createSystemDefault();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
sslContext,
NoopHostnameVerifier.INSTANCE);*/
// 请求下单地址
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();
return e.getMessage();
} 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 body 请求body
* @return
*/
private String genSign(String timestamp, String body) {
if (StringUtils.isEmpty(body)) {
body = "";
}
StringBuffer sb = new StringBuffer();
sb.append(body);
sb.append("&sk=").append(SK);
sb.append("&timestamp=").append(timestamp);
byte[] bytes = DigestUtils.sha512(sb.toString());
return Base64.encodeBase64URLSafeString(bytes);
}
}
\ No newline at end of file
...@@ -53,7 +53,7 @@ public class SweetWechatLoginController { ...@@ -53,7 +53,7 @@ public class SweetWechatLoginController {
@GetMapping(value = {"mpOpenId"}) @GetMapping(value = {"mpOpenId"})
@ApiImplicitParams({ @ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "code", value = "微信code", required = true), @ApiImplicitParam(type = "query", dataType = "String", name = "code", value = "微信code", required = true),
@ApiImplicitParam(type = "query", dataType = "Integer", name = "type", value = "1草莓 2五百里 3mdsk 4正在", required = true) @ApiImplicitParam(type = "query", dataType = "Integer", name = "type", value = "1正在 2摩登", required = true)
}) })
public ResponseDto<String> wxOauth2AccessToken(@RequestParam String code, @RequestParam Integer type) { public ResponseDto<String> wxOauth2AccessToken(@RequestParam String code, @RequestParam Integer type) {
return sweetLoginService.wxOauth2AccessToken(code, type); return sweetLoginService.wxOauth2AccessToken(code, type);
......
package com.liquidnet.service.sweet.controller; package com.liquidnet.service.sweet.controller.syncRedis;
import com.liquidnet.commons.lang.util.HttpUtil; import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.service.sweet.service.impl.SweetWechatMpService; import com.liquidnet.service.sweet.service.impl.SweetWechatMpService;
......
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