Commit 68b952f3 by 程裕兵

feat:pay order type

parent d227d82d
package com.jiejing.fitness.finance.api.pay; package com.jiejing.fitness.finance.api.pay;
import com.jiejing.common.model.JsonResult; import com.jiejing.common.model.JsonResult;
import com.jiejing.fitness.finance.api.pay.request.NativePayRequest;
import com.jiejing.paycenter.api.pay.request.PayRequest; import com.jiejing.paycenter.api.pay.request.PayRequest;
import com.jiejing.paycenter.api.pay.request.SyncPayRequest; import com.jiejing.paycenter.api.pay.request.SyncPayRequest;
import com.jiejing.paycenter.common.model.vo.PayVO; import com.jiejing.paycenter.common.model.vo.PayVO;
...@@ -17,9 +18,9 @@ public interface FitPayApi { ...@@ -17,9 +18,9 @@ public interface FitPayApi {
String TAG = "乐动支付-支付管理"; String TAG = "乐动支付-支付管理";
@ApiOperation(value = "支付", tags = {TAG}) @ApiOperation(value = "Native支付", tags = {TAG})
@PostMapping(value = "/private/pay/pay") @PostMapping(value = "/private/pay/nativePay")
JsonResult<PayVO> pay(PayRequest request); JsonResult<PayVO> nativePay(NativePayRequest request);
@ApiOperation(value = "同步支付状态", tags = {TAG}) @ApiOperation(value = "同步支付状态", tags = {TAG})
@PostMapping(value = "/private/pay/get") @PostMapping(value = "/private/pay/get")
......
package com.jiejing.fitness.finance.api.pay; package com.jiejing.fitness.finance.api.pay;
import com.jiejing.common.model.JsonResult; import com.jiejing.common.model.JsonResult;
import com.jiejing.fitness.finance.api.pay.request.NativePayRequest;
import com.jiejing.paycenter.api.pay.request.PayRequest; import com.jiejing.paycenter.api.pay.request.PayRequest;
import com.jiejing.paycenter.api.pay.request.SyncPayRequest; import com.jiejing.paycenter.api.pay.request.SyncPayRequest;
import com.jiejing.paycenter.common.model.vo.PayVO; import com.jiejing.paycenter.common.model.vo.PayVO;
...@@ -17,8 +18,9 @@ public class FitPayApiFallback implements FallbackFactory<FitPayApi> { ...@@ -17,8 +18,9 @@ public class FitPayApiFallback implements FallbackFactory<FitPayApi> {
@Override @Override
public FitPayApi create(Throwable throwable) { public FitPayApi create(Throwable throwable) {
return new FitPayApi() { return new FitPayApi() {
@Override @Override
public JsonResult<PayVO> pay(PayRequest request) { public JsonResult<PayVO> nativePay(NativePayRequest request) {
return JsonResult.rpcError(); return JsonResult.rpcError();
} }
......
package com.jiejing.fitness.finance.api.pay.request;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author chengyubing
* @since 2024/4/11 13:58
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(description = "Js支付请求")
public class JsPayRequest {
}
\ No newline at end of file
package com.jiejing.fitness.finance.api.pay.request;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author chengyubing
* @since 2024/4/11 13:58
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(description = "小程序支付请求")
public class MiniPayRequest {
}
\ No newline at end of file
package com.jiejing.fitness.finance.api.pay.request;
import com.alibaba.fastjson.JSONObject;
import com.jiejing.fitness.enums.finance.PayOrderTypeEnum;
import com.jiejing.paycenter.common.enums.common.PayChannelEnums;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.math.BigDecimal;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author chengyubing
* @since 2024/4/11 13:58
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(description = "Native支付请求")
public class NativePayRequest {
@ApiModelProperty(name = "业务订单号", required = true)
@NotBlank(message = "业务订单号不能为空")
private String orderNo;
@ApiModelProperty(name = "支付渠道", required = true)
@NotNull(message = "支付渠道不能为空")
private PayChannelEnums channel;
@ApiModelProperty(name = "业务订单类型", required = true)
@NotNull(message = "业务订单类型不能为空")
private PayOrderTypeEnum orderType;
@ApiModelProperty(name = "商品名称", required = true)
@NotBlank(message = "商品名称不能为空")
private String goods;
@ApiModelProperty(name = "支付总金额(元)", required = true)
@NotNull(message = "支付总金额不能为空")
private BigDecimal amount;
@ApiModelProperty(name = "过期时间(单位:秒)", required = true)
@NotNull(message = "过期时间不能为空")
@Min(value = 60, message = "过期时间最低60秒")
private Integer timeExpire;
@ApiModelProperty(name = "业务扩展信息", required = true)
@NotNull(message = "业务参扩展信息不能为空")
private JSONObject extra;
}
\ No newline at end of file
package com.jiejing.fitness.finance.app.controller.pay; package com.jiejing.fitness.finance.app.controller.pay;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.jiejing.common.exception.BizException;
import com.jiejing.common.model.JsonResult; import com.jiejing.common.model.JsonResult;
import com.jiejing.common.utils.convert.BeanUtil;
import com.jiejing.fitness.enums.finance.PayOrderTypeEnum;
import com.jiejing.fitness.finance.api.pay.FitPayApi; import com.jiejing.fitness.finance.api.pay.FitPayApi;
import com.jiejing.fitness.finance.api.pay.request.NativePayRequest;
import com.jiejing.fitness.finance.service.enums.FinanceErrorEnums;
import com.jiejing.fitness.finance.service.pay.PayService;
import com.jiejing.fitness.finance.service.pay.params.NativePayParams;
import com.jiejing.paycenter.api.pay.PayApi; import com.jiejing.paycenter.api.pay.PayApi;
import com.jiejing.paycenter.api.pay.request.PayRequest; import com.jiejing.paycenter.api.pay.request.PayRequest;
import com.jiejing.paycenter.api.pay.request.SyncPayRequest; import com.jiejing.paycenter.api.pay.request.SyncPayRequest;
import com.jiejing.paycenter.common.enums.pay.PayTypeEnums;
import com.jiejing.paycenter.common.model.vo.PayVO; import com.jiejing.paycenter.common.model.vo.PayVO;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import java.math.BigDecimal;
import java.util.Date;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.Valid; import javax.validation.Valid;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
...@@ -21,12 +33,16 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -21,12 +33,16 @@ import org.springframework.web.bind.annotation.RestController;
public class FitPayController implements FitPayApi { public class FitPayController implements FitPayApi {
@Resource @Resource
private PayService payService;
@Resource
private PayApi payApi; private PayApi payApi;
@ApiOperation(value = "支付", tags = {TAG}) @ApiOperation(value = "Native支付", tags = {TAG})
@PostMapping(value = "/private/pay/pay") @PostMapping(value = "/private/pay/nativePay")
public JsonResult<PayVO> pay(@RequestBody @Valid PayRequest request) { @Override
return payApi.pay(request); public JsonResult<PayVO> nativePay(@RequestBody @Valid NativePayRequest request) {
return JsonResult.success(payService.nativePay(BeanUtil.map(request, NativePayParams.class)));
} }
@ApiOperation(value = "同步支付状态", tags = {TAG}) @ApiOperation(value = "同步支付状态", tags = {TAG})
......
package com.jiejing.fitness.finance.service.pay; package com.jiejing.fitness.finance.service.pay;
import com.jiejing.fitness.finance.service.pay.params.NativePayParams;
import com.jiejing.fitness.finance.service.pay.params.StudioMerchantPayParams; import com.jiejing.fitness.finance.service.pay.params.StudioMerchantPayParams;
import com.jiejing.fitness.finance.service.pay.params.BrandMerchantRefundParams; import com.jiejing.fitness.finance.service.pay.params.BrandMerchantRefundParams;
import com.jiejing.paycenter.common.model.vo.PayVO; import com.jiejing.paycenter.common.model.vo.PayVO;
...@@ -15,6 +16,14 @@ import java.util.Date; ...@@ -15,6 +16,14 @@ import java.util.Date;
public interface PayService { public interface PayService {
/** /**
* Native支付
*
* @param params 参数
* @return 结果
*/
PayVO nativePay(NativePayParams params);
/**
* 支付 * 支付
* *
* @param params 请求参数 * @param params 请求参数
......
...@@ -2,12 +2,14 @@ package com.jiejing.fitness.finance.service.pay.impl; ...@@ -2,12 +2,14 @@ package com.jiejing.fitness.finance.service.pay.impl;
import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toList;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.jiejing.common.exception.BizException; import com.jiejing.common.exception.BizException;
import com.jiejing.common.utils.collection.CollectionUtil; import com.jiejing.common.utils.collection.CollectionUtil;
import com.jiejing.common.utils.time.TimeUtil; import com.jiejing.common.utils.time.TimeUtil;
import com.jiejing.fitness.enums.finance.BrandCashierTransStateEnum; import com.jiejing.fitness.enums.finance.BrandCashierTransStateEnum;
import com.jiejing.fitness.enums.finance.PartyTypeEnum; import com.jiejing.fitness.enums.finance.PartyTypeEnum;
import com.jiejing.fitness.finance.api.pay.request.NativePayRequest;
import com.jiejing.fitness.finance.repository.entity.StudioCashierRecord; import com.jiejing.fitness.finance.repository.entity.StudioCashierRecord;
import com.jiejing.fitness.finance.repository.entity.PartyToMerchant; import com.jiejing.fitness.finance.repository.entity.PartyToMerchant;
import com.jiejing.fitness.finance.repository.entity.StudioCheckSettleRecord; import com.jiejing.fitness.finance.repository.entity.StudioCheckSettleRecord;
...@@ -22,12 +24,14 @@ import com.jiejing.fitness.finance.service.enums.FinanceErrorEnums; ...@@ -22,12 +24,14 @@ import com.jiejing.fitness.finance.service.enums.FinanceErrorEnums;
import com.jiejing.fitness.finance.service.pay.PayService; import com.jiejing.fitness.finance.service.pay.PayService;
import com.jiejing.fitness.finance.service.pay.convert.PayConvert; import com.jiejing.fitness.finance.service.pay.convert.PayConvert;
import com.jiejing.fitness.finance.service.pay.params.BrandMerchantRefundParams; import com.jiejing.fitness.finance.service.pay.params.BrandMerchantRefundParams;
import com.jiejing.fitness.finance.service.pay.params.NativePayParams;
import com.jiejing.fitness.finance.service.pay.params.StudioMerchantPayParams; import com.jiejing.fitness.finance.service.pay.params.StudioMerchantPayParams;
import com.jiejing.fitness.finance.service.rpc.MerchantRpcService; import com.jiejing.fitness.finance.service.rpc.MerchantRpcService;
import com.jiejing.fitness.finance.service.rpc.PayRpcService; import com.jiejing.fitness.finance.service.rpc.PayRpcService;
import com.jiejing.fitness.finance.service.rpc.StudioRpcService; import com.jiejing.fitness.finance.service.rpc.StudioRpcService;
import com.jiejing.fitness.finance.service.utils.DingUtil; import com.jiejing.fitness.finance.service.utils.DingUtil;
import com.jiejing.paycenter.common.enums.common.TransStateEnums; import com.jiejing.paycenter.common.enums.common.TransStateEnums;
import com.jiejing.paycenter.common.enums.pay.PayTypeEnums;
import com.jiejing.paycenter.common.model.vo.MerchantVO; import com.jiejing.paycenter.common.model.vo.MerchantVO;
import com.jiejing.paycenter.api.pay.request.PayRequest; import com.jiejing.paycenter.api.pay.request.PayRequest;
import com.jiejing.paycenter.api.pay.request.RefundPayRequest; import com.jiejing.paycenter.api.pay.request.RefundPayRequest;
...@@ -86,6 +90,11 @@ public class PayServiceImpl implements PayService { ...@@ -86,6 +90,11 @@ public class PayServiceImpl implements PayService {
private StudioCheckSettleRecordRpService studioCheckSettleRecordRpService; private StudioCheckSettleRecordRpService studioCheckSettleRecordRpService;
@Override @Override
public PayVO nativePay(NativePayParams params) {
return payRpcService.pay(convertNativePay(params));
}
@Override
public PayVO merchantPay(StudioMerchantPayParams params) { public PayVO merchantPay(StudioMerchantPayParams params) {
StudioVO studio = studioRpcService.getStudio(params.getStudioId()); StudioVO studio = studioRpcService.getStudio(params.getStudioId());
PartyToMerchant relation = partyToMerchantRpService.getByStudioId(studio.getId(), channel); PartyToMerchant relation = partyToMerchantRpService.getByStudioId(studio.getId(), channel);
...@@ -104,6 +113,9 @@ public class PayServiceImpl implements PayService { ...@@ -104,6 +113,9 @@ public class PayServiceImpl implements PayService {
@Override @Override
public void payCallback(PayEvent event) { public void payCallback(PayEvent event) {
if (!event.getChannelNo().equals(channel)) {
return;
}
StudioCashierRecord record = studioCashierRecordRpService.getById(Long.parseLong(event.getTransNo())) StudioCashierRecord record = studioCashierRecordRpService.getById(Long.parseLong(event.getTransNo()))
.orElse(null); .orElse(null);
if (null == record) { if (null == record) {
...@@ -170,8 +182,10 @@ public class PayServiceImpl implements PayService { ...@@ -170,8 +182,10 @@ public class PayServiceImpl implements PayService {
// 对账成功 // 对账成功
Map<Long, BigDecimal> studioTransAmountMap = studioCashierRecordRpService.sumMerchantPaySuccessGroupByStudioId( Map<Long, BigDecimal> studioTransAmountMap = studioCashierRecordRpService.sumMerchantPaySuccessGroupByStudioId(
apply.getMerchantId(), startDate, endDate); apply.getMerchantId(), startDate, endDate);
Map<Long, StudioVO> studioMap = studioRpcService.mapStudio(Lists.newArrayList(studioTransAmountMap.keySet())); Map<Long, StudioVO> studioMap = studioRpcService.mapStudio(
studioSettleRecordRpService.insertAll(PayConvert.convertSettle(apply, studioTransAmountMap, vo, studioMap)); Lists.newArrayList(studioTransAmountMap.keySet()));
studioSettleRecordRpService.insertAll(
PayConvert.convertSettle(apply, studioTransAmountMap, vo, studioMap));
if (TransStateEnums.SUCCESS == TransStateEnums.getByCode(vo.getTransState())) { if (TransStateEnums.SUCCESS == TransStateEnums.getByCode(vo.getTransState())) {
// 结算成功,则更新收银流水状态为记录为入账成功 // 结算成功,则更新收银流水状态为记录为入账成功
this.updatePayIn(apply.getMerchantId(), startDate, endDate); this.updatePayIn(apply.getMerchantId(), startDate, endDate);
...@@ -248,4 +262,31 @@ public class PayServiceImpl implements PayService { ...@@ -248,4 +262,31 @@ public class PayServiceImpl implements PayService {
log.info("consumer merchant apply finished"); log.info("consumer merchant apply finished");
} }
private String getChannelNo(NativePayParams params) {
switch (params.getChannel()) {
case WX:
return "003";
case ALI:
return "002";
default:
throw new BizException(FinanceErrorEnums.NOT_SUPPORT_TYPE);
}
}
private PayRequest convertNativePay(NativePayParams params) {
PayRequest req = new PayRequest();
req.setChannelNo(getChannelNo(params));
req.setTransNo(IdWorker.getIdStr());
req.setAmount(params.getAmount());
req.setPayType(PayTypeEnums.NATIVE);
req.setGoods(params.getGoods());
req.setOrderNo(params.getOrderNo());
req.setOrderType(params.getOrderType().getCode());
req.setTimeExpire(params.getTimeExpire());
req.setTransTime(new Date());
req.setExtra(params.getExtra());
return req;
}
} }
package com.jiejing.fitness.finance.service.pay.params;
import com.alibaba.fastjson.JSONObject;
import com.jiejing.fitness.enums.finance.PayOrderTypeEnum;
import com.jiejing.paycenter.common.enums.common.PayChannelEnums;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.math.BigDecimal;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author chengyubing
* @since 2024/4/11 13:58
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel(description = "Native支付请求")
public class NativePayParams {
@ApiModelProperty(name = "业务订单号", required = true)
@NotBlank(message = "业务订单号不能为空")
private String orderNo;
@ApiModelProperty(name = "支付渠道", required = true)
@NotNull(message = "支付渠道不能为空")
private PayChannelEnums channel;
@ApiModelProperty(name = "业务订单类型", required = true)
@NotNull(message = "业务订单类型不能为空")
private PayOrderTypeEnum orderType;
@ApiModelProperty(name = "商品名称", required = true)
@NotBlank(message = "商品名称不能为空")
private String goods;
@ApiModelProperty(name = "支付总金额(元)", required = true)
@NotNull(message = "支付总金额不能为空")
private BigDecimal amount;
@ApiModelProperty(name = "过期时间(单位:秒)", required = true)
@NotNull(message = "过期时间不能为空")
@Min(value = 60, message = "过期时间最低60秒")
private Integer timeExpire;
@ApiModelProperty(name = "业务扩展信息", required = true)
@NotNull(message = "业务参扩展信息不能为空")
private JSONObject extra;
}
\ No newline at end of file
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