Browse Source

优化下单支付相关内容

feature-1.1
wuxicheng 3 years ago
parent
commit
308c2967ae
  1. 2
      bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/remote/RemoteImgService.java
  2. 15
      bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/remote/RemoteVipOrderService.java
  3. 9
      bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/remote/RemoteWxMiniService.java
  4. 8
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/PayInfo.java
  5. 9
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/UserVip.java
  6. 25
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/UserVipRecord.java
  7. 44
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/dto/AddUserVipRecordDto.java
  8. 5
      bnyer-common/bnyer-common-rocketmq/src/main/java/com/bnyer/common/rocketmq/config/RocketMqConstant.java
  9. 6
      bnyer-services/bnyer-img/pom.xml
  10. 4
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/FhMiniController.java
  11. 31
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/enums/EnumUserVipRecordStatus.java
  12. 36
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/listener/VipRecordCreateConsumer.java
  13. 9
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/UserVipRecordService.java
  14. 13
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/UserVipServiceRecordImpl.java
  15. 6
      bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/UserVipRecordMapper.xml
  16. 6
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/config/RocketMqConfig.java
  17. 4
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/controller/VipOrderController.java
  18. 3
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/dto/AddVipOrderDto.java
  19. 53
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/listener/vip/VipOrderPayNotifyConsumer.java
  20. 4
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/VipOrderService.java
  21. 14
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/impl/VipOrderServiceImpl.java
  22. 6
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AliPayStrategy.java
  23. 6
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/DYPayStrategy.java
  24. 8
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/KSPayStrategy.java
  25. 2
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/WxPayStrategy.java
  26. 12
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/EditPayInfoNotifyDto.java
  27. 2
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/UnifiedOrderDto.java
  28. 69
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/enums/EnumPayChannel.java
  29. 7
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/impl/PayInfoServiceImpl.java
  30. 4
      bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/AlipayConfigMapper.xml
  31. 4
      bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/DypayConfigMapper.xml
  32. 4
      bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/KspayConfigMapper.xml
  33. 4
      bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/WxpayConfigMapper.xml

2
bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/remote/RemoteImgService.java

