Commit 2fe6a408 by ping.wu

积分商城订单支付成功回调

parent 0df7c7e1
...@@ -33,6 +33,6 @@ public class FacePayResponseDto { ...@@ -33,6 +33,6 @@ public class FacePayResponseDto {
private String transId; private String transId;
// private String fmId; // private String fmId;
// private String payCode; // private String payCode;
private PayOrderDto payOrder; private String payOrder;
} }
...@@ -2,7 +2,9 @@ package cn.freemud.service; ...@@ -2,7 +2,9 @@ package cn.freemud.service;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.CreateOrderVo; import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.PaysuccessNoticeMessage;
import cn.freemud.entities.vo.QueryOrderVo; import cn.freemud.entities.vo.QueryOrderVo;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs;
public interface PointsMallOrderService { public interface PointsMallOrderService {
...@@ -11,6 +13,10 @@ public interface PointsMallOrderService { ...@@ -11,6 +13,10 @@ public interface PointsMallOrderService {
*/ */
BaseResponse createOrder(CreateOrderVo createOrderVo); BaseResponse createOrder(CreateOrderVo createOrderVo);
/**
* 支付回调
*/
String paySuccessCallback(PaysuccessNoticeMessage message, OrderInfoReqs orderInfo);
BaseResponse scoreRecords(QueryOrderVo queryOrderVo); BaseResponse scoreRecords(QueryOrderVo queryOrderVo);
......
...@@ -24,6 +24,7 @@ import com.freemud.application.sdk.api.log.ApiLog; ...@@ -24,6 +24,7 @@ import com.freemud.application.sdk.api.log.ApiLog;
import com.freemud.application.sdk.api.log.LogThreadLocal; import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.ordercenter.config.OrderCenterProperties; import com.freemud.application.sdk.api.ordercenter.config.OrderCenterProperties;
import com.freemud.application.sdk.api.ordercenter.entities.vo.OrderCallBackRequestVo; import com.freemud.application.sdk.api.ordercenter.entities.vo.OrderCallBackRequestVo;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs;
import com.freemud.sdk.api.assortment.order.enums.OrderSourceType; import com.freemud.sdk.api.assortment.order.enums.OrderSourceType;
import com.freemud.sdk.api.assortment.order.util.LockUtils; import com.freemud.sdk.api.assortment.order.util.LockUtils;
import com.google.gson.Gson; import com.google.gson.Gson;
...@@ -331,6 +332,13 @@ public class OrderAdapterServiceImpl implements OrderAdapterService { ...@@ -331,6 +332,13 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
return mallOrderService.paySuccessCallback(message, confirmOrderDto, orderBeans); return mallOrderService.paySuccessCallback(message, confirmOrderDto, orderBeans);
} }
/** /**
* 积分商城处理
*/
if (OrderSourceType.I_MEMBER.getCode().equals(orderBean.getSource()) && orderBean.getBizType() == 4) {
OrderInfoReqs orderInfo = new OrderInfoReqs();
return pointsMallOrderService.paySuccessCallback(message,orderInfo);
}
/**
* app订单处理 * app订单处理
*/ */
if (OrderSourceType.APP.getCode().equals(orderBean.getSource())) { if (OrderSourceType.APP.getCode().equals(orderBean.getSource())) {
......
...@@ -8,6 +8,8 @@ import cn.freemud.constant.ResponseCodeConstant; ...@@ -8,6 +8,8 @@ import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.Active; import cn.freemud.entities.Active;
import cn.freemud.entities.dto.BatchQueryActivityInfoRequestDto; import cn.freemud.entities.dto.BatchQueryActivityInfoRequestDto;
import cn.freemud.entities.dto.BatchQueryActivityInfoResponseDto; import cn.freemud.entities.dto.BatchQueryActivityInfoResponseDto;
import cn.freemud.entities.dto.ConfirmOrderDto;
import cn.freemud.entities.dto.QueryOrdersResponseDto;
import cn.freemud.entities.dto.delivery.WeixinDeliveryAddressDto; import cn.freemud.entities.dto.delivery.WeixinDeliveryAddressDto;
import cn.freemud.entities.dto.order.FacePayResponseDto; import cn.freemud.entities.dto.order.FacePayResponseDto;
import cn.freemud.entities.dto.pay.PayOrderDto; import cn.freemud.entities.dto.pay.PayOrderDto;
...@@ -56,6 +58,8 @@ import com.freemud.application.sdk.api.ordercenter.service.OrderDownLoadSdkServi ...@@ -56,6 +58,8 @@ import com.freemud.application.sdk.api.ordercenter.service.OrderDownLoadSdkServi
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.request.order.OrderProductAddInfoDto; import com.freemud.sdk.api.assortment.order.request.order.OrderProductAddInfoDto;
import com.freemud.sdk.api.assortment.order.request.order.ProductBindingCouponType; import com.freemud.sdk.api.assortment.order.request.order.ProductBindingCouponType;
import com.google.common.collect.Maps;
import com.google.gson.Gson;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -103,7 +107,7 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService { ...@@ -103,7 +107,7 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
return ResponseUtil.error(ResponseResult.NOT_LOGIN); return ResponseUtil.error(ResponseResult.NOT_LOGIN);
} }
String partnerId = userLoginInfoDto.getPartnerId(); String partnerId = userLoginInfoDto.getPartnerId();
String storeId = "99999"; // String storeId = "99999";
String memberId = userLoginInfoDto.getMemberId(); String memberId = userLoginInfoDto.getMemberId();
String openId = userLoginInfoDto.getOpenId(); String openId = userLoginInfoDto.getOpenId();
String appId = userLoginInfoDto.getAppId(); String appId = userLoginInfoDto.getAppId();
...@@ -111,6 +115,8 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService { ...@@ -111,6 +115,8 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
if (CollectionUtils.isNotEmpty(createOrderVo.getProducts())) { if (CollectionUtils.isNotEmpty(createOrderVo.getProducts())) {
skuId = createOrderVo.getProducts().get(0).getSkuId(); skuId = createOrderVo.getProducts().get(0).getSkuId();
} }
String clientCode = "";
String storeId = getPiontProductPayStoreId(appId,clientCode);
//查询商品信息并且校验用户是否能购买 /product/listProductInfo 查询积分商品详情,可根据入参校验商品 //查询商品信息并且校验用户是否能购买 /product/listProductInfo 查询积分商品详情,可根据入参校验商品
PointMallListProductInfoRequest productInfoRequest = new PointMallListProductInfoRequest(); PointMallListProductInfoRequest productInfoRequest = new PointMallListProductInfoRequest();
productInfoRequest.setPartnerId(partnerId); productInfoRequest.setPartnerId(partnerId);
...@@ -123,14 +129,14 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService { ...@@ -123,14 +129,14 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
if (!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS, productInfosDto.getStatusCode()) || CollectionUtils.isEmpty(productInfosDto.getResult())) { if (!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS, productInfosDto.getStatusCode()) || CollectionUtils.isEmpty(productInfosDto.getResult())) {
return ResponseUtil.error(ResponseCodeConstant.RESPONSE_ERROR_STR, "商品异常"); return ResponseUtil.error(ResponseCodeConstant.RESPONSE_ERROR_STR, "商品异常");
} }
if (productInfosDto.getResult().get(0).getStatus() != IntegralProductStatusEnum.STATUS_2.getCode()) { // if (productInfosDto.getResult().get(0).getStatus() != IntegralProductStatusEnum.STATUS_2.getCode()) {
IntegralProductStatusEnum message = IntegralProductStatusEnum.getByCode(productInfosDto.getResult().get(0).getStatus()); // IntegralProductStatusEnum message = IntegralProductStatusEnum.getByCode(productInfosDto.getResult().get(0).getStatus());
return ResponseUtil.error(ResponseCodeConstant.RESPONSE_ERROR_STR, message != null ? message.getDesc() : "商品异常"); // return ResponseUtil.error(ResponseCodeConstant.RESPONSE_ERROR_STR, message != null ? message.getDesc() : "商品异常");
} // }
IntegralProductType integralProductType = productInfosDto.getResult().get(0); IntegralProductType integralProductType = productInfosDto.getResult().get(0);
if (!Objects.equals(1, integralProductType.getExchangeType())) { // if (!Objects.equals(1, integralProductType.getExchangeType())) {
return ResponseUtil.error(ResponseCodeConstant.RESPONSE_ERROR_STR, "积分商城暂不支持现金兑换"); // return ResponseUtil.error(ResponseCodeConstant.RESPONSE_ERROR_STR, "积分商城暂不支持现金兑换");
} // }
Integer points = integralProductType.getIntegralPrice(); Integer points = integralProductType.getIntegralPrice();
Integer cashPrice = integralProductType.getCashPrice(); Integer cashPrice = integralProductType.getCashPrice();
Integer exchangeType = integralProductType.getExchangeType(); Integer exchangeType = integralProductType.getExchangeType();
...@@ -180,10 +186,10 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService { ...@@ -180,10 +186,10 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
CreateOrderResponseVo createOrderResponseVo = new CreateOrderResponseVo(); CreateOrderResponseVo createOrderResponseVo = new CreateOrderResponseVo();
//线上现金支付,创建预支付订单,唤起支付 //线上现金支付,创建预支付订单,唤起支付
com.freemud.application.sdk.api.base.BaseResponse<FacePayResponseDto> response = null; com.freemud.application.sdk.api.base.BaseResponse<FacePayResponseDto> response = null;
if (!Objects.equals(1, integralProductType.getExchangeType()) && cashPrice != null && cashPrice > 0) { if (!Objects.equals(1, exchangeType) && cashPrice != null && cashPrice > 0) {
UnifiedOrderRequestDto requestDto = convert2UnifiedOrderRequestDto(result,openId,cashPrice); UnifiedOrderRequestDto requestDto = convert2UnifiedOrderRequestDto(result,openId,cashPrice);
response = paymentNewClient.unifiedOrder(requestDto); response = paymentNewClient.unifiedOrder(requestDto);
if (!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS, response.getStatusCode())) { if (!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS_STR, response.getCode())) {
return ResponseUtil.error(createOrderResponseDto.getCode(), "支付异常"); return ResponseUtil.error(createOrderResponseDto.getCode(), "支付异常");
} }
if (!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS, response.getData().getResultCode())) { if (!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS, response.getData().getResultCode())) {
...@@ -192,7 +198,8 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService { ...@@ -192,7 +198,8 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
createOrderResponseVo.setOid(orderCode); createOrderResponseVo.setOid(orderCode);
createOrderResponseVo.setWxappId(result.getAppId()); createOrderResponseVo.setWxappId(result.getAppId());
createOrderResponseVo.setFmId(response.getData().getFmId()); createOrderResponseVo.setFmId(response.getData().getFmId());
PayOrderDto payOrder = response.getData().getPayOrder(); String payOrderDto = response.getData().getPayOrder();
PayOrderDto payOrder = JSONObject.parseObject(payOrderDto,PayOrderDto.class);
if(payOrder != null){ if(payOrder != null){
createOrderResponseVo.setTimestamp(payOrder.getTimestamp()); createOrderResponseVo.setTimestamp(payOrder.getTimestamp());
createOrderResponseVo.setNonceStr(payOrder.getNonceStr()); createOrderResponseVo.setNonceStr(payOrder.getNonceStr());
...@@ -221,7 +228,7 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService { ...@@ -221,7 +228,7 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
return ResponseUtil.error(pointMallListProductInfoResponse.getStatusCode().toString(), "扣减库存失败"); return ResponseUtil.error(pointMallListProductInfoResponse.getStatusCode().toString(), "扣减库存失败");
} }
//扣减积分 (失败:失败冲正活动库存) //扣减积分 (失败:失败冲正活动库存)
if (exchangeType != 2) { if (points != null && points > 0 ) {
UseScoreRequest userScoreRequest = new UseScoreRequest(); UseScoreRequest userScoreRequest = new UseScoreRequest();
userScoreRequest.setMemberId(memberId); userScoreRequest.setMemberId(memberId);
userScoreRequest.setPartnerId(partnerId); userScoreRequest.setPartnerId(partnerId);
...@@ -241,33 +248,25 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService { ...@@ -241,33 +248,25 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
return ResponseUtil.error(baseResponse.getCode(), "扣减积分失败"); return ResponseUtil.error(baseResponse.getCode(), "扣减积分失败");
} }
} }
//订单完成 (失败:失败冲正活动库存) if(exchangeType == 1){
String nickName = userLoginInfoDto.getNickName(); BaseResponse baseResponse = orderPaySuccess(createOrderResponseDto.getResult());
com.freemud.application.sdk.api.ordercenter.response.BaseResponse updateOrderStateResp = null; if(!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS_STR, baseResponse.getCode())){
if (isCoupon) { return baseResponse;
OrderAffirmReq request = new OrderAffirmReq();
request.setOrderCode(orderCode);
request.setPayState(2);
request.setOperator(nickName);
updateOrderStateResp = orderSdkService.orderAffirm(request, LogThreadLocal.getTrackingNo());
if (Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS_STR, updateOrderStateResp.getCode())) {
//发券mq
sendCouponService.sendCouponMq(createOrderResponseDto.getResult());
} }
} else { createOrderResponseVo.setOid(orderCode);
PaySuccessReq request = new PaySuccessReq();
request.setOrderCode(orderCode);
request.setOperator(nickName);
updateOrderStateResp = orderSdkService.paySuccess(request, LogThreadLocal.getTrackingNo());
}
if (!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS_STR, updateOrderStateResp.getCode())) {
createOrderFail(false, true, partnerId, memberId, orderCode, skuId, points, appId);
return ResponseUtil.error(updateOrderStateResp.getCode(), "创建订单异常");
} }
return ResponseUtil.success(createOrderResponseVo); return ResponseUtil.success(createOrderResponseVo);
} }
@Override
public String paySuccessCallback(PaysuccessNoticeMessage message,OrderInfoReqs orderInfo) {
BaseResponse baseResponse = orderPaySuccess(orderInfo);
if(!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS_STR, baseResponse.getCode())){
return refundFaileMessage(baseResponse.getMessage());
}
return newSendPaySuccessNoticeMessage();
}
@Override @Override
public BaseResponse scoreRecords(QueryOrderVo queryOrderVo) { public BaseResponse scoreRecords(QueryOrderVo queryOrderVo) {
...@@ -643,6 +642,18 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService { ...@@ -643,6 +642,18 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
return Long.parseLong(clientCode); return Long.parseLong(clientCode);
} }
private String getPiontProductPayStoreId(String wxAppId,String clientCode){
AssortmentOpenPlatformIappWxappStore wxAppStore = assortmentOpenPlatformIappWxappStoreManager.selectIappWxappStoreByWxAppIdAndAggregationType(wxAppId, "9");
String storeId = wxAppStore != null && StringUtils.isNotBlank(wxAppStore.getStoreId())?wxAppStore.getStoreId():null;
clientCode = wxAppStore != null && StringUtils.isNotBlank(wxAppStore.getClientCode()) ? wxAppStore.getClientCode() : "0";
return storeId;
}
private UnifiedOrderRequestDto convert2UnifiedOrderRequestDto(OrderInfoReqs orderInfo,String openId, Integer cashPrice){ private UnifiedOrderRequestDto convert2UnifiedOrderRequestDto(OrderInfoReqs orderInfo,String openId, Integer cashPrice){
String partnerId = orderInfo.getPartnerId(); String partnerId = orderInfo.getPartnerId();
...@@ -689,4 +700,61 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService { ...@@ -689,4 +700,61 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
return requestDto; return requestDto;
} }
private BaseResponse orderPaySuccess(OrderInfoReqs orderInfo){
String nickName= orderInfo.getUserName();
String orderCode = orderInfo.getOrderCode();
String partnerId =orderInfo.getPartnerId();
String memberId = orderInfo.getUserId();
String skuId = orderInfo.getOrderItemList().get(0).getProductId();
boolean isCoupon = orderInfo.getOrderItemList().get(0).getProductType() == 1;
Integer points = orderInfo.getOrderPayItemCreateReqList().get(0).getPayAmount().intValue();
String appId =orderInfo.getAppId();
//订单完成 (失败:失败冲正活动库存)
com.freemud.application.sdk.api.ordercenter.response.BaseResponse updateOrderStateResp = null;
if (isCoupon) {
OrderAffirmReq request = new OrderAffirmReq();
request.setOrderCode(orderCode);
request.setPayState(2);
request.setOperator(nickName);
updateOrderStateResp = orderSdkService.orderAffirm(request, LogThreadLocal.getTrackingNo());
if (Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS_STR, updateOrderStateResp.getCode())) {
//发券mq
sendCouponService.sendCouponMq(orderInfo);
}
} else {
PaySuccessReq request = new PaySuccessReq();
request.setOrderCode(orderCode);
request.setOperator(nickName);
updateOrderStateResp = orderSdkService.paySuccess(request, LogThreadLocal.getTrackingNo());
}
if (!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS_STR, updateOrderStateResp.getCode())) {
createOrderFail(false, true, partnerId, memberId, orderCode, skuId, points, appId);
return ResponseUtil.error(updateOrderStateResp.getCode(), "更新订单异常");
}
return ResponseUtil.success();
}
/**
* 支付后通知确认返回信息
*/
public String newSendPaySuccessNoticeMessage() {
Map<String, Object> map = Maps.newTreeMap();
map.put("code", 100);
map.put("message", "success");
Gson gson = new Gson();
return gson.toJson(map);
}
/**
* 退款中回调失败返回信息
*/
public String refundFaileMessage(String errorMes) {
Map<String, Object> map = Maps.newTreeMap();
map.put("code", 102);
map.put("message", "failed:" + errorMes);
Gson gson = new Gson();
return gson.toJson(map);
}
} }
...@@ -22,7 +22,7 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -22,7 +22,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
* @Copyright: 2019 www.freemud.cn Inc. All rights reserved. * @Copyright: 2019 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目 * 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/ */
@FeignClient(name = "payment-center-api",url="${payment.new.baseUrl}") @FeignClient(name = "payment-center-api",url="${payment.new.baseUrl:}")
@RequestMapping(produces = {"application/json;charset=UTF-8"}) @RequestMapping(produces = {"application/json;charset=UTF-8"})
public interface PaymentNewClient { public interface PaymentNewClient {
......
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