Commit 9ee3fd46 by xiaoer.li@freemud.com

Merge remote-tracking branch 'origin/feature/20201110_混合支付退款_张志恒'

# Conflicts:
#	assortment-ordercenter-sdk/pom.xml
#	assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/adapter/OrderSdkAdapter.java
#	assortment-ordercenter-sdk/src/main/java/com/freemud/sdk/api/assortment/order/response/order/QueryOrdersResponse.java
#	order-application-service/pom.xml
#	order-management/pom.xml
#	ordercenter-sdk/src/main/java/com/freemud/application/sdk/api/ordercenter/response/orderInfo/OrderInfoReqs.java
parents dedb9331 2bb50c92
...@@ -1171,6 +1171,8 @@ public class OrderSdkAdapter { ...@@ -1171,6 +1171,8 @@ public class OrderSdkAdapter {
data.setExpressChannelName(orderInfoReqs.getExpressChannelName()); data.setExpressChannelName(orderInfoReqs.getExpressChannelName());
//发票信息 //发票信息
data.setOrderInvoice(orderInfoReqs.getOrderInvoice()); data.setOrderInvoice(orderInfoReqs.getOrderInvoice());
data.setPayChannelType(orderInfoReqs.getPayChannelType());
data.setPickUpGoodsNo(orderInfoReqs.getPickUpGoodsNo());
//todo:混合支付 //todo:混合支付
if (CollectionUtils.isNotEmpty(orderInfoReqs.getOrderPayItemCreateReqList())) { if (CollectionUtils.isNotEmpty(orderInfoReqs.getOrderPayItemCreateReqList())) {
data.setOrderPayItem(this.getOrderItemPayList(orderInfoReqs.getOrderPayItemCreateReqList())); data.setOrderPayItem(this.getOrderItemPayList(orderInfoReqs.getOrderPayItemCreateReqList()));
......
...@@ -4,6 +4,8 @@ public class ResponseCodeConstant { ...@@ -4,6 +4,8 @@ public class ResponseCodeConstant {
public final static Integer RESPONSE_SUCCESS = 100; public final static Integer RESPONSE_SUCCESS = 100;
public final static Integer ORDER_PAY_RESPONSE_SUCCESS = 200;
public final static String RESPONSE_SUCCESS_STR = "100"; public final static String RESPONSE_SUCCESS_STR = "100";
} }
package com.freemud.sdk.api.assortment.order.request.order;
import lombok.Data;
import lombok.ToString;
@Data
@ToString
public class MultiOrderRefundRequest {
/**
* 非码订单号
*/
private String fmId;
/**
* 操作人ID
*/
private boolean isVer3;
/**
* 操作人ID
*/
private String notifyUrl;
/**
* 操作人ID
*/
private String operatorId;
/**
* 退款金额
*/
private Long refundAmount;
/**
* 退款编号
*/
private String refundTradeNo;
/**
*
*/
private String stationId;
/**
* 外部交易流水号,由上游系统生成,需保证唯一(支付标识)
*/
private String outOrderNo;
/**
* 商户编号(由非码提供)
*/
private String partnerId;
/**
* 商家门店号(在线支付需要提前定义)
*/
private String storeId;
/**
* 接口版本,默认30
*/
private String ver;
}
package com.freemud.sdk.api.assortment.order.response.order;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.util.List;
/**
* 聚合退款返回
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class MultiOrderRefundResponse<T> {
private int code;
private String msg;
private RefundPlatform data;
@Data
public class RefundPlatform {
public List<RefundPlatformResponse> refundPlatformResponseList;
}
@Data
public static class RefundPlatformResponse{
private String endTransTradeNo;
private String fmRefundNo;
private String fmTradeNo;
private Integer mcouponAmount;
private Integer pcouponAmount;
private String platformTradeNo;
private Integer refundAmount;
private String refundCurrency;
private String refundDesc;
private String refundEndTransTradeNo;
private String refundTime;
private String refundTradeNo;
private Integer settleRefundAmount;
private Integer totalAmount;
private String transId;
private String ebcode;
}
}
\ No newline at end of file
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
*/ */
package com.freemud.sdk.api.assortment.order.response.order; package com.freemud.sdk.api.assortment.order.response.order;
import com.freemud.application.sdk.api.ordercenter.response.OrderPayItemResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.AfterSalesOrderResp; import com.freemud.application.sdk.api.ordercenter.response.orderInfo.AfterSalesOrderResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderCostResp; import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderCostResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderCostResp; import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderCostResp;
...@@ -381,6 +382,7 @@ public class QueryOrdersResponse { ...@@ -381,6 +382,7 @@ public class QueryOrdersResponse {
* 混合支付list * 混合支付list
*/ */
private List<OrderPayItem> orderPayItem; private List<OrderPayItem> orderPayItem;
private String pickUpGoodsNo;
@NoArgsConstructor @NoArgsConstructor
@Data @Data
......
...@@ -86,9 +86,7 @@ import java.math.BigDecimal; ...@@ -86,9 +86,7 @@ import java.math.BigDecimal;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException; import java.security.spec.InvalidKeySpecException;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -2144,6 +2142,22 @@ public class OrderAdapter { ...@@ -2144,6 +2142,22 @@ public class OrderAdapter {
return orderPayRefundRequest; return orderPayRefundRequest;
} }
public MultiOrderRefundRequest getMultiOrderPayRefundRequest(QueryOrdersResponseDto.DataBean.OrderBean orderBean, Long refundId) {
MultiOrderRefundRequest multiQueryRequest = new MultiOrderRefundRequest();
multiQueryRequest.setStationId("1");
multiQueryRequest.setPartnerId(orderBean.getCompanyId());
multiQueryRequest.setStoreId(orderBean.getShopId());
multiQueryRequest.setFmId("");
multiQueryRequest.setRefundAmount(orderBean.getAmount());
multiQueryRequest.setRefundTradeNo(String.valueOf(refundId));
multiQueryRequest.setStoreId(orderBean.getShopId());
multiQueryRequest.setNotifyUrl(refundNotifyCallback);
multiQueryRequest.setVer("V1");
multiQueryRequest.setVer3(false);
multiQueryRequest.setOutOrderNo(orderBean.getOid());
return multiQueryRequest;
}
public CancelOrderRequest convent2CancelOrderRequest(String orderId, String partnerId, AfterSalesType afterSalesType, public CancelOrderRequest convent2CancelOrderRequest(String orderId, String partnerId, AfterSalesType afterSalesType,
String reason, String trackingNo, String refundId) { String reason, String trackingNo, String refundId) {
CancelOrderRequest cancelOrderRequest = new CancelOrderRequest(); CancelOrderRequest cancelOrderRequest = new CancelOrderRequest();
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
*/ */
package cn.freemud.entities.dto; package cn.freemud.entities.dto;
import com.freemud.application.sdk.api.ordercenter.response.OrderPayItemResp;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderCostResp; import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderCostResp;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse; import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import lombok.Data; import lombok.Data;
...@@ -139,6 +140,7 @@ public class QueryOrdersResponseDto { ...@@ -139,6 +140,7 @@ public class QueryOrdersResponseDto {
private String otherCode; private String otherCode;
private String partition; private String partition;
private String payChannel; private String payChannel;
private String payChannelType;
private String payChannelName; private String payChannelName;
/** /**
* 订单支付状态 1 未支付 2 已支付 3 已退款 4 已经部分退款 5 完成 * 订单支付状态 1 未支付 2 已支付 3 已退款 4 已经部分退款 5 完成
...@@ -278,6 +280,13 @@ public class QueryOrdersResponseDto { ...@@ -278,6 +280,13 @@ public class QueryOrdersResponseDto {
*/ */
private BigDecimal weight; private BigDecimal weight;
/**
* 混合支付详情
*/
private List<OrderPayItem> orderPayItem;
@NoArgsConstructor @NoArgsConstructor
@Data @Data
public static class AddDeliveryInfo { public static class AddDeliveryInfo {
......
...@@ -160,6 +160,8 @@ public enum ResponseResult { ...@@ -160,6 +160,8 @@ public enum ResponseResult {
ORDER_TAKE_OUT_ADDRESS_NOT_VALID("45063", "收货地址校验失败"), ORDER_TAKE_OUT_ADDRESS_NOT_VALID("45063", "收货地址校验失败"),
ORDER_PICK_UP_GOOD_NO("45064", "更新取餐码失败"), ORDER_PICK_UP_GOOD_NO("45064", "更新取餐码失败"),
ORDER_NOT_CREATE_ERROR("45065", "请不要重复创建订单"), ORDER_NOT_CREATE_ERROR("45065", "请不要重复创建订单"),
MULTIORDER__ERRORREFUND("45005", "订单申请退款失败"),
/** /**
* 支付 * 支付
......
...@@ -47,6 +47,7 @@ import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto; ...@@ -47,6 +47,7 @@ import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto;
import cn.freemud.entities.vo.*; import cn.freemud.entities.vo.*;
import cn.freemud.enums.*; import cn.freemud.enums.*;
import cn.freemud.interceptor.ServiceException; import cn.freemud.interceptor.ServiceException;
import cn.freemud.management.thirdparty.MulitiPaymentClient;
import cn.freemud.redis.RedisCache; import cn.freemud.redis.RedisCache;
import cn.freemud.service.*; import cn.freemud.service.*;
import cn.freemud.service.thirdparty.*; import cn.freemud.service.thirdparty.*;
...@@ -135,7 +136,6 @@ import org.springframework.beans.BeanUtils; ...@@ -135,7 +136,6 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import tk.mybatis.mapper.util.StringUtil; import tk.mybatis.mapper.util.StringUtil;
...@@ -256,7 +256,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -256,7 +256,7 @@ public class OrderServiceImpl implements Orderservice {
@Autowired @Autowired
private DeliveryFeiginClient deliveryFeiginClient; private DeliveryFeiginClient deliveryFeiginClient;
@Autowired @Autowired
private RedisTemplate redisTemplate; private MulitiPaymentClient mulitiPaymentClient;
@Autowired @Autowired
private CustomerExtendClient extendClient; private CustomerExtendClient extendClient;
...@@ -639,6 +639,11 @@ public class OrderServiceImpl implements Orderservice { ...@@ -639,6 +639,11 @@ public class OrderServiceImpl implements Orderservice {
@Override @Override
public String refundNotifyCallback(RefundNotifyCallbackRequestVo requestVo) { public String refundNotifyCallback(RefundNotifyCallbackRequestVo requestVo) {
//混合支付需要从换从中获取订单号码,正常支付TransId = orderId
String orderId = redisCache.getValue(RedisUtil.getPaymentTransIdOrderKey(requestVo.getTransId()));
if(StringUtils.isNotEmpty(orderId)){
requestVo.setTransId(orderId);
}
String trackingNo = LogTreadLocal.getTrackingNo(); String trackingNo = LogTreadLocal.getTrackingNo();
if (StringUtils.isEmpty(requestVo.getTransId())) { if (StringUtils.isEmpty(requestVo.getTransId())) {
//订单号不能为空 //订单号不能为空
...@@ -1672,14 +1677,30 @@ public class OrderServiceImpl implements Orderservice { ...@@ -1672,14 +1677,30 @@ public class OrderServiceImpl implements Orderservice {
String partnerId = orderBean.getCompanyId(); String partnerId = orderBean.getCompanyId();
int state = PayRefundStatus.SUCCESS.getCode(); int state = PayRefundStatus.SUCCESS.getCode();
if (orderBean.getAmount() != 0) { if (orderBean.getAmount() != 0) {
//调用支付退款 if(null != orderBean.getOrderPayItem() && orderBean.getOrderPayItem().size()>0){
com.freemud.sdk.api.assortment.payment.request.OrderRefundRequest orderPayRefundRequest = orderAdapter.getOrderPayRefundRequest(orderBean, refundId, fatherOrderId); //调用支付退款
response = standardPaymentService.orderRefund(orderPayRefundRequest, LogTreadLocal.getTrackingNo()); MultiOrderRefundRequest multiOrderRefundRequest = orderAdapter.getMultiOrderPayRefundRequest(orderBean, refundId);
if (response == null || response.getData() == null || !com.freemud.sdk.api.assortment.order.domain.ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(response.getCode())) { MultiOrderRefundResponse multiOrderRefundResponse = mulitiPaymentClient.paymentApplicationRefund(multiOrderRefundRequest,orderBean.getCompanyId());
return ResponseUtil.error(ResponseResult.ORDER__ERRORREFUND.getCode(), "orderRefund_failed"); if (multiOrderRefundResponse == null || multiOrderRefundResponse.getData() == null || !com.freemud.sdk.api.assortment.order.domain.ResponseCodeConstant.ORDER_PAY_RESPONSE_SUCCESS.equals(multiOrderRefundResponse.getCode())) {
return ResponseUtil.error(ResponseResult.MULTIORDER__ERRORREFUND.getCode(), "multiOrderRefund_failed");
}
List<MultiOrderRefundResponse.RefundPlatformResponse> refundPlatformResponseList = multiOrderRefundResponse.getData().refundPlatformResponseList;
refundPlatformResponseList = refundPlatformResponseList.stream().filter(m -> !m.getEbcode().equalsIgnoreCase("10102")).collect(Collectors.toList());
if(null != refundPlatformResponseList && refundPlatformResponseList.size()>0){
redisCache.save(RedisUtil.getPaymentTransIdSequenceKey(refundPlatformResponseList.get(0).getTransId()),orderBean.getOid(),1L,TimeUnit.DAYS);
}
//获取支付返回退款状态
state = PayRefundStatus.SUCCESS.getCode();
}else {
//调用支付退款
com.freemud.sdk.api.assortment.payment.request.OrderRefundRequest orderPayRefundRequest = orderAdapter.getOrderPayRefundRequest(orderBean, refundId, fatherOrderId);
response = standardPaymentService.orderRefund(orderPayRefundRequest, LogTreadLocal.getTrackingNo());
if (response == null || response.getData() == null || !com.freemud.sdk.api.assortment.order.domain.ResponseCodeConstant.RESPONSE_SUCCESS_STR.equals(response.getCode())) {
return ResponseUtil.error(ResponseResult.ORDER__ERRORREFUND.getCode(), "orderRefund_failed");
}
//获取支付返回退款状态
state = response.getData().getRefundStatus() == null ? PayRefundStatus.SUCCESS.getCode() : response.getData().getRefundStatus();
} }
//获取支付返回退款状态
state = response.getData().getRefundStatus() == null ? PayRefundStatus.SUCCESS.getCode() : response.getData().getRefundStatus();
} }
CancelOrderRequest cancelOrderRequest = orderAdapter.convent2CancelOrderRequest(orderBean.getOid(), CancelOrderRequest cancelOrderRequest = orderAdapter.convent2CancelOrderRequest(orderBean.getOid(),
partnerId, afterSalesType, orderRefundVo.getReason(), LogTreadLocal.getTrackingNo(), refundId.toString()); partnerId, afterSalesType, orderRefundVo.getReason(), LogTreadLocal.getTrackingNo(), refundId.toString());
...@@ -1834,6 +1855,7 @@ public class OrderServiceImpl implements Orderservice { ...@@ -1834,6 +1855,7 @@ public class OrderServiceImpl implements Orderservice {
req.setPartnerId(vo.getPartnerId()); req.setPartnerId(vo.getPartnerId());
req.setImgUlr(vo.getImgUrl()); req.setImgUlr(vo.getImgUrl());
req.setMobile(userInfo.getMobile()); req.setMobile(userInfo.getMobile());
req.setOperator(userInfo.getNickName());
//积分订单为4 //积分订单为4
req.setOrderType((byte) 4); req.setOrderType((byte) 4);
com.freemud.application.sdk.api.ordercenter.response.BaseResponse<OrderResp> result = orderSdkService.parking_v2_create(req, LogThreadLocal.getTrackingNo()); com.freemud.application.sdk.api.ordercenter.response.BaseResponse<OrderResp> result = orderSdkService.parking_v2_create(req, LogThreadLocal.getTrackingNo());
......
...@@ -3,6 +3,7 @@ package cn.freemud.management.adapter; ...@@ -3,6 +3,7 @@ package cn.freemud.management.adapter;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.base.SDKCommonBaseContextWare; import com.freemud.application.sdk.api.base.SDKCommonBaseContextWare;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto; import com.freemud.application.sdk.api.ordercenter.request.OrderExtInfoDto;
import com.freemud.sdk.api.assortment.order.request.order.MultiOrderRefundRequest;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse; import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -42,6 +43,22 @@ public class PaymentSdkAdapter { ...@@ -42,6 +43,22 @@ public class PaymentSdkAdapter {
return refundRequestDTO; return refundRequestDTO;
} }
public MultiOrderRefundRequest getMultiOrderPayRefundRequest(QueryOrdersResponse.DataBean.OrderBean orderBean, BigDecimal refundAmount) {
MultiOrderRefundRequest multiQueryRequest = new MultiOrderRefundRequest();
multiQueryRequest.setStationId("1");
multiQueryRequest.setPartnerId(orderBean.getCompanyId());
multiQueryRequest.setStoreId(orderBean.getShopId());
multiQueryRequest.setFmId("");
multiQueryRequest.setRefundAmount(Long.valueOf(String.valueOf(refundAmount)));
multiQueryRequest.setRefundTradeNo(getRefundSerialNo().toString());
multiQueryRequest.setStoreId(orderBean.getShopId());
multiQueryRequest.setNotifyUrl(refundNotifyCallback);
multiQueryRequest.setVer("V1");
multiQueryRequest.setVer3(false);
multiQueryRequest.setOutOrderNo(orderBean.getOid());
return multiQueryRequest;
}
private Long getRefundSerialNo() { private Long getRefundSerialNo() {
return System.currentTimeMillis() + (int) (Math.random() * 9000) + 1000; return System.currentTimeMillis() + (int) (Math.random() * 9000) + 1000;
} }
......
package cn.freemud.management.entities.dto.request.coupon;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class MCCafeCouponRequest {
/**
* 接口版本
*/
@NotNull
private Integer ver;
/**
* kdg.Y 开个店渠道且需要回调三方
* kgd.N 开个店渠道且不需要回调三方
*/
private String appFlag;
/**
* 需要查询的券码,仅供查询券使用
*/
private String coupon;
/**
* 请求操作类型,0是卡券查询,2是卡券交易查询,3是卡券冲正,71是卡券核销
*/
@NotNull(message = "操作不能为空")
private Integer reqtype;
/**
* 商家门店号
*/
@NotBlank(message = "商家门店号不能为空")
private String store_id;
/**
* 子品牌 ID 可以为空
*/
private String organize_id;
/**
* 组织机构ID(注意和channle的区别)
*/
private List<String> channel_ids;
/**
* 组织机构code(注意和channle的区别)
*/
private List<String> channel_codes;
/**
* 商家POS机编号
*/
@NotBlank(message = "商家POS机编号不能为空")
private String station_id;
/**
* 营业员编号
*/
@NotBlank(message = "营业员编号不能为空")
private String operator_id;
/**
* 商户编号
*/
@NotNull(message = "商户编号不能为空")
private Integer partnerId;
private Integer checkValue;
private Integer clientReqCount;
/**
* POS交易序号
*/
private String trans_id;
/**
* 营业日
*/
private String business_date;
/**
* 优惠券列表
*/
private List<MCCafeTransactionVo> transactions;
/**
* 签名
*/
private String sign;
/**
* 追加key
*/
private String appSecret;
private String openid;
private String transactionuuid;
private String status;
private Boolean isManual;
private String channel;
}
package cn.freemud.management.enums;
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @version V1.6.0
* @Title: RedisCacheEnum
* @Description: 简单描述下这个类是做什么用的
* @author: qin.zhou
* @date: 2019/9/221:35
* @Copyright: ${DATE.YARE} www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
public enum RedisCacheEnum {
TABLENUMBER_ORDERCODE("kgd:encircle:tablenumber:orderId:","记录预支付订单桌号与订单号绑定关系"),
/**
* 围餐开台lock key 拼接商户:门店:桌号
*/
CREATERESERVEORDER_LOCKKEY_PREFIX("kgd:encircle:order:begin:table:lock:","围餐开台业务lockKey"),
TABLENUMBER_LOCKKEY_PREFIX("kgd:encircle:order:tablenumber:lock:","围餐业务开台后不完全依赖门店的桌号状态"),
CREATE_PRE_PAYMENTORDER_LOCKKEY_PREFIX("kgd:encircle:pre:payment:table:lock:","围餐创建预支付业务lockKey"),
ORDER_PLUS_DISH_LOCKKEY_PREFIX("kgd:encircle:plus:dish:table:lock:","围餐下单业务LockKey"),
ORDER_CREATE_TRANS_ID_KEY("kgd:meal:trans:{0}:{1}:{2}:{3}","围餐下单多次创建预支付生成不同TRANS_ID"),
ORDER_CREATE_PRE_PARMENT_INTO_LOCK("kgd:meal:pre:payment:lock:","围餐订单唤起预支付锁定不可下单"),
ORDER_CACHE_WEICAN_TRANSID_INFO("kgd:meal:payment:trans:order:","缓存围餐支付transId"),
PAYMENT_TRANSID_SEQUENCE_KEY("kgd:payment:transid:sequence:{0}", "创建预支付交易号序列"),
PAYMENT_TRANSID_ORDER_KEY("kgd:payment:transid:order:{0}", "交易订单key"),
;
private String code;
private String desc;
RedisCacheEnum(String code, String desc) {
this.code = code;
this.desc = desc;
}
public static RedisCacheEnum getByCode(String code) {
for (RedisCacheEnum status : values()) {
if (status.getCode().equals(code)) {
return status;
}
}
return null;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
...@@ -5,11 +5,16 @@ import cn.freemud.management.entities.dto.request.order.OrderManagerRequest; ...@@ -5,11 +5,16 @@ import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.response.pay.PayRefundResponse; import cn.freemud.management.entities.dto.response.pay.PayRefundResponse;
import cn.freemud.management.enums.ResponseResult; import cn.freemud.management.enums.ResponseResult;
import cn.freemud.management.intercept.OrderServiceException; import cn.freemud.management.intercept.OrderServiceException;
import cn.freemud.management.thirdparty.MulitiPaymentClient;
import cn.freemud.management.util.RedisUtil;
import cn.freemud.redis.RedisCache;
import com.freemud.application.sdk.api.base.BaseResponse; import com.freemud.application.sdk.api.base.BaseResponse;
import com.freemud.application.sdk.api.log.ErrorLog; import com.freemud.application.sdk.api.log.ErrorLog;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.AfterSalesOrderResp; import com.freemud.application.sdk.api.ordercenter.response.orderInfo.AfterSalesOrderResp;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService; import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
import com.freemud.sdk.api.assortment.order.enums.PayRefundStatus; import com.freemud.sdk.api.assortment.order.enums.PayRefundStatus;
import com.freemud.sdk.api.assortment.order.request.order.MultiOrderRefundRequest;
import com.freemud.sdk.api.assortment.order.response.order.MultiOrderRefundResponse;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse; import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import com.freemud.sdk.api.assortment.payment.request.OrderRefundRequest; import com.freemud.sdk.api.assortment.payment.request.OrderRefundRequest;
import com.freemud.sdk.api.assortment.payment.response.OrderRefundResponse; import com.freemud.sdk.api.assortment.payment.response.OrderRefundResponse;
...@@ -21,6 +26,8 @@ import org.springframework.stereotype.Component; ...@@ -21,6 +26,8 @@ import org.springframework.stereotype.Component;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/** /**
* All rights Reserved, Designed By www.freemud.cn * All rights Reserved, Designed By www.freemud.cn
...@@ -45,8 +52,10 @@ public class PaymentHandle { ...@@ -45,8 +52,10 @@ public class PaymentHandle {
private PaymentSdkAdapter paymentSdkAdapter; private PaymentSdkAdapter paymentSdkAdapter;
@Autowired @Autowired
private OrderSdkService orderSdkService; private OrderSdkService orderSdkService;
@Autowired
private MulitiPaymentClient mulitiPaymentClient;
@Autowired
private RedisCache redisCache;
/** /**
* 退款 * 退款
* @param request * @param request
...@@ -125,4 +134,27 @@ public class PaymentHandle { ...@@ -125,4 +134,27 @@ public class PaymentHandle {
payRefundResponse.setRefundId(refundId.toString()); payRefundResponse.setRefundId(refundId.toString());
return payRefundResponse; return payRefundResponse;
} }
private PayRefundResponse handlePayRefundResponse(PayRefundStatus refundStatus, String refundId){
PayRefundResponse payRefundResponse = new PayRefundResponse();
payRefundResponse.setPayRefundStatus(refundStatus);
payRefundResponse.setRefundId(refundId.toString());
return payRefundResponse;
}
public PayRefundResponse multiRefund(QueryOrdersResponse.DataBean.OrderBean orderBean){
PayRefundStatus refundStatus=PayRefundStatus.SUCCESS;
MultiOrderRefundRequest multiOrderRefundRequest = paymentSdkAdapter.getMultiOrderPayRefundRequest(orderBean,getRefundAmount(orderBean));
MultiOrderRefundResponse multiOrderRefundResponse = mulitiPaymentClient.paymentApplicationRefund(multiOrderRefundRequest,orderBean.getCompanyId());
if (multiOrderRefundResponse == null || multiOrderRefundResponse.getData() == null || !com.freemud.sdk.api.assortment.order.domain.ResponseCodeConstant.ORDER_PAY_RESPONSE_SUCCESS.equals(multiOrderRefundResponse.getCode())) {
throw new OrderServiceException(ResponseResult.REFUND_EXCEPTION);
}
List<MultiOrderRefundResponse.RefundPlatformResponse> refundPlatformResponseList = multiOrderRefundResponse.getData().refundPlatformResponseList;
refundPlatformResponseList = refundPlatformResponseList.stream().filter(m -> !m.getEbcode().equalsIgnoreCase("10102")).collect(Collectors.toList());
if(null != refundPlatformResponseList && refundPlatformResponseList.size()>0){
redisCache.save(RedisUtil.getPaymentTransIdSequenceKey(refundPlatformResponseList.get(0).getTransId()),orderBean.getOid(),1L,TimeUnit.DAYS);
}
return handlePayRefundResponse(refundStatus,multiOrderRefundRequest.getRefundTradeNo());
}
} }
package cn.freemud.management.service.impl; package cn.freemud.management.service.impl;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.management.adapter.McCafeCouponAdapter;
import cn.freemud.management.entities.dto.request.order.OrderManagerRequest; import cn.freemud.management.entities.dto.request.order.OrderManagerRequest;
import cn.freemud.management.entities.dto.response.order.OrderManagerResponse; import cn.freemud.management.entities.dto.response.order.OrderManagerResponse;
import cn.freemud.management.entities.dto.response.pay.PayRefundResponse; import cn.freemud.management.entities.dto.response.pay.PayRefundResponse;
...@@ -11,7 +10,6 @@ import cn.freemud.management.intercept.OrderServiceException; ...@@ -11,7 +10,6 @@ import cn.freemud.management.intercept.OrderServiceException;
import cn.freemud.management.service.OrderBaseService; import cn.freemud.management.service.OrderBaseService;
import cn.freemud.management.service.OrderManagerService; import cn.freemud.management.service.OrderManagerService;
import cn.freemud.management.service.handle.*; import cn.freemud.management.service.handle.*;
import cn.freemud.management.thirdparty.CouponOfflineMCCafeClient;
import cn.freemud.management.util.ResponseUtil; import cn.freemud.management.util.ResponseUtil;
import com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest; import com.freemud.application.sdk.api.storecenter.request.StoreInfoRequest;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse; import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
...@@ -49,7 +47,6 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -49,7 +47,6 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
@Autowired @Autowired
private DeliveryHandle deliveryHandle; private DeliveryHandle deliveryHandle;
/** /**
* 接单 * 接单
* *
...@@ -131,7 +128,11 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -131,7 +128,11 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
//支付退款 //支付退款
PayRefundResponse refundResponse = new PayRefundResponse(); PayRefundResponse refundResponse = new PayRefundResponse();
try { try {
refundResponse = paymentHandle.refund(request, orderBean); if(null != orderBean.getOrderPayItem() && orderBean.getOrderPayItem().size()>0){
refundResponse = paymentHandle.multiRefund(orderBean);
}else{
refundResponse = paymentHandle.refund(request, orderBean);
}
} catch (OrderServiceException orderEx){ // 爱马哥兼容,不抛错 } catch (OrderServiceException orderEx){ // 爱马哥兼容,不抛错
return ResponseUtil.error(orderEx.getResult()); return ResponseUtil.error(orderEx.getResult());
} }
...@@ -161,7 +162,11 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -161,7 +162,11 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
//支付退款 //支付退款
PayRefundResponse refundResponse = new PayRefundResponse(); PayRefundResponse refundResponse = new PayRefundResponse();
try { try {
refundResponse = paymentHandle.refund(request, orderBean); if(null != orderBean.getOrderPayItem() && orderBean.getOrderPayItem().size()>0){
refundResponse = paymentHandle.multiRefund(orderBean);
}else{
refundResponse = paymentHandle.refund(request, orderBean);
}
} catch (OrderServiceException orderEx){ // 爱马哥兼容,不抛错 } catch (OrderServiceException orderEx){ // 爱马哥兼容,不抛错
return ResponseUtil.error(orderEx.getResult()); return ResponseUtil.error(orderEx.getResult());
} }
......
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: OrderClient
* @Package cn.freemud.service.thirdparty
* @Description:
* @author: liming.guo
* @date: 2018/8/10 16:06
* @version V1.0
* @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.management.thirdparty;
import com.freemud.sdk.api.assortment.order.request.order.MultiOrderRefundRequest;
import com.freemud.sdk.api.assortment.order.response.order.MultiOrderRefundResponse;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(name = "payment-center-application-api",url = "${saas.paymentcenter.application.api.feign.url}")
@RequestMapping(produces = {"application/json;charset=UTF-8"})
public interface MulitiPaymentClient {
/**
* 统一活动查询接口
*/
@PostMapping("/payment/application/refund")
MultiOrderRefundResponse paymentApplicationRefund(MultiOrderRefundRequest multiOrderRefundRequest, @RequestHeader("partnerId") String partnerId);
}
package cn.freemud.management.util;
import cn.freemud.management.enums.RedisCacheEnum;
import java.text.MessageFormat;
public class RedisUtil {
private final static String BASE_URL = "micro_program:";
private final static String ENTER_SHOP_KEY = BASE_URL + "ENTER_SHOP_KEY_";
private final static String JOIN_FISSION_ACTIVITIES_KEY = BASE_URL + "JOIN_FISSION_ACTIVITIES_KEY_";
private final static String COUPON_APP_SECRET = "coupon:app_secret_";
public static String getEnterShopKey(String userId) {
return ENTER_SHOP_KEY + userId;
}
public static String getJoinFissionActivitiesKey(String userId) {
return JOIN_FISSION_ACTIVITIES_KEY + userId;
}
public static String getCouponAppSecret(String partnerId) {
return COUPON_APP_SECRET + partnerId;
}
/**
* 获取订单支付交易请求序列
*/
public static String getPaymentTransIdSequenceKey(String orderId) {
return MessageFormat.format(RedisCacheEnum.PAYMENT_TRANSID_SEQUENCE_KEY.getCode(), orderId);
}
/**
* 获取交易订单key
*/
public static String getPaymentTransIdOrderKey(String transId){
return MessageFormat.format(RedisCacheEnum.PAYMENT_TRANSID_ORDER_KEY.getCode(), transId);
}
}
...@@ -87,5 +87,10 @@ public class ParkingOrderCreateReq { ...@@ -87,5 +87,10 @@ public class ParkingOrderCreateReq {
*/ */
private Byte orderType; private Byte orderType;
/**
* 操作人
*/
private String operator;
} }
package com.freemud.application.sdk.api.ordercenter.response;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class OrderPayItemResp {
private Long id;
private Long orderId;
private String orderCode;
private String partnerId;
private String storeId;
private String payChannelType;
private String payChannelName;
private String operator;
private BigDecimal payAmount;
private String transId;
private String fmTradeNo;
private String outOrderNo;
private String platformTradeNo;
private String endTransTradeNo;
}
\ No newline at end of file
...@@ -13,6 +13,8 @@ ...@@ -13,6 +13,8 @@
package com.freemud.application.sdk.api.ordercenter.response.orderInfo; package com.freemud.application.sdk.api.ordercenter.response.orderInfo;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtendedReq; import com.freemud.application.sdk.api.ordercenter.request.OrderExtendedReq;
import com.freemud.application.sdk.api.ordercenter.request.OrderTraceInfoResp;
import com.freemud.application.sdk.api.ordercenter.response.OrderPayItemResp;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal; import java.math.BigDecimal;
......
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