Commit c329f619 by ping.wu

支付成功回掉接口优化demo

parent 1a4bf2c3
package cn.freemud.demoTest.adapter.bo;
import cn.freemud.demoTest.entities.bo.BasePaySuccessBo;
import cn.freemud.entities.vo.PaysuccessNoticeMessage;
public class ServiceBOAdapter {
public BasePaySuccessBo convert2BasePaySuccessBo(PaysuccessNoticeMessage message) {
BasePaySuccessBo baseAddGoodsVO = new BasePaySuccessBo();
return baseAddGoodsVO;
}
}
package cn.freemud.demoTest.adapter.dto;
public class dto {
}
package cn.freemud.demoTest.controller;
import cn.freemud.demoTest.adapter.bo.ServiceBOAdapter;
import cn.freemud.demoTest.entities.bo.BasePaySuccessBo;
import cn.freemud.demoTest.service.OrderService;
import cn.freemud.entities.vo.PaysuccessNoticeMessage;
import com.freemud.application.sdk.api.log.ApiAnnotation;
import com.freemud.application.sdk.api.log.LogParams;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
public class OrderController {
@Autowired
private OrderService orderService;
@Autowired
private ServiceBOAdapter serviceBOAdapter;
/**
* 订单支付成功后通知
*/
@ApiAnnotation(logMessage = "paySuccessCallback")
@PostMapping("/paySuccessCallback")
public String paySuccessCallback(@LogParams @RequestBody PaysuccessNoticeMessage message) {
BasePaySuccessBo basePaySuccessBo = serviceBOAdapter.convert2BasePaySuccessBo(message);
return orderService.paySuccessCallback(basePaySuccessBo);
}
}
package cn.freemud.demoTest.entities;
import cn.freemud.base.entity.BaseResponse;
public class ResponseBuilder {
private final static String DEFAULT_VER = "1";
private final static String SUCCESS_CODE = "100";
private final static String SUCCESS_MESSAGE = "SUCCESS";
/**
* 无业务响应参数成功返回
* @return
*/
public static BaseResponse success() {
return new BaseResponse(DEFAULT_VER, SUCCESS_CODE, SUCCESS_MESSAGE);
}
/**
* 带有业务响应参数成功返回
* @return
*/
public static <T> BaseResponse success(T t) {
return new BaseResponse(SUCCESS_CODE, SUCCESS_MESSAGE, DEFAULT_VER, t);
}
}
package cn.freemud.demoTest.entities.bo;
import lombok.Data;
@Data
public class BasePaySuccessBo {
/**
* 接口版本
*/
private Integer resultCode;
/**
* 非码交易流水号 fmID
*/
private String outTradeNo;
/**
* 支付时终端交易序号
*/
private String transId;
/**
* 订单金额
*/
private Integer totalFee;
/**
* 营业员编号
*/
private String openid;
/**
* 平台优惠
*/
private double platformCoupon;
/**
* 商家优惠
*/
private double merchantCoupon;
/**
* 平台支付订单号(微信订单号)
*/
private String paidNo;
/**
* 渠道方流水号 (比如扫呗,易宝等) 新支付服务做中转使用
*/
private String endTransId;
/**
* 第三方支付商户号 新支付服务做中转使用
*/
private String platformMchId;
/**
* 扫呗商户号 新支付服务做中转使用
*/
private String terminalId;
/**
* 会员规则ID
*/
private String ruleId;
/**
* 消息来源
*/
private Integer source;
}
package cn.freemud.demoTest.entities.dto;
import lombok.Data;
@Data
public class OrderInfoDemoDto {
private String source;
}
package cn.freemud.demoTest.entities.vo;
public class BasePaySuccessVO {
}
package cn.freemud.demoTest.enums;
public enum PartnerIdEnum {
MC_cofe("1628", "麦咖啡"),
COCO("1516", "coco"),
;
private String partnerId;
private String name;
PartnerIdEnum(String partnerId, String name) {
this.partnerId = partnerId;
this.name = name;
}
public String getPartnerId() {
return partnerId;
}
public String getName() {
return name;
}
}
package cn.freemud.demoTest.enums;
public enum TradeBizTypeEnum {
PLATFORM("platform", "平台"),
MEALS("meals", "围餐"),
MAIL("mall", "商城"),
;
private String code;
private String message;
TradeBizTypeEnum(String code, String message) {
this.code = code;
this.message = message;
}
public String getCode() {
return code;
}
public String getMessage() {
return message;
}
}
package cn.freemud.demoTest.manager;
import cn.freemud.demoTest.entities.dto.OrderInfoDemoDto;
public class OrderManager {
public OrderInfoDemoDto getOrderInfo() {
return null;
}
}
package cn.freemud.demoTest.service;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.demoTest.entities.ResponseBuilder;
import cn.freemud.demoTest.entities.bo.BasePaySuccessBo;
import cn.freemud.demoTest.entities.dto.OrderInfoDemoDto;
import cn.freemud.enums.ResponseResult;
import cn.freemud.interceptor.ServiceException;
import com.alibaba.druid.util.StringUtils;
public abstract class AbstractPaySuccessService implements PaySuccessService{
public final String paysuccess(BasePaySuccessBo paySuccessBo, OrderInfoDemoDto orderInfoDemoDto) {
// 基本参数校验
this.checkParams(paySuccessBo);
// 添加商品到购物车
this.paySuccessDefault(paySuccessBo);
// 拼装返回体
this.paySuccessAfter(paySuccessBo);
return "";
}
public final BaseResponse paySuccessDefault(BasePaySuccessBo baseRequestDTO) {
return null;
}
/**
* 请求基本参数校验
* @return
*/
public final BaseResponse checkParams(BasePaySuccessBo baseRequestDTO) {
BaseResponse commonBaseResponse = this.checkCommParams(baseRequestDTO);
return ResponseBuilder.success();
}
public final BaseResponse checkCommParams(BasePaySuccessBo baseRequestDTO) {
if (StringUtils.isEmpty(baseRequestDTO.getTransId())){
throw new ServiceException(ResponseResult.PARAMETER_MISSING);
}
return ResponseBuilder.success();
}
/**
* 具体业务逻辑校验
*
* @return
*/
public final BaseResponse paySuccessAfter(BasePaySuccessBo baseRequestDTO) {
return ResponseBuilder.success();
}
}
package cn.freemud.demoTest.service;
import cn.freemud.demoTest.entities.bo.BasePaySuccessBo;
import cn.freemud.demoTest.entities.dto.OrderInfoDemoDto;
public abstract class AbstractTradeService {
public abstract String paySuccessCallback(BasePaySuccessBo basePaySuccessBo, OrderInfoDemoDto orderInfoDemoDto);
}
package cn.freemud.demoTest.service;
public class COCOPaySuccessService extends AbstractPaySuccessService {
}
package cn.freemud.demoTest.service;
import cn.freemud.demoTest.entities.bo.BasePaySuccessBo;
import cn.freemud.demoTest.entities.dto.OrderInfoDemoDto;
public class MAILService extends AbstractTradeService {
@Override
public String paySuccessCallback(BasePaySuccessBo basePaySuccessBo, OrderInfoDemoDto orderInfoDemoDto) {
return null;
}
}
package cn.freemud.demoTest.service;
import cn.freemud.demoTest.entities.bo.BasePaySuccessBo;
import cn.freemud.demoTest.entities.dto.OrderInfoDemoDto;
public class MEALSService extends AbstractTradeService {
@Override
public String paySuccessCallback(BasePaySuccessBo basePaySuccessBo, OrderInfoDemoDto orderInfoDemoDto) {
return null;
}
}
package cn.freemud.demoTest.service;
public class McCofePaySuccessService extends AbstractPaySuccessService {
}
package cn.freemud.demoTest.service;
import cn.freemud.demoTest.entities.bo.BasePaySuccessBo;
public interface OrderService {
/**
* 支付回调处理
*/
String paySuccessCallback(BasePaySuccessBo paySuccessBo);
}
package cn.freemud.demoTest.service;
import cn.freemud.base.entity.BaseResponse;
import cn.freemud.demoTest.entities.ResponseBuilder;
import cn.freemud.demoTest.entities.bo.BasePaySuccessBo;
public interface PaySuccessService {
/**
* 获取订单信息
* @param baseRequestDTO
* @return
*/
default BaseResponse getOrderInfo(BasePaySuccessBo baseRequestDTO) {
return ResponseBuilder.success();
}
/**
* 获取购物车信息
* @param baseRequestDTO
* @return
*/
default BaseResponse paySuccessDefault(BasePaySuccessBo baseRequestDTO) {
return ResponseBuilder.success();
}
/**
* 封装客制化返回
* @param baseRequestDTO
* @return
*/
default BaseResponse paySuccessAfter(BasePaySuccessBo baseRequestDTO) {
return ResponseBuilder.success();
}
}
package cn.freemud.demoTest.service;
import cn.freemud.demoTest.entities.bo.BasePaySuccessBo;
import cn.freemud.demoTest.entities.dto.OrderInfoDemoDto;
import cn.freemud.demoTest.service.factory.ServiceFactory;
public class PlatformPaySuccessService extends AbstractTradeService {
@Override
public String paySuccessCallback(BasePaySuccessBo basePaySuccessBo, OrderInfoDemoDto orderInfoDemoDto) {
AbstractPaySuccessService paySuccessService = ServiceFactory.createPaySuccessInstance(orderInfoDemoDto.getSource());
String result = paySuccessService.paysuccess(basePaySuccessBo,orderInfoDemoDto);
return "";
}
}
package cn.freemud.demoTest.service.factory;
import cn.freemud.base.ApplicationContextWare;
import cn.freemud.demoTest.enums.PartnerIdEnum;
import cn.freemud.demoTest.enums.TradeBizTypeEnum;
import cn.freemud.demoTest.service.*;
public class ServiceFactory {
public static AbstractTradeService createTradeInstance(String bizType) {
AbstractTradeService abstractTradeService = null;
if (TradeBizTypeEnum.PLATFORM.getCode().equals(bizType)) {
abstractTradeService = ApplicationContextWare.getBean(PlatformPaySuccessService.class);
} else if (TradeBizTypeEnum.MEALS.getCode().equals(bizType)){
abstractTradeService = ApplicationContextWare.getBean(MEALSService.class);
}else if (TradeBizTypeEnum.MAIL.getCode().equals(bizType)){
abstractTradeService = ApplicationContextWare.getBean(MAILService.class);
}
return abstractTradeService;
}
public static AbstractPaySuccessService createPaySuccessInstance(String parnterId) {
AbstractPaySuccessService abstractPaySuccessService = null;
if (PartnerIdEnum.MC_cofe.getPartnerId().equals(parnterId)) {
abstractPaySuccessService = ApplicationContextWare.getBean(McCofePaySuccessService.class);
} else if (PartnerIdEnum.COCO.getPartnerId().equals(parnterId)){
abstractPaySuccessService = ApplicationContextWare.getBean(COCOPaySuccessService.class);
}
return abstractPaySuccessService;
}
}
package cn.freemud.demoTest.service.impl;
import cn.freemud.demoTest.entities.bo.BasePaySuccessBo;
import cn.freemud.demoTest.entities.dto.OrderInfoDemoDto;
import cn.freemud.demoTest.enums.TradeBizTypeEnum;
import cn.freemud.demoTest.manager.OrderManager;
import cn.freemud.demoTest.service.AbstractPaySuccessService;
import cn.freemud.demoTest.service.AbstractTradeService;
import cn.freemud.demoTest.service.OrderService;
import cn.freemud.demoTest.service.factory.ServiceFactory;
import cn.freemud.demoTest.util.BizTypeUtil;
public class OrderServiceImpl implements OrderService {
AbstractPaySuccessService abstractPaySuccessService;
OrderManager orderManager;
@Override
public String paySuccessCallback(BasePaySuccessBo basePaySuccessBo) {
OrderInfoDemoDto orderInfoDemoDto = orderManager.getOrderInfo();
AbstractTradeService tradeInstance = ServiceFactory.createTradeInstance(orderInfoDemoDto.getSource());
String result = tradeInstance.paySuccessCallback(basePaySuccessBo, orderInfoDemoDto);
return result;
}
}
package cn.freemud.demoTest.util;
import cn.freemud.demoTest.enums.TradeBizTypeEnum;
import cn.freemud.enums.OrderChannelType;
public class BizTypeUtil {
// private final static String macafePartnerId = "";
public static TradeBizTypeEnum getBizType (String channelType){
if (channelType != null && OrderChannelType.SAAS.getCode().equals(channelType)) {
return TradeBizTypeEnum.PLATFORM;
}else if (channelType != null && OrderChannelType.SAASMALL.getCode().equals(channelType)){
return TradeBizTypeEnum.MAIL;
} else if (channelType != null && OrderChannelType.IWC.getCode().equals(channelType)) {
return TradeBizTypeEnum.MEALS;
}
return TradeBizTypeEnum.PLATFORM;
}
}
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