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

Commit 1565a4b8 authored by jiangxiulong's avatar jiangxiulong

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

parent a3e15c9d
package com.liquidnet.service.kylin.dto.vo.admin;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
......@@ -9,9 +10,13 @@ import lombok.Data;
*/
@Data
public class OrderRefundPoundage implements Cloneable {
@ApiModelProperty(value = "天数")
private int day;
@ApiModelProperty(value = "距离演出开始日期>15天")
private String content;
@ApiModelProperty(value = "费率 如果手续费是0.1 这里存的是0.9")
private float present;
@ApiModelProperty(value = "")
private int isCanRefund;
private static final OrderRefundPoundage obj = new OrderRefundPoundage();
......
......@@ -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.KylinOrderTicketStatus;
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.ApiModelProperty;
import lombok.Data;
......@@ -13,13 +16,14 @@ import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.ArrayList;
@ApiModel(value = "KylinOrderTicketVo", description = "订单数据")
@Data
public class KylinOrderTicketPreVo implements Serializable,Cloneable{
public class KylinOrderTicketPreVo implements Serializable, Cloneable {
private Integer mid;
private static final long serialVersionUID = 5325511589667456213L;
@ApiModelProperty(position = 10, value = "ID")
@ApiModelProperty(position = 10, value = "订单ID")
private String orderTicketsId;
@ApiModelProperty(position = 11, value = "用户ID[64]")
private String userId;
......@@ -27,32 +31,68 @@ public class KylinOrderTicketPreVo implements Serializable,Cloneable{
private String userName;
@ApiModelProperty(position = 13, value = "用户手机号")
private String userMobile;
@ApiModelProperty(position = 14, value = "演出名称")
private String performanceTitle;
private String ticketTitle;
private String timeStart;
private String useStart;
private String performanceImg;
@ApiModelProperty(value = "购票数量")
private Integer number;
@ApiModelProperty(value = "应付价格")
private BigDecimal priceTotal;
private BigDecimal priceVoucher;
@ApiModelProperty(value = "优惠价格")
private BigDecimal priceActual;
@ApiModelProperty(value = "快递价格")
private BigDecimal priceExpress;
@ApiModelProperty(value = "退款价格")
private BigDecimal priceRefund;
@ApiModelProperty(value = "退款张数")
private Integer refundNumber;
@ApiModelProperty(value = "是否使用优惠卷 exchange/no")
private String couponType;
@ApiModelProperty(value = "取票方式 电子票electronic快递票express")
private String getTicketType;
@ApiModelProperty(value = "快递类型 1寄付 2到付")
private Integer expressType;
@ApiModelProperty(value = "订单状态 0待付款 1已付款 2已关闭 3正在退款 4已退款 5待关闭 6部分退款")
private Integer status;
private String performanceId;
@ApiModelProperty(value = "场次ID")
private String timeId;
@ApiModelProperty(value = "票种ID")
private String ticketId;
@ApiModelProperty(value = "场地名称")
private String fieldName;
@ApiModelProperty(value = "是否实名")
private Integer isTrueName;
@ApiModelProperty(value = "入场人退款情况")
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();
public static KylinOrderTicketPreVo getNew() {
try {
return (KylinOrderTicketPreVo) obj.clone();
......
......@@ -46,7 +46,7 @@ public interface IKylinOrderTicketsService {
* @param picList 证据截图
* @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);
......
......@@ -141,6 +141,20 @@ liquidnet:
app-name: demo
client-id: YXA6x4Xs7cYDQcOv6BPuM3hUDA
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
......@@ -143,6 +143,20 @@ liquidnet:
app-name: demo
client-id: YXA6x4Xs7cYDQcOv6BPuM3hUDA
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
......@@ -10,6 +10,7 @@ import org.springframework.core.env.Environment;
import java.net.InetAddress;
import java.util.Arrays;
@EnableAsync
@Slf4j
@SpringBootApplication(scanBasePackages = {"com.liquidnet"})
public class ServiceKylinApplication implements CommandLineRunner {
......
......@@ -89,18 +89,41 @@ public class KylinOrderTicketsController {
@GetMapping("toOrderRefundDetails")
@ApiOperation("想要退款订单详情")
@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);
}
@PostMapping("sendOrderRefunds")
@ApiOperation("发起退款申请")
@ApiResponse(code = 200, message = "接口返回对象参数")
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) {
String orderRefundId = orderTicketsService.sendOrderRefund(orderId, orderTicketEntitiesId, reason, picList);
@ApiImplicitParams({
@ApiImplicitParam(type = "form", dataType = "String", name = "orderId", value = "订单ID", required = true),
@ApiImplicitParam(type = "form", dataType = "String", name = "orderTicketEntitiesId", value = "订单入场人ID", required = true),
@ApiImplicitParam(type = "form", dataType = "String", name = "reason", value = "退款申请备注", required = true),
@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) {
HashMap<String, String> map = CollectionUtil.mapStringString();
map.put("orderRefundsId", orderRefundId);
......
......@@ -11,6 +11,9 @@ import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.UserPathDto;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.kylin.constant.KylinTableStatusConst;
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.KylinOrderExpressVo;
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.mongo.KylinOrderRefundEntitiesVo;
......@@ -20,19 +23,18 @@ import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo;
import com.liquidnet.service.kylin.dto.vo.returns.*;
import com.liquidnet.service.kylin.entity.*;
import com.liquidnet.service.kylin.service.IKylinOrderTicketsService;
import com.liquidnet.service.kylin.utils.DataUtils;
import com.liquidnet.service.kylin.utils.ObjectUtil;
import com.liquidnet.service.kylin.utils.OrderUtils;
import com.liquidnet.service.kylin.utils.QueueUtils;
import com.liquidnet.service.kylin.utils.*;
import com.mongodb.BasicDBObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.bson.Document;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
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.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
......@@ -64,6 +66,16 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
@Autowired
private KylinRefundsStatusServiceImpl refundsStatusService;
@Value("${liquidnet.express.shunfeng.custid}")
private String custid;
@Value("${liquidnet.express.shunfeng.expressType}")
private Integer expressType;
@Value("${liquidnet.express.shunfeng.depositumInfo}")
private String depositumInfo;
@Autowired
private ShunfengSignUtils shunfengSignUtils;
@Override
public PageInfo<List<KylinOrderListVo>> orderList() {
//TODO 缺快递
......@@ -315,21 +327,22 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
@Override
public ResponseDto<KylinOrderTicketPreVo> toOrderRefundDetails(String orderId) {
try {
// 订单 演出 订单退款数据
KylinOrderTicketPreVo vo = KylinOrderTicketPreVo.getNew();
String uid = CurrentUtil.getCurrentUid();
KylinOrderTicketVo orderTicketVo = dataUtils.getOrderTicketVo(orderId);
KylinPerformanceVo performanceVo = dataUtils.getPerformanceVo(orderTicketVo.getPerformanceId());
List<KylinOrderRefundsVo> kylinOrderRefundsVoBaseList = dataUtils.getOrderRefundVoByOrderId(orderTicketVo.getOrderTicketsId());
// 判断是否购买人
if (uid.equals("809406") || uid.equals("773650")) {
} else {
if (!orderTicketVo.getUserId().equals(uid)) {
return ResponseDto.failure(ErrorMapping.get("20003"));
}
}
// 入场人 数据脱敏/退款
List<KylinOrderTicketEntitiesVo> kylinOrderTicketEntitiesVoList = orderTicketVo.getEntitiesVoList();
List<KylinOrderTicketEntitiesPreRefundVo> kylinOrderTicketEntitiesPreRefundVos = ObjectUtil.getKylinOrderTicketEntitiesPreRefundVoArrayList();
// 数据脱敏
for (KylinOrderTicketEntitiesVo item : kylinOrderTicketEntitiesVoList) {
KylinOrderTicketEntitiesPreRefundVo refundVo = KylinOrderTicketEntitiesPreRefundVo.getNew();
if (item.getEnterIdCode().length() == 18) {
......@@ -343,16 +356,29 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
BeanUtils.copyProperties(item, refundVo);
kylinOrderTicketEntitiesPreRefundVos.add(refundVo);
}
// FieldName
orderTicketVo.setFieldName(performanceVo.getFieldName());
// 短OrderCode
if (orderTicketVo.getOrderCode().length() > 20) {
orderTicketVo.setOrderCode(orderTicketVo.getOrderCode().substring(orderTicketVo.getOrderCode().length() - 10));
}
// 手续费相关
ArrayList<OrderRefundPoundage> refundPoundage = dataUtils.getRefundPoundage(performanceVo.getIsRefundPoundage());
// 券
ArrayList<KylinOrderCoupons> orderCoupon = dataUtils.getOrderCoupon(orderId);
// 快递地址
OrderRefundAddress refundAddress = dataUtils.getRefundAddress(orderTicketVo.getGetTicketType());
// 整理返回数据
BeanUtils.copyProperties(orderTicketVo, vo);
vo.setIsRefundPoundage(performanceVo.getIsRefundPoundage());
vo.setRefundPoundageList(refundPoundage);
vo.setOrderCouponList(orderCoupon);
vo.setRefundAddress(refundAddress);
vo.setIsTrueName(performanceVo.getIsTrueName());
vo.setEntitiesPreRefundVos(kylinOrderTicketEntitiesPreRefundVos);
return ResponseDto.success(vo);
} catch (Exception e) {
e.printStackTrace();
log.error("toOrderRefundDetailsException", e);
return ResponseDto.failure(ErrorMapping.get("20030"));
}
}
......@@ -389,7 +415,7 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
}
@Override
public String sendOrderRefund(String orderId, String orderTicketEntitiesId, String reason, String picList) {
public String sendOrderRefund(String orderId, String orderTicketEntitiesId, String reason, String picList, Integer sendExpressType, String sendExpressAddress, String appointmentTime, String expressNumber) {
KylinOrderTicketEntitiesVo orderTicketEntitiesVo = null;
try {
String uid = CurrentUtil.getCurrentUid();
......@@ -452,6 +478,8 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
String username = StringUtils.defaultString(((String) token.get("nickname")), "");
String result = refundsStatusService.userOrderTicketRefunding(orderTicketVo, refundSinglePrice.doubleValue(), orderTicketEntitiesId, reason, picList, uid, username, kylinOrderRefundsVoBaseList.size());
if (result != "") {
// 退款申请成功 异步去快递下单
expressPlace(sendExpressType, sendExpressAddress, appointmentTime, expressNumber, orderTicketVo);
return result;
} else {
return "申请失败";
......@@ -462,6 +490,127 @@ public class KylinOrderTicketsServiceImpl implements IKylinOrderTicketsService {
}
}
@Async
public void expressPlace(Integer sendExpressType, String sendExpressAddress, String appointmentTime, String expressNumber, KylinOrderTicketVo orderTicketVo) {
if (sendExpressType == 1) { // 上门取件
// 生成预快递单 防止因失败没办法再次发起也不能主动获取数据
KylinOrderExpress kylinOrderExpressPre = new KylinOrderExpress();
String orderExpressId = IDGenerator.nextSnowId();
kylinOrderExpressPre.setExpressStatus(KylinTableStatusConst.ORDER_EXPRESS_STATUS1);
kylinOrderExpressPre.setOrderExpressId(orderExpressId);
kylinOrderExpressPre.setOrderTicketsId(orderTicketVo.getOrderTicketsId());
// 防止重复前面加上 "NEW" 因取消后再发起订单号也不能一致所以直接使用orderExpressId
String OrderExpressCode = "NEW" + orderExpressId;
kylinOrderExpressPre.setOrderExpressCode(OrderExpressCode);
kylinOrderExpressPre.setExpressType(expressType);
kylinOrderExpressPre.setCreatedAt(DateUtil.getNowTime());
kylinOrderExpressPre.setPerformancesId(orderTicketVo.getPerformanceId());
// TODO: 2021/8/26 jxl 队列入库
// kylinOrderExpressMapper.insert(kylinOrderExpressPre);
// 请求下单数据
Map<String, String> hBody = new HashMap<>();
hBody.put("custid", custid);
// TODO: 2021/8/26 jxl 发货人
hBody.put("jContact", "发货人");
hBody.put("jMobile", "15888889999");
hBody.put("jAddress", sendExpressAddress);
hBody.put("sendStartTime", appointmentTime);
// TODO: 2021/8/26 jxl 判断方式
hBody.put("payMethod", "2");// 运费付款方式:0-寄付月结;1-寄付现结;2-收方付;3-第三方付;
hBody.put("expressType", expressType.toString());// 顺丰特快
hBody.put("depositumInfo", depositumInfo);
hBody.put("orderId", OrderExpressCode);
hBody.put("depositumNo", orderTicketVo.getNumber().toString());
OrderRefundAddress refundAddress = dataUtils.getRefundAddress(orderTicketVo.getGetTicketType());
hBody.put("dContact", refundAddress.getName());
hBody.put("dTel", refundAddress.getPhone());
hBody.put("dAddress", refundAddress.getAddress());
// 生成签名并请求
String result = shunfengSignUtils.generateSignatureAndRequestNew(hBody, "/public/order/v1/placeOrder");
HashMap hashMap = new HashMap();
try {
hashMap = JsonUtils.fromJson(result, HashMap.class);
} catch (Exception e) {
log.info("expressPlaceExceptionInfo sendExpressType:[{}], sendExpressAddress:[{}], appointmentTime:[{}], expressNumber:[{}], orderTicketVo:[{}]", sendExpressType, sendExpressAddress, appointmentTime, expressNumber, orderTicketVo);
log.error("expressPlaceExceptionError", e);
}
if (null == hashMap.get("succ") || hashMap.get("succ").equals("fail")) {
String msg = "";
if (null == hashMap.get("succ")) {
msg = result;
} else {
msg = (String) hashMap.get("msg");
}
log.error("expressPlaceResultError", msg);
} else {
HashMap hashMapResult = (HashMap) hashMap.get("result");
KylinOrderExpress kylinOrderExpress = new KylinOrderExpress();
kylinOrderExpress.setExpressStatus(KylinTableStatusConst.ORDER_EXPRESS_STATUS2);
kylinOrderExpress.setMailno((String) hashMapResult.get("mailno"));
kylinOrderExpress.setFilterResult(hashMapResult.get("filter_result").toString());
kylinOrderExpress.setRemark((String) hashMapResult.get("remark"));
kylinOrderExpress.setOrigincode((String) hashMapResult.get("origincode"));
kylinOrderExpress.setDestcode((String) hashMapResult.get("destcode"));
kylinOrderExpress.setTwoDimensionCode((String) hashMapResult.get("twoDimensionCode"));
kylinOrderExpress.setReturn_tracking_no((String) hashMapResult.get("return_tracking_no"));
kylinOrderExpress.setSourceTransferCode((String) hashMapResult.get("sourceTransferCode"));
kylinOrderExpress.setSourceCityCode((String) hashMapResult.get("sourceCityCode"));
kylinOrderExpress.setSourceDeptCode((String) hashMapResult.get("sourceDeptCode"));
kylinOrderExpress.setSourceTeamCode((String) hashMapResult.get("sourceTeamCode"));
kylinOrderExpress.setDestCityCode((String) hashMapResult.get("destCityCode"));
kylinOrderExpress.setDestDeptCode((String) hashMapResult.get("destDeptCode"));
kylinOrderExpress.setDestDeptCodeMapping((String) hashMapResult.get("destDeptCodeMapping"));
kylinOrderExpress.setDestTeamCode((String) hashMapResult.get("destTeamCode"));
kylinOrderExpress.setDestTeamCodeMapping((String) hashMapResult.get("destTeamCodeMapping"));
kylinOrderExpress.setDestTransferCode((String) hashMapResult.get("destTransferCode"));
kylinOrderExpress.setDestRouteLabel((String) hashMapResult.get("destRouteLabel"));
kylinOrderExpress.setProName((String) hashMapResult.get("proName"));
kylinOrderExpress.setCargoTypeCode((String) hashMapResult.get("cargoTypeCode"));
kylinOrderExpress.setLimitTypeCode((String) hashMapResult.get("limitTypeCode"));
kylinOrderExpress.setExpressTypeCode((String) hashMapResult.get("expressTypeCode"));
kylinOrderExpress.setCodingMapping((String) hashMapResult.get("codingMapping"));
kylinOrderExpress.setCodingMappingOut((String) hashMapResult.get("codingMappingOut"));
kylinOrderExpress.setXbFlag((String) hashMapResult.get("xbFlag"));
kylinOrderExpress.setPrintFlag((String) hashMapResult.get("printFlag"));
kylinOrderExpress.setProCode((String) hashMapResult.get("proCode"));
kylinOrderExpress.setPrintIcon((String) hashMapResult.get("printIcon"));
kylinOrderExpress.setAbFlag((String) hashMapResult.get("abFlag"));
kylinOrderExpress.setDestPortCode((String) hashMapResult.get("destPortCode"));
kylinOrderExpress.setDestPortCode((String) hashMapResult.get("destPortCode"));
kylinOrderExpress.setDestCountry((String) hashMapResult.get("destCountry"));
kylinOrderExpress.setDestPostCode((String) hashMapResult.get("destPostCode"));
kylinOrderExpress.setGoodsValueTotal((String) hashMapResult.get("goodsValueTotal"));
kylinOrderExpress.setCurrencySymbol((String) hashMapResult.get("currencySymbol"));
kylinOrderExpress.setGoodsNumber((String) hashMapResult.get("goodsNumber"));
kylinOrderExpress.setTwoDimensionCode2((String) hashMapResult.get("twoDimensionCode2"));
kylinOrderExpress.setNewIcon((String) hashMapResult.get("newIcon"));
kylinOrderExpress.setNewAbflag((String) hashMapResult.get("newAbflag"));
kylinOrderExpress.setUpdatedAt(DateUtil.getNowTime());
// TODO: 2021/8/26 jxl 队列入库
/*kylinOrderExpressMapper.update(
kylinOrderExpress
, new UpdateWrapper<KylinOrderExpress>().in("order_express_id", orderExpressId)
);*/
KylinOrderExpressVo kylinOrderExpressVo = new KylinOrderExpressVo();
BeanUtils.copyProperties(kylinOrderExpressPre, kylinOrderExpressVo);
kylinOrderExpressVo.setMailno(kylinOrderExpress.getMailno());
kylinOrderExpressVo.setExpressStatus(kylinOrderExpress.getExpressStatus());
dataUtils.setOrderExpressInfo(orderTicketVo.getOrderTicketsId(), kylinOrderExpressVo);
}
} else if(sendExpressType == 2) { // 自主发货
}
}
@Override
public ResponseDto<Boolean> orderRefundWithdraw(String orderRefundsId) {
......
......@@ -5,6 +5,8 @@ import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.adam.constant.AdamRedisConst;
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.KylinOrderExpressVo;
import com.liquidnet.service.kylin.dto.vo.mongo.*;
......@@ -707,4 +709,53 @@ public class DataUtils {
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;
import com.liquidnet.service.adam.dto.vo.AdamEntersVo;
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.KylinTicketVo;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo;
import com.liquidnet.service.kylin.dto.vo.returns.*;
import com.liquidnet.service.kylin.entity.KylinBanners;
import com.liquidnet.service.kylin.entity.KylinOrderCoupons;
import com.mongodb.client.model.WriteModel;
import org.bson.Document;
......@@ -26,6 +28,8 @@ public class ObjectUtil {
private static final ArrayList<KylinBanners> kylinBannerListArrayList = new ArrayList<>();
private static final PagedResult<KylinStationPerformanceVo> kylinStationPerformanceVoPagedResult = new PagedResult<>();
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() {
......@@ -79,4 +83,12 @@ public class ObjectUtil {
public static ArrayList<AdamEntersVo> cloneArrayListObject() {
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 {
@GetMapping(value = {"mpOpenId"})
@ApiImplicitParams({
@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) {
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.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