Browse Source

Merge remote-tracking branch 'origin/feature-1.1-bnyer-order' into feature-1.1-dev

feature-1.1
Penny 3 years ago
parent
commit
c807390af9
  1. 23
      bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/dto/QueryUserVipDto.java
  2. 15
      bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/factory/RemoteWxMiniFallbackFactory.java
  3. 24
      bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/remote/RemoteUserVipService.java
  4. 27
      bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/remote/RemoteWxMiniService.java
  5. 8
      bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/vo/UserVipVo.java
  6. 10
      bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/factory/RemoteVipOrderFallbackFactory.java
  7. 26
      bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/query/VipOrderExtQuery.java
  8. 4
      bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/query/VipOrderQuery.java
  9. 17
      bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/remote/RemoteVipOrderService.java
  10. 4
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/UserVipRecord.java
  11. 30
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/VipType.java
  12. 42
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/WxpayConfig.java
  13. 5
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/dto/AddUserVipRecordDto.java
  14. 83
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/dto/BaseDto.java
  15. 23
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/dto/QueryUserVipDto.java
  16. 1
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/ResponseEnum.java
  17. 45
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/utils/bean/ReflectUtils.java
  18. 2
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/UserInfoVo.java
  19. 161
      bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/utils/SecurityUtils.java
  20. 9
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/FhMiniController.java
  21. 10
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/TiktokMiniController.java
  22. 42
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/UserVipController.java
  23. 15
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/WxMiniController.java
  24. 4
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/UserVipMapper.java
  25. 15
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/VipTypeMapper.java
  26. 18
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/query/UserVipQuery.java
  27. 19
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/UserVipService.java
  28. 43
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/UserVipServiceImpl.java
  29. 4
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/UserVipServiceRecordImpl.java
  30. 9
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/UserVipVo.java
  31. 3
      bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/UserVipMapper.xml
  32. 15
      bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/VipTypeMapper.xml
  33. 12
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/bean/dto/AddVipOrderDto.java
  34. 35
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/bean/query/VipOrderExtQuery.java
  35. 4
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/bean/query/VipOrderQuery.java
  36. 4
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/bean/vo/VipOrderVo.java
  37. 35
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/controller/VipOrderController.java
  38. 4
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/listener/vip/VipOrderPayNotifyConsumer.java
  39. 4
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/mapper/VipOrderMapper.java
  40. 18
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/VipOrderService.java
  41. 101
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/impl/VipOrderServiceImpl.java
  42. 6
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/bo/QueryOrderBo.java
  43. 17
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/bo/RefundBo.java
  44. 6
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/bo/UnifiedOrderBo.java
  45. 6
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/AddPayInfoDto.java
  46. 2
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/EditPayInfoNotifyDto.java
  47. 2
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/EditPayInfoSingleDto.java
  48. 2
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/PayNotifyCheckDto.java
  49. 5
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/QueryOrderDto.java
  50. 17
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/RefundDto.java
  51. 6
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/UnifiedOrderDto.java
  52. 2
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/vo/PayInfoDetailsVo.java
  53. 2
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/vo/PayInfoVo.java
  54. 2
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/vo/QueryOrderVo.java
  55. 2
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/vo/ThirdQueryOrderVo.java
  56. 10
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/vo/ThirdRefundVo.java
  57. 7
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/vo/ThirdUnifiedOrderVo.java
  58. 12
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/vo/UnifiedOrderVo.java
  59. 17
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/controller/UnifiedPayController.java
  60. 44
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AbstractPayStrategy.java
  61. 25
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AliPayStrategy.java
  62. 121
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/DYPayStrategy.java
  63. 29
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/IPayStrategy.java
  64. 137
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/KSPayStrategy.java
  65. 49
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/WxPayStrategy.java
  66. 2
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/enums/EnumPayConfigStatus.java
  67. 4
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/enums/EnumTradeType.java
  68. 12
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/manager/WxPayManager.java
  69. 3
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/mapper/PayInfoMapper.java
  70. 8
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/PayInfoService.java
  71. 10
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/UnifiedPayService.java
  72. 15
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/impl/PayInfoServiceImpl.java
  73. 57
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/impl/UnifiedPayServiceImpl.java
  74. 6
      bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/WxpayConfigMapper.xml

23
bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/dto/QueryUserVipDto.java

@ -1,23 +0,0 @@
package com.bnyer.img.api.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
/**
* @author :WXC
* @Date :2023/03/31
* @description :
*/
@Getter
@Setter
@ApiModel("会员vip查询类")
public class QueryUserVipDto {
@ApiModelProperty(value="主键Id")
private Long id;
@ApiModelProperty(value="vip客户端类型:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信")
private Integer userClientType;
}

15
bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/factory/RemoteWxMiniFallbackFactory.java

