Commit 5f5ee359 by xiaoer.li@freemud.com

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

parents e98e14bd efb088ca
...@@ -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 T data;
@lombok.Data
public class Data {
public List<RefundPlatformResponse> refundPlatformResponseList;
}
@lombok.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
...@@ -83,7 +83,6 @@ import org.apache.commons.lang.StringUtils; ...@@ -83,7 +83,6 @@ import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.FastDateFormat; import org.apache.commons.lang.time.FastDateFormat;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
...@@ -91,9 +90,7 @@ import java.math.BigDecimal; ...@@ -91,9 +90,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;
...@@ -2154,6 +2151,21 @@ public class OrderAdapter { ...@@ -2154,6 +2151,21 @@ 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);
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();
......
...@@ -139,6 +139,7 @@ public class QueryOrdersResponseDto { ...@@ -139,6 +139,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 完成
......
...@@ -21,7 +21,6 @@ import cn.freemud.amqp.MQService; ...@@ -21,7 +21,6 @@ import cn.freemud.amqp.MQService;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.base.log.LogTreadLocal; import cn.freemud.base.log.LogTreadLocal;
import cn.freemud.base.util.DateUtil; import cn.freemud.base.util.DateUtil;
import cn.freemud.base.util.JsonUtil;
import cn.freemud.constant.OrderRefundConstant; import cn.freemud.constant.OrderRefundConstant;
import cn.freemud.constant.RedisKeyConstant; import cn.freemud.constant.RedisKeyConstant;
import cn.freemud.constant.ResponseCodeConstant; import cn.freemud.constant.ResponseCodeConstant;
...@@ -260,6 +259,8 @@ public class OrderServiceImpl implements Orderservice { ...@@ -260,6 +259,8 @@ public class OrderServiceImpl implements Orderservice {
private PaymentApplicationClient paymentApplicationClient; private PaymentApplicationClient paymentApplicationClient;
@Autowired @Autowired
private RedisTemplate redisTemplate; private RedisTemplate redisTemplate;
@Autowired
private MulitiPaymentClient mulitiPaymentClient;
@Autowired @Autowired
private CustomerExtendClient extendClient; private CustomerExtendClient extendClient;
...@@ -657,6 +658,11 @@ public class OrderServiceImpl implements Orderservice { ...@@ -657,6 +658,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())) {
//订单号不能为空 //订单号不能为空
...@@ -1724,14 +1730,30 @@ public class OrderServiceImpl implements Orderservice { ...@@ -1724,14 +1730,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(orderBean.getPayChannelType().equalsIgnoreCase("4")){
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.Data> 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.ORDER__ERRORREFUND.getCode(), "orderRefund_failed");
}
List<MultiOrderRefundResponse.RefundPlatformResponse> refundPlatformResponseList = multiOrderRefundResponse.getData().getRefundPlatformResponseList();
refundPlatformResponseList = refundPlatformResponseList.stream().filter(m -> !m.getEbCode().equalsIgnoreCase("4")).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());
......
/**
* 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.service.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.service.impl; package cn.freemud.service.impl;
import cn.freemud.entities.dto.shoppingCart.ShoppingCartGoodsDto; import cn.freemud.service.thirdparty.MulitiPaymentClient;
import cn.freemud.entities.vo.CreateOrderVo; import com.freemud.sdk.api.assortment.order.request.order.MultiOrderRefundRequest;
import cn.freemud.entities.vo.OrderAffirmRequestVO; import com.freemud.sdk.api.assortment.order.response.order.MultiOrderRefundResponse;
import cn.freemud.entities.vo.PaysuccessNoticeMessage;
import cn.freemud.utils.ValidationCode;
import com.alibaba.fastjson.JSON;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.application.sdk.api.ordercenter.request.OrderExtendedReq;
import com.freemud.application.sdk.api.storecenter.response.StoreResponse;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -33,47 +25,69 @@ public class MallOrderServiceImplTest { ...@@ -33,47 +25,69 @@ public class MallOrderServiceImplTest {
@Autowired @Autowired
private MCCafeOrderServiceImpl mcCafeOrderService; private MCCafeOrderServiceImpl mcCafeOrderService;
@Autowired
private MulitiPaymentClient mulitiPaymentClient;
@Before // @Before
public void before() throws Exception { // public void before() throws Exception {
} // }
//
// @After
// public void after() throws Exception {
// }
@After // @Test
public void after() throws Exception { // public void f1() {
} // mcCafeOrderService.createOrder(JSON.parseObject("{\"channelType\":\"saas\",\"couponCode\":\"\",\"menuType\":\"saasdelivery\",\"needInvoice\":0,\"needTableware\":0,\"orderRemark\":\"\",\"orderType\":2,\"partnerId\":\"1206\",\"payChannelType\":1,\"receiveId\":\"3599568180562003060\",\"sessionId\":\"c4377678dbcbd6cdf6e7df86ea112b6f82723023\",\"shopId\":\"1450026\",\"takeMealFlag\":\"0\"}", CreateOrderVo.class),
// new StoreResponse.BizVO(),
// JSON.parseObject("{\"activityDiscountsDtos\":[],\"deliveryAmount\":10,\"discountDeliveryAmount\":10,\"isDiscountDelivery\":false,\"originalTotalAmount\":4400,\"packageAmount\":0,\"products\":[{\"activityDiscountsDtos\":[],\"attributeNames\":\"{\\\"attributeNames\\\":\\\"\\\"}\",\"cartGoodsUid\":\"eb8c7260-8ecb-44d1-9234-8d8bed0b0875\",\"classificationId\":\"\",\"classificationName\":\"\",\"comboProducts\":[{\"attributeNames\":\"{\\\"attributeNames\\\":\\\"\\\"}\",\"customerCode\":\"501642\",\"extraList\":[],\"hasProductCoupon\":false,\"isFixedProduct\":false,\"materialList\":[],\"originalPrice\":1700,\"parentProductId\":\"184437853099519288\",\"picture\":\"https://picture.sandload.cn/1598678546485.png\",\"productType\":6,\"qty\":2,\"skuId\":\"184437494035639613\",\"skuName\":\"中杯热美式\",\"spuId\":\"184437494035639613\",\"spuName\":\"中杯热美式\",\"stockLimit\":false,\"tax\":0.01,\"taxId\":\"\",\"totalDiscountAmount\":0,\"unit\":\"\",\"weight\":0.0},{\"attributeNames\":\"{\\\"attributeNames\\\":\\\"\\\"}\",\"customerCode\":\"901290\",\"extraList\":[],\"hasProductCoupon\":false,\"isFixedProduct\":false,\"materialList\":[],\"originalPrice\":500,\"parentProductId\":\"184437853099519288\",\"picture\":\"https://picture.sandload.cn/1598677404074.png\",\"productType\":6,\"qty\":2,\"skuId\":\"184436294373469463\",\"skuName\":\"经典芝士蛋糕\",\"spuId\":\"184436294373469463\",\"spuName\":\"经典芝士蛋糕\",\"stockLimit\":false,\"tax\":0.01,\"taxId\":\"\",\"totalDiscountAmount\":0,\"unit\":\"\",\"weight\":0.0}],\"customerCode\":\"901280\",\"extraList\":[],\"hasProductCoupon\":false,\"materialList\":[],\"originalPrice\":4400,\"picture\":\"https://picture.sandload.cn/1598678861518.png\",\"productCode\":\"901280\",\"productType\":6,\"qty\":2,\"salePrice\":4400,\"skuId\":\"184437853099519288\",\"skuName\":\"早餐啡常搭\",\"spuId\":\"184437853099519288\",\"spuName\":\"早餐啡常搭\",\"stockLimit\":false,\"tax\":0.01,\"taxId\":\"\",\"totalDiscountAmount\":0,\"unit\":\"\",\"weight\":0.0}],\"shareDiscountActivityDtos\":[],\"totalAmount\":4400,\"totalDiscountAmount\":0}", ShoppingCartGoodsDto.class),
// new OrderExtendedReq(),
// OrderClientType.SAAS,"www");
// }
//
// @Test
// public void testPaySuccess() {
// //0元支付
// String fmId = "SPAY" + ValidationCode.getRandomUuid();
// PaysuccessNoticeMessage message = new PaysuccessNoticeMessage();
// message.setResult_code(100);
// message.setOut_trade_no(fmId);
// message.setTrans_id("16303606485084241800003");
// message.setTotal_fee(0);
// message.setOpenid("oORZK5MHMBm78PO302NdRyzIY5K0");
// message.setPlatform_coupon(0);
// message.setMerchant_coupon(0);
// mallOrderService.paySuccessCallback(message);
// }
@Test // @Test
public void f1() { // public void testAffirm() {
mcCafeOrderService.createOrder(JSON.parseObject("{\"channelType\":\"saas\",\"couponCode\":\"\",\"menuType\":\"saasdelivery\",\"needInvoice\":0,\"needTableware\":0,\"orderRemark\":\"\",\"orderType\":2,\"partnerId\":\"1206\",\"payChannelType\":1,\"receiveId\":\"3599568180562003060\",\"sessionId\":\"c4377678dbcbd6cdf6e7df86ea112b6f82723023\",\"shopId\":\"1450026\",\"takeMealFlag\":\"0\"}", CreateOrderVo.class), // OrderAffirmRequestVO requestVO = new OrderAffirmRequestVO();
new StoreResponse.BizVO(), // requestVO.setPartnerId("1864");
JSON.parseObject("{\"activityDiscountsDtos\":[],\"deliveryAmount\":10,\"discountDeliveryAmount\":10,\"isDiscountDelivery\":false,\"originalTotalAmount\":4400,\"packageAmount\":0,\"products\":[{\"activityDiscountsDtos\":[],\"attributeNames\":\"{\\\"attributeNames\\\":\\\"\\\"}\",\"cartGoodsUid\":\"eb8c7260-8ecb-44d1-9234-8d8bed0b0875\",\"classificationId\":\"\",\"classificationName\":\"\",\"comboProducts\":[{\"attributeNames\":\"{\\\"attributeNames\\\":\\\"\\\"}\",\"customerCode\":\"501642\",\"extraList\":[],\"hasProductCoupon\":false,\"isFixedProduct\":false,\"materialList\":[],\"originalPrice\":1700,\"parentProductId\":\"184437853099519288\",\"picture\":\"https://picture.sandload.cn/1598678546485.png\",\"productType\":6,\"qty\":2,\"skuId\":\"184437494035639613\",\"skuName\":\"中杯热美式\",\"spuId\":\"184437494035639613\",\"spuName\":\"中杯热美式\",\"stockLimit\":false,\"tax\":0.01,\"taxId\":\"\",\"totalDiscountAmount\":0,\"unit\":\"\",\"weight\":0.0},{\"attributeNames\":\"{\\\"attributeNames\\\":\\\"\\\"}\",\"customerCode\":\"901290\",\"extraList\":[],\"hasProductCoupon\":false,\"isFixedProduct\":false,\"materialList\":[],\"originalPrice\":500,\"parentProductId\":\"184437853099519288\",\"picture\":\"https://picture.sandload.cn/1598677404074.png\",\"productType\":6,\"qty\":2,\"skuId\":\"184436294373469463\",\"skuName\":\"经典芝士蛋糕\",\"spuId\":\"184436294373469463\",\"spuName\":\"经典芝士蛋糕\",\"stockLimit\":false,\"tax\":0.01,\"taxId\":\"\",\"totalDiscountAmount\":0,\"unit\":\"\",\"weight\":0.0}],\"customerCode\":\"901280\",\"extraList\":[],\"hasProductCoupon\":false,\"materialList\":[],\"originalPrice\":4400,\"picture\":\"https://picture.sandload.cn/1598678861518.png\",\"productCode\":\"901280\",\"productType\":6,\"qty\":2,\"salePrice\":4400,\"skuId\":\"184437853099519288\",\"skuName\":\"早餐啡常搭\",\"spuId\":\"184437853099519288\",\"spuName\":\"早餐啡常搭\",\"stockLimit\":false,\"tax\":0.01,\"taxId\":\"\",\"totalDiscountAmount\":0,\"unit\":\"\",\"weight\":0.0}],\"shareDiscountActivityDtos\":[],\"totalAmount\":4400,\"totalDiscountAmount\":0}", ShoppingCartGoodsDto.class), // requestVO.setShopId("8899");
new OrderExtendedReq(), // requestVO.setSessionId("123123");
OrderClientType.SAAS,"www"); // requestVO.setChannelType("saasmall");
} // requestVO.setOid("16303606485084241800003");
// mallOrderService.orderAffirm(requestVO);
// }
@Test @Test
public void testPaySuccess() { public void test() {
//0元支付 MultiOrderRefundRequest multiOrderRefundRequest = new MultiOrderRefundRequest();
String fmId = "SPAY" + ValidationCode.getRandomUuid(); multiOrderRefundRequest.setFmId("");
PaysuccessNoticeMessage message = new PaysuccessNoticeMessage(); multiOrderRefundRequest.setVer3(false);
message.setResult_code(100); multiOrderRefundRequest.setVer("V1");
message.setOut_trade_no(fmId); multiOrderRefundRequest.setNotifyUrl("http://open-store-order-application-service.open-store.svc:9212/order/refundNotifyCallback");
message.setTrans_id("16303606485084241800003"); multiOrderRefundRequest.setOperatorId("1");
message.setTotal_fee(0); multiOrderRefundRequest.setPartnerId("1864");
message.setOpenid("oORZK5MHMBm78PO302NdRyzIY5K0"); multiOrderRefundRequest.setRefundAmount(1L);
message.setPlatform_coupon(0); multiOrderRefundRequest.setRefundTradeNo("1604886134387{{$timestamp}}");
message.setMerchant_coupon(0); multiOrderRefundRequest.setStationId("1");
mallOrderService.paySuccessCallback(message); multiOrderRefundRequest.setStoreId("999999998");
multiOrderRefundRequest.setOutOrderNo("3900472893821604933666");
MultiOrderRefundResponse<MultiOrderRefundResponse.Data> multiOrderRefundResponseDto = mulitiPaymentClient.paymentApplicationRefund(multiOrderRefundRequest,"1864");
System.out.println(2345678);
} }
@Test
public void testAffirm() {
OrderAffirmRequestVO requestVO = new OrderAffirmRequestVO();
requestVO.setPartnerId("1864");
requestVO.setShopId("8899");
requestVO.setSessionId("123123");
requestVO.setChannelType("saasmall");
requestVO.setOid("16303606485084241800003");
mallOrderService.orderAffirm(requestVO);
}
} }
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
<dependency> <dependency>
<groupId>cn.freemud</groupId> <groupId>cn.freemud</groupId>
<artifactId>assortment-ordercenter-sdk</artifactId> <artifactId>assortment-ordercenter-sdk</artifactId>
<version>2.0.16.RELEASE</version> <version>2.1.0-RELEASE</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
......
...@@ -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,21 @@ public class PaymentSdkAdapter { ...@@ -42,6 +43,21 @@ public class PaymentSdkAdapter {
return refundRequestDTO; return refundRequestDTO;
} }
public MultiOrderRefundRequest getMultiOrderPayRefundRequest(QueryOrdersResponse.DataBean.OrderBean orderBean) {
MultiOrderRefundRequest multiQueryRequest = new MultiOrderRefundRequest();
multiQueryRequest.setStationId("1");
multiQueryRequest.setPartnerId(orderBean.getCompanyId());
multiQueryRequest.setStoreId(orderBean.getShopId());
multiQueryRequest.setFmId("");
multiQueryRequest.setRefundAmount(orderBean.getAmount());
multiQueryRequest.setRefundTradeNo(getRefundSerialNo().toString());
multiQueryRequest.setStoreId(orderBean.getShopId());
multiQueryRequest.setNotifyUrl(refundNotifyCallback);
multiQueryRequest.setVer("V1");
multiQueryRequest.setVer3(false);
return multiQueryRequest;
}
private Long getRefundSerialNo() { private Long getRefundSerialNo() {
return System.currentTimeMillis() + (int) (Math.random() * 9000) + 1000; return System.currentTimeMillis() + (int) (Math.random() * 9000) + 1000;
} }
......
...@@ -5,11 +5,17 @@ import cn.freemud.management.entities.dto.request.order.OrderManagerRequest; ...@@ -5,11 +5,17 @@ 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.management.util.ResponseUtil;
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 +27,8 @@ import org.springframework.stereotype.Component; ...@@ -21,6 +27,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 +53,10 @@ public class PaymentHandle { ...@@ -45,8 +53,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 +135,27 @@ public class PaymentHandle { ...@@ -125,4 +135,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);
MultiOrderRefundResponse<MultiOrderRefundResponse.Data> 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().getRefundPlatformResponseList();
refundPlatformResponseList = refundPlatformResponseList.stream().filter(m -> !m.getEbCode().equalsIgnoreCase("4")).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());
}
} }
...@@ -2,6 +2,7 @@ package cn.freemud.management.service.impl; ...@@ -2,6 +2,7 @@ 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.adapter.McCafeCouponAdapter;
import cn.freemud.management.adapter.PaymentSdkAdapter;
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;
...@@ -12,10 +13,14 @@ import cn.freemud.management.service.OrderBaseService; ...@@ -12,10 +13,14 @@ 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.thirdparty.CouponOfflineMCCafeClient;
import cn.freemud.management.thirdparty.MulitiPaymentClient;
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;
import com.freemud.application.sdk.api.storecenter.service.StoreCenterService; import com.freemud.application.sdk.api.storecenter.service.StoreCenterService;
import com.freemud.sdk.api.assortment.order.enums.ResponseResult;
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 org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -49,7 +54,6 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -49,7 +54,6 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
@Autowired @Autowired
private DeliveryHandle deliveryHandle; private DeliveryHandle deliveryHandle;
/** /**
* 接单 * 接单
* *
...@@ -161,7 +165,12 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -161,7 +165,12 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
//支付退款 //支付退款
PayRefundResponse refundResponse = new PayRefundResponse(); PayRefundResponse refundResponse = new PayRefundResponse();
try { try {
refundResponse = paymentHandle.refund(request, orderBean); if(orderBean.getPayChannelType() != "4"){
refundResponse = paymentHandle.refund(request, orderBean);
}else{
refundResponse = paymentHandle.multiRefund(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);
}
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