@ -23,7 +23,7 @@ import org.springframework.web.bind.annotation.*;
* @author chengkun
* @date 2022/7/8 11:03
*/
@FeignClient(contextId = "remoteImgOrderService", value = ServiceNameConstants.IMG_SERVICE, fallbackFactory = RemoteImgFallbackFactory.class)
@FeignClient(contextId = "remoteImgService", value = ServiceNameConstants.IMG_SERVICE, fallbackFactory = RemoteImgFallbackFactory.class)
public interface RemoteImgService {
/**

15
bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/remote/RemoteVipOrderService.java

@ -6,9 +6,9 @@ import com.bnyer.img.api.dto.QueryVipOrderDto;
import com.bnyer.img.api.factory.RemoteVipOrderFallbackFactory;
import com.bnyer.img.api.vo.VipOrderVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import javax.validation.Valid;
import java.util.List;
/**
@ -16,9 +16,14 @@ import java.util.List;
* @Date :2023/04/03
* @description :订单服务vip订单接口远程调用
*/
@FeignClient(contextId = "remoteImgService", value = ServiceNameConstants.ORDER_SERVICE, fallbackFactory = RemoteVipOrderFallbackFactory.class)
@FeignClient(contextId = "remoteVipOrderService", value = ServiceNameConstants.ORDER_SERVICE, fallbackFactory = RemoteVipOrderFallbackFactory.class)
public interface RemoteVipOrderService {
@GetMapping("/getVipOrderList")
R<List<VipOrderVo>> getVipOrderList(@Valid QueryVipOrderDto dto);
/**
* 获取会员订单信息
* @param dto
* @return
*/
@PostMapping("/getVipOrderList")
R<List<VipOrderVo>> getVipOrderList(@RequestBody QueryVipOrderDto dto);
}

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

@ -6,7 +6,8 @@ import com.bnyer.img.api.dto.QueryUserVipDto;
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.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
@ -18,9 +19,9 @@ import java.util.List;
public interface RemoteWxMiniService {
/**
* 获取会员vip列表
* 获取会员列表
* @return
*/
@GetMapping(value = "/queryUserVipList")
R<List<UserVipVo>> queryUserVipList(QueryUserVipDto dto);
@PostMapping(value = "/img/mini/fh/queryUserVipList")
R<List<UserVipVo>> queryUserVipList(@RequestBody QueryUserVipDto dto);
}

8
bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/PayInfo.java

@ -29,12 +29,6 @@ import lombok.ToString;
@NoArgsConstructor
@TableName(value = "pay_pay_info")
public class PayInfo extends BaseDomain {
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
@ApiModelProperty(value="主键")
private Long id;
/**
* 支付单号(内部生成)
@ -83,7 +77,7 @@ public class PayInfo extends BaseDomain {
* 支付渠道
*/
@TableField(value = "pay_channel")
@ApiModelProperty(value="支付渠道")
@ApiModelProperty(value="支付渠道:wxpay/alipay")
private String payChannel;
/**

9
bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/UserVip.java

@ -18,15 +18,6 @@ import java.math.BigDecimal;
@NoArgsConstructor
@TableName(value = "img_user_vip")
public class UserVip extends BaseDomain {
<<<<<<< HEAD
/**
* 主键Id
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
@ApiModelProperty(value="主键Id")
private Long id;
=======
>>>>>>> origin/feature-1.0-img
/**
* vip类型id

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

@ -20,15 +20,6 @@ import java.util.Date;
@NoArgsConstructor
@TableName(value = "img_user_vip_record")
public class UserVipRecord extends BaseDomain {
<<<<<<< HEAD
/**
* 主键id
*/
@TableId(value = "id", type = IdType.ASSIGN_ID)
@ApiModelProperty(value="主键id")
private Long id;
=======
>>>>>>> origin/feature-1.0-img
/**
* 订单id
@ -37,6 +28,13 @@ public class UserVipRecord extends BaseDomain {
@ApiModelProperty(value="订单id")
private String orderId;
/**
* 用户id
*/
@TableField(value = "user_id")
@ApiModelProperty(value="用户id")
private Long userId;
/**
* 用户手机号
*/
@ -72,7 +70,7 @@ public class UserVipRecord extends BaseDomain {
*/
@TableField(value = "status")
@ApiModelProperty(value="支付状态(0->待支付;1->已支付;2->支付失败;3->支付异常)")
private String status;
private Integer status;
/**
* vip名称
@ -88,5 +86,12 @@ public class UserVipRecord extends BaseDomain {
@ApiModelProperty(value = "vip类型名称")
private String vipTypeName;
/**
* 用户客户端类型10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信
*/
@TableField(value = "user_client_type")
@ApiModelProperty(value = "用户客户端类型:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信")
private Integer userClientType;
private static final long serialVersionUID = 1L;
}

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

@ -0,0 +1,44 @@
package com.bnyer.common.core.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import java.util.Date;
@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class AddUserVipRecordDto {
@ApiModelProperty(value="订单id")
private String orderId;
@ApiModelProperty(value="用户id")
private Long userId;
@ApiModelProperty(value="用户手机号")
private String phone;
@ApiModelProperty(value="vip表id")
private Long vipId;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value="开始时间")
private Date startTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value="到期时间")
private Date endTime;
@ApiModelProperty(value="vip名称")
private String vipName;
@ApiModelProperty(value = "vip类型名称")
private String vipTypeName;
@ApiModelProperty(value = "用户客户端类型:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信")
private Integer userClientType;
}

5
bnyer-common/bnyer-common-rocketmq/src/main/java/com/bnyer/common/rocketmq/config/RocketMqConstant.java

@ -37,4 +37,9 @@ public class RocketMqConstant {
*/
public static final String VIP_ORDER_PAY_NOTIFY_TOPIC = "vip-order-pay-notify-topic";
/**
* vip记录创建
*/
public static final String VIP_RECORD_CREATE_TOPIC = "vip-record-create-topic";
}

6
bnyer-services/bnyer-img/pom.xml

@ -83,6 +83,12 @@
<artifactId>bnyer-common-swagger</artifactId>
</dependency>
<!-- bnyer Common Rocketmq-->
<dependency>
<groupId>com.dimensionalnode</groupId>
<artifactId>bnyer-common-rocketmq</artifactId>
</dependency>
<!-- bnyer Api File -->
<dependency>
<groupId>com.dimensionalnode</groupId>

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