@ -1,33 +1,30 @@
package com.bnyer.img.api.factory; package com.bnyer.img.api.factory;
import com.bnyer.common.core.domain.R; import com.bnyer.common.core.domain.R;
import com.bnyer.img.api.dto.QueryUserVipDto; import com.bnyer.img.api.remote.RemoteUserVipService;
import com.bnyer.img.api.remote.RemoteWxMiniService; import com.bnyer.img.api.vo.UserVipVo;
import com.bnyer.img.api.vo.UserVipInfoVo;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List;
/** /**
* 图文服务降级处理 * 图文服务降级处理
* *
* @author penny * @author penny
*/ */
@Component @Component
public class RemoteWxMiniFallbackFactory implements FallbackFactory<RemoteWxMiniService> public class RemoteWxMiniFallbackFactory implements FallbackFactory<RemoteUserVipService>
{ {
private static final Logger log = LoggerFactory.getLogger(RemoteWxMiniFallbackFactory.class); private static final Logger log = LoggerFactory.getLogger(RemoteWxMiniFallbackFactory.class);
@Override @Override
public RemoteWxMiniService create(Throwable throwable) { public RemoteUserVipService create(Throwable throwable) {
log.error("api图文服务调用失败:{}", throwable.getMessage()); log.error("api图文服务调用失败:{}", throwable.getMessage());
return new RemoteWxMiniService() { return new RemoteUserVipService() {
@Override @Override
public R<List<UserVipInfoVo>> queryUserVipList(QueryUserVipDto dto) { public R<UserVipVo> queryUserVip(Long id) {
return R.fail("获取会员信息失败:+"+throwable.getMessage()); return R.fail("获取会员信息失败:+"+throwable.getMessage());
} }

24
bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/remote/RemoteUserVipService.java

@ -0,0 +1,24 @@
package com.bnyer.img.api.remote;
import com.bnyer.common.core.constant.ServiceNameConstants;
import com.bnyer.common.core.domain.R;
import com.bnyer.img.api.factory.RemoteWxMiniFallbackFactory;
import com.bnyer.img.api.vo.UserVipVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
/**
* @author :WXC
* @description :
*/
@FeignClient(path = "/img/mini/vip",contextId = "remoteWxMiniService", value = ServiceNameConstants.IMG_SERVICE, fallbackFactory = RemoteWxMiniFallbackFactory.class)
public interface RemoteUserVipService {
/**
* 获取会员信息
* @return
*/
@GetMapping(value = "/queryUserVip/{id}")
R<UserVipVo> queryUserVip(@PathVariable(value = "id") Long id);
}

27
bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/remote/RemoteWxMiniService.java

@ -1,27 +0,0 @@
package com.bnyer.img.api.remote;
import com.bnyer.common.core.constant.ServiceNameConstants;
import com.bnyer.common.core.domain.R;
import com.bnyer.img.api.dto.QueryUserVipDto;
import com.bnyer.img.api.factory.RemoteWxMiniFallbackFactory;
import com.bnyer.img.api.vo.UserVipInfoVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
/**
* @author :WXC
* @description :
*/
@FeignClient(contextId = "remoteWxMiniService", value = ServiceNameConstants.IMG_SERVICE, fallbackFactory = RemoteWxMiniFallbackFactory.class)
public interface RemoteWxMiniService {
/**
* 获取会员列表
* @return
*/
@PostMapping(value = "/img/mini/fh/queryUserVipList")
R<List<UserVipInfoVo>> queryUserVipList(@RequestBody QueryUserVipDto dto);
}

8
bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/vo/UserVipInfoVo.java → bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/vo/UserVipVo.java

@ -12,7 +12,7 @@ import java.math.BigDecimal;
@Getter @Getter
@Setter @Setter
@ApiModel("会员vip响应类") @ApiModel("会员vip响应类")
public class UserVipInfoVo implements Serializable { public class UserVipVo implements Serializable {
@ApiModelProperty(value="主键Id") @ApiModelProperty(value="主键Id")
private Long id; private Long id;
@ -20,6 +20,9 @@ public class UserVipInfoVo implements Serializable {
@ApiModelProperty(value="vip类型id") @ApiModelProperty(value="vip类型id")
private Long vipTypeId; private Long vipTypeId;
@ApiModelProperty(value = "会员类型名称")
private String vipTypeName;
@ApiModelProperty(value="vip编码") @ApiModelProperty(value="vip编码")
private String vipCode; private String vipCode;
@ -56,8 +59,5 @@ public class UserVipInfoVo implements Serializable {
@ApiModelProperty(value = "会员类型编码") @ApiModelProperty(value = "会员类型编码")
private String vipTypeCode; private String vipTypeCode;
@ApiModelProperty(value = "会员类型名称")
private String vipTypeName;
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
} }

10
bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/factory/RemoteVipOrderFallbackFactory.java

@ -1,7 +1,8 @@
package com.bnyer.order.api.factory; package com.bnyer.order.api.factory;
import com.bnyer.common.core.domain.R; import com.bnyer.common.core.domain.R;
import com.bnyer.order.api.dto.QueryVipOrderDto; import com.bnyer.order.api.query.VipOrderQuery;
import com.bnyer.order.api.query.VipOrderExtQuery;
import com.bnyer.order.api.remote.RemoteVipOrderService; import com.bnyer.order.api.remote.RemoteVipOrderService;
import com.bnyer.order.api.vo.VipOrderVo; import com.bnyer.order.api.vo.VipOrderVo;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -28,7 +29,12 @@ public class RemoteVipOrderFallbackFactory implements FallbackFactory<RemoteVipO
return new RemoteVipOrderService() { return new RemoteVipOrderService() {
@Override @Override
public R<List<VipOrderVo>> getVipOrderList(QueryVipOrderDto dto) { public R<List<VipOrderVo>> queryVipOrderList(VipOrderQuery query) {
return R.fail("获取会员订单信息失败:+"+throwable.getMessage());
}
@Override
public R<VipOrderVo> queryVipOrder(VipOrderExtQuery query) {
return R.fail("获取会员订单信息失败:+"+throwable.getMessage()); return R.fail("获取会员订单信息失败:+"+throwable.getMessage());
} }
}; };

26
bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/query/VipOrderExtQuery.java

@ -0,0 +1,26 @@
package com.bnyer.order.api.query;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.io.Serializable;
/**
* @author :WXC
* @Date :2023/03/27
* @description :
*/
@Getter
@Setter
@NoArgsConstructor
public class VipOrderExtQuery implements Serializable {
@ApiModelProperty(value = "id")
private Long id;
@ApiModelProperty(value="订单号")
private String orderNo;
}

4
bnyer-services/bnyer-order/src/main/java/com/bnyer/order/dto/QueryVipOrderDto.java → bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/query/VipOrderQuery.java

@ -1,4 +1,4 @@
package com.bnyer.order.dto; package com.bnyer.order.api.query;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
@ -15,7 +15,7 @@ import java.io.Serializable;
@Getter @Getter
@Setter @Setter
@NoArgsConstructor @NoArgsConstructor
public class QueryVipOrderDto implements Serializable { public class VipOrderQuery implements Serializable {
@ApiModelProperty(value="订单号") @ApiModelProperty(value="订单号")
private String orderNo; private String orderNo;

17
bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/remote/RemoteVipOrderService.java

@ -2,8 +2,9 @@ package com.bnyer.order.api.remote;
import com.bnyer.common.core.constant.ServiceNameConstants; import com.bnyer.common.core.constant.ServiceNameConstants;
import com.bnyer.common.core.domain.R; import com.bnyer.common.core.domain.R;
import com.bnyer.order.api.dto.QueryVipOrderDto;
import com.bnyer.order.api.factory.RemoteVipOrderFallbackFactory; import com.bnyer.order.api.factory.RemoteVipOrderFallbackFactory;
import com.bnyer.order.api.query.VipOrderQuery;
import com.bnyer.order.api.query.VipOrderExtQuery;
import com.bnyer.order.api.vo.VipOrderVo; import com.bnyer.order.api.vo.VipOrderVo;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
@ -16,14 +17,20 @@ import java.util.List;
* @Date :2023/04/03 * @Date :2023/04/03
* @description :订单服务vip订单接口远程调用 * @description :订单服务vip订单接口远程调用
*/ */
@FeignClient(contextId = "remoteVipOrderService", value = ServiceNameConstants.ORDER_SERVICE, fallbackFactory = RemoteVipOrderFallbackFactory.class) @FeignClient(path = "/vip",contextId = "remoteVipOrderService", value = ServiceNameConstants.ORDER_SERVICE, fallbackFactory = RemoteVipOrderFallbackFactory.class)
public interface RemoteVipOrderService { public interface RemoteVipOrderService {
/** /**
* 获取会员订单信息 * 获取会员订单信息
* @param dto * @param query
* @return * @return
*/ */
@PostMapping("/vip/getVipOrderList") @PostMapping("/queryVipOrderList")
R<List<VipOrderVo>> getVipOrderList(@RequestBody QueryVipOrderDto dto); R<List<VipOrderVo>> queryVipOrderList(@RequestBody VipOrderQuery query);
/**
* 查询会员订单信息(单表查询)
*/
@PostMapping("/queryVipOrder")
R<VipOrderVo> queryVipOrder(@RequestBody VipOrderExtQuery query);
} }

4
bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/UserVipRecord.java

@ -63,10 +63,10 @@ public class UserVipRecord extends BaseDomain {
private Date endTime; private Date endTime;
/** /**
* 支付状态(0->待支付;1->支付;2->支付失败;3->支付异常) * 状态(0->已到期;1->生效)
*/ */
@TableField(value = "status") @TableField(value = "status")
@ApiModelProperty(value="支付状态(0->待支付;1->已支付;2->支付失败;3->支付异常)") @ApiModelProperty(value="状态(0->已到期;1->已生效;)")
private Integer status; private Integer status;
/** /**

30
bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/VipType.java

@ -0,0 +1,30 @@
package com.bnyer.common.core.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "img_vip_type")
public class VipType extends BaseDomain {
/**
* 类型编码
*/
@TableField(value = "type_code")
@ApiModelProperty(value="类型编码")
private String typeCode;
/**
* 类型名称
*/
@TableField(value = "type_name")
@ApiModelProperty(value="类型名称")
private String typeName;
}

42
bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/WxpayConfig.java

@ -28,18 +28,12 @@ import lombok.ToString;
@NoArgsConstructor @NoArgsConstructor
@TableName(value = "pay_wxpay_config") @TableName(value = "pay_wxpay_config")
public class WxpayConfig extends BaseDomain { public class WxpayConfig extends BaseDomain {
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
@ApiModelProperty(value="主键")
private Long id;
/** /**
* APP|JSAPI|MWEB|MINIPROGRAM 支付 * 1--JSAPI支付小程序appId支付2--Native支付3--app支付4--JSAPI支付公众号appId支付5--H5支付
*/ */
@TableField(value = "trade_type") @TableField(value = "trade_type")
@ApiModelProperty(value="APP|JSAPI|MWEB|MINIPROGRAM 支付") @ApiModelProperty(value="1--JSAPI支付(小程序appId支付)、2--Native支付、3--app支付,4--JSAPI支付(公众号appId支付)5--H5支付")
private String tradeType; private String tradeType;
/** /**
@ -66,14 +60,42 @@ public class WxpayConfig extends BaseDomain {
/** /**
* 密钥 * 密钥
*/ */
@TableField(value = "key") @TableField(value = "`key`")
@ApiModelProperty(value="密钥") @ApiModelProperty(value="密钥")
private String key; private String key;
/**
* 接口密钥
*/
@TableField(value = "api_key")
@ApiModelProperty(value="接口密钥")
private String apiKey;
/**
* 证书序列号值
*/
@TableField(value = "cert_serial_no")
@ApiModelProperty(value="证书序列号值")
private String certSerialNo;
/**
* apiclient_key.pem证书文件的绝对路径或者以classpath:开头的类路径.
*/
@TableField(value = "key_path")
@ApiModelProperty(value="apiclient_key.pem证书文件的绝对路径或者以classpath:开头的类路径.")
private String keyPath;
/**
* apiclient_cert.pem证书文件的绝对路径或者以classpath:开头的类路径.
*/
@TableField(value = "cert_path")
@ApiModelProperty(value="apiclient_cert.pem证书文件的绝对路径或者以classpath:开头的类路径.")
private String certPath;
/** /**
* 帐号状态0正常 1停用 * 帐号状态0正常 1停用
*/ */
@TableField(value = "status") @TableField(value = "`status`")
@ApiModelProperty(value="帐号状态(0正常 1停用)") @ApiModelProperty(value="帐号状态(0正常 1停用)")
private String status; private String status;

5
bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/dto/AddUserVipRecordDto.java

@ -1,5 +1,6 @@
package com.bnyer.common.core.dto; package com.bnyer.common.core.dto;
import com.bnyer.common.core.domain.UserVipRecord;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.*; import lombok.*;
@ -8,10 +9,8 @@ import java.util.Date;
@Getter @Getter
@Setter @Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class AddUserVipRecordDto { public class AddUserVipRecordDto extends BaseDto<UserVipRecord>{
@ApiModelProperty(value="订单号") @ApiModelProperty(value="订单号")
private String orderNo; private String orderNo;

83
bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/dto/BaseDto.java

@ -0,0 +1,83 @@
package com.bnyer.common.core.dto;
import com.bnyer.common.core.domain.BaseDomain;
import com.bnyer.common.core.utils.StringUtils;
import com.bnyer.common.core.utils.bean.ReflectUtils;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.beans.BeanUtils;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* @author :WXC
* @Date :2023/05/10
* @description :
*/
@Data
public class BaseDto <T extends BaseDomain> implements Serializable {
private static final long serialVersionUID = 320272502336434381L;
/**
* 主键ID
*/
private Long id;
/**
* 数据创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 数据更新时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/**
* 是否显示
*/
private String isShow;
/**
* 排序
*/
private Integer sort;
/**
* 主键ID集合
*/
private List<Long> ids;
/**
* 转为实体类
*
* @return 实体类
*/
public T toEntity() {
Class<T> entity = ReflectUtils.getParameterizedType(this.getClass());
T entityInstance = ReflectUtils.newInstance(entity);
BeanUtils.copyProperties(this, entityInstance);
if (this.id == null) {
entityInstance.setIsShow("1");
entityInstance.setCreateTime(new Date());
entityInstance.setUpdateTime(null);
if (StringUtils.isNotBlank(this.isShow)){
entityInstance.setIsShow(this.isShow);
}else {
entityInstance.setIsShow("1");
}
if (this.sort != null){
entityInstance.setSort(this.sort);
}else {
entityInstance.setSort(0);
}
} else {
entityInstance.setUpdateTime(new Date());
}
return entityInstance;
}
}

23
bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/dto/QueryUserVipDto.java

@ -1,23 +0,0 @@
package com.bnyer.common.core.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
/**
* @author :WXC
* @Date :2023/03/31
* @description :
*/
@Getter
@Setter
@ApiModel("会员vip查询类")
public class QueryUserVipDto {
@ApiModelProperty(value="主键Id")
private Long id;
@ApiModelProperty(value="vip客户端类型:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信")
private Integer userClientType;
}

1
bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/ResponseEnum.java

@ -9,6 +9,7 @@ public enum ResponseEnum {
//======================系统异常========================, //======================系统异常========================,
SERVER_ERROR(500, "系统繁忙,请稍候重试!"), SERVER_ERROR(500, "系统繁忙,请稍候重试!"),
NOT_AUTH(500, "未登录!"),
PARAM_ERROR(400, "参数异常!"), PARAM_ERROR(400, "参数异常!"),
NOT_EXIST(110001, "查询为空"), NOT_EXIST(110001, "查询为空"),
PAY_CONFIG_ERROR(110002, "支付配置未启用或未配置!"), PAY_CONFIG_ERROR(110002, "支付配置未启用或未配置!"),

45
bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/utils/bean/ReflectUtils.java

@ -0,0 +1,45 @@
package com.bnyer.common.core.utils.bean;
import org.springframework.beans.BeanInstantiationException;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
/**
* @author :WXC
* @Date :2023/05/10
* @description :反射工具
*/
public class ReflectUtils {
/**
* 得到传入类中当前指定得泛型
*
* @param cls 待解析得类
* @return 显示指定的泛型
*/
@SuppressWarnings("unchecked")
public static <T> Class<T> getParameterizedType(Class cls) {
Type genType = cls.getGenericSuperclass();
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
return (Class<T>) params[0];
}
/**
* 实例化class 对象
*
* @param cls 待实例化类
* @param <T> 类类型
* @return 实例化对象
*/
public static <T> T newInstance(Class<T> cls) {
try {
return cls.newInstance();
} catch (Exception e) {
throw new BeanInstantiationException(cls, e.getMessage());
}
}
}

2
bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/UserInfoVo.java

@ -81,7 +81,7 @@ public class UserInfoVo implements Serializable {
/** /**
* 用户类型 抖音->10;快手->20;微信->30;微信艺术家->40 * 用户类型 抖音->10;快手->20;微信->30;微信艺术家->40
*/ */
private int userClientType; private Integer userClientType;
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
} }

161
bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/utils/SecurityUtils.java

@ -4,6 +4,7 @@ import com.bnyer.common.core.constant.SecurityConstants;
import com.bnyer.common.core.constant.TokenConstants; import com.bnyer.common.core.constant.TokenConstants;
import com.bnyer.common.core.context.SecurityContextHolder; import com.bnyer.common.core.context.SecurityContextHolder;
import com.bnyer.common.core.enums.EnumUserClientType; import com.bnyer.common.core.enums.EnumUserClientType;
import com.bnyer.common.core.enums.ResponseEnum;
import com.bnyer.common.core.exception.ServiceException; import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.common.core.utils.ServletUtils; import com.bnyer.common.core.utils.ServletUtils;
import com.bnyer.common.core.utils.StringUtils; import com.bnyer.common.core.utils.StringUtils;
@ -33,83 +34,89 @@ public class SecurityUtils
* @return - * @return -
*/ */
public static UserInfoVo getUserInfo(){ public static UserInfoVo getUserInfo(){
String platform = ServletUtils.getRequest().getHeader("platform"); UserInfoVo userInfoVo = new UserInfoVo();
if(StringUtils.isNotEmpty(platform)){ userInfoVo.setId(1L);
EnumUserClientType userClientType = EnumUserClientType.getTypeByCode(platform); userInfoVo.setOpenId("iHbleh46vtOeGeyl91XOkdTrgjAv5BL6Sf64txO21gE=");
switch (userClientType){ userInfoVo.setUserClientType(EnumUserClientType.WU.getType());
case DU: return userInfoVo;
UserInfoVo tiktokUserInfo = new UserInfoVo(); // TODO: 2023/05/10 暂时屏蔽
LoginTiktokUser loginTikTokUser = getLoginTikTokUser(); // String platform = ServletUtils.getRequest().getHeader("platform");
tiktokUserInfo.setId(loginTikTokUser.getTiktokUserId()); // if(StringUtils.isBlank(platform)){
tiktokUserInfo.setOpenId(loginTikTokUser.getTiktokUserOpenId()); // throw new ServiceException(ResponseEnum.NOT_AUTH);
tiktokUserInfo.setUserName(loginTikTokUser.getTiktokUserName()); // }
tiktokUserInfo.setIpaddr(loginTikTokUser.getIpaddr()); // EnumUserClientType userClientType = EnumUserClientType.getTypeByCode(platform);
tiktokUserInfo.setLastLoginTime(loginTikTokUser.getLoginTime()); // switch (userClientType){
tiktokUserInfo.setImg(loginTikTokUser.getTiktokUser().getImg()); // case DU:
tiktokUserInfo.setIsVip(loginTikTokUser.getTiktokUser().getIsVip()); // UserInfoVo tiktokUserInfo = new UserInfoVo();
tiktokUserInfo.setCreateTime(loginTikTokUser.getTiktokUser().getCreateTime()); // LoginTiktokUser loginTikTokUser = getLoginTikTokUser();
tiktokUserInfo.setUpdateTime(loginTikTokUser.getTiktokUser().getUpdateTime()); // tiktokUserInfo.setId(loginTikTokUser.getTiktokUserId());
tiktokUserInfo.setSort(loginTikTokUser.getTiktokUser().getSort()); // tiktokUserInfo.setOpenId(loginTikTokUser.getTiktokUserOpenId());
tiktokUserInfo.setUserClientType(userClientType.getType()); // tiktokUserInfo.setUserName(loginTikTokUser.getTiktokUserName());
return tiktokUserInfo; // tiktokUserInfo.setIpaddr(loginTikTokUser.getIpaddr());
case WU: // tiktokUserInfo.setLastLoginTime(loginTikTokUser.getLoginTime());
UserInfoVo wechatUserInfo = new UserInfoVo(); // tiktokUserInfo.setImg(loginTikTokUser.getTiktokUser().getImg());
LoginWechatUser loginWechatUser = getLoginWechatUser(); // tiktokUserInfo.setIsVip(loginTikTokUser.getTiktokUser().getIsVip());
wechatUserInfo.setId(loginWechatUser.getWxUserId()); // tiktokUserInfo.setCreateTime(loginTikTokUser.getTiktokUser().getCreateTime());
wechatUserInfo.setOpenId(loginWechatUser.getWxUserOpenId()); // tiktokUserInfo.setUpdateTime(loginTikTokUser.getTiktokUser().getUpdateTime());
wechatUserInfo.setUserName(loginWechatUser.getWxUserName()); // tiktokUserInfo.setSort(loginTikTokUser.getTiktokUser().getSort());
wechatUserInfo.setIpaddr(loginWechatUser.getIpaddr()); // tiktokUserInfo.setUserClientType(userClientType.getType());
wechatUserInfo.setLastLoginTime(loginWechatUser.getLoginTime()); // return tiktokUserInfo;
wechatUserInfo.setImg(loginWechatUser.getWxUser().getImg()); // case WU:
wechatUserInfo.setIsVip(loginWechatUser.getWxUser().getIsVip()); // UserInfoVo wechatUserInfo = new UserInfoVo();
wechatUserInfo.setCreateTime(loginWechatUser.getWxUser().getCreateTime()); // LoginWechatUser loginWechatUser = getLoginWechatUser();
wechatUserInfo.setUpdateTime(loginWechatUser.getWxUser().getUpdateTime()); // wechatUserInfo.setId(loginWechatUser.getWxUserId());
wechatUserInfo.setSort(loginWechatUser.getWxUser().getSort()); // wechatUserInfo.setOpenId(loginWechatUser.getWxUserOpenId());
wechatUserInfo.setUserClientType(userClientType.getType()); // wechatUserInfo.setUserName(loginWechatUser.getWxUserName());
return wechatUserInfo; // wechatUserInfo.setIpaddr(loginWechatUser.getIpaddr());
case KU: // wechatUserInfo.setLastLoginTime(loginWechatUser.getLoginTime());
UserInfoVo fhUserInfo = new UserInfoVo(); // wechatUserInfo.setImg(loginWechatUser.getWxUser().getImg());
LoginFhUser loginFhUser = getLoginFhUser(); // wechatUserInfo.setIsVip(loginWechatUser.getWxUser().getIsVip());
fhUserInfo.setId(loginFhUser.getFhUserId()); // wechatUserInfo.setCreateTime(loginWechatUser.getWxUser().getCreateTime());
fhUserInfo.setOpenId(loginFhUser.getFhUserOpenId()); // wechatUserInfo.setUpdateTime(loginWechatUser.getWxUser().getUpdateTime());
fhUserInfo.setUserName(loginFhUser.getFhUserName()); // wechatUserInfo.setSort(loginWechatUser.getWxUser().getSort());
fhUserInfo.setIpaddr(loginFhUser.getIpaddr()); // wechatUserInfo.setUserClientType(userClientType.getType());
fhUserInfo.setLastLoginTime(loginFhUser.getLoginTime()); // return wechatUserInfo;
fhUserInfo.setImg(loginFhUser.getFhUser().getImg()); // case KU:
fhUserInfo.setIsVip(loginFhUser.getFhUser().getIsVip()); // UserInfoVo fhUserInfo = new UserInfoVo();
fhUserInfo.setCreateTime(loginFhUser.getFhUser().getCreateTime()); // LoginFhUser loginFhUser = getLoginFhUser();
fhUserInfo.setUpdateTime(loginFhUser.getFhUser().getUpdateTime()); // fhUserInfo.setId(loginFhUser.getFhUserId());
fhUserInfo.setSort(loginFhUser.getFhUser().getSort()); // fhUserInfo.setOpenId(loginFhUser.getFhUserOpenId());
fhUserInfo.setUserClientType(userClientType.getType()); // fhUserInfo.setUserName(loginFhUser.getFhUserName());
return fhUserInfo; // fhUserInfo.setIpaddr(loginFhUser.getIpaddr());
case WY: // fhUserInfo.setLastLoginTime(loginFhUser.getLoginTime());
UserInfoVo creatorInfo = new UserInfoVo(); // fhUserInfo.setImg(loginFhUser.getFhUser().getImg());
LoginCreator loginCreator = getLoginCreator(); // fhUserInfo.setIsVip(loginFhUser.getFhUser().getIsVip());
creatorInfo.setId(loginCreator.getCreatorId()); // fhUserInfo.setCreateTime(loginFhUser.getFhUser().getCreateTime());
creatorInfo.setPhone(loginCreator.getCreatorPhone()); // fhUserInfo.setUpdateTime(loginFhUser.getFhUser().getUpdateTime());
creatorInfo.setScanCode(loginCreator.getCreator().getScanCode()); // fhUserInfo.setSort(loginFhUser.getFhUser().getSort());
creatorInfo.setAmt(loginCreator.getCreator().getAmt()); // fhUserInfo.setUserClientType(userClientType.getType());
creatorInfo.setInviteCode(loginCreator.getCreator().getInviteCode()); // return fhUserInfo;
creatorInfo.setStatus(loginCreator.getCreator().getStatus()); // case WY:
creatorInfo.setUrl(loginCreator.getCreator().getUrl()); // UserInfoVo creatorInfo = new UserInfoVo();
creatorInfo.setIsHot(loginCreator.getCreator().getIsHot()); // LoginCreator loginCreator = getLoginCreator();
creatorInfo.setIsShow(loginCreator.getCreator().getIsShow()); // creatorInfo.setId(loginCreator.getCreatorId());
creatorInfo.setIntro(loginCreator.getCreator().getIntro()); // creatorInfo.setPhone(loginCreator.getCreatorPhone());
creatorInfo.setUserName(loginCreator.getCreator().getName()); // creatorInfo.setScanCode(loginCreator.getCreator().getScanCode());
creatorInfo.setIpaddr(loginCreator.getIpaddr()); // creatorInfo.setAmt(loginCreator.getCreator().getAmt());
creatorInfo.setLastLoginTime(loginCreator.getLoginTime()); // creatorInfo.setInviteCode(loginCreator.getCreator().getInviteCode());
creatorInfo.setImg(loginCreator.getCreator().getImg()); // creatorInfo.setStatus(loginCreator.getCreator().getStatus());
creatorInfo.setIsShow(loginCreator.getCreator().getIsShow()); // creatorInfo.setUrl(loginCreator.getCreator().getUrl());
creatorInfo.setCreateTime(loginCreator.getCreator().getCreateTime()); // creatorInfo.setIsHot(loginCreator.getCreator().getIsHot());
creatorInfo.setUpdateTime(loginCreator.getCreator().getUpdateTime()); // creatorInfo.setIsShow(loginCreator.getCreator().getIsShow());
creatorInfo.setSort(loginCreator.getCreator().getSort()); // creatorInfo.setIntro(loginCreator.getCreator().getIntro());
creatorInfo.setUserClientType(userClientType.getType()); // creatorInfo.setUserName(loginCreator.getCreator().getName());
return creatorInfo; // creatorInfo.setIpaddr(loginCreator.getIpaddr());
default: // creatorInfo.setLastLoginTime(loginCreator.getLoginTime());
throw new ServiceException("userClientType 未匹配上对应用户类型"); // creatorInfo.setImg(loginCreator.getCreator().getImg());
} // creatorInfo.setIsShow(loginCreator.getCreator().getIsShow());
} // creatorInfo.setCreateTime(loginCreator.getCreator().getCreateTime());
return null; // creatorInfo.setUpdateTime(loginCreator.getCreator().getUpdateTime());
// creatorInfo.setSort(loginCreator.getCreator().getSort());
// creatorInfo.setUserClientType(userClientType.getType());
// return creatorInfo;
// default:
// throw new ServiceException("userClientType 未匹配上对应用户类型");
// }
} }
//******************************通用获取信息结束********************************************* //******************************通用获取信息结束*********************************************

9
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/FhMiniController.java

@ -64,9 +64,6 @@ public class FhMiniController extends BaseController {
@Autowired @Autowired
private BzDataService bzDataService; private BzDataService bzDataService;
@Autowired
private UserVipService userVipService;
@Autowired @Autowired
private UserVipRecordService userVipRecordService; private UserVipRecordService userVipRecordService;
@ -305,12 +302,6 @@ public class FhMiniController extends BaseController {
return AjaxResult.error(); return AjaxResult.error();
} }
@ApiOperation(value="获取用户会员vip列表")
@PostMapping(value = "/queryUserVipList")
public R<List<UserVipVo>> queryUserVipList(@RequestBody QueryUserVipDto dto){
return R.ok(userVipService.queryFront(dto));
}
@ApiOperation(value="支付购买用户会员vip") @ApiOperation(value="支付购买用户会员vip")
@PostMapping(value = "/payUserVip") @PostMapping(value = "/payUserVip")
public AjaxResult payUserVip(@Validated @RequestBody @ApiParam("购买会员vip对象") PayUserVipDto dto){ public AjaxResult payUserVip(@Validated @RequestBody @ApiParam("购买会员vip对象") PayUserVipDto dto){

10
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/TiktokMiniController.java

@ -64,9 +64,6 @@ public class TiktokMiniController extends BaseController {
@Autowired @Autowired
private BzDataService bzDataService; private BzDataService bzDataService;
@Autowired
private UserVipService userVipService;
@Autowired @Autowired
private UserVipRecordService userVipRecordService; private UserVipRecordService userVipRecordService;
@ -331,13 +328,6 @@ public class TiktokMiniController extends BaseController {
} }
@ApiOperation(value="获取用户会员vip列表")
@GetMapping(value = "/queryUserVipList")
public R<List<UserVipVo>> queryUserVipList(QueryUserVipDto dto){
return R.ok(userVipService.queryFront(dto));
}
@ApiOperation(value="支付购买用户会员vip") @ApiOperation(value="支付购买用户会员vip")
@PostMapping(value = "/payUserVip") @PostMapping(value = "/payUserVip")
public AjaxResult payUserVip(@Validated @RequestBody @ApiParam("购买会员vip对象") PayUserVipDto dto){ public AjaxResult payUserVip(@Validated @RequestBody @ApiParam("购买会员vip对象") PayUserVipDto dto){

42
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/UserVipController.java

@ -0,0 +1,42 @@
package com.bnyer.img.controller;
import com.bnyer.common.core.domain.R;
import com.bnyer.img.query.UserVipQuery;
import com.bnyer.img.service.UserVipService;
import com.bnyer.img.vo.UserVipVo;
import io.swagger.annotations.Api;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
* @author :WXC
* @Date :2023/05/10
* @description :
*/
@Api(value = "会员相关接口",tags = "会员相关接口")
@RestController
@RequestMapping("/img/mini/vip")
@Slf4j
public class UserVipController {
@Resource
private UserVipService userVipService;
@Operation(summary="获取会员列表",description = "获取会员列表")
@PostMapping(value = "/queryUserVipList")
public R<List<UserVipVo>> queryUserVipList(@RequestBody UserVipQuery query){
return R.ok(userVipService.queryUserVipList(query));
}
@Operation(summary="获取会员信息",description = "获取会员信息")
@GetMapping(value = "/queryUserVip/{id}")
public R<UserVipVo> queryUserVip(@PathVariable(value = "id") Long id){
return R.ok(userVipService.queryUserVip(id));
}
}

15
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/WxMiniController.java

@ -12,7 +12,10 @@ import com.bnyer.common.core.web.domain.AjaxResult;
import com.bnyer.common.core.web.page.TableDataInfo; import com.bnyer.common.core.web.page.TableDataInfo;
import com.bnyer.img.api.model.LoginWechatUser; import com.bnyer.img.api.model.LoginWechatUser;
import com.bnyer.img.service.*; import com.bnyer.img.service.*;
import com.bnyer.img.vo.*; import com.bnyer.img.vo.CreatorDetailsVo;
import com.bnyer.img.vo.CreatorFollowVo;
import com.bnyer.img.vo.SignImgVo;
import com.bnyer.img.vo.TiktokImgVo;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@ -64,9 +67,6 @@ public class WxMiniController extends BaseController {
@Autowired @Autowired
private BzDataService bzDataService; private BzDataService bzDataService;
@Autowired
private UserVipService userVipService;
@Autowired @Autowired
private UserVipRecordService userVipRecordService; private UserVipRecordService userVipRecordService;
@ -318,13 +318,6 @@ public class WxMiniController extends BaseController {
return AjaxResult.error(); return AjaxResult.error();
} }
@ApiOperation(value="获取用户会员vip列表")
@GetMapping(value = "/queryUserVipList")
public R<List<UserVipVo>> queryUserVipList(QueryUserVipDto dto){
return R.ok(userVipService.queryFront(dto));
}
@ApiOperation(value="支付购买用户会员vip") @ApiOperation(value="支付购买用户会员vip")
@PostMapping(value = "/payUserVip") @PostMapping(value = "/payUserVip")
public AjaxResult payUserVip(@Validated @RequestBody @ApiParam("购买会员vip对象") PayUserVipDto dto){ public AjaxResult payUserVip(@Validated @RequestBody @ApiParam("购买会员vip对象") PayUserVipDto dto){

4
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/UserVipMapper.java

@ -2,7 +2,7 @@ package com.bnyer.img.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bnyer.common.core.domain.UserVip; import com.bnyer.common.core.domain.UserVip;
import com.bnyer.common.core.dto.QueryUserVipDto; import com.bnyer.img.query.UserVipQuery;
import com.bnyer.img.vo.UserVipVo; import com.bnyer.img.vo.UserVipVo;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@ -15,6 +15,6 @@ public interface UserVipMapper extends BaseMapper<UserVip> {
* 获取小程序端会员vip列表 * 获取小程序端会员vip列表
* @return - * @return -
*/ */
List<UserVipVo> queryFront(QueryUserVipDto dto); List<UserVipVo> queryVipList(UserVipQuery query);
} }

15
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/VipTypeMapper.java

@ -0,0 +1,15 @@
package com.bnyer.img.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bnyer.common.core.domain.UserVip;
import com.bnyer.common.core.domain.VipType;
import com.bnyer.img.query.UserVipQuery;
import com.bnyer.img.vo.UserVipVo;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface VipTypeMapper extends BaseMapper<VipType> {
}

18
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/query/UserVipQuery.java

@ -0,0 +1,18 @@
package com.bnyer.img.query;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
/**
* @author :WXC
* @Date :2023/03/31
* @description :
*/
@Getter
@Setter
@ApiModel("会员查询类")
public class UserVipQuery {
}

19
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/UserVipService.java

@ -1,16 +1,25 @@
package com.bnyer.img.service; package com.bnyer.img.service;
import com.bnyer.common.core.dto.QueryUserVipDto; import com.baomidou.mybatisplus.extension.service.IService;
import com.bnyer.common.core.domain.UserVip;
import com.bnyer.img.query.UserVipQuery;
import com.bnyer.img.vo.UserVipVo; import com.bnyer.img.vo.UserVipVo;
import java.util.List; import java.util.List;
public interface UserVipService { public interface UserVipService extends IService<UserVip> {
/** /**
* 获取小程序端会员vip列表 * 获取用户会员列表
* @return - * @param query
* @return
*/ */
List<UserVipVo> queryFront(QueryUserVipDto dto); List<UserVipVo> queryUserVipList(UserVipQuery query);
/**
* 获取会员详细信息
* @param id
* @return
*/
UserVipVo queryUserVip(Long id);
} }

43
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/UserVipServiceImpl.java

@ -1,7 +1,15 @@
package com.bnyer.img.service.impl; package com.bnyer.img.service.impl;
import com.bnyer.common.core.dto.QueryUserVipDto; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bnyer.common.core.domain.UserVip;
import com.bnyer.common.core.domain.VipType;
import com.bnyer.common.core.enums.ResponseEnum;
import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.common.core.utils.bean.EntityConvertUtil;
import com.bnyer.img.mapper.UserVipMapper; import com.bnyer.img.mapper.UserVipMapper;
import com.bnyer.img.mapper.VipTypeMapper;
import com.bnyer.img.query.UserVipQuery;
import com.bnyer.img.service.UserVipService; import com.bnyer.img.service.UserVipService;
import com.bnyer.img.vo.UserVipVo; import com.bnyer.img.vo.UserVipVo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -9,16 +17,43 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
import java.util.Objects;
@Service @Service
@Slf4j @Slf4j
public class UserVipServiceImpl implements UserVipService { public class UserVipServiceImpl extends ServiceImpl<UserVipMapper, UserVip> implements UserVipService {
@Autowired @Autowired
private UserVipMapper userVipMapper; private UserVipMapper userVipMapper;
@Autowired
private VipTypeMapper vipTypeMapper;
/**
* 获取用户会员列表
* @param query
* @return
*/
@Override
public List<UserVipVo> queryUserVipList(UserVipQuery query) {
return userVipMapper.queryVipList(query);
}
/**
* 获取会员详细信息
* @param id
* @return
*/
@Override @Override
public List<UserVipVo> queryFront(QueryUserVipDto dto) { public UserVipVo queryUserVip(Long id) {
return userVipMapper.queryFront(dto); UserVip userVip = userVipMapper.selectOne(new LambdaQueryWrapper<UserVip>().eq(UserVip::getId, id).eq(UserVip::getIsShow, "1"));
if (Objects.isNull(userVip)){
throw new ServiceException(ResponseEnum.NOT_EXIST,"会员信息");
}
VipType vipType = vipTypeMapper.selectById(userVip.getVipTypeId());
UserVipVo userVipVo = EntityConvertUtil.copy(userVip, UserVipVo.class);
userVipVo.setVipTypeCode(vipType.getTypeCode());
userVipVo.setVipTypeName(vipType.getTypeName());
return userVipVo;
} }
} }

4
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/UserVipServiceRecordImpl.java

@ -87,10 +87,8 @@ public class UserVipServiceRecordImpl implements UserVipRecordService {
@Override @Override
public void addUserVipRecord(AddUserVipRecordDto dto) { public void addUserVipRecord(AddUserVipRecordDto dto) {
UserVipRecord userVipRecord = EntityConvertUtil.copy(dto, UserVipRecord.class); UserVipRecord userVipRecord = dto.toEntity();
userVipRecord.setStatus(EnumUserVipRecordStatus.VALID.getStatus()); userVipRecord.setStatus(EnumUserVipRecordStatus.VALID.getStatus());
userVipRecord.setCreateTime(new Date());
userVipRecord.setIsShow("1");
userVipRecordMapper.insert(userVipRecord); userVipRecordMapper.insert(userVipRecord);
} }
} }

9
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/UserVipVo.java

@ -20,15 +20,15 @@ public class UserVipVo implements Serializable {
@ApiModelProperty(value="vip类型id") @ApiModelProperty(value="vip类型id")
private Long vipTypeId; private Long vipTypeId;
@ApiModelProperty(value = "会员类型名称")
private String vipTypeName;
@ApiModelProperty(value="vip编码") @ApiModelProperty(value="vip编码")
private String vipCode; private String vipCode;
@ApiModelProperty(value="vip名称") @ApiModelProperty(value="vip名称")
private String vipName; private String vipName;
@ApiModelProperty(value = "vip类型:下图:0(月卡) 1(季卡) 2(年卡)")
private String vipType;
@ApiModelProperty(value="原价") @ApiModelProperty(value="原价")
private BigDecimal originPrice; private BigDecimal originPrice;
@ -59,8 +59,5 @@ public class UserVipVo implements Serializable {
@ApiModelProperty(value = "会员类型编码") @ApiModelProperty(value = "会员类型编码")
private String vipTypeCode; private String vipTypeCode;
@ApiModelProperty(value = "会员类型名称")
private String vipTypeName;
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
} }

3
bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/UserVipMapper.xml

@ -6,7 +6,6 @@
<!--@Table img_user_vip--> <!--@Table img_user_vip-->
<id column="id" jdbcType="BIGINT" property="id" /> <id column="id" jdbcType="BIGINT" property="id" />
<result column="vip_name" jdbcType="VARCHAR" property="vipName" /> <result column="vip_name" jdbcType="VARCHAR" property="vipName" />
<result column="vip_name" jdbcType="VARCHAR" property="vipName" />
<result column="vip_code" jdbcType="VARCHAR" property="vipCode" /> <result column="vip_code" jdbcType="VARCHAR" property="vipCode" />
<result column="vip_type_id" jdbcType="BIGINT" property="vipTypeId" /> <result column="vip_type_id" jdbcType="BIGINT" property="vipTypeId" />
<result column="origin_price" jdbcType="DECIMAL" property="originPrice" /> <result column="origin_price" jdbcType="DECIMAL" property="originPrice" />
@ -39,7 +38,7 @@
v.update_time, v.update_time,
v.sort v.sort
</sql> </sql>
<select id="queryFront" resultType="com.bnyer.img.vo.UserVipVo"> <select id="queryVipList" resultType="com.bnyer.img.vo.UserVipVo">
select select
<include refid="Base_Column_List"/>, <include refid="Base_Column_List"/>,
vt.type_code AS vip_type_code, vt.type_code AS vip_type_code,

15
bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/VipTypeMapper.xml

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bnyer.img.mapper.VipTypeMapper">
<resultMap id="BaseResultMap" type="com.bnyer.common.core.domain.VipType">
<!--@mbg.generated-->
<!--@Table img_vip_type-->
<id column="id" jdbcType="BIGINT" property="id" />
<result column="type_code" jdbcType="VARCHAR" property="typeCode" />
<result column="type_name" jdbcType="VARCHAR" property="typeName" />
<result column="is_show" jdbcType="CHAR" property="isShow" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
<result column="sort" jdbcType="INTEGER" property="sort" />
</resultMap>
</mapper>

12
bnyer-services/bnyer-order/src/main/java/com/bnyer/order/dto/AddVipOrderDto.java → bnyer-services/bnyer-order/src/main/java/com/bnyer/order/bean/dto/AddVipOrderDto.java

@ -1,11 +1,11 @@
package com.bnyer.order.dto; package com.bnyer.order.bean.dto;
import com.bnyer.common.core.annotation.CustomParamsValidation; import com.bnyer.common.core.domain.VipOrder;
import com.bnyer.common.core.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
@ -19,7 +19,7 @@ import java.io.Serializable;
@Getter @Getter
@Setter @Setter
@NoArgsConstructor @NoArgsConstructor
public class AddVipOrderDto implements Serializable { public class AddVipOrderDto extends BaseDto<VipOrder> implements Serializable {
@NotBlank(message = "手机号不能为空!") @NotBlank(message = "手机号不能为空!")
@ApiModelProperty(value="手机号") @ApiModelProperty(value="手机号")
@ -29,8 +29,4 @@ public class AddVipOrderDto implements Serializable {
@ApiModelProperty(value="vip表id") @ApiModelProperty(value="vip表id")
private Long vipId; private Long vipId;
@NotNull(message = "用户客户端类型不能为空!")
@ApiModelProperty(value="用户客户端类型:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信")
private Integer userClientType;
} }

35
bnyer-services/bnyer-order/src/main/java/com/bnyer/order/bean/query/VipOrderExtQuery.java

@ -0,0 +1,35 @@
package com.bnyer.order.bean.query;
import com.bnyer.common.core.exception.ServiceException;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
import java.io.Serializable;
/**
* @author :WXC
* @Date :2023/03/27
* @description :
*/
@Getter
@Setter
@NoArgsConstructor
public class VipOrderExtQuery implements Serializable {
@ApiModelProperty(value = "id")
private Long id;
@ApiModelProperty(value="订单号")
private String orderNo;
public void valid() {
if (this.id == null && StringUtils.isBlank(this.orderNo)){
throw new ServiceException("id 和 订单号不能同时为空");
}
}
}

4
bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/dto/QueryVipOrderDto.java → bnyer-services/bnyer-order/src/main/java/com/bnyer/order/bean/query/VipOrderQuery.java

@ -1,4 +1,4 @@
package com.bnyer.order.api.dto; package com.bnyer.order.bean.query;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
@ -15,7 +15,7 @@ import java.io.Serializable;
@Getter @Getter
@Setter @Setter
@NoArgsConstructor @NoArgsConstructor
public class QueryVipOrderDto implements Serializable { public class VipOrderQuery implements Serializable {
@ApiModelProperty(value="订单号") @ApiModelProperty(value="订单号")
private String orderNo; private String orderNo;

4
bnyer-services/bnyer-order/src/main/java/com/bnyer/order/vo/VipOrderVo.java → bnyer-services/bnyer-order/src/main/java/com/bnyer/order/bean/vo/VipOrderVo.java

@ -1,7 +1,5 @@
package com.bnyer.order.vo; package com.bnyer.order.bean.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;

35
bnyer-services/bnyer-order/src/main/java/com/bnyer/order/controller/VipOrderController.java

@ -2,16 +2,20 @@ package com.bnyer.order.controller;
import com.bnyer.common.core.domain.R; import com.bnyer.common.core.domain.R;
import com.bnyer.common.core.web.controller.BaseController; import com.bnyer.common.core.web.controller.BaseController;
import com.bnyer.order.dto.AddVipOrderDto; import com.bnyer.order.bean.dto.AddVipOrderDto;
import com.bnyer.order.dto.QueryVipOrderDto; import com.bnyer.order.bean.query.VipOrderExtQuery;
import com.bnyer.order.bean.query.VipOrderQuery;
import com.bnyer.order.bean.vo.VipOrderVo;
import com.bnyer.order.service.VipOrderService; import com.bnyer.order.service.VipOrderService;
import com.bnyer.order.vo.VipOrderVo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.List; import java.util.List;
@ -27,7 +31,7 @@ import java.util.List;
public class VipOrderController extends BaseController { public class VipOrderController extends BaseController {
@Autowired @Resource
private VipOrderService vipOrderService; private VipOrderService vipOrderService;
@ -42,13 +46,24 @@ public class VipOrderController extends BaseController {
} }
/** /**
* 查询订单信息 * 查询订单列表
*/ */
@PostMapping("/getVipOrderList") @PostMapping("/queryVipOrderList")
@Operation(summary = "查询会员订单列表信息" , description = "查询会员订单列表信息") @Operation(summary = "查询会员订单列表信息" , description = "查询会员订单列表信息")
public R<List<VipOrderVo>> getVipOrderList(@Valid @RequestBody QueryVipOrderDto dto) { public R<List<VipOrderVo>> queryVipOrderList(@Valid @RequestBody VipOrderQuery query) {
List<VipOrderVo> vipOrderVoList = vipOrderService.getVipOrderList(dto); List<VipOrderVo> vipOrderVoList = vipOrderService.queryVipOrderList(query);
return R.ok(vipOrderVoList); return R.ok(vipOrderVoList);
} }
/**
* 查询会员订单信息
*/
@PostMapping("/queryVipOrder")
@Operation(summary = "查询会员订单信息(单表查询)" , description = "查询会员订单信息")
public R<VipOrderVo> queryVipOrder(@RequestBody VipOrderExtQuery query) {
query.valid();
VipOrderVo vipOrderVo = vipOrderService.queryVipOrder(query);
return R.ok(vipOrderVo);
}
} }

4
bnyer-services/bnyer-order/src/main/java/com/bnyer/order/listener/vip/VipOrderPayNotifyConsumer.java

@ -34,6 +34,9 @@ public class VipOrderPayNotifyConsumer implements RocketMQListener<String> {
@Resource @Resource
private VipOrderMapper vipOrderMapper; private VipOrderMapper vipOrderMapper;
@Resource
private VipOrderService vipOrderService;
@Resource @Resource
private RocketMQTemplate vipRecordMqTemplate; private RocketMQTemplate vipRecordMqTemplate;
@ -41,7 +44,6 @@ public class VipOrderPayNotifyConsumer implements RocketMQListener<String> {
public void onMessage(String message) { public void onMessage(String message) {
log.info("收到消息:{}", message); log.info("收到消息:{}", message);
//修改订单并添加会员记录 //修改订单并添加会员记录
VipOrderService vipOrderService = SpringUtils.getBean(VipOrderService.class);
JSONObject orderObj = JSON.parseObject(message); JSONObject orderObj = JSON.parseObject(message);
String orderNo = orderObj.getString("orderNo"); String orderNo = orderObj.getString("orderNo");
VipOrder vipOrder = vipOrderMapper.selectOne(new LambdaQueryWrapper<VipOrder>().eq(VipOrder::getOrderNo, orderNo)); VipOrder vipOrder = vipOrderMapper.selectOne(new LambdaQueryWrapper<VipOrder>().eq(VipOrder::getOrderNo, orderNo));

4
bnyer-services/bnyer-order/src/main/java/com/bnyer/order/mapper/VipOrderMapper.java

@ -2,7 +2,7 @@ package com.bnyer.order.mapper;
import java.util.List; import java.util.List;
import com.bnyer.order.dto.QueryVipOrderDto; import com.bnyer.order.bean.query.VipOrderQuery;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bnyer.common.core.domain.VipOrder; import com.bnyer.common.core.domain.VipOrder;
@ -20,7 +20,7 @@ public interface VipOrderMapper extends BaseMapper<VipOrder> {
* @param dto * @param dto
* @return * @return
*/ */
List<VipOrder> queryVipOrderList(QueryVipOrderDto dto); List<VipOrder> queryVipOrderList(VipOrderQuery dto);
/** /**
* 取消订单 * 取消订单

18
bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/VipOrderService.java

@ -2,9 +2,10 @@ package com.bnyer.order.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.bnyer.common.core.domain.VipOrder; import com.bnyer.common.core.domain.VipOrder;
import com.bnyer.order.dto.QueryVipOrderDto; import com.bnyer.order.bean.dto.AddVipOrderDto;
import com.bnyer.order.dto.AddVipOrderDto; import com.bnyer.order.bean.query.VipOrderExtQuery;
import com.bnyer.order.vo.VipOrderVo; import com.bnyer.order.bean.query.VipOrderQuery;
import com.bnyer.order.bean.vo.VipOrderVo;
import java.util.List; import java.util.List;
@ -32,10 +33,17 @@ public interface VipOrderService extends IService<VipOrder> {
/** /**
* 查询会员订单列表信息 * 查询会员订单列表信息
* @param dto * @param query
* @return * @return
*/ */
List<VipOrderVo> getVipOrderList(QueryVipOrderDto dto); List<VipOrderVo> queryVipOrderList(VipOrderQuery query);
/**
* 查询会员订单详情
* @param query
* @return
*/
VipOrderVo queryVipOrder(VipOrderExtQuery query);
/** /**
* 更新订单信息 * 更新订单信息

101
bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/impl/VipOrderServiceImpl.java

@ -11,18 +11,20 @@ import com.bnyer.common.core.enums.*;
import com.bnyer.common.core.exception.ServiceException; import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.common.core.utils.DateUtils; import com.bnyer.common.core.utils.DateUtils;
import com.bnyer.common.core.utils.OrderUtil; import com.bnyer.common.core.utils.OrderUtil;
import com.bnyer.common.core.utils.StringUtils;
import com.bnyer.common.core.utils.bean.EntityConvertUtil; import com.bnyer.common.core.utils.bean.EntityConvertUtil;
import com.bnyer.common.core.vo.UserInfoVo;
import com.bnyer.common.rocketmq.config.RocketMqConstant; import com.bnyer.common.rocketmq.config.RocketMqConstant;
import com.bnyer.common.security.utils.SecurityUtils; import com.bnyer.common.security.utils.SecurityUtils;
import com.bnyer.img.api.dto.QueryUserVipDto; import com.bnyer.img.api.remote.RemoteUserVipService;
import com.bnyer.img.api.remote.RemoteWxMiniService; import com.bnyer.img.api.vo.UserVipVo;
import com.bnyer.img.api.vo.UserVipInfoVo; import com.bnyer.order.bean.dto.AddVipOrderDto;
import com.bnyer.order.dto.AddVipOrderDto; import com.bnyer.order.bean.query.VipOrderQuery;
import com.bnyer.order.dto.QueryVipOrderDto; import com.bnyer.order.bean.query.VipOrderExtQuery;
import com.bnyer.order.bean.vo.VipOrderVo;
import com.bnyer.order.enums.EnumVipOrderStatus; import com.bnyer.order.enums.EnumVipOrderStatus;
import com.bnyer.order.mapper.VipOrderMapper; import com.bnyer.order.mapper.VipOrderMapper;
import com.bnyer.order.service.VipOrderService; import com.bnyer.order.service.VipOrderService;
import com.bnyer.order.vo.VipOrderVo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.producer.SendStatus; import org.apache.rocketmq.client.producer.SendStatus;
import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.apache.rocketmq.spring.core.RocketMQTemplate;
@ -52,20 +54,42 @@ public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper, VipOrder> i
private VipOrderMapper vipOrderMapper; private VipOrderMapper vipOrderMapper;
@Autowired @Autowired
private RemoteWxMiniService remoteWxMiniService; private RemoteUserVipService remoteUserVipService;
/** /**
* 查询会员订单列表信息 * 查询会员订单列表信息
* @param dto * @param query
* @return * @return
*/ */
@Override @Override
public List<VipOrderVo> getVipOrderList(QueryVipOrderDto dto) { public List<VipOrderVo> queryVipOrderList(VipOrderQuery query) {
List<VipOrder> vipOrderList = vipOrderMapper.queryVipOrderList(dto); List<VipOrder> vipOrderList = vipOrderMapper.queryVipOrderList(query);
List<VipOrderVo> vipOrderVoList = EntityConvertUtil.copy(vipOrderList, VipOrderVo.class); List<VipOrderVo> vipOrderVoList = EntityConvertUtil.copy(vipOrderList, VipOrderVo.class);
return vipOrderVoList; return vipOrderVoList;
} }
/**
* 查询会员订单详情
* @param query
* @return
*/
@Override
public VipOrderVo queryVipOrder(VipOrderExtQuery query) {
LambdaQueryWrapper<VipOrder> queryWrapper = new LambdaQueryWrapper<>();
if (Objects.nonNull(query.getId())){
queryWrapper.eq(VipOrder::getId,query.getId());
}
if (StringUtils.isNotBlank(query.getOrderNo())){
queryWrapper.eq(VipOrder::getOrderNo,query.getOrderNo());
}
VipOrder vipOrder = vipOrderMapper.selectOne(queryWrapper);
if (Objects.isNull(vipOrder)){
throw new ServiceException(ResponseEnum.NOT_EXIST,"会员订单");
}
VipOrderVo vipOrderVo = EntityConvertUtil.copy(vipOrder, VipOrderVo.class);
return vipOrderVo;
}
/** /**
* 生成会员订单返回订单号 * 生成会员订单返回订单号
@ -97,23 +121,17 @@ public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper, VipOrder> i
*/ */
private VipOrder buildVipOrder(AddVipOrderDto addVipOrderDto) { private VipOrder buildVipOrder(AddVipOrderDto addVipOrderDto) {
//查询会员信息 //查询会员信息
QueryUserVipDto queryUserVipDto = new QueryUserVipDto(); R<UserVipVo> userVipResult = remoteUserVipService.queryUserVip(addVipOrderDto.getVipId());
queryUserVipDto.setId(addVipOrderDto.getVipId()); if (!userVipResult.isSuccess()){
R<List<UserVipInfoVo>> userVipVoListResult = remoteWxMiniService.queryUserVipList(queryUserVipDto); log.error("内部接口调用异常:url:{}request{},result{},error:{}","queryUserVipList", addVipOrderDto.getVipId(),JSON.toJSONString(userVipResult),userVipResult.getMsg());
if (!userVipVoListResult.isSuccess()){ throw new ServiceException(userVipResult.getMsg());
log.error("内部接口调用异常:url:{}request{},result{},error:{}","queryUserVipList", JSON.toJSONString(queryUserVipDto),JSON.toJSONString(userVipVoListResult),userVipVoListResult.getMsg());
throw new ServiceException(userVipVoListResult.getMsg());
} }
List<UserVipInfoVo> userVipInfoVoList = userVipVoListResult.getData(); UserVipVo userVipVo = userVipResult.getData();
if (CollUtil.isEmpty(userVipInfoVoList)){
throw new ServiceException(ResponseEnum.NOT_EXIST,"会员信息");
}
UserVipInfoVo userVipInfoVo = userVipInfoVoList.get(0);
VipOrder vipOrder = null; VipOrder vipOrder = null;
EnumVipType enumVipType = EnumVipType.getVipTypeByCode(userVipInfoVo.getVipTypeCode()); EnumVipType enumVipType = EnumVipType.getVipTypeByCode(userVipVo.getVipTypeCode());
switch (enumVipType){ switch (enumVipType){
case IMG_VIP: case IMG_VIP:
vipOrder = buildImgVipOrder(userVipInfoVo,addVipOrderDto); vipOrder = buildImgVipOrder(userVipVo,addVipOrderDto);
break; break;
case VIDEO_VIP: case VIDEO_VIP:
break; break;
@ -127,35 +145,35 @@ public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper, VipOrder> i
/** /**
* 构建下图会员订单 * 构建下图会员订单
* @param userVipInfoVo * @param userVipVo
* @param addVipOrderDto * @param addVipOrderDto
* @return * @return
*/ */
private VipOrder buildImgVipOrder(UserVipInfoVo userVipInfoVo, AddVipOrderDto addVipOrderDto) { private VipOrder buildImgVipOrder(UserVipVo userVipVo, AddVipOrderDto addVipOrderDto) {
Long userId = SecurityUtils.getUserId(); VipOrder vipOrder = addVipOrderDto.toEntity();
VipOrder vipOrder = new VipOrder(); UserInfoVo userInfo = SecurityUtils.getUserInfo();
vipOrder.setVipId(userVipInfoVo.getId()); Long userId = userInfo.getId();
vipOrder.setVipCode(userVipInfoVo.getVipCode()); Integer userClientType = userInfo.getUserClientType();
vipOrder.setVipName(userVipInfoVo.getVipName()); vipOrder.setVipCode(userVipVo.getVipCode());
vipOrder.setVipTypeName(userVipInfoVo.getVipTypeName()); vipOrder.setVipName(userVipVo.getVipName());
vipOrder.setVipTypeName(userVipVo.getVipTypeName());
//// TODO: 2023/05/10 待加密
vipOrder.setPhone(addVipOrderDto.getPhone()); vipOrder.setPhone(addVipOrderDto.getPhone());
vipOrder.setVipId(addVipOrderDto.getVipId()); vipOrder.setVipName(userVipVo.getVipName());
vipOrder.setVipName(userVipInfoVo.getVipName()); vipOrder.setVipTypeName(userVipVo.getVipTypeName());
vipOrder.setVipTypeName(userVipInfoVo.getVipTypeName()); vipOrder.setPayAmount(userVipVo.getPrice());
vipOrder.setPayAmount(userVipInfoVo.getPrice()); vipOrder.setVipTypeName(userVipVo.getVipTypeName());
vipOrder.setVipTypeName(userVipInfoVo.getVipTypeName());
vipOrder.setUserId(userId); vipOrder.setUserId(userId);
// vipOrder.setIsDelay("0"); // vipOrder.setIsDelay("0");
Date nowDate = new Date(); Date nowDate = new Date();
vipOrder.setStartTime(nowDate); vipOrder.setStartTime(nowDate);
EnumTimeUnit enumTimeUnitByUnit = EnumTimeUnit.getEnumTimeUnitByUnit(userVipInfoVo.getValidTimeUnit()); EnumTimeUnit enumTimeUnitByUnit = EnumTimeUnit.getEnumTimeUnitByUnit(userVipVo.getValidTimeUnit());
//计算会员结束时间 //计算会员结束时间
vipOrder.setEndTime(DateUtils.getDateByType(enumTimeUnitByUnit,nowDate, userVipInfoVo.getValidTimeNum())); vipOrder.setEndTime(DateUtils.getDateByType(enumTimeUnitByUnit,nowDate, userVipVo.getValidTimeNum()));
//开通的天数 //开通的天数
vipOrder.setDays((int) DateUtil.betweenDay(vipOrder.getStartTime(), vipOrder.getEndTime(), true)); vipOrder.setDays((int) DateUtil.betweenDay(vipOrder.getStartTime(), vipOrder.getEndTime(), true));
vipOrder.setUserClientType(addVipOrderDto.getUserClientType()); vipOrder.setUserClientType(userClientType);
vipOrder.setOrderNo(OrderUtil.getOrderNo("RV",nowDate, EnumUserClientType.getCodeByType(addVipOrderDto.getUserClientType()),String.valueOf(userId))); vipOrder.setOrderNo(OrderUtil.getOrderNo("RV",nowDate, EnumUserClientType.getCodeByType(userClientType),String.valueOf(userId)));
vipOrder.setCreateTime(nowDate);
return vipOrder; return vipOrder;
} }
@ -185,7 +203,6 @@ public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper, VipOrder> i
* 更新订单信息为已支付 * 更新订单信息为已支付
* @param vipOrder * @param vipOrder
*/ */
@Transactional(rollbackFor = Exception.class)
@Override @Override
public void updateByToPaySuccess(VipOrder vipOrder) { public void updateByToPaySuccess(VipOrder vipOrder) {
vipOrder.setPayStatus(EnumPayStatus.SUCCESS.getStatus()); vipOrder.setPayStatus(EnumPayStatus.SUCCESS.getStatus());

6
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bo/QueryOrderBo.java → bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/bo/QueryOrderBo.java

@ -1,4 +1,4 @@
package com.bnyer.pay.bo; package com.bnyer.pay.bean.bo;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@ -14,10 +14,6 @@ import lombok.Setter;
@NoArgsConstructor @NoArgsConstructor
public class QueryOrderBo { public class QueryOrderBo {
/**
* 支付类型wxpay/alipay/kspay/dypay
*/
private String payType;
/** /**
* 交易类型 1--JSAPI支付小程序appId支付2--Native支付3--app支付4--JSAPI支付公众号appId支付5--H5支付,微信支付必填 * 交易类型 1--JSAPI支付小程序appId支付2--Native支付3--app支付4--JSAPI支付公众号appId支付5--H5支付,微信支付必填
*/ */

17
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/bo/RefundBo.java

@ -0,0 +1,17 @@
package com.bnyer.pay.bean.bo;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* @author :WXC
* @Date :2023/05/08
* @description :
*/
@Getter
@Setter
@NoArgsConstructor
public class RefundBo {
}

6
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bo/UnifiedOrderBo.java → bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/bo/UnifiedOrderBo.java

@ -1,4 +1,4 @@
package com.bnyer.pay.bo; package com.bnyer.pay.bean.bo;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@ -21,7 +21,7 @@ public class UnifiedOrderBo {
*/ */
private String payId; private String payId;
/** /**
* trade_type=JSAPI此参数必传用户在商户appid下的唯一标识 * 用户在商户appid下的唯一标识
*/ */
private String openId; private String openId;
/** /**
@ -49,7 +49,7 @@ public class UnifiedOrderBo {
*/ */
private String goodsSubject; private String goodsSubject;
/** /**
* 商品描述: 会员充值 * 商品描述: 支付场景名称会员类型-会员名称
*/ */
private String goodsDesc; private String goodsDesc;
} }

6
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/AddPayInfoDto.java → bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/AddPayInfoDto.java

@ -1,6 +1,8 @@
package com.bnyer.pay.dto; package com.bnyer.pay.bean.dto;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.bnyer.common.core.domain.PayInfo;
import com.bnyer.common.core.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@ -19,7 +21,7 @@ import java.util.Date;
@Setter @Setter
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class AddPayInfoDto { public class AddPayInfoDto extends BaseDto<PayInfo> {
@ApiModelProperty(value="支付单号(内部生成)") @ApiModelProperty(value="支付单号(内部生成)")
private String payId; private String payId;

2
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/EditPayInfoNotifyDto.java → bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/EditPayInfoNotifyDto.java

@ -1,4 +1,4 @@
package com.bnyer.pay.dto; package com.bnyer.pay.bean.dto;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;

2
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/EditPayInfoSingleDto.java → bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/EditPayInfoSingleDto.java

@ -1,4 +1,4 @@
package com.bnyer.pay.dto; package com.bnyer.pay.bean.dto;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;

2
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/PayNotifyCheckDto.java → bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/PayNotifyCheckDto.java

@ -1,4 +1,4 @@
package com.bnyer.pay.dto; package com.bnyer.pay.bean.dto;
import com.bnyer.common.core.enums.EnumPayType; import com.bnyer.common.core.enums.EnumPayType;
import lombok.Getter; import lombok.Getter;

5
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/QueryOrderDto.java → bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/QueryOrderDto.java

@ -1,4 +1,4 @@
package com.bnyer.pay.dto; package com.bnyer.pay.bean.dto;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
@ -21,4 +21,7 @@ public class QueryOrderDto {
@ApiModelProperty(value="支付单号",required = true) @ApiModelProperty(value="支付单号",required = true)
private String payId; private String payId;
@ApiModelProperty(value = "第三方流水号")
private String payNo;
} }

17
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/RefundDto.java

@ -0,0 +1,17 @@
package com.bnyer.pay.bean.dto;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* @author :WXC
* @Date :2023/05/08
* @description :
*/
@Getter
@Setter
@NoArgsConstructor
public class RefundDto {
}

6
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/InOrderDto.java → bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/UnifiedOrderDto.java

@ -1,4 +1,4 @@
package com.bnyer.pay.dto; package com.bnyer.pay.bean.dto;
import com.bnyer.common.core.annotation.CustomParamsValidation; import com.bnyer.common.core.annotation.CustomParamsValidation;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
@ -17,7 +17,7 @@ import javax.validation.constraints.NotNull;
@Getter @Getter
@Setter @Setter
@NoArgsConstructor @NoArgsConstructor
public class InOrderDto { public class UnifiedOrderDto {
@NotBlank(message = "业务主订单号不能为空") @NotBlank(message = "业务主订单号不能为空")
@ApiModelProperty(value="业务主订单号:关联内部业务订单表",required = true) @ApiModelProperty(value="业务主订单号:关联内部业务订单表",required = true)
@ -28,7 +28,7 @@ public class InOrderDto {
private Integer sceneCode; private Integer sceneCode;
@NotBlank(message = "支付类型不能为空") @NotBlank(message = "支付类型不能为空")
@ApiModelProperty(value="支付类型:wxpay/alipay",required = true) @ApiModelProperty(value="支付类型:wxpay/alipay/dypay/kspay",required = true)
private String payType; private String payType;
@ApiModelProperty(value="交易类型 1--JSAPI支付(小程序appId支付)、2--Native支付、3--app支付,4--JSAPI支付(公众号appId支付)5--H5支付,微信支付必填",example = "1") @ApiModelProperty(value="交易类型 1--JSAPI支付(小程序appId支付)、2--Native支付、3--app支付,4--JSAPI支付(公众号appId支付)5--H5支付,微信支付必填",example = "1")

2
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/vo/PayInfoDetailsVo.java → bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/vo/PayInfoDetailsVo.java

@ -1,4 +1,4 @@
package com.bnyer.pay.vo; package com.bnyer.pay.bean.vo;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;

2
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/vo/PayInfoVo.java → bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/vo/PayInfoVo.java

@ -1,4 +1,4 @@
package com.bnyer.pay.vo; package com.bnyer.pay.bean.vo;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;

2
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/vo/QueryOrderVo.java → bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/vo/QueryOrderVo.java

@ -1,4 +1,4 @@
package com.bnyer.pay.vo; package com.bnyer.pay.bean.vo;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;

2
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/vo/ThirdQueryOrderVo.java → bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/vo/ThirdQueryOrderVo.java

@ -1,4 +1,4 @@
package com.bnyer.pay.vo; package com.bnyer.pay.bean.vo;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;

10
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/vo/ThirdRefundVo.java

@ -0,0 +1,10 @@
package com.bnyer.pay.bean.vo;
/**
* @author :WXC
* @Date :2023/05/08
* @description :
*/
public class ThirdRefundVo {
}

7
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/vo/ThirdInOrderVo.java → bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/vo/ThirdUnifiedOrderVo.java

@ -1,8 +1,7 @@
package com.bnyer.pay.vo; package com.bnyer.pay.bean.vo;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.*; import lombok.*;
import lombok.experimental.Accessors;
import java.io.Serializable; import java.io.Serializable;
@ -13,7 +12,7 @@ import java.io.Serializable;
*/ */
@Data @Data
@NoArgsConstructor @NoArgsConstructor
public class ThirdInOrderVo implements Serializable { public class ThirdUnifiedOrderVo implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "应用id") @ApiModelProperty(value = "应用id")
@ -44,7 +43,7 @@ public class ThirdInOrderVo implements Serializable {
private String nonceStr; private String nonceStr;
@ApiModelProperty(value = "会话标识") @ApiModelProperty(value = "会话标识")
private String packageValue; private String packageValue;
@ApiModelProperty(value = "微信返回的字段") @ApiModelProperty(value = "签名类型")
private String signType; private String signType;
@ApiModelProperty(value = "签名") @ApiModelProperty(value = "签名")
private String paySign; private String paySign;

12
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/vo/InOrderVo.java → bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/vo/UnifiedOrderVo.java

@ -1,4 +1,4 @@
package com.bnyer.pay.vo; package com.bnyer.pay.bean.vo;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
@ -11,7 +11,7 @@ import lombok.NoArgsConstructor;
*/ */
@Data @Data
@NoArgsConstructor @NoArgsConstructor
public class InOrderVo { public class UnifiedOrderVo {
@ApiModelProperty(value = "应用id") @ApiModelProperty(value = "应用id")
private String appId; private String appId;
@ -20,16 +20,16 @@ public class InOrderVo {
private String outOrderNo; private String outOrderNo;
@ApiModelProperty(value = "微信下单返回") @ApiModelProperty(value = "微信下单返回")
private ThirdInOrderVo.WxThirdInOrderVo wxThirdInOrderVo; private ThirdUnifiedOrderVo.WxThirdInOrderVo wxThirdInOrderVo;
@ApiModelProperty(value = "支付宝下单返回") @ApiModelProperty(value = "支付宝下单返回")
private ThirdInOrderVo.AliThirdInOrderVo aliThirdInOrderVo; private ThirdUnifiedOrderVo.AliThirdInOrderVo aliThirdInOrderVo;
@ApiModelProperty(value = "快手下单返回") @ApiModelProperty(value = "快手下单返回")
private ThirdInOrderVo.KsThirdInOrderVo ksThirdInOrderVo; private ThirdUnifiedOrderVo.KsThirdInOrderVo ksThirdInOrderVo;
@ApiModelProperty(value = "抖音下单返回") @ApiModelProperty(value = "抖音下单返回")
private ThirdInOrderVo.DyThirdInOrderVo dyThirdInOrderVo; private ThirdUnifiedOrderVo.DyThirdInOrderVo dyThirdInOrderVo;
@Data @Data
public static class WxThirdInOrderVo { public static class WxThirdInOrderVo {

17
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/controller/UnifiedPayController.java

@ -1,12 +1,11 @@
package com.bnyer.pay.controller; package com.bnyer.pay.controller;
import com.bnyer.common.core.domain.R; import com.bnyer.common.core.domain.R;
import com.bnyer.pay.dto.InOrderDto; import com.bnyer.pay.bean.dto.UnifiedOrderDto;
import com.bnyer.pay.dto.QueryOrderDto; import com.bnyer.pay.bean.dto.QueryOrderDto;
import com.bnyer.pay.service.UnifiedPayService; import com.bnyer.pay.service.UnifiedPayService;
import com.bnyer.pay.vo.InOrderVo; import com.bnyer.pay.bean.vo.UnifiedOrderVo;
import com.bnyer.pay.vo.QueryOrderVo; import com.bnyer.pay.bean.vo.QueryOrderVo;
import com.bnyer.pay.vo.ThirdInOrderVo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -33,11 +32,11 @@ public class UnifiedPayController {
@Autowired @Autowired
private UnifiedPayService unifiedPayService; private UnifiedPayService unifiedPayService;
@PostMapping("/inOrder") @PostMapping("/unifiedOrder")
@Operation(summary = "统一下单,并生成支付订单" , description = "生成支付订单,返回前端支付所需参数") @Operation(summary = "统一下单,并生成支付订单" , description = "生成支付订单,返回前端支付所需参数")
public R<InOrderVo> inOrder(@Valid @RequestBody InOrderDto dto, HttpServletRequest request){ public R<UnifiedOrderVo> unifiedOrder(@Valid @RequestBody UnifiedOrderDto dto, HttpServletRequest request){
InOrderVo inOrderVo = unifiedPayService.inOrder(dto,request); UnifiedOrderVo unifiedOrderVo = unifiedPayService.unifiedOrder(dto,request);
return R.ok(inOrderVo); return R.ok(unifiedOrderVo);
} }
@PostMapping("/queryOrder") @PostMapping("/queryOrder")

44
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AbstractPayStrategy.java

@ -3,18 +3,17 @@ package com.bnyer.pay.design.strategy;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alipay.api.msg.MsgConstants; import com.alipay.api.msg.MsgConstants;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.bnyer.common.core.constant.RedisKeyConstant; import com.bnyer.common.core.constant.RedisKeyConstant;
import com.bnyer.common.core.domain.PayInfo;
import com.bnyer.common.core.enums.EnumPayType; import com.bnyer.common.core.enums.EnumPayType;
import com.bnyer.common.redis.service.RedissonService; import com.bnyer.common.redis.service.RedissonService;
import com.bnyer.pay.dto.PayNotifyCheckDto; import com.bnyer.pay.bean.dto.PayNotifyCheckDto;
import com.bnyer.pay.mapper.PayInfoMapper; import com.bnyer.pay.service.PayInfoService;
import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse; import com.bnyer.pay.bean.vo.PayInfoDetailsVo;
import com.github.binarywang.wxpay.bean.notify.WxPayNotifyV3Response;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock; import org.redisson.api.RLock;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.Resource;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -26,11 +25,15 @@ import java.util.concurrent.TimeUnit;
@Slf4j @Slf4j
public abstract class AbstractPayStrategy implements IPayStrategy { public abstract class AbstractPayStrategy implements IPayStrategy {
@Resource private static PayInfoService payInfoService;
private PayInfoMapper payInfoMapper;
@Resource private static RedissonService redissonService;
private RedissonService redissonService;
@Autowired
public void setBean(PayInfoService payInfoService, RedissonService redissonService) {
AbstractPayStrategy.payInfoService = payInfoService;
AbstractPayStrategy.redissonService = redissonService;
}
/** /**
* 校验是否已支付避免重复调用 * 校验是否已支付避免重复调用
@ -38,38 +41,35 @@ public abstract class AbstractPayStrategy implements IPayStrategy {
* @return * @return
*/ */
public String payNotifyCheck(PayNotifyCheckDto checkDto){ public String payNotifyCheck(PayNotifyCheckDto checkDto){
log.error("回调结果校验开始,支付单号:{}",checkDto.getPayId()); log.info("回调结果校验开始,支付单号:{}",checkDto.getPayId());
String resultMsg = ""; String resultMsg = "";
RLock rLock = redissonService.getRLock(RedisKeyConstant.PAY_NOTIFY_LOCK_KEY + checkDto.getPayId()); RLock rLock = redissonService.getRLock(RedisKeyConstant.PAY_NOTIFY_LOCK_KEY + checkDto.getPayId());
try{ try{
if(rLock.tryLock(2L, 10L, TimeUnit.SECONDS)){ if(rLock.tryLock(2L, 10L, TimeUnit.SECONDS)){
PayInfo payInfo = payInfoMapper.selectOne(new LambdaQueryWrapper<PayInfo>().eq(PayInfo::getPayId, checkDto.getPayId()).eq(PayInfo::getIsShow, "1")); PayInfoDetailsVo payInfoDetailsVo = payInfoService.queryPayInfo(checkDto.getPayId());
if (Objects.isNull(payInfo)){ log.info("查询到支付订单信息为:{}", JSON.toJSONString(payInfoDetailsVo));
return buildNotifyCheckResultMsg(checkDto.getPayType(),false,"business fail");
}
log.info("查询到支付订单信息为:{}", JSON.toJSONString(payInfo));
//订单中的金额 //订单中的金额
String payInfoPayAmount = payInfo.getPayAmount().toString(); String payInfoPayAmount = payInfoDetailsVo.getPayAmount().toString();
//回调中的金额 //回调中的金额
String notifyPayAmount = checkDto.getPayAmount(); String notifyPayAmount = checkDto.getPayAmount();
//对账状态 //对账状态
Integer singleStatus = payInfo.getSingleStatus(); Integer singleStatus = payInfoDetailsVo.getSingleStatus();
log.info("回调中的金额:{},订单中的金额:{}",notifyPayAmount,payInfoPayAmount); log.info("回调中的金额:{},订单中的金额:{}",notifyPayAmount,payInfoPayAmount);
if (payInfoPayAmount.equals(notifyPayAmount)){ if (payInfoPayAmount.equals(notifyPayAmount)){
if (Objects.nonNull(singleStatus)){ if (Objects.nonNull(singleStatus)){
resultMsg = buildNotifyCheckResultMsg(checkDto.getPayType(),true,checkDto.getMsg()); resultMsg = buildNotifyCheckResultMsg(checkDto.getPayType(),true,checkDto.getMsg());
} }
}else { }else {
resultMsg = buildNotifyCheckResultMsg(checkDto.getPayType(),false,"business fail"); resultMsg = buildNotifyCheckResultMsg(checkDto.getPayType(),false,"trade fail");
} }
}else { }else {
log.error("获取锁失败,支付单号:{}",checkDto.getPayId()); log.error("获取锁失败,支付单号:{}",checkDto.getPayId());
resultMsg = buildNotifyCheckResultMsg(checkDto.getPayType(),false,"business fail"); resultMsg = buildNotifyCheckResultMsg(checkDto.getPayType(),false,"trade fail");
} }
}catch (Exception e){ }catch (Exception e){
e.printStackTrace(); e.printStackTrace();
log.error("回调结果校验失败,支付单号:{}",checkDto.getPayId()); log.error("回调结果校验失败,支付单号:{}",checkDto.getPayId());
resultMsg = buildNotifyCheckResultMsg(checkDto.getPayType(),false,"business fail"); resultMsg = buildNotifyCheckResultMsg(checkDto.getPayType(),false,"trade fail");
}finally { }finally {
rLock.unlock(); rLock.unlock();
} }
@ -86,7 +86,7 @@ public abstract class AbstractPayStrategy implements IPayStrategy {
public String buildNotifyCheckResultMsg(EnumPayType payType,boolean isSuccess,String msg){ public String buildNotifyCheckResultMsg(EnumPayType payType,boolean isSuccess,String msg){
String result = ""; String result = "";
if (EnumPayType.WX_PAY == payType){ if (EnumPayType.WX_PAY == payType){
result = isSuccess?WxPayNotifyResponse.success(msg):WxPayNotifyResponse.fail(msg); result = isSuccess?WxPayNotifyV3Response.success(msg): WxPayNotifyV3Response.fail(msg);
}else if (EnumPayType.ALI_PAY == payType){ }else if (EnumPayType.ALI_PAY == payType){
result = isSuccess?MsgConstants.SUCCESS:MsgConstants.FAIL; result = isSuccess?MsgConstants.SUCCESS:MsgConstants.FAIL;
} else if (EnumPayType.KS_PAY == payType) { } else if (EnumPayType.KS_PAY == payType) {

25
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AliPayStrategy.java

@ -21,16 +21,18 @@ import com.bnyer.common.core.enums.ResponseEnum;
import com.bnyer.common.core.exception.ServiceException; import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.common.core.utils.DateUtils; import com.bnyer.common.core.utils.DateUtils;
import com.bnyer.common.core.utils.StringUtils; import com.bnyer.common.core.utils.StringUtils;
import com.bnyer.pay.bo.QueryOrderBo; import com.bnyer.pay.bean.bo.QueryOrderBo;
import com.bnyer.pay.bo.UnifiedOrderBo; import com.bnyer.pay.bean.bo.RefundBo;
import com.bnyer.pay.bean.bo.UnifiedOrderBo;
import com.bnyer.pay.constant.AliPayConstant; import com.bnyer.pay.constant.AliPayConstant;
import com.bnyer.pay.dto.EditPayInfoNotifyDto; import com.bnyer.pay.bean.dto.EditPayInfoNotifyDto;
import com.bnyer.pay.dto.PayNotifyCheckDto; import com.bnyer.pay.bean.dto.PayNotifyCheckDto;
import com.bnyer.pay.enums.EnumPayChannel; import com.bnyer.pay.enums.EnumPayChannel;
import com.bnyer.pay.manager.AliPayManager; import com.bnyer.pay.manager.AliPayManager;
import com.bnyer.pay.service.PayInfoService; import com.bnyer.pay.service.PayInfoService;
import com.bnyer.pay.vo.ThirdInOrderVo; import com.bnyer.pay.bean.vo.ThirdRefundVo;
import com.bnyer.pay.vo.ThirdQueryOrderVo; import com.bnyer.pay.bean.vo.ThirdUnifiedOrderVo;
import com.bnyer.pay.bean.vo.ThirdQueryOrderVo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -60,7 +62,7 @@ public class AliPayStrategy extends AbstractPayStrategy {
} }
@Override @Override
public ThirdInOrderVo unifiedOrder(UnifiedOrderBo bo) { public ThirdUnifiedOrderVo unifiedOrder(UnifiedOrderBo bo) {
log.info("支付宝支付:统一下单接口调用开始,AliPayStrategy.unifiedOrder bo:{}", JSON.toJSONString(bo)); log.info("支付宝支付:统一下单接口调用开始,AliPayStrategy.unifiedOrder bo:{}", JSON.toJSONString(bo));
AlipayConfig alipayConfig = aliPayManager.getAlipayConfig(); AlipayConfig alipayConfig = aliPayManager.getAlipayConfig();
String appid = alipayConfig.getAppid(); String appid = alipayConfig.getAppid();
@ -88,8 +90,8 @@ public class AliPayStrategy extends AbstractPayStrategy {
// 这里和普通的接口调用不同,使用的是sdkExecute // 这里和普通的接口调用不同,使用的是sdkExecute
AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request); AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
if(response.isSuccess()){ if(response.isSuccess()){
ThirdInOrderVo vo = new ThirdInOrderVo(); ThirdUnifiedOrderVo vo = new ThirdUnifiedOrderVo();
ThirdInOrderVo.AliThirdInOrderVo aliThirdInOrderVo = new ThirdInOrderVo.AliThirdInOrderVo(); ThirdUnifiedOrderVo.AliThirdInOrderVo aliThirdInOrderVo = new ThirdUnifiedOrderVo.AliThirdInOrderVo();
aliThirdInOrderVo.setOutStr(response.getBody()); aliThirdInOrderVo.setOutStr(response.getBody());
vo.setAliThirdInOrderVo(aliThirdInOrderVo); vo.setAliThirdInOrderVo(aliThirdInOrderVo);
vo.setOutOrderNo(bo.getPayId()); vo.setOutOrderNo(bo.getPayId());
@ -209,5 +211,10 @@ public class AliPayStrategy extends AbstractPayStrategy {
} }
} }
@Override
public ThirdRefundVo refund(RefundBo bo) {
return null;
}
} }

121
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/DYPayStrategy.java

@ -10,11 +10,12 @@ import com.bnyer.common.core.enums.EnumPayType;
import com.bnyer.common.core.enums.ResponseEnum; import com.bnyer.common.core.enums.ResponseEnum;
import com.bnyer.common.core.exception.ServiceException; import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.common.core.utils.StringUtils; import com.bnyer.common.core.utils.StringUtils;
import com.bnyer.pay.bo.QueryOrderBo; import com.bnyer.pay.bean.bo.QueryOrderBo;
import com.bnyer.pay.bo.UnifiedOrderBo; import com.bnyer.pay.bean.bo.RefundBo;
import com.bnyer.pay.bean.bo.UnifiedOrderBo;
import com.bnyer.pay.constant.DYPayConstants; import com.bnyer.pay.constant.DYPayConstants;
import com.bnyer.pay.dto.EditPayInfoNotifyDto; import com.bnyer.pay.bean.dto.EditPayInfoNotifyDto;
import com.bnyer.pay.dto.PayNotifyCheckDto; import com.bnyer.pay.bean.dto.PayNotifyCheckDto;
import com.bnyer.pay.enums.EnumPayChannel; import com.bnyer.pay.enums.EnumPayChannel;
import com.bnyer.pay.enums.EnumPayConfigStatus; import com.bnyer.pay.enums.EnumPayConfigStatus;
import com.bnyer.pay.mapper.DypayConfigMapper; import com.bnyer.pay.mapper.DypayConfigMapper;
@ -22,8 +23,9 @@ import com.bnyer.pay.service.PayInfoService;
import com.bnyer.pay.utils.DYPayUtil; import com.bnyer.pay.utils.DYPayUtil;
import com.bnyer.pay.utils.MoneyUtil; import com.bnyer.pay.utils.MoneyUtil;
import com.bnyer.pay.utils.PayRestTemplateUtil; import com.bnyer.pay.utils.PayRestTemplateUtil;
import com.bnyer.pay.vo.ThirdInOrderVo; import com.bnyer.pay.bean.vo.ThirdRefundVo;
import com.bnyer.pay.vo.ThirdQueryOrderVo; import com.bnyer.pay.bean.vo.ThirdUnifiedOrderVo;
import com.bnyer.pay.bean.vo.ThirdQueryOrderVo;
import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest; import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
import com.github.binarywang.wxpay.bean.result.BaseWxPayResult; import com.github.binarywang.wxpay.bean.result.BaseWxPayResult;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -75,7 +77,7 @@ public class DYPayStrategy extends AbstractPayStrategy{
} }
@Override @Override
public ThirdInOrderVo unifiedOrder(UnifiedOrderBo bo) { public ThirdUnifiedOrderVo unifiedOrder(UnifiedOrderBo bo) {
String result = ""; String result = "";
DypayConfig dypayConfig = getDypayConfig(); DypayConfig dypayConfig = getDypayConfig();
String appId = dypayConfig.getAppid(); String appId = dypayConfig.getAppid();
@ -145,15 +147,15 @@ public class DYPayStrategy extends AbstractPayStrategy{
throw new ServiceException(ResponseEnum.PAY_FAILS); throw new ServiceException(ResponseEnum.PAY_FAILS);
} }
//保存预下单信息 //保存预下单信息
ThirdInOrderVo thirdInOrderVo = new ThirdInOrderVo(); ThirdUnifiedOrderVo thirdUnifiedOrderVo = new ThirdUnifiedOrderVo();
thirdInOrderVo.setAppId(appId); thirdUnifiedOrderVo.setAppId(appId);
ThirdInOrderVo.DyThirdInOrderVo dyThirdInOrderVo = new ThirdInOrderVo.DyThirdInOrderVo(); ThirdUnifiedOrderVo.DyThirdInOrderVo dyThirdInOrderVo = new ThirdUnifiedOrderVo.DyThirdInOrderVo();
thirdInOrderVo.setOutOrderNo(bo.getPayId()); thirdUnifiedOrderVo.setOutOrderNo(bo.getPayId());
//把order_no和order_info_token返回前端用于调起收银台 //把order_no和order_info_token返回前端用于调起收银台
dyThirdInOrderVo.setOrderId(orderId); dyThirdInOrderVo.setOrderId(orderId);
dyThirdInOrderVo.setOrderToken(orderToken); dyThirdInOrderVo.setOrderToken(orderToken);
thirdInOrderVo.setDyThirdInOrderVo(dyThirdInOrderVo); thirdUnifiedOrderVo.setDyThirdInOrderVo(dyThirdInOrderVo);
return thirdInOrderVo; return thirdUnifiedOrderVo;
} }
@Override @Override
@ -171,53 +173,57 @@ public class DYPayStrategy extends AbstractPayStrategy{
//订单信息的json字符串 //订单信息的json字符串
String message = object.getString("msg"); String message = object.getString("msg");
JSONObject msgJsonObj = JSON.parseObject(message); JSONObject msgJsonObj = JSON.parseObject(message);
log.info("快手支付:统一回调处理,params:{}",message);
if (StringUtils.isBlank(msgSignature)) {
log.info("抖音支付回调参数丢失,payId:{}",object.getString("cp_orderno"));
return super.buildNotifyCheckResultMsg(EnumPayType.DY_PAY,false,"trade fail");
}
//校验回调签名 //校验回调签名
String signMessage = dyPayUtil.getCallbackSignature(timestamp, nonce, message,token); String signMessage = dyPayUtil.getCallbackSignature(timestamp, nonce, message,token);
//签名校验 //签名校验
if (msgSignature.equals(signMessage)) { if (!msgSignature.equals(signMessage)) {
//固定值SUCCESS
String status = msgJsonObj.getString("status");
//开发者侧的订单号
String outOrderNo = msgJsonObj.getString("cp_orderno");
//支付渠道: 1-微信支付,2-支付宝支付,10-抖音支付
String payChannel = msgJsonObj.getString("way");
//支付金额,单位为分
Integer totalAmount = msgJsonObj.getInteger("total_amount");
//支付渠道侧PC单号,支付页面可见(微信支付宝侧的订单号)
String paymentOrderNo = msgJsonObj.getString("payment_order_no");
//抖音侧订单号
String dyOrderId = msgJsonObj.getString("order_id");
//这里无论回调失败还是成功,都需要都各个业务层去处理相关逻辑
if("success".equals(status)){
//处理业务
PayNotifyCheckDto payNotifyCheckDto = new PayNotifyCheckDto();
payNotifyCheckDto.setPayType(EnumPayType.DY_PAY);
payNotifyCheckDto.setPayAmount(BaseWxPayResult.fenToYuan(totalAmount));
payNotifyCheckDto.setPayId(outOrderNo);
payNotifyCheckDto.setMsg("success");
String notifyCheck = super.payNotifyCheck(payNotifyCheckDto);
if (StringUtils.isNotBlank(notifyCheck)){
return notifyCheck;
}
log.info("抖音支付回调,交易正常:封装参数修改内部支付单信息");
EditPayInfoNotifyDto editPayInfoNotifyDto = new EditPayInfoNotifyDto();
editPayInfoNotifyDto.setPayAmount(MoneyUtil.fenToYuan(String.valueOf(totalAmount)));
editPayInfoNotifyDto.setPayTime(DateUtil.formatDateTime(new Date()));
editPayInfoNotifyDto.setAppId(appId);
editPayInfoNotifyDto.setPayId(outOrderNo);
editPayInfoNotifyDto.setPayNo(dyOrderId);
editPayInfoNotifyDto.setTradeNo(paymentOrderNo);
editPayInfoNotifyDto.setPayChannel(EnumPayChannel.getPayChannelName(payChannel,EnumPayType.DY_PAY));
payInfoService.editPayInfoNotify(editPayInfoNotifyDto);
//正确处理后返回以下内容格式通知小程序平台不再持续回调
return super.buildNotifyCheckResultMsg(EnumPayType.DY_PAY,true,"success");
}else {
log.info("抖音支付回调不是支付成功不做处理:支付状态:{},payId:{}",status,outOrderNo);
}
} else {
log.info("抖音支付回调签名校验失败,payId:{}",msgJsonObj.getString("cp_orderno")); log.info("抖音支付回调签名校验失败,payId:{}",msgJsonObj.getString("cp_orderno"));
return super.buildNotifyCheckResultMsg(EnumPayType.DY_PAY,false,"trade fail");
}
//固定值SUCCESS
String status = msgJsonObj.getString("status");
//开发者侧的订单号
String outOrderNo = msgJsonObj.getString("cp_orderno");
//支付渠道: 1-微信支付,2-支付宝支付,10-抖音支付
String payChannel = msgJsonObj.getString("way");
//支付金额,单位为分
Integer totalAmount = msgJsonObj.getInteger("total_amount");
//支付渠道侧PC单号,支付页面可见(微信支付宝侧的订单号)
String paymentOrderNo = msgJsonObj.getString("payment_order_no");
//抖音侧订单号
String dyOrderId = msgJsonObj.getString("order_id");
//这里无论回调失败还是成功,都需要都各个业务层去处理相关逻辑
if(!"success".equals(status)){
log.info("抖音支付回调不是支付成功不做处理:支付状态:{},payId:{}",status,outOrderNo);
return super.buildNotifyCheckResultMsg(EnumPayType.DY_PAY,false,"trade fail");
}
//处理业务
PayNotifyCheckDto payNotifyCheckDto = new PayNotifyCheckDto();
payNotifyCheckDto.setPayType(EnumPayType.DY_PAY);
payNotifyCheckDto.setPayAmount(BaseWxPayResult.fenToYuan(totalAmount));
payNotifyCheckDto.setPayId(outOrderNo);
payNotifyCheckDto.setMsg("success");
String notifyCheck = super.payNotifyCheck(payNotifyCheckDto);
if (StringUtils.isNotBlank(notifyCheck)){
return notifyCheck;
} }
return super.buildNotifyCheckResultMsg(EnumPayType.DY_PAY,true,"business fail"); log.info("抖音支付回调,交易正常:封装参数修改内部支付单信息");
EditPayInfoNotifyDto editPayInfoNotifyDto = new EditPayInfoNotifyDto();
editPayInfoNotifyDto.setPayAmount(MoneyUtil.fenToYuan(String.valueOf(totalAmount)));
editPayInfoNotifyDto.setPayTime(DateUtil.formatDateTime(new Date()));
editPayInfoNotifyDto.setAppId(appId);
editPayInfoNotifyDto.setPayId(outOrderNo);
editPayInfoNotifyDto.setPayNo(dyOrderId);
editPayInfoNotifyDto.setTradeNo(paymentOrderNo);
editPayInfoNotifyDto.setPayChannel(EnumPayChannel.getPayChannelName(payChannel,EnumPayType.DY_PAY));
payInfoService.editPayInfoNotify(editPayInfoNotifyDto);
//正确处理后返回以下内容格式通知小程序平台不再持续回调
return super.buildNotifyCheckResultMsg(EnumPayType.DY_PAY,true,"success");
} }
@Override @Override
@ -291,4 +297,9 @@ public class DYPayStrategy extends AbstractPayStrategy{
thirdQueryOrderVo.setChannelNo(channelNo); thirdQueryOrderVo.setChannelNo(channelNo);
return thirdQueryOrderVo; return thirdQueryOrderVo;
} }
@Override
public ThirdRefundVo refund(RefundBo bo) {
return null;
}
} }

29
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/IPayStrategy.java

@ -1,9 +1,11 @@
package com.bnyer.pay.design.strategy; package com.bnyer.pay.design.strategy;
import com.bnyer.pay.bo.QueryOrderBo; import com.bnyer.pay.bean.bo.QueryOrderBo;
import com.bnyer.pay.bo.UnifiedOrderBo; import com.bnyer.pay.bean.bo.RefundBo;
import com.bnyer.pay.vo.ThirdInOrderVo; import com.bnyer.pay.bean.bo.UnifiedOrderBo;
import com.bnyer.pay.vo.ThirdQueryOrderVo; import com.bnyer.pay.bean.vo.ThirdRefundVo;
import com.bnyer.pay.bean.vo.ThirdUnifiedOrderVo;
import com.bnyer.pay.bean.vo.ThirdQueryOrderVo;
/** /**
* @author :WXC * @author :WXC
@ -16,10 +18,10 @@ public interface IPayStrategy {
* @param bo * @param bo
* @return * @return
*/ */
ThirdInOrderVo unifiedOrder(UnifiedOrderBo bo); ThirdUnifiedOrderVo unifiedOrder(UnifiedOrderBo bo);
/** /**
* 支付回调处理 * 统一支付回调处理
* 满足支付成功需要几个条件 * 满足支付成功需要几个条件
* 1.回调到pay服务时要保证修改支付状态payStatus为1001对账状态singStatus为1001 * 1.回调到pay服务时要保证修改支付状态payStatus为1001对账状态singStatus为1001
* 2.pay服务处理完以后发送消息到order服务修改order表订单状态orderStatus为1支付状态payStatus为1001 * 2.pay服务处理完以后发送消息到order服务修改order表订单状态orderStatus为1支付状态payStatus为1001
@ -31,15 +33,20 @@ public interface IPayStrategy {
String parsePayNotify(String params); String parsePayNotify(String params);
/** /**
* 订单查询 * 统一订单查询
* @param bo 入参
* @return 第三方订单查询信息
*/ */
ThirdQueryOrderVo queryOrder(QueryOrderBo bo); ThirdQueryOrderVo queryOrder(QueryOrderBo bo);
//===========待完成================
// TODO: 2023/04/03 订单查询
// TODO: 2023/04/03 退款 /**
// void refund(); * 统一退款
* @param bo 入参
* @return 第三方退款信息
*/
ThirdRefundVo refund(RefundBo bo);
//===========待完成================
// TODO: 2023/04/03 退款查询 // TODO: 2023/04/03 退款查询
// void refundQuery(); // void refundQuery();
} }

137
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/KSPayStrategy.java

@ -6,17 +6,17 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson.serializer.SerializerFeature;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.bnyer.common.core.context.SecurityContextHolder;
import com.bnyer.common.core.domain.KspayConfig; import com.bnyer.common.core.domain.KspayConfig;
import com.bnyer.common.core.enums.EnumPayType; import com.bnyer.common.core.enums.EnumPayType;
import com.bnyer.common.core.enums.ResponseEnum; import com.bnyer.common.core.enums.ResponseEnum;
import com.bnyer.common.core.exception.ServiceException; import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.common.core.utils.StringUtils; import com.bnyer.common.core.utils.StringUtils;
import com.bnyer.pay.bo.QueryOrderBo; import com.bnyer.pay.bean.bo.QueryOrderBo;
import com.bnyer.pay.bo.UnifiedOrderBo; import com.bnyer.pay.bean.bo.RefundBo;
import com.bnyer.pay.bean.bo.UnifiedOrderBo;
import com.bnyer.pay.constant.KSPayConstants; import com.bnyer.pay.constant.KSPayConstants;
import com.bnyer.pay.dto.EditPayInfoNotifyDto; import com.bnyer.pay.bean.dto.EditPayInfoNotifyDto;
import com.bnyer.pay.dto.PayNotifyCheckDto; import com.bnyer.pay.bean.dto.PayNotifyCheckDto;
import com.bnyer.pay.enums.EnumPayChannel; import com.bnyer.pay.enums.EnumPayChannel;
import com.bnyer.pay.enums.EnumPayConfigStatus; import com.bnyer.pay.enums.EnumPayConfigStatus;
import com.bnyer.pay.mapper.KspayConfigMapper; import com.bnyer.pay.mapper.KspayConfigMapper;
@ -24,8 +24,9 @@ import com.bnyer.pay.service.PayInfoService;
import com.bnyer.pay.utils.KSPayUtil; import com.bnyer.pay.utils.KSPayUtil;
import com.bnyer.pay.utils.MoneyUtil; import com.bnyer.pay.utils.MoneyUtil;
import com.bnyer.pay.utils.PayRestTemplateUtil; import com.bnyer.pay.utils.PayRestTemplateUtil;
import com.bnyer.pay.vo.ThirdInOrderVo; import com.bnyer.pay.bean.vo.ThirdRefundVo;
import com.bnyer.pay.vo.ThirdQueryOrderVo; import com.bnyer.pay.bean.vo.ThirdUnifiedOrderVo;
import com.bnyer.pay.bean.vo.ThirdQueryOrderVo;
import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest; import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.digest.DigestUtils;
@ -77,10 +78,10 @@ public class KSPayStrategy extends AbstractPayStrategy{
} }
@Override @Override
public ThirdInOrderVo unifiedOrder(UnifiedOrderBo bo) { public ThirdUnifiedOrderVo unifiedOrder(UnifiedOrderBo bo) {
String result = ""; String result = "";
KspayConfig kspayConfig = getKspayConfig(); KspayConfig kspayConfig = getKspayConfig();
String openId = SecurityContextHolder.getFhOpenId(); String openId = bo.getOpenId();
String appId = kspayConfig.getAppid(); String appId = kspayConfig.getAppid();
String backurl = kspayConfig.getBackurl(); String backurl = kspayConfig.getBackurl();
String secret = kspayConfig.getSecret(); String secret = kspayConfig.getSecret();
@ -150,15 +151,15 @@ public class KSPayStrategy extends AbstractPayStrategy{
throw new ServiceException(ResponseEnum.PAY_FAILS); throw new ServiceException(ResponseEnum.PAY_FAILS);
} }
//保存预下单信息 //保存预下单信息
ThirdInOrderVo thirdInOrderVo = new ThirdInOrderVo(); ThirdUnifiedOrderVo thirdUnifiedOrderVo = new ThirdUnifiedOrderVo();
thirdInOrderVo.setAppId(appId); thirdUnifiedOrderVo.setAppId(appId);
ThirdInOrderVo.KsThirdInOrderVo ksThirdInOrderVo = new ThirdInOrderVo.KsThirdInOrderVo(); ThirdUnifiedOrderVo.KsThirdInOrderVo ksThirdInOrderVo = new ThirdUnifiedOrderVo.KsThirdInOrderVo();
thirdInOrderVo.setOutOrderNo(bo.getPayId()); thirdUnifiedOrderVo.setOutOrderNo(bo.getPayId());
//把order_no和order_info_token返回前端用于调起收银台 //把order_no和order_info_token返回前端用于调起收银台
ksThirdInOrderVo.setOrderNo(orderNo); ksThirdInOrderVo.setOrderNo(orderNo);
ksThirdInOrderVo.setOrderToken(orderToken); ksThirdInOrderVo.setOrderToken(orderToken);
thirdInOrderVo.setKsThirdInOrderVo(ksThirdInOrderVo); thirdUnifiedOrderVo.setKsThirdInOrderVo(ksThirdInOrderVo);
return thirdInOrderVo; return thirdUnifiedOrderVo;
} }
@Override @Override
@ -171,59 +172,58 @@ public class KSPayStrategy extends AbstractPayStrategy{
String kwaisign = jsonObject.getString("sign"); String kwaisign = jsonObject.getString("sign");
String jsonString = JSONObject.toJSONString(object, SerializerFeature.WRITE_MAP_NULL_FEATURES, SerializerFeature.QuoteFieldNames); String jsonString = JSONObject.toJSONString(object, SerializerFeature.WRITE_MAP_NULL_FEATURES, SerializerFeature.QuoteFieldNames);
log.info("快手支付:统一回调处理,params:{}",jsonString); log.info("快手支付:统一回调处理,params:{}",jsonString);
if (StringUtils.isNotBlank(kwaisign)) { if (StringUtils.isBlank(kwaisign)) {
jsonString = jsonString + secret;
//签名校验
if (kwaisign.equals(DigestUtils.md5Hex(jsonString))) {
//当前回调消息的唯一ID,在同一个消息多次通知时,保持一致。
String messageId = object.getString("message_id");
JSONObject data = object.getJSONObject("data");
//支付渠道。取值:UNKNOWN - 未知|WECHAT-微信|ALIPAY-支付宝
String channel = data.getString("channel");
//订单支付状态。 取值: PROCESSING-处理中|SUCCESS-成功|FAILED-失败
String status = data.getString("status");
//订单金额
Integer orderAmount = data.getInteger("order_amount");
//用户侧支付页交易单号
String tradeNo = data.getString("trade_no");
//商户系统内部订单号,只能是数字、大小写字母_-*且在同一个商户号下唯一
String outOrderNo = data.getString("out_order_no");
//快手小程序平台订单号。
String ksOrderNo = data.getString("ks_order_no");
//回调支付成功
if ("SUCCESS".equals(status)) {
//处理业务
PayNotifyCheckDto payNotifyCheckDto = new PayNotifyCheckDto();
payNotifyCheckDto.setPayType(EnumPayType.KS_PAY);
payNotifyCheckDto.setPayAmount(MoneyUtil.fenToYuan(String.valueOf(orderAmount)));
payNotifyCheckDto.setPayId(outOrderNo);
payNotifyCheckDto.setMsg(messageId);
String notifyCheck = super.payNotifyCheck(payNotifyCheckDto);
if (StringUtils.isNotBlank(notifyCheck)){
return notifyCheck;
}
log.info("快手支付回调,交易正常:封装参数修改内部支付单信息");
EditPayInfoNotifyDto editPayInfoNotifyDto = new EditPayInfoNotifyDto();
editPayInfoNotifyDto.setPayAmount(MoneyUtil.fenToYuan(String.valueOf(orderAmount)));
editPayInfoNotifyDto.setPayTime(DateUtil.formatDateTime(new Date()));
editPayInfoNotifyDto.setAppId(appId);
editPayInfoNotifyDto.setPayId(outOrderNo);
editPayInfoNotifyDto.setPayNo(ksOrderNo);
editPayInfoNotifyDto.setTradeNo(tradeNo);
editPayInfoNotifyDto.setPayChannel(EnumPayChannel.getPayChannelName(channel,EnumPayType.KS_PAY));
payInfoService.editPayInfoNotify(editPayInfoNotifyDto);
//正确处理后返回以下内容格式通知小程序平台不再持续回调
return super.buildNotifyCheckResultMsg(EnumPayType.KS_PAY,true,messageId);
}else {
log.info("快手支付回调不是支付成功不做处理:支付状态:{},payId:{}",status,object.getString("trade_no"));
}
} else {
log.info("快手支付回调签名校验失败,payId:{}",object.getString("trade_no"));
}
} else {
log.info("快手支付回调参数丢失,payId:{}",object.getString("trade_no")); log.info("快手支付回调参数丢失,payId:{}",object.getString("trade_no"));
return super.buildNotifyCheckResultMsg(EnumPayType.KS_PAY,false,"trade fail");
} }
return super.buildNotifyCheckResultMsg(EnumPayType.KS_PAY,true,"business fail"); jsonString = jsonString + secret;
//签名校验
if (!kwaisign.equals(DigestUtils.md5Hex(jsonString))) {
log.info("快手支付回调签名校验失败,payId:{}",object.getString("trade_no"));
return super.buildNotifyCheckResultMsg(EnumPayType.KS_PAY,false,"trade fail");
}
//当前回调消息的唯一ID,在同一个消息多次通知时,保持一致。
String messageId = object.getString("message_id");
JSONObject data = object.getJSONObject("data");
//支付渠道。取值:UNKNOWN - 未知|WECHAT-微信|ALIPAY-支付宝
String channel = data.getString("channel");
//订单支付状态。 取值: PROCESSING-处理中|SUCCESS-成功|FAILED-失败
String status = data.getString("status");
//订单金额
Integer orderAmount = data.getInteger("order_amount");
//用户侧支付页交易单号
String tradeNo = data.getString("trade_no");
//商户系统内部订单号,只能是数字、大小写字母_-*且在同一个商户号下唯一
String outOrderNo = data.getString("out_order_no");
//快手小程序平台订单号。
String ksOrderNo = data.getString("ks_order_no");
//回调支付成功
if (!"SUCCESS".equals(status)) {
log.info("快手支付回调不是支付成功不做处理:支付状态:{},payId:{}",status,object.getString("trade_no"));
return super.buildNotifyCheckResultMsg(EnumPayType.KS_PAY,false,"trade fail");
}
//处理业务
PayNotifyCheckDto payNotifyCheckDto = new PayNotifyCheckDto();
payNotifyCheckDto.setPayType(EnumPayType.KS_PAY);
payNotifyCheckDto.setPayAmount(MoneyUtil.fenToYuan(String.valueOf(orderAmount)));
payNotifyCheckDto.setPayId(outOrderNo);
payNotifyCheckDto.setMsg(messageId);
String notifyCheck = super.payNotifyCheck(payNotifyCheckDto);
if (StringUtils.isNotBlank(notifyCheck)){
return notifyCheck;
}
log.info("快手支付回调,交易正常:封装参数修改内部支付单信息");
EditPayInfoNotifyDto editPayInfoNotifyDto = new EditPayInfoNotifyDto();
editPayInfoNotifyDto.setPayAmount(MoneyUtil.fenToYuan(String.valueOf(orderAmount)));
editPayInfoNotifyDto.setPayTime(DateUtil.formatDateTime(new Date()));
editPayInfoNotifyDto.setAppId(appId);
editPayInfoNotifyDto.setPayId(outOrderNo);
editPayInfoNotifyDto.setPayNo(ksOrderNo);
editPayInfoNotifyDto.setTradeNo(tradeNo);
editPayInfoNotifyDto.setPayChannel(EnumPayChannel.getPayChannelName(channel,EnumPayType.KS_PAY));
payInfoService.editPayInfoNotify(editPayInfoNotifyDto);
//正确处理后返回以下内容格式通知小程序平台不再持续回调
return super.buildNotifyCheckResultMsg(EnumPayType.KS_PAY,true,messageId);
} }
@Override @Override
@ -294,4 +294,9 @@ public class KSPayStrategy extends AbstractPayStrategy{
thirdQueryOrderVo.setOpenId(openId); thirdQueryOrderVo.setOpenId(openId);
return thirdQueryOrderVo; return thirdQueryOrderVo;
} }
@Override
public ThirdRefundVo refund(RefundBo bo) {
return null;
}
} }

49
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/WxPayStrategy.java

@ -1,24 +1,25 @@
package com.bnyer.pay.design.strategy; package com.bnyer.pay.design.strategy;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.bnyer.common.core.context.SecurityContextHolder;
import com.bnyer.common.core.domain.WxpayConfig; import com.bnyer.common.core.domain.WxpayConfig;
import com.bnyer.common.core.enums.EnumPayType; import com.bnyer.common.core.enums.EnumPayType;
import com.bnyer.common.core.enums.ResponseEnum; import com.bnyer.common.core.enums.ResponseEnum;
import com.bnyer.common.core.exception.ServiceException; import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.common.core.utils.StringUtils; import com.bnyer.common.core.utils.StringUtils;
import com.bnyer.pay.bo.QueryOrderBo; import com.bnyer.pay.bean.bo.QueryOrderBo;
import com.bnyer.pay.bo.UnifiedOrderBo; import com.bnyer.pay.bean.bo.RefundBo;
import com.bnyer.pay.dto.EditPayInfoNotifyDto; import com.bnyer.pay.bean.bo.UnifiedOrderBo;
import com.bnyer.pay.dto.PayNotifyCheckDto; import com.bnyer.pay.bean.dto.EditPayInfoNotifyDto;
import com.bnyer.pay.bean.dto.PayNotifyCheckDto;
import com.bnyer.pay.enums.EnumPayChannel; import com.bnyer.pay.enums.EnumPayChannel;
import com.bnyer.pay.enums.EnumTradeType; import com.bnyer.pay.enums.EnumTradeType;
import com.bnyer.pay.enums.EnumWxPayStatus; import com.bnyer.pay.enums.EnumWxPayStatus;
import com.bnyer.pay.manager.WxPayManager; import com.bnyer.pay.manager.WxPayManager;
import com.bnyer.pay.service.PayInfoService; import com.bnyer.pay.service.PayInfoService;
import com.bnyer.pay.utils.WXPayUtil; import com.bnyer.pay.utils.WXPayUtil;
import com.bnyer.pay.vo.ThirdInOrderVo; import com.bnyer.pay.bean.vo.ThirdRefundVo;
import com.bnyer.pay.vo.ThirdQueryOrderVo; import com.bnyer.pay.bean.vo.ThirdUnifiedOrderVo;
import com.bnyer.pay.bean.vo.ThirdQueryOrderVo;
import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse; import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse;
import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyV3Result; import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyV3Result;
import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest; import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
@ -56,20 +57,20 @@ public class WxPayStrategy extends AbstractPayStrategy {
} }
@Override @Override
public ThirdInOrderVo unifiedOrder(UnifiedOrderBo bo) { public ThirdUnifiedOrderVo unifiedOrder(UnifiedOrderBo bo) {
log.info("微信支付:统一下单接口调用开始,WxPayStrategy.unifiedOrder bo:{}",JSON.toJSONString(bo)); log.info("微信支付:统一下单接口调用开始,WxPayStrategy.unifiedOrder bo:{}",JSON.toJSONString(bo));
ThirdInOrderVo thirdInOrderVo = null; ThirdUnifiedOrderVo thirdUnifiedOrderVo = null;
EnumTradeType payByTradeType = EnumTradeType.getPayByTradeType(bo.getTradeType()); EnumTradeType payByTradeType = EnumTradeType.getEnumByCode(bo.getTradeType());
switch (payByTradeType){ switch (payByTradeType){
case JSAPI_MINI: case JSAPI_MINI:
thirdInOrderVo = jsApiPay(bo); thirdUnifiedOrderVo = jsApiPay(bo);
break; break;
case JSAPI_PUBLIC: case JSAPI_PUBLIC:
break; break;
default: default:
throw new ServiceException("TradeType未匹配上对应支付方式"); throw new ServiceException("TradeType未匹配上对应支付方式");
} }
return thirdInOrderVo; return thirdUnifiedOrderVo;
} }
/** /**
@ -77,10 +78,10 @@ public class WxPayStrategy extends AbstractPayStrategy {
* @param bo * @param bo
* @return * @return
*/ */
private ThirdInOrderVo jsApiPay(UnifiedOrderBo bo) { private ThirdUnifiedOrderVo jsApiPay(UnifiedOrderBo bo) {
WxpayConfig wxPayConfig = wxPayManager.getWxPayConfigByTradeType(bo.getTradeType()); WxpayConfig wxPayConfig = wxPayManager.getWxPayConfigByTradeType(bo.getTradeType());
WxPayService wxPayService = wxPayManager.getWxPayService(wxPayConfig); WxPayService wxPayService = wxPayManager.getWxPayService(wxPayConfig);
String openId = SecurityContextHolder.getWechatOpenId(); String openId = bo.getOpenId();
try { try {
WxPayUnifiedOrderV3Request orderRequest = new WxPayUnifiedOrderV3Request(); WxPayUnifiedOrderV3Request orderRequest = new WxPayUnifiedOrderV3Request();
WxPayUnifiedOrderV3Request.Payer payer = new WxPayUnifiedOrderV3Request.Payer(); WxPayUnifiedOrderV3Request.Payer payer = new WxPayUnifiedOrderV3Request.Payer();
@ -95,16 +96,16 @@ public class WxPayStrategy extends AbstractPayStrategy {
WxPayUnifiedOrderV3Result wxPayUnifiedOrderV3Result = wxPayService.createOrderV3(TradeTypeEnum.JSAPI, orderRequest); WxPayUnifiedOrderV3Result wxPayUnifiedOrderV3Result = wxPayService.createOrderV3(TradeTypeEnum.JSAPI, orderRequest);
WxPayUnifiedOrderV3Result.JsapiResult jsapiResult = wxPayUnifiedOrderV3Result.getPayInfo(TradeTypeEnum.JSAPI, wxPayConfig.getAppid(), wxPayConfig.getMchid(), wxPayService.getConfig().getPrivateKey()); WxPayUnifiedOrderV3Result.JsapiResult jsapiResult = wxPayUnifiedOrderV3Result.getPayInfo(TradeTypeEnum.JSAPI, wxPayConfig.getAppid(), wxPayConfig.getMchid(), wxPayService.getConfig().getPrivateKey());
//返回数据 //返回数据
ThirdInOrderVo thirdInOrderVo = new ThirdInOrderVo(); ThirdUnifiedOrderVo thirdUnifiedOrderVo = new ThirdUnifiedOrderVo();
thirdInOrderVo.setAppId(wxPayConfig.getAppid()); thirdUnifiedOrderVo.setAppId(wxPayConfig.getAppid());
ThirdInOrderVo.WxThirdInOrderVo wxThirdInOrderVo = new ThirdInOrderVo.WxThirdInOrderVo(); ThirdUnifiedOrderVo.WxThirdInOrderVo wxThirdInOrderVo = new ThirdUnifiedOrderVo.WxThirdInOrderVo();
wxThirdInOrderVo.setPackageValue(jsapiResult.getPackageValue()); wxThirdInOrderVo.setPackageValue(jsapiResult.getPackageValue());
wxThirdInOrderVo.setTimeStamp(jsapiResult.getTimeStamp()); wxThirdInOrderVo.setTimeStamp(jsapiResult.getTimeStamp());
wxThirdInOrderVo.setNonceStr(jsapiResult.getNonceStr()); wxThirdInOrderVo.setNonceStr(jsapiResult.getNonceStr());
wxThirdInOrderVo.setPaySign(jsapiResult.getPaySign()); wxThirdInOrderVo.setPaySign(jsapiResult.getPaySign());
thirdInOrderVo.setOutOrderNo(bo.getPayId()); thirdUnifiedOrderVo.setOutOrderNo(bo.getPayId());
thirdInOrderVo.setAppId(jsapiResult.getAppId()); thirdUnifiedOrderVo.setAppId(jsapiResult.getAppId());
return thirdInOrderVo; return thirdUnifiedOrderVo;
} catch (WxPayException e) { } catch (WxPayException e) {
log.error("微信支付:统一下单接口调用失败,payId:{},error{}", bo.getPayId(), e.getMessage()); log.error("微信支付:统一下单接口调用失败,payId:{},error{}", bo.getPayId(), e.getMessage());
throw new ServiceException(ResponseEnum.PAY_FAILS); throw new ServiceException(ResponseEnum.PAY_FAILS);
@ -145,8 +146,9 @@ public class WxPayStrategy extends AbstractPayStrategy {
String timeEnd = result.getSuccessTime(); String timeEnd = result.getSuccessTime();
//支付状态 //支付状态
String tradeState = result.getTradeState(); String tradeState = result.getTradeState();
//如果不是交易成功不往下走
if (!EnumWxPayStatus.SUCCESS.getStatus().equals(tradeState)){ if (!EnumWxPayStatus.SUCCESS.getStatus().equals(tradeState)){
return super.buildNotifyCheckResultMsg(EnumPayType.WX_PAY,false,"交易失败"); return super.buildNotifyCheckResultMsg(EnumPayType.WX_PAY,false,"trade fail");
} }
//校验是否已支付避免重复调用 //校验是否已支付避免重复调用
PayNotifyCheckDto payNotifyCheckDto = new PayNotifyCheckDto(); PayNotifyCheckDto payNotifyCheckDto = new PayNotifyCheckDto();
@ -201,4 +203,9 @@ public class WxPayStrategy extends AbstractPayStrategy {
throw new ServiceException(ResponseEnum.ORDER_QUERY_FAILS); throw new ServiceException(ResponseEnum.ORDER_QUERY_FAILS);
} }
} }
@Override
public ThirdRefundVo refund(RefundBo bo) {
return null;
}
} }

2
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/enums/EnumPayConfigStatus.java

@ -13,7 +13,7 @@ import java.util.Objects;
@AllArgsConstructor @AllArgsConstructor
public enum EnumPayConfigStatus { public enum EnumPayConfigStatus {
ENABLE("0","正常"), ENABLE("0","启用"),
DISABLE("1","停用"), DISABLE("1","停用"),
; ;

4
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/enums/EnumTradeType.java

@ -24,11 +24,11 @@ public enum EnumTradeType {
private final String code; private final String code;
private final String name; private final String type;
private final String desc; private final String desc;
public static EnumTradeType getPayByTradeType(String code) { public static EnumTradeType getEnumByCode(String code) {
return Arrays.stream(values()) return Arrays.stream(values())
.filter(tradeType -> tradeType.getCode().equals(code)) .filter(tradeType -> tradeType.getCode().equals(code))
.findFirst().orElse(EnumTradeType.UNKNOWN); .findFirst().orElse(EnumTradeType.UNKNOWN);

12
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/manager/WxPayManager.java

@ -1,10 +1,12 @@
package com.bnyer.pay.manager; package com.bnyer.pay.manager;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.bnyer.common.core.domain.WxpayConfig; import com.bnyer.common.core.domain.WxpayConfig;
import com.bnyer.common.core.enums.ResponseEnum; import com.bnyer.common.core.enums.ResponseEnum;
import com.bnyer.common.core.exception.ServiceException; import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.common.core.utils.SpringUtils; import com.bnyer.common.core.utils.SpringUtils;
import com.bnyer.common.core.utils.uuid.IdUtils;
import com.bnyer.pay.enums.EnumPayConfigStatus; import com.bnyer.pay.enums.EnumPayConfigStatus;
import com.bnyer.pay.enums.EnumTradeType; import com.bnyer.pay.enums.EnumTradeType;
import com.bnyer.pay.mapper.WxpayConfigMapper; import com.bnyer.pay.mapper.WxpayConfigMapper;
@ -61,15 +63,17 @@ public class WxPayManager {
public WxPayService getWxPayService(WxpayConfig wxpayConfig){ public WxPayService getWxPayService(WxpayConfig wxpayConfig){
String appId = wxpayConfig.getAppid(); String appId = wxpayConfig.getAppid();
String mchId = wxpayConfig.getMchid(); String mchId = wxpayConfig.getMchid();
String key = wxpayConfig.getKey(); String apiKey = wxpayConfig.getApiKey();
String backUrl = wxpayConfig.getBackurl(); String backUrl = wxpayConfig.getBackurl();
WxPayConfig payConfig = new WxPayConfig(); WxPayConfig payConfig = new WxPayConfig();
payConfig.setAppId(appId); payConfig.setAppId(appId);
payConfig.setMchId(mchId); payConfig.setMchId(mchId);
payConfig.setMchKey(key); payConfig.setApiV3Key(apiKey);
payConfig.setSignType(WxPayConstants.SignType.MD5);
payConfig.setNotifyUrl(backUrl); payConfig.setNotifyUrl(backUrl);
payConfig.setTradeType(EnumTradeType.getPayByTradeType(wxpayConfig.getTradeType()).getName()); payConfig.setTradeType(EnumTradeType.getEnumByCode(wxpayConfig.getTradeType()).getType());
payConfig.setPrivateCertPath(wxpayConfig.getCertPath());
payConfig.setPrivateKeyPath(wxpayConfig.getKeyPath());
payConfig.setCertSerialNo(wxpayConfig.getCertSerialNo());
WxPayService wxPayService = new WxPayServiceImpl(); WxPayService wxPayService = new WxPayServiceImpl();
wxPayService.setConfig(payConfig); wxPayService.setConfig(payConfig);
return wxPayService; return wxPayService;

3
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/mapper/PayInfoMapper.java

@ -2,9 +2,8 @@ package com.bnyer.pay.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bnyer.common.core.domain.PayInfo; import com.bnyer.common.core.domain.PayInfo;
import com.bnyer.pay.dto.EditPayInfoSingleDto; import com.bnyer.pay.bean.dto.EditPayInfoSingleDto;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/** /**
* @author :WXC * @author :WXC

8
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/PayInfoService.java

@ -2,9 +2,9 @@ package com.bnyer.pay.service;
import com.bnyer.common.core.domain.PayInfo; import com.bnyer.common.core.domain.PayInfo;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.bnyer.pay.dto.AddPayInfoDto; import com.bnyer.pay.bean.dto.AddPayInfoDto;
import com.bnyer.pay.dto.EditPayInfoNotifyDto; import com.bnyer.pay.bean.dto.EditPayInfoNotifyDto;
import com.bnyer.pay.vo.PayInfoDetailsVo; import com.bnyer.pay.bean.vo.PayInfoDetailsVo;
/** /**
* @author :WXC * @author :WXC
@ -29,5 +29,5 @@ public interface PayInfoService extends IService<PayInfo>{
* @param payId * @param payId
* @return * @return
*/ */
PayInfoDetailsVo queryOrder(String payId); PayInfoDetailsVo queryPayInfo(String payId);
} }

10
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/UnifiedPayService.java

@ -1,9 +1,9 @@
package com.bnyer.pay.service; package com.bnyer.pay.service;
import com.bnyer.pay.dto.InOrderDto; import com.bnyer.pay.bean.dto.UnifiedOrderDto;
import com.bnyer.pay.dto.QueryOrderDto; import com.bnyer.pay.bean.dto.QueryOrderDto;
import com.bnyer.pay.vo.InOrderVo; import com.bnyer.pay.bean.vo.UnifiedOrderVo;
import com.bnyer.pay.vo.QueryOrderVo; import com.bnyer.pay.bean.vo.QueryOrderVo;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -20,7 +20,7 @@ public interface UnifiedPayService {
* @param request * @param request
* @return * @return
*/ */
InOrderVo inOrder(InOrderDto dto, HttpServletRequest request); UnifiedOrderVo unifiedOrder(UnifiedOrderDto dto, HttpServletRequest request);
/** /**
* 统一订单查询 * 统一订单查询

15
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/impl/PayInfoServiceImpl.java

@ -10,12 +10,12 @@ import com.bnyer.common.core.enums.ResponseEnum;
import com.bnyer.common.core.exception.ServiceException; import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.common.core.utils.bean.EntityConvertUtil; import com.bnyer.common.core.utils.bean.EntityConvertUtil;
import com.bnyer.common.rocketmq.config.RocketMqConstant; import com.bnyer.common.rocketmq.config.RocketMqConstant;
import com.bnyer.pay.dto.AddPayInfoDto; import com.bnyer.pay.bean.dto.AddPayInfoDto;
import com.bnyer.pay.dto.EditPayInfoNotifyDto; import com.bnyer.pay.bean.dto.EditPayInfoNotifyDto;
import com.bnyer.pay.dto.EditPayInfoSingleDto; import com.bnyer.pay.bean.dto.EditPayInfoSingleDto;
import com.bnyer.pay.mapper.PayInfoMapper; import com.bnyer.pay.mapper.PayInfoMapper;
import com.bnyer.pay.service.PayInfoService; import com.bnyer.pay.service.PayInfoService;
import com.bnyer.pay.vo.PayInfoDetailsVo; import com.bnyer.pay.bean.vo.PayInfoDetailsVo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.producer.SendStatus; import org.apache.rocketmq.client.producer.SendStatus;
import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.apache.rocketmq.spring.core.RocketMQTemplate;
@ -24,7 +24,6 @@ import org.springframework.messaging.support.GenericMessage;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.Objects; import java.util.Objects;
/** /**
@ -48,9 +47,7 @@ public class PayInfoServiceImpl extends ServiceImpl<PayInfoMapper, PayInfo> impl
*/ */
@Override @Override
public void addPayInfo(AddPayInfoDto dto) { public void addPayInfo(AddPayInfoDto dto) {
PayInfo payInfo = EntityConvertUtil.copy(dto, PayInfo.class); PayInfo payInfo = dto.toEntity();
payInfo.setCreateTime(new Date());
payInfo.setIsShow("1");
payInfoMapper.insert(payInfo); payInfoMapper.insert(payInfo);
} }
@ -127,7 +124,7 @@ public class PayInfoServiceImpl extends ServiceImpl<PayInfoMapper, PayInfo> impl
* @return * @return
*/ */
@Override @Override
public PayInfoDetailsVo queryOrder(String payId) { public PayInfoDetailsVo queryPayInfo(String payId) {
PayInfo payInfo = payInfoMapper.selectOne(new LambdaQueryWrapper<PayInfo>().eq(PayInfo::getPayId, payId)); PayInfo payInfo = payInfoMapper.selectOne(new LambdaQueryWrapper<PayInfo>().eq(PayInfo::getPayId, payId));
if (Objects.isNull(payInfo)){ if (Objects.isNull(payInfo)){
throw new ServiceException(ResponseEnum.NOT_EXIST,"支付订单"); throw new ServiceException(ResponseEnum.NOT_EXIST,"支付订单");

57
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/impl/UnifiedPayServiceImpl.java

@ -6,24 +6,26 @@ import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.common.core.utils.OrderUtil; import com.bnyer.common.core.utils.OrderUtil;
import com.bnyer.common.core.utils.bean.EntityConvertUtil; import com.bnyer.common.core.utils.bean.EntityConvertUtil;
import com.bnyer.common.core.utils.ip.IpUtils; import com.bnyer.common.core.utils.ip.IpUtils;
import com.bnyer.order.api.dto.QueryVipOrderDto; import com.bnyer.common.core.vo.UserInfoVo;
import com.bnyer.common.security.utils.SecurityUtils;
import com.bnyer.order.api.query.VipOrderExtQuery;
import com.bnyer.order.api.remote.RemoteVipOrderService; import com.bnyer.order.api.remote.RemoteVipOrderService;
import com.bnyer.order.api.vo.VipOrderVo; import com.bnyer.order.api.vo.VipOrderVo;
import com.bnyer.pay.bo.QueryOrderBo; import com.bnyer.pay.bean.bo.QueryOrderBo;
import com.bnyer.pay.bo.UnifiedOrderBo; import com.bnyer.pay.bean.bo.UnifiedOrderBo;
import com.bnyer.pay.bean.dto.AddPayInfoDto;
import com.bnyer.pay.bean.dto.QueryOrderDto;
import com.bnyer.pay.bean.dto.UnifiedOrderDto;
import com.bnyer.pay.bean.vo.*;
import com.bnyer.pay.constant.KSPayConstants; import com.bnyer.pay.constant.KSPayConstants;
import com.bnyer.pay.design.factory.PayFactory; import com.bnyer.pay.design.factory.PayFactory;
import com.bnyer.pay.design.strategy.IPayStrategy; import com.bnyer.pay.design.strategy.IPayStrategy;
import com.bnyer.pay.dto.AddPayInfoDto;
import com.bnyer.pay.dto.InOrderDto;
import com.bnyer.pay.dto.QueryOrderDto;
import com.bnyer.pay.enums.EnumAliPayStatus; import com.bnyer.pay.enums.EnumAliPayStatus;
import com.bnyer.pay.enums.EnumDyPayStatus; import com.bnyer.pay.enums.EnumDyPayStatus;
import com.bnyer.pay.enums.EnumKsPayStatus; import com.bnyer.pay.enums.EnumKsPayStatus;
import com.bnyer.pay.enums.EnumWxPayStatus; import com.bnyer.pay.enums.EnumWxPayStatus;
import com.bnyer.pay.service.PayInfoService; import com.bnyer.pay.service.PayInfoService;
import com.bnyer.pay.service.UnifiedPayService; import com.bnyer.pay.service.UnifiedPayService;
import com.bnyer.pay.vo.*;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -31,7 +33,6 @@ import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Objects; import java.util.Objects;
/** /**
@ -56,7 +57,7 @@ public class UnifiedPayServiceImpl implements UnifiedPayService {
* @return * @return
*/ */
@Override @Override
public InOrderVo inOrder(InOrderDto dto, HttpServletRequest request) { public UnifiedOrderVo unifiedOrder(UnifiedOrderDto dto, HttpServletRequest request) {
//支付金额 //支付金额
String payAmount; String payAmount;
//商品类型:快手支付需要 //商品类型:快手支付需要
@ -69,14 +70,14 @@ public class UnifiedPayServiceImpl implements UnifiedPayService {
switch (enumSceneCode){ switch (enumSceneCode){
//会员充值场景 //会员充值场景
case VIP_RECHARGE: case VIP_RECHARGE:
QueryVipOrderDto queryVipOrderDto = new QueryVipOrderDto(); VipOrderExtQuery vipOrderExtQuery = new VipOrderExtQuery();
queryVipOrderDto.setOrderNo(dto.getOrderNo()); vipOrderExtQuery.setOrderNo(dto.getOrderNo());
//查询会员业务订单信息 //查询会员业务订单信息
R<List<VipOrderVo>> vipOrderVoListR = remoteVipOrderService.getVipOrderList(queryVipOrderDto); R<VipOrderVo> vipOrderR = remoteVipOrderService.queryVipOrder(vipOrderExtQuery);
if (!vipOrderVoListR.isSuccess()){ if (!vipOrderR.isSuccess()){
throw new ServiceException(vipOrderVoListR.getMsg()); throw new ServiceException(vipOrderR.getMsg());
} }
VipOrderVo vipOrderVo = vipOrderVoListR.getData().get(0); VipOrderVo vipOrderVo = vipOrderR.getData();
payAmount = vipOrderVo.getPayAmount().toString(); payAmount = vipOrderVo.getPayAmount().toString();
goodsType = KSPayConstants.GOODS_TYPE_VIP; goodsType = KSPayConstants.GOODS_TYPE_VIP;
payId = OrderUtil.getOrderNo("RV",new Date(), EnumUserClientType.getCodeByType(vipOrderVo.getUserClientType()) payId = OrderUtil.getOrderNo("RV",new Date(), EnumUserClientType.getCodeByType(vipOrderVo.getUserClientType())
@ -93,32 +94,32 @@ public class UnifiedPayServiceImpl implements UnifiedPayService {
if (Objects.isNull(payStrategy)){ if (Objects.isNull(payStrategy)){
throw new ServiceException("暂不支持该支付方式"); throw new ServiceException("暂不支持该支付方式");
} }
ThirdInOrderVo thirdInOrderVo = payStrategy.unifiedOrder(unifiedOrderBo); ThirdUnifiedOrderVo thirdUnifiedOrderVo = payStrategy.unifiedOrder(unifiedOrderBo);
//构建支付订单完成入库 //构建支付订单完成入库
AddPayInfoDto addPayInfoDto = buildPayInfo(thirdInOrderVo, unifiedOrderBo,dto); AddPayInfoDto addPayInfoDto = buildPayInfo(thirdUnifiedOrderVo, unifiedOrderBo,dto);
payInfoService.addPayInfo(addPayInfoDto); payInfoService.addPayInfo(addPayInfoDto);
InOrderVo inOrderVo = EntityConvertUtil.copy(thirdInOrderVo, InOrderVo.class); UnifiedOrderVo unifiedOrderVo = EntityConvertUtil.copy(thirdUnifiedOrderVo, UnifiedOrderVo.class);
return inOrderVo; return unifiedOrderVo;
} }
/** /**
* 构建支付订单 * 构建支付订单
* *
* @param thirdInOrderVo * @param thirdUnifiedOrderVo
* @param unifiedOrderBo * @param unifiedOrderBo
* @param dto * @param dto
* @return * @return
*/ */
private AddPayInfoDto buildPayInfo(ThirdInOrderVo thirdInOrderVo, UnifiedOrderBo unifiedOrderBo, InOrderDto dto) { private AddPayInfoDto buildPayInfo(ThirdUnifiedOrderVo thirdUnifiedOrderVo, UnifiedOrderBo unifiedOrderBo, UnifiedOrderDto dto) {
AddPayInfoDto addPayInfoDto = new AddPayInfoDto(); AddPayInfoDto addPayInfoDto = new AddPayInfoDto();
addPayInfoDto.setAppid(thirdInOrderVo.getAppId()); addPayInfoDto.setAppid(thirdUnifiedOrderVo.getAppId());
addPayInfoDto.setOrderNo(dto.getOrderNo()); addPayInfoDto.setOrderNo(dto.getOrderNo());
addPayInfoDto.setSceneCode(dto.getSceneCode()); addPayInfoDto.setSceneCode(dto.getSceneCode());
addPayInfoDto.setRemark(dto.getRemark()); addPayInfoDto.setRemark(dto.getRemark());
addPayInfoDto.setPayType(dto.getPayType()); addPayInfoDto.setPayType(dto.getPayType());
addPayInfoDto.setPayId(unifiedOrderBo.getPayId()); addPayInfoDto.setPayId(unifiedOrderBo.getPayId());
addPayInfoDto.setPayAmount(new BigDecimal(unifiedOrderBo.getPayAmount())); addPayInfoDto.setPayAmount(new BigDecimal(unifiedOrderBo.getPayAmount()));
addPayInfoDto.setAppid(thirdInOrderVo.getAppId()); addPayInfoDto.setAppid(thirdUnifiedOrderVo.getAppId());
addPayInfoDto.setGoodsSubject(unifiedOrderBo.getGoodsSubject()); addPayInfoDto.setGoodsSubject(unifiedOrderBo.getGoodsSubject());
addPayInfoDto.setGoodsDesc(unifiedOrderBo.getGoodsDesc()); addPayInfoDto.setGoodsDesc(unifiedOrderBo.getGoodsDesc());
addPayInfoDto.setTradeType(dto.getTradeType()); addPayInfoDto.setTradeType(dto.getTradeType());
@ -131,20 +132,22 @@ public class UnifiedPayServiceImpl implements UnifiedPayService {
* 构建统一下单请求实体 * 构建统一下单请求实体
* *
* @param dto 入参 * @param dto 入参
* @param goodsDesc * @param goodsDesc 商品描述
* @param goodsType 商品类型 * @param goodsType 商品类型
* @param payAmount 不同支付场景下的支付金额 * @param payAmount 不同支付场景下的支付金额
* @param payId 内部系统支付单号 * @param payId 内部系统支付单号
* @param request 请求request用于获取ip地址 * @param request 请求request用于获取ip地址
* @return * @return
*/ */
private UnifiedOrderBo buildUnifiedOrderDto(InOrderDto dto, String goodsDesc, int goodsType, String payAmount, String payId, HttpServletRequest request) { private UnifiedOrderBo buildUnifiedOrderDto(UnifiedOrderDto dto, String goodsDesc, int goodsType, String payAmount, String payId, HttpServletRequest request) {
String openId = ""; UserInfoVo userInfo = SecurityUtils.getUserInfo();
String openId = userInfo.getOpenId();
//当前时间 //当前时间
Date currDate = new Date(); Date currDate = new Date();
//ip地址 //ip地址
String ip = IpUtils.getIpAddr(request); String ip = IpUtils.getIpAddr(request);
UnifiedOrderBo unifiedOrderBo = EntityConvertUtil.copy(dto, UnifiedOrderBo.class); UnifiedOrderBo unifiedOrderBo = EntityConvertUtil.copy(dto, UnifiedOrderBo.class);
unifiedOrderBo.setOpenId(openId);
unifiedOrderBo.setPayId(payId); unifiedOrderBo.setPayId(payId);
unifiedOrderBo.setIp(ip); unifiedOrderBo.setIp(ip);
unifiedOrderBo.setCurrDate(currDate); unifiedOrderBo.setCurrDate(currDate);
@ -163,7 +166,7 @@ public class UnifiedPayServiceImpl implements UnifiedPayService {
@Override @Override
public QueryOrderVo queryOrder(QueryOrderDto dto) { public QueryOrderVo queryOrder(QueryOrderDto dto) {
//先查询系统支付单是否已经完成支付,如果因为延迟导致没有及时同步,在调用第三方接口查询支付状态返回 //先查询系统支付单是否已经完成支付,如果因为延迟导致没有及时同步,在调用第三方接口查询支付状态返回
PayInfoDetailsVo payInfoDetailsVo = payInfoService.queryOrder(dto.getPayId()); PayInfoDetailsVo payInfoDetailsVo = payInfoService.queryPayInfo(dto.getPayId());
if (Objects.isNull(payInfoDetailsVo)){ if (Objects.isNull(payInfoDetailsVo)){
throw new ServiceException(ResponseEnum.NOT_EXIST); throw new ServiceException(ResponseEnum.NOT_EXIST);
} }

6
bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/WxpayConfigMapper.xml

@ -10,6 +10,10 @@
<result column="mchid" jdbcType="VARCHAR" property="mchid" /> <result column="mchid" jdbcType="VARCHAR" property="mchid" />
<result column="backurl" jdbcType="VARCHAR" property="backurl" /> <result column="backurl" jdbcType="VARCHAR" property="backurl" />
<result column="key" jdbcType="VARCHAR" property="key" /> <result column="key" jdbcType="VARCHAR" property="key" />
<result column="api_key" jdbcType="VARCHAR" property="apiKey" />
<result column="cert_serial_no" jdbcType="VARCHAR" property="certSerialNo" />
<result column="key_path" jdbcType="VARCHAR" property="keyPath" />
<result column="cert_path" jdbcType="VARCHAR" property="certPath" />
<result column="status" jdbcType="CHAR" property="status" /> <result column="status" jdbcType="CHAR" property="status" />
<result column="remark" jdbcType="VARCHAR" property="remark" /> <result column="remark" jdbcType="VARCHAR" property="remark" />
<result column="is_show" jdbcType="CHAR" property="isShow" /> <result column="is_show" jdbcType="CHAR" property="isShow" />
@ -19,6 +23,6 @@
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
<!--@mbg.generated--> <!--@mbg.generated-->
id, trade_type, appid, mchid, backurl, `key`, `status`, remark, create_time, update_time, sort, is_show id, trade_type, appid, mchid, backurl, `key`,api_key,cert_serial_no,key_path,cert_path, `status`, remark, create_time, update_time, sort, is_show
</sql> </sql>
</mapper> </mapper>

Loading…
Cancel
Save