Commit 2fe6a408 by ping.wu

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

parent 0df7c7e1
......@@ -33,6 +33,6 @@ public class FacePayResponseDto {
private String transId;
// private String fmId;
// private String payCode;
private PayOrderDto payOrder;
private String payOrder;
}
......@@ -2,7 +2,9 @@ package cn.freemud.service;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.CreateOrderVo;
import cn.freemud.entities.vo.PaysuccessNoticeMessage;
import cn.freemud.entities.vo.QueryOrderVo;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs;
public interface PointsMallOrderService {
......@@ -11,6 +13,10 @@ public interface PointsMallOrderService {
*/
BaseResponse createOrder(CreateOrderVo createOrderVo);
/**
* 支付回调
*/
String paySuccessCallback(PaysuccessNoticeMessage message, OrderInfoReqs orderInfo);
BaseResponse scoreRecords(QueryOrderVo queryOrderVo);
......
......@@ -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.ordercenter.config.OrderCenterProperties;
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.util.LockUtils;
import com.google.gson.Gson;
......@@ -331,6 +332,13 @@ public class OrderAdapterServiceImpl implements OrderAdapterService {
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订单处理
*/
if (OrderSourceType.APP.getCode().equals(orderBean.getSource())) {
......
......@@ -8,6 +8,8 @@ import cn.freemud.constant.ResponseCodeConstant;
import cn.freemud.entities.Active;
import cn.freemud.entities.dto.BatchQueryActivityInfoRequestDto;
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.order.FacePayResponseDto;
import cn.freemud.entities.dto.pay.PayOrderDto;
......@@ -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.sdk.api.assortment.order.request.order.OrderProductAddInfoDto;
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.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -103,7 +107,7 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
return ResponseUtil.error(ResponseResult.NOT_LOGIN);
}
String partnerId = userLoginInfoDto.getPartnerId();
String storeId = "99999";
// String storeId = "99999";
String memberId = userLoginInfoDto.getMemberId();
String openId = userLoginInfoDto.getOpenId();
String appId = userLoginInfoDto.getAppId();
......@@ -111,6 +115,8 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
if (CollectionUtils.isNotEmpty(createOrderVo.getProducts())) {
skuId = createOrderVo.getProducts().get(0).getSkuId();
}
String clientCode = "";
String storeId = getPiontProductPayStoreId(appId,clientCode);
//查询商品信息并且校验用户是否能购买 /product/listProductInfo 查询积分商品详情,可根据入参校验商品
PointMallListProductInfoRequest productInfoRequest = new PointMallListProductInfoRequest();
productInfoRequest.setPartnerId(partnerId);
......@@ -123,14 +129,14 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
if (!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS, productInfosDto.getStatusCode()) || CollectionUtils.isEmpty(productInfosDto.getResult())) {
return ResponseUtil.error(ResponseCodeConstant.RESPONSE_ERROR_STR, "商品异常");
}
if (productInfosDto.getResult().get(0).getStatus() != IntegralProductStatusEnum.STATUS_2.getCode()) {
IntegralProductStatusEnum message = IntegralProductStatusEnum.getByCode(productInfosDto.getResult().get(0).getStatus());
return ResponseUtil.error(ResponseCodeConstant.RESPONSE_ERROR_STR, message != null ? message.getDesc() : "商品异常");
}
// if (productInfosDto.getResult().get(0).getStatus() != IntegralProductStatusEnum.STATUS_2.getCode()) {
// IntegralProductStatusEnum message = IntegralProductStatusEnum.getByCode(productInfosDto.getResult().get(0).getStatus());
// return ResponseUtil.error(ResponseCodeConstant.RESPONSE_ERROR_STR, message != null ? message.getDesc() : "商品异常");
// }
IntegralProductType integralProductType = productInfosDto.getResult().get(0);
if (!Objects.equals(1, integralProductType.getExchangeType())) {
return ResponseUtil.error(ResponseCodeConstant.RESPONSE_ERROR_STR, "积分商城暂不支持现金兑换");
}
// if (!Objects.equals(1, integralProductType.getExchangeType())) {
// return ResponseUtil.error(ResponseCodeConstant.RESPONSE_ERROR_STR, "积分商城暂不支持现金兑换");
// }
Integer points = integralProductType.getIntegralPrice();
Integer cashPrice = integralProductType.getCashPrice();
Integer exchangeType = integralProductType.getExchangeType();
......@@ -180,10 +186,10 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
CreateOrderResponseVo createOrderResponseVo = new CreateOrderResponseVo();
//线上现金支付,创建预支付订单,唤起支付
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);
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(), "支付异常");
}
if (!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS, response.getData().getResultCode())) {
......@@ -192,7 +198,8 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
createOrderResponseVo.setOid(orderCode);
createOrderResponseVo.setWxappId(result.getAppId());
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){
createOrderResponseVo.setTimestamp(payOrder.getTimestamp());
createOrderResponseVo.setNonceStr(payOrder.getNonceStr());
......@@ -221,7 +228,7 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
return ResponseUtil.error(pointMallListProductInfoResponse.getStatusCode().toString(), "扣减库存失败");
}
//扣减积分 (失败:失败冲正活动库存)
if (exchangeType != 2) {
if (points != null && points > 0 ) {
UseScoreRequest userScoreRequest = new UseScoreRequest();
userScoreRequest.setMemberId(memberId);
userScoreRequest.setPartnerId(partnerId);
......@@ -241,33 +248,25 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
return ResponseUtil.error(baseResponse.getCode(), "扣减积分失败");
}
}
//订单完成 (失败:失败冲正活动库存)
String nickName = userLoginInfoDto.getNickName();
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(createOrderResponseDto.getResult());
if(exchangeType == 1){
BaseResponse baseResponse = orderPaySuccess(createOrderResponseDto.getResult());
if(!Objects.equals(ResponseCodeConstant.RESPONSE_SUCCESS_STR, baseResponse.getCode())){
return baseResponse;
}
} 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(), "创建订单异常");
createOrderResponseVo.setOid(orderCode);
}
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
public BaseResponse scoreRecords(QueryOrderVo queryOrderVo) {
......@@ -643,6 +642,18 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
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){
String partnerId = orderInfo.getPartnerId();
......@@ -689,4 +700,61 @@ public class PointsMallOrderServiceImpl implements PointsMallOrderService {
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;
* @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"})
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