@ -297,8 +297,8 @@ public class FhMiniController extends BaseController {
}
@ApiOperation(value="获取用户会员vip列表")
@GetMapping(value = "/queryUserVipList")
public R<List<UserVipVo>> queryUserVipList(QueryUserVipDto dto){
@PostMapping(value = "/queryUserVipList")
public R<List<UserVipVo>> queryUserVipList(@RequestBody QueryUserVipDto dto){
return R.ok(userVipService.queryFront(dto));
}

31
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/enums/EnumUserVipRecordStatus.java

@ -0,0 +1,31 @@
package com.bnyer.img.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author :WXC
* @description :
*/
@Getter
@AllArgsConstructor
public enum EnumUserVipRecordStatus {
EXPIRE(0,"已到期"),
VALID(1,"已生效"),
;
private final int status;
private final String name;
public static String getStatusName(int status) {
for (EnumUserVipRecordStatus s : EnumUserVipRecordStatus.values()) {
if (status == s.status) {
return s.getName();
}
}
return null;
}
}

36
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/listener/VipRecordCreateConsumer.java

@ -0,0 +1,36 @@
package com.bnyer.img.listener;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.bnyer.common.core.domain.UserVipRecord;
import com.bnyer.common.core.dto.AddUserVipRecordDto;
import com.bnyer.common.rocketmq.config.RocketMqConstant;
import com.bnyer.img.service.UserVipRecordService;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author :WXC
* @Date :2023/03/24
* @description :取消订单mq消费监听
*/
@Slf4j
@Component
@RocketMQMessageListener(topic = RocketMqConstant.VIP_RECORD_CREATE_TOPIC,consumerGroup = RocketMqConstant.VIP_RECORD_CREATE_TOPIC)
public class VipRecordCreateConsumer implements RocketMQListener<String> {
@Autowired
private UserVipRecordService userVipRecordService;
@Override
public void onMessage(String message) {
log.info("收到消息:{}", message);
JSONObject jsonObject = JSON.parseObject(message);
AddUserVipRecordDto addUserVipRecordDto = JSON.toJavaObject(jsonObject, AddUserVipRecordDto.class);
//添加用户会员记录
userVipRecordService.addUserVipRecord(addUserVipRecordDto);
}
}

9
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/UserVipRecordService.java

@ -1,5 +1,6 @@
package com.bnyer.img.service;
import com.bnyer.common.core.dto.AddUserVipRecordDto;
import com.bnyer.common.core.dto.PayUserVipDto;
public interface UserVipRecordService {
@ -11,4 +12,12 @@ public interface UserVipRecordService {
* @return -
*/
boolean payUserVip(PayUserVipDto param);
/**
* 添加用户会员记录
* @param dto
*/
void addUserVipRecord(AddUserVipRecordDto dto);
}

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

@ -3,10 +3,14 @@ package com.bnyer.img.service.impl;
import cn.hutool.core.util.IdUtil;
import com.bnyer.common.core.constant.RedisKeyConstant;
import com.bnyer.common.core.domain.UserVipRecord;
import com.bnyer.common.core.domain.VipOrder;
import com.bnyer.common.core.dto.AddUserVipRecordDto;
import com.bnyer.common.core.dto.PayUserVipDto;
import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.common.core.utils.bean.EntityConvertUtil;
import com.bnyer.common.redis.service.RedissonService;
import com.bnyer.img.constants.UserVipOrderStatusConstant;
import com.bnyer.img.enums.EnumUserVipRecordStatus;
import com.bnyer.img.mapper.UserVipRecordMapper;
import com.bnyer.img.service.UserVipRecordService;
import lombok.extern.slf4j.Slf4j;
@ -80,4 +84,13 @@ public class UserVipServiceRecordImpl implements UserVipRecordService {
// }
return false;
}
@Override
public void addUserVipRecord(AddUserVipRecordDto dto) {
UserVipRecord userVipRecord = EntityConvertUtil.copy(dto, UserVipRecord.class);
userVipRecord.setStatus(EnumUserVipRecordStatus.VALID.getStatus());
userVipRecord.setCreateTime(new Date());
userVipRecord.setIsShow("1");
userVipRecordMapper.insert(userVipRecord);
}
}

6
bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/UserVipRecordMapper.xml

@ -6,13 +6,15 @@
<!--@Table img_user_vip_record-->
<id column="id" jdbcType="BIGINT" property="id" />
<result column="order_id" jdbcType="VARCHAR" property="orderId" />
<result column="user_id" jdbcType="BIGINT" property="userId" />
<result column="phone" jdbcType="VARCHAR" property="phone" />
<result column="vip_id" jdbcType="BIGINT" property="vipId" />
<result column="start_time" jdbcType="TIMESTAMP" property="startTime" />
<result column="end_time" jdbcType="TIMESTAMP" property="endTime" />
<result column="vip_name" jdbcType="CHAR" property="vipName" />
<result column="vip_type_name" jdbcType="CHAR" property="vipTypeName" />
<result column="status" jdbcType="CHAR" property="status" />
<result column="user_client_type" jdbcType="CHAR" property="userClientType" />
<result column="status" jdbcType="INTEGER" property="status" />
<result column="is_show" jdbcType="CHAR" property="isShow" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
@ -20,7 +22,7 @@
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id,order_id, phone,vip_name,vip_type_name,status, vip_id, start_time, end_time, is_show, create_time, update_time,
id,order_id,user_id , phone,vip_name,vip_type_name,user_client_type,status, vip_id, start_time, end_time, is_show, create_time, update_time,
sort
</sql>
</mapper>

6
bnyer-services/bnyer-order/src/main/java/com/bnyer/order/config/RocketMqConfig.java

@ -26,4 +26,10 @@ public class RocketMqConfig {
return rocketMqAdapter.getTemplateByTopicName(RocketMqConstant.VIP_ORDER_CANCEL_TOPIC);
}
@Lazy
@Bean(destroyMethod = "destroy")
public RocketMQTemplate vipRecordMqTemplate() {
return rocketMqAdapter.getTemplateByTopicName(RocketMqConstant.VIP_RECORD_CREATE_TOPIC);
}
}

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

@ -44,9 +44,9 @@ public class VipOrderController extends BaseController {
/**
* 查询订单信息
*/
@GetMapping("/getVipOrderList")
@PostMapping("/getVipOrderList")
@Operation(summary = "查询会员订单列表信息" , description = "查询会员订单列表信息")
public R<List<VipOrderVo>> getVipOrderList(@Valid QueryVipOrderDto dto) {
public R<List<VipOrderVo>> getVipOrderList(@Valid @RequestBody QueryVipOrderDto dto) {
List<VipOrderVo> vipOrderVoList = vipOrderService.getVipOrderList(dto);
return R.ok(vipOrderVoList);
}

3
bnyer-services/bnyer-order/src/main/java/com/bnyer/order/dto/AddVipOrderDto.java

@ -29,8 +29,7 @@ public class AddVipOrderDto implements Serializable {
@ApiModelProperty(value="vip表id")
private Long vipId;
@NotBlank(message = "用户客户端类型不能为空!")
@CustomParamsValidation(range = "10|20|30|40",message = "用户客户端类型只能包含:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信")
@NotNull(message = "用户客户端类型不能为空!")
@ApiModelProperty(value="用户客户端类型:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信")
private Integer userClientType;

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

@ -4,19 +4,21 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.bnyer.common.core.domain.VipOrder;
import com.bnyer.common.core.enums.EnumPayStatus;
import com.bnyer.common.core.enums.ResponseEnum;
import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.common.core.utils.SpringUtils;
import com.bnyer.common.rocketmq.config.RocketMqConstant;
import com.bnyer.order.enums.EnumVipOrderStatus;
import com.bnyer.order.mapper.VipOrderMapper;
import com.bnyer.order.service.VipOrderService;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.producer.SendStatus;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.messaging.support.GenericMessage;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Date;
import java.util.Objects;
/**
@ -32,24 +34,49 @@ public class VipOrderPayNotifyConsumer implements RocketMQListener<String> {
@Resource
private VipOrderMapper vipOrderMapper;
@Resource
private RocketMQTemplate vipRecordMqTemplate;
@Override
public void onMessage(String message) {
log.info("收到消息:{}", message);
JSONObject jsonObject = JSON.parseObject(message);
//修改订单表状态为已支付
String orderId = jsonObject.getString("orderId");
//修改订单并添加会员记录
VipOrderService vipOrderService = SpringUtils.getBean(VipOrderService.class);
JSONObject orderObj = JSON.parseObject(message);
String orderId = orderObj.getString("orderId");
VipOrder vipOrder = vipOrderMapper.selectOne(new LambdaQueryWrapper<VipOrder>().eq(VipOrder::getOrderId, orderId));
if (Objects.isNull(vipOrder)){
log.error("订单不存在,订单id:{}",orderId);
return;
}
//修改订单并添加会员记录
VipOrderService vipOrderService = SpringUtils.getBean(VipOrderService.class);
vipOrder.setPayStatus(EnumPayStatus.SUCCESS.getCode());
vipOrder.setOrderStatus(EnumVipOrderStatus.SUCCESS.getStatus());
vipOrder.setUpdateTime(new Date());
vipOrder.setPayTime(new Date());
vipOrderService.updateOrderAndAddVipRecord(vipOrder);
//修改订单表状态为已支付
vipOrderService.updateByToPaySuccess(vipOrder);
//发消息,添加用户会员记录
String msg = buildVipRecordMsg(vipOrder);
SendStatus sendStatus = vipRecordMqTemplate.syncSend(RocketMqConstant.VIP_RECORD_CREATE_TOPIC, new GenericMessage<>(msg)).getSendStatus();
if (!Objects.equals(sendStatus, SendStatus.SEND_OK)) {
// 消息发不出去就抛异常
throw new ServiceException(ResponseEnum.SERVER_ERROR);
}
}
/**
* 构建vip记录消息体
* @param vipOrder
* @return
*/
private String buildVipRecordMsg(VipOrder vipOrder) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("orderId",vipOrder.getOrderId());
jsonObject.put("startTime",vipOrder.getStartTime());
jsonObject.put("endTime",vipOrder.getEndTime());
jsonObject.put("vipId",vipOrder.getVipId());
jsonObject.put("vipName",vipOrder.getVipName());
jsonObject.put("vipTypeName",vipOrder.getVipTypeName());
jsonObject.put("userClientType",vipOrder.getUserClientType());
jsonObject.put("phone",vipOrder.getPhone());
jsonObject.put("userId",vipOrder.getUserId());
return JSON.toJSONString(jsonObject);
}
}

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

@ -38,8 +38,8 @@ public interface VipOrderService extends IService<VipOrder> {
List<VipOrderVo> getVipOrderList(QueryVipOrderDto dto);
/**
* 更新订单信息并添加用户会员记录
* 更新订单信息
* @param vipOrder
*/
void updateOrderAndAddVipRecord(VipOrder vipOrder);
void updateByToPaySuccess(VipOrder vipOrder);
}

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

@ -7,9 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bnyer.common.core.domain.R;
import com.bnyer.common.core.domain.VipOrder;
import com.bnyer.common.core.enums.EnumUserClientType;
import com.bnyer.common.core.enums.EnumVipType;
import com.bnyer.common.core.enums.ResponseEnum;
import com.bnyer.common.core.enums.*;
import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.common.core.utils.DateUtils;
import com.bnyer.common.core.utils.OrderUtil;
@ -22,7 +20,6 @@ import com.bnyer.img.api.vo.UserVipVo;
import com.bnyer.order.dto.AddVipOrderDto;
import com.bnyer.order.dto.QueryVipOrderDto;
import com.bnyer.order.enums.EnumVipOrderStatus;
import com.bnyer.common.core.enums.EnumTimeUnit;
import com.bnyer.order.mapper.VipOrderMapper;
import com.bnyer.order.service.VipOrderService;
import com.bnyer.order.vo.VipOrderVo;
@ -182,15 +179,18 @@ public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper, VipOrder> i
/**
* 更新订单信息并添加用户会员记录
* 更新订单信息为已支付
* @param vipOrder
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void updateOrderAndAddVipRecord(VipOrder vipOrder) {
public void updateByToPaySuccess(VipOrder vipOrder) {
vipOrder.setPayStatus(EnumPayStatus.SUCCESS.getCode());
vipOrder.setOrderStatus(EnumVipOrderStatus.SUCCESS.getStatus());
vipOrder.setUpdateTime(new Date());
vipOrder.setPayTime(new Date());
//更新订单
vipOrderMapper.updateById(vipOrder);
// TODO: 2023/04/23 远程调用添加会员记录
}
}

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

@ -25,6 +25,7 @@ import com.bnyer.pay.constant.AliPayConstant;
import com.bnyer.pay.dto.EditPayInfoNotifyDto;
import com.bnyer.pay.dto.PayNotifyCheckDto;
import com.bnyer.pay.dto.UnifiedOrderDto;
import com.bnyer.pay.enums.EnumPayChannel;
import com.bnyer.pay.enums.EnumPayConfigStatus;
import com.bnyer.pay.mapper.AlipayConfigMapper;
import com.bnyer.pay.service.PayInfoService;
@ -160,15 +161,14 @@ public class AliPayStrategy extends AbstractPayStrategy {
editPayInfoNotifyDto.setPayAmount(totalAmount);
editPayInfoNotifyDto.setAppId(appId);
editPayInfoNotifyDto.setPayNo(tradeNo);
editPayInfoNotifyDto.setPayChannel(EnumPayChannel.getPayChannelName("alipay",EnumPayType.ALI_PAY));
payInfoService.editPayInfoNotify(editPayInfoNotifyDto);
}else if(tradeStatus.equals("TRADE_CLOSED")){
log.info("支付宝支付回调:TRADE_CLOSED 状态不做处理");
//交易关闭不作处理:退款或未支付超时关闭
// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
}catch (Exception e){
log.info("支付宝支付回调:处理过程异常,error:{}",e.getMessage());
// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return MsgConstants.FAIL;
}
return MsgConstants.SUCCESS;
}

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

@ -18,6 +18,7 @@ import com.bnyer.pay.constant.KSPayConstants;
import com.bnyer.pay.dto.EditPayInfoNotifyDto;
import com.bnyer.pay.dto.PayNotifyCheckDto;
import com.bnyer.pay.dto.UnifiedOrderDto;
import com.bnyer.pay.enums.EnumPayChannel;
import com.bnyer.pay.enums.EnumPayConfigStatus;
import com.bnyer.pay.mapper.DypayConfigMapper;
import com.bnyer.pay.mapper.KspayConfigMapper;
@ -127,7 +128,8 @@ public class DYPayStrategy extends AbstractPayStrategy{
payInOrderVo.setOrderToken(orderToken);
return payInOrderVo;
} else {
return null;
log.error("抖音支付:统一下单接口调用失败,payId:{},result:{},error{}", dto.getPayId(),JSON.toJSONString(data), "返回信息为空");
throw new ServiceException(ResponseEnum.PAY_FAILS);
}
} else {
log.error("抖音支付:统一下单接口调用失败,payId:{},error{}", dto.getPayId(), jsonObject.getString("error_msg"));
@ -200,7 +202,7 @@ public class DYPayStrategy extends AbstractPayStrategy{
editPayInfoNotifyDto.setPayId(outOrderNo);
editPayInfoNotifyDto.setPayNo(dyOrderId);
editPayInfoNotifyDto.setTradeNo(paymentOrderNo);
editPayInfoNotifyDto.setPayChannel(payChannel);
editPayInfoNotifyDto.setPayChannel(EnumPayChannel.getPayChannelName(payChannel,EnumPayType.DY_PAY));
payInfoService.editPayInfoNotify(editPayInfoNotifyDto);
//正确处理后返回以下内容格式通知小程序平台不再持续回调
return super.buildNotifyCheckResultMsg(EnumPayType.DY_PAY,true,"success");

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

@ -17,6 +17,7 @@ import com.bnyer.pay.constant.KSPayConstants;
import com.bnyer.pay.dto.EditPayInfoNotifyDto;
import com.bnyer.pay.dto.PayNotifyCheckDto;
import com.bnyer.pay.dto.UnifiedOrderDto;
import com.bnyer.pay.enums.EnumPayChannel;
import com.bnyer.pay.enums.EnumPayConfigStatus;
import com.bnyer.pay.mapper.KspayConfigMapper;
import com.bnyer.pay.service.PayInfoService;
@ -64,7 +65,7 @@ public class KSPayStrategy extends AbstractPayStrategy{
throw new ServiceException(ResponseEnum.PAY_CONFIG_ERROR);
}
KspayConfig kspayConfig = kspayConfigList.get(0);
String openId = SecurityContextHolder.get("ksCode");
String openId = SecurityContextHolder.get("fhCode");
String appId = kspayConfig.getAppid();
String backurl = kspayConfig.getBackurl();
String secret = kspayConfig.getSecret();
@ -126,7 +127,8 @@ public class KSPayStrategy extends AbstractPayStrategy{
payInOrderVo.setOrderToken(orderToken);
return payInOrderVo;
} else {
return null;
log.error("快手支付:统一下单接口调用失败,payId:{},result:{},error{}", dto.getPayId(),JSON.toJSONString(data), "返回信息为空");
throw new ServiceException(ResponseEnum.PAY_FAILS);
}
} else {
log.error("快手支付:统一下单接口调用失败,payId:{},error{}", dto.getPayId(), jsonObject.getString("error_msg"));
@ -196,7 +198,7 @@ public class KSPayStrategy extends AbstractPayStrategy{
editPayInfoNotifyDto.setPayId(outOrderNo);
editPayInfoNotifyDto.setPayNo(ksOrderNo);
editPayInfoNotifyDto.setTradeNo(tradeNo);
editPayInfoNotifyDto.setPayChannel(channel);
editPayInfoNotifyDto.setPayChannel(EnumPayChannel.getPayChannelName(channel,EnumPayType.KS_PAY));
payInfoService.editPayInfoNotify(editPayInfoNotifyDto);
//正确处理后返回以下内容格式通知小程序平台不再持续回调
return super.buildNotifyCheckResultMsg(EnumPayType.KS_PAY,true,messageId);

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

@ -17,6 +17,7 @@ import com.bnyer.common.core.utils.StringUtils;
import com.bnyer.pay.dto.EditPayInfoNotifyDto;
import com.bnyer.pay.dto.PayNotifyCheckDto;
import com.bnyer.pay.dto.UnifiedOrderDto;
import com.bnyer.pay.enums.EnumPayChannel;
import com.bnyer.pay.enums.EnumPayConfigStatus;
import com.bnyer.pay.enums.EnumTradeType;
import com.bnyer.pay.manager.WxPayManager;
@ -162,6 +163,7 @@ public class WxPayStrategy extends AbstractPayStrategy {
editPayInfoNotifyDto.setAppId(appid);
editPayInfoNotifyDto.setPayId(outTradeNo);
editPayInfoNotifyDto.setPayNo(transactionId);
editPayInfoNotifyDto.setPayChannel(EnumPayChannel.getPayChannelName("wxpay",EnumPayType.WX_PAY));
payInfoService.editPayInfoNotify(editPayInfoNotifyDto);
return super.buildNotifyCheckResultMsg(EnumPayType.WX_PAY,true,"OK");
} catch (Exception e) {

12
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/EditPayInfoNotifyDto.java

@ -18,20 +18,20 @@ public class EditPayInfoNotifyDto {
//appid
private String appId;
//支付号
private String payNo;
//业务系统支付订单号
private String payId;
//交易状态:TRADE_FINISHED,TRADE_SUCCESS,TRADE_CLOSED
private String tradeStatus;
//支付号:第三方
private String payNo;
//快手用户侧订单号/抖音支付宝微信侧单号:第三方
private String tradeNo;
//交易付款时间
private String payTime;
//交易退款时间
private String refundTime;
//订单金额(元)
private String payAmount;
//支付类型
private String payType;
//支付渠道:wxpay/alipay/dypay
private String payChannel;
}

2
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/UnifiedOrderDto.java

@ -41,7 +41,7 @@ public class UnifiedOrderDto {
*/
private String tradeType;
/**
* 商品类型快手抖音支付需要
* 商品类型快手支付需要
*/
private Integer goodsType;
/**

69
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/enums/EnumPayChannel.java

@ -0,0 +1,69 @@
package com.bnyer.pay.enums;
import com.bnyer.common.core.enums.EnumPayType;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.ArrayList;
import java.util.List;
/**
* @author :WXC
* @description :
*/
@Getter
@AllArgsConstructor
public enum EnumPayChannel {
ALI_PAY("alipay","2","ALIPAY","alipay"),
WX_PAY("wxpay","1","WECHAT","wxpay"),
DY_PAY("10","","","dypay"),
;
private final String code1;
private final String code2;
private final String code3;
private final String name;
public static String getPayChannelName(String code, EnumPayType payType) {
List<EnumPayChannel> enumPayChannelByPayType = getEnumPayChannelByPayType(payType);
for (EnumPayChannel value : enumPayChannelByPayType) {
if (value.code1.equals(code)){
return value.getName();
}
if (value.code2.equals(code)){
return value.getName();
}
if (value.code3.equals(code)){
return value.getName();
}
}
return null;
}
public static List<EnumPayChannel> getEnumPayChannelByPayType(EnumPayType payType){
List<EnumPayChannel> enumPayChannelList = new ArrayList<>();
switch (payType){
case ALI_PAY:
enumPayChannelList.add(ALI_PAY);
break;
case WX_PAY:
enumPayChannelList.add(WX_PAY);
break;
case DY_PAY:
enumPayChannelList.add(ALI_PAY);
enumPayChannelList.add(WX_PAY);
enumPayChannelList.add(DY_PAY);
break;
case KS_PAY:
enumPayChannelList.add(ALI_PAY);
enumPayChannelList.add(WX_PAY);
break;
}
return enumPayChannelList;
}
}

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

@ -98,8 +98,11 @@ public class PayInfoServiceImpl extends ServiceImpl<PayInfoMapper, PayInfo> impl
//构建统一下单请求实体
UnifiedOrderDto unifiedOrderDto = buildUnifiedOrderDto(dto, goodsType,payAmount,payId, request);
//下单,获取第三方返回信息
IPayStrategy IPayStrategy = PayFactory.getInstance().getConcreteStrategy(dto.getPayType());
PayInOrderVo payInOrderVo = IPayStrategy.unifiedOrder(unifiedOrderDto);
IPayStrategy payStrategy = PayFactory.getInstance().getConcreteStrategy(dto.getPayType());
if (Objects.isNull(payStrategy)){
throw new ServiceException("暂不支持该支付方式");
}
PayInOrderVo payInOrderVo = payStrategy.unifiedOrder(unifiedOrderDto);
//构建支付订单完成入库
PayInfo payInfo = buildPayInfo(payInOrderVo,unifiedOrderDto,dto);
payInfoMapper.insert(payInfo);

4
bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/AlipayConfigMapper.xml

@ -12,12 +12,14 @@
<result column="backurl" jdbcType="VARCHAR" property="backurl" />
<result column="status" jdbcType="CHAR" property="status" />
<result column="remark" jdbcType="VARCHAR" property="remark" />
<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>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, appid, app_private_key, alipay_public_key, `key_type`, backurl, `status`, remark,
create_time, update_time
create_time, update_time,sort,is_show
</sql>
</mapper>

4
bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/DypayConfigMapper.xml

@ -11,11 +11,13 @@
<result column="backurl" jdbcType="VARCHAR" property="backurl" />
<result column="status" jdbcType="CHAR" property="status" />
<result column="remark" jdbcType="VARCHAR" property="remark" />
<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>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, appid,salt, token, backurl, `status`, remark, create_time, update_time
id, appid,salt, token, backurl, `status`, remark, create_time, update_time,sort,is_show
</sql>
</mapper>

4
bnyer-services/bnyer-pay/src/main/resources/com/bnyer/pay/mapper/KspayConfigMapper.xml

@ -10,11 +10,13 @@
<result column="backurl" jdbcType="VARCHAR" property="backurl" />
<result column="status" jdbcType="CHAR" property="status" />
<result column="remark" jdbcType="VARCHAR" property="remark" />
<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>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, appid, secret, backurl, `status`, remark, create_time, update_time
id, appid, secret, backurl, `status`, remark, create_time, update_time,sort,is_show
</sql>
</mapper>

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

@ -12,11 +12,13 @@
<result column="key" jdbcType="VARCHAR" property="key" />
<result column="status" jdbcType="CHAR" property="status" />
<result column="remark" jdbcType="VARCHAR" property="remark" />
<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>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, trade_type, appid, mchid, backurl, `key`, `status`, remark, create_time, update_time
id, trade_type, appid, mchid, backurl, `key`, `status`, remark, create_time, update_time, sort, is_show
</sql>
</mapper>

Loading…
Cancel
Save