Browse Source

优化会员记录逻辑

feature-1.1
wuxicheng 3 years ago
parent
commit
c5f16daf63
  1. 8
      bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/bean/vo/VipOrderVo.java
  2. 7
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/UserVipRecord.java
  3. 16
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/VipOrder.java
  4. 10
      bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/dto/AddUserVipRecordDto.java
  5. 6
      bnyer-common/bnyer-common-rocketmq/src/main/java/com/bnyer/common/rocketmq/domain/img/AddUserVipRecordMessage.java
  6. 4
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/listener/VipRecordCreateConsumer.java
  7. 4
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/UserVipRecordService.java
  8. 37
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/UserVipServiceRecordImpl.java
  9. 3
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/UserVipRecordVo.java
  10. 2
      bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/UserVipRecordMapper.xml
  11. 8
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/bean/vo/VipOrderVo.java
  12. 4
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/listener/vip/VipOrderPayNotifyConsumer.java
  13. 17
      bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/impl/VipOrderServiceImpl.java
  14. 4
      bnyer-services/bnyer-order/src/main/resources/com/bnyer/order/mapper/VipOrderMapper.xml
  15. 21
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/UnifiedOrderExtDto.java
  16. 8
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/controller/UnifiedPayController.java
  17. 4
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/UnifiedPayService.java
  18. 20
      bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/impl/UnifiedPayServiceImpl.java

8
bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/bean/vo/VipOrderVo.java

@ -40,14 +40,6 @@ public class VipOrderVo {
@ApiModelProperty(value = "vip名称") @ApiModelProperty(value = "vip名称")
private String vipName; private String vipName;
@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 = "用户客户端类型:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信") @ApiModelProperty(value = "用户客户端类型:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信")
private Integer userClientType; private Integer userClientType;

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

@ -18,13 +18,6 @@ import java.util.Date;
@TableName(value = "img_user_vip_record") @TableName(value = "img_user_vip_record")
public class UserVipRecord extends BaseDomain { public class UserVipRecord extends BaseDomain {
/**
* 订单号
*/
@TableField(value = "order_no")
@ApiModelProperty(value="订单号")
private String orderNo;
/** /**
* 用户id * 用户id
*/ */

16
bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/VipOrder.java

@ -89,22 +89,6 @@ public class VipOrder extends BaseDomain {
@ApiModelProperty(value="时长天数") @ApiModelProperty(value="时长天数")
private Integer days; private Integer days;
/**
* 开始时间
*/
@TableField(value = "start_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value="开始时间")
private Date startTime;
/**
* 到期时间
*/
@TableField(value = "end_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value="到期时间")
private Date endTime;
/** /**
* 订单状态0未处理1成功2失败 * 订单状态0未处理1成功2失败
*/ */

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

@ -3,7 +3,9 @@ package com.bnyer.common.core.dto;
import com.bnyer.common.core.domain.UserVipRecord; 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.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.Date; import java.util.Date;
@ -12,9 +14,6 @@ import java.util.Date;
@NoArgsConstructor @NoArgsConstructor
public class AddUserVipRecordDto extends BaseDto<UserVipRecord>{ public class AddUserVipRecordDto extends BaseDto<UserVipRecord>{
@ApiModelProperty(value="订单号")
private String orderNo;
@ApiModelProperty(value="用户id") @ApiModelProperty(value="用户id")
private Long userId; private Long userId;
@ -32,6 +31,9 @@ public class AddUserVipRecordDto extends BaseDto<UserVipRecord>{
@ApiModelProperty(value="到期时间") @ApiModelProperty(value="到期时间")
private Date endTime; private Date endTime;
@ApiModelProperty(value="时长天数")
private Integer days;
@ApiModelProperty(value="vip名称") @ApiModelProperty(value="vip名称")
private String vipName; private String vipName;

6
bnyer-common/bnyer-common-rocketmq/src/main/java/com/bnyer/common/rocketmq/domain/img/AddUserVipRecordMessage.java

@ -19,9 +19,6 @@ import java.util.Date;
@NoArgsConstructor @NoArgsConstructor
public class AddUserVipRecordMessage extends BaseMessage { public class AddUserVipRecordMessage extends BaseMessage {
@ApiModelProperty(value="订单号")
private String orderNo;
@ApiModelProperty(value="用户id") @ApiModelProperty(value="用户id")
private Long userId; private Long userId;
@ -39,6 +36,9 @@ public class AddUserVipRecordMessage extends BaseMessage {
@ApiModelProperty(value="到期时间") @ApiModelProperty(value="到期时间")
private Date endTime; private Date endTime;
@ApiModelProperty(value="本次开通计算后的天数")
private Integer days;
@ApiModelProperty(value="vip名称") @ApiModelProperty(value="vip名称")
private String vipName; private String vipName;

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

@ -29,8 +29,8 @@ public class VipRecordCreateConsumer extends EnhanceMessageHandler<AddUserVipRec
public void onMessage(AddUserVipRecordMessage message) { public void onMessage(AddUserVipRecordMessage message) {
super.dispatchMessage(message); super.dispatchMessage(message);
AddUserVipRecordDto addUserVipRecordDto = EntityConvertUtil.copy(message, AddUserVipRecordDto.class); AddUserVipRecordDto addUserVipRecordDto = EntityConvertUtil.copy(message, AddUserVipRecordDto.class);
//添加用户会员记录 //保存用户会员记录
userVipRecordService.addUserVipRecord(addUserVipRecordDto); userVipRecordService.saveUserVipRecord(addUserVipRecordDto);
} }
@Override @Override

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

@ -18,10 +18,10 @@ public interface UserVipRecordService {
/** /**
* 添加用户会员记录 * 保存用户会员记录
* @param dto * @param dto
*/ */
void addUserVipRecord(AddUserVipRecordDto dto); void saveUserVipRecord(AddUserVipRecordDto dto);
/** /**
* 查询用户会员记录 * 查询用户会员记录

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

@ -1,34 +1,24 @@
package com.bnyer.img.service.impl; package com.bnyer.img.service.impl;
import cn.hutool.core.util.IdUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.bnyer.common.core.constant.RedisKeyConstant;
import com.bnyer.common.core.domain.UserVipRecord; 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.AddUserVipRecordDto;
import com.bnyer.common.core.dto.PayUserVipDto; import com.bnyer.common.core.dto.PayUserVipDto;
import com.bnyer.common.core.enums.ResponseEnum; import com.bnyer.common.core.enums.EnumTimeUnit;
import com.bnyer.common.core.exception.ServiceException; import com.bnyer.common.core.utils.DateUtils;
import com.bnyer.common.core.utils.StringUtils;
import com.bnyer.common.core.utils.bean.EntityConvertUtil;
import com.bnyer.common.core.vo.UserInfoVo; import com.bnyer.common.core.vo.UserInfoVo;
import com.bnyer.common.redis.service.RedissonService; import com.bnyer.common.redis.service.RedissonService;
import com.bnyer.common.security.utils.SecurityUtils; import com.bnyer.common.security.utils.SecurityUtils;
import com.bnyer.img.constants.UserVipOrderStatusConstant;
import com.bnyer.img.enums.EnumUserVipRecordStatus; import com.bnyer.img.enums.EnumUserVipRecordStatus;
import com.bnyer.img.mapper.UserVipRecordMapper; import com.bnyer.img.mapper.UserVipRecordMapper;
import com.bnyer.img.query.UserVipRecordQuery; import com.bnyer.img.query.UserVipRecordQuery;
import com.bnyer.img.service.UserVipRecordService; import com.bnyer.img.service.UserVipRecordService;
import com.bnyer.img.vo.UserVipRecordVo; import com.bnyer.img.vo.UserVipRecordVo;
import com.bnyer.img.vo.UserVipVo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.TimeUnit;
@Service @Service
@Slf4j @Slf4j
@ -93,11 +83,26 @@ public class UserVipServiceRecordImpl implements UserVipRecordService {
return false; return false;
} }
/**
* 保存会员记录
* @param dto
*/
@Override @Override
public void addUserVipRecord(AddUserVipRecordDto dto) { public void saveUserVipRecord(AddUserVipRecordDto dto) {
UserVipRecord userVipRecord = dto.toEntity(); UserVipRecord userVipRecord = dto.toEntity();
userVipRecord.setStatus(EnumUserVipRecordStatus.VALID.getStatus()); UserVipRecord oldUserVipRecord = userVipRecordMapper.selectOne(new LambdaQueryWrapper<UserVipRecord>().eq(UserVipRecord::getUserId, userVipRecord.getUserId())
userVipRecordMapper.insert(userVipRecord); .eq(UserVipRecord::getUserClientType, userVipRecord.getUserClientType())
.eq(UserVipRecord::getStatus,EnumUserVipRecordStatus.VALID.getStatus()));
//判断是否存在生效的数据,存在走续费
if (Objects.isNull(oldUserVipRecord)){
userVipRecord.setStatus(EnumUserVipRecordStatus.VALID.getStatus());
userVipRecordMapper.insert(userVipRecord);
}else {
//续费
userVipRecord.setId(oldUserVipRecord.getId());
userVipRecord.setEndTime(DateUtils.getDateByType(EnumTimeUnit.DAY,oldUserVipRecord.getEndTime(), dto.getDays()));
userVipRecordMapper.updateById(userVipRecord);
}
} }
/** /**

3
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/UserVipRecordVo.java

@ -18,9 +18,6 @@ public class UserVipRecordVo {
@ApiModelProperty(value="id") @ApiModelProperty(value="id")
private Long id; private Long id;
@ApiModelProperty(value="订单号")
private String orderNo;
@ApiModelProperty(value="用户id") @ApiModelProperty(value="用户id")
private Long userId; private Long userId;

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

@ -5,7 +5,6 @@
<!--@mbg.generated--> <!--@mbg.generated-->
<!--@Table img_user_vip_record--> <!--@Table img_user_vip_record-->
<id column="id" jdbcType="BIGINT" property="id" /> <id column="id" jdbcType="BIGINT" property="id" />
<result column="order_no" jdbcType="VARCHAR" property="orderNo" />
<result column="user_id" jdbcType="BIGINT" property="userId" /> <result column="user_id" jdbcType="BIGINT" property="userId" />
<result column="phone" jdbcType="VARCHAR" property="phone" /> <result column="phone" jdbcType="VARCHAR" property="phone" />
<result column="vip_id" jdbcType="BIGINT" property="vipId" /> <result column="vip_id" jdbcType="BIGINT" property="vipId" />
@ -23,7 +22,6 @@
<sql id="Base_Column_List"> <sql id="Base_Column_List">
<!--@mbg.generated--> <!--@mbg.generated-->
a.id, a.id,
a.order_no,
a.user_id , a.user_id ,
a.phone,vip_name, a.phone,vip_name,
a.vip_type_name, a.vip_type_name,

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

@ -40,14 +40,6 @@ public class VipOrderVo {
@ApiModelProperty(value = "vip名称") @ApiModelProperty(value = "vip名称")
private String vipName; private String vipName;
@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 = "用户客户端类型:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信") @ApiModelProperty(value = "用户客户端类型:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信")
private Integer userClientType; private Integer userClientType;

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

@ -72,9 +72,7 @@ public class VipOrderPayNotifyConsumer extends EnhanceMessageHandler<VipOrderPay
AddUserVipRecordMessage message = new AddUserVipRecordMessage(); AddUserVipRecordMessage message = new AddUserVipRecordMessage();
message.setKey(IdUtils.randomUUID()); message.setKey(IdUtils.randomUUID());
message.setSource(ServiceNameConstants.ORDER_SERVICE); message.setSource(ServiceNameConstants.ORDER_SERVICE);
message.setOrderNo(vipOrder.getOrderNo()); message.setDays(vipOrder.getDays());
message.setStartTime(vipOrder.getStartTime());
message.setEndTime(vipOrder.getEndTime());
message.setVipId(vipOrder.getVipId()); message.setVipId(vipOrder.getVipId());
message.setVipName(vipOrder.getVipName()); message.setVipName(vipOrder.getVipName());
message.setVipTypeName(vipOrder.getVipTypeName()); message.setVipTypeName(vipOrder.getVipTypeName());

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

@ -180,13 +180,18 @@ public class VipOrderServiceImpl extends ServiceImpl<VipOrderMapper, VipOrder> i
vipOrder.setVipTypeName(userVipVo.getVipTypeName()); vipOrder.setVipTypeName(userVipVo.getVipTypeName());
vipOrder.setUserId(userId); vipOrder.setUserId(userId);
// vipOrder.setIsDelay("0"); // vipOrder.setIsDelay("0");
Date nowDate = new Date(); // vipOrder.setStartTime(nowDate);
vipOrder.setStartTime(nowDate); // EnumTimeUnit enumTimeUnitByUnit = EnumTimeUnit.getEnumTimeUnitByUnit(userVipVo.getValidTimeUnit());
// //计算会员结束时间
// vipOrder.setEndTime(DateUtils.getDateByType(enumTimeUnitByUnit,nowDate, userVipVo.getValidTimeNum()));
EnumTimeUnit enumTimeUnitByUnit = EnumTimeUnit.getEnumTimeUnitByUnit(userVipVo.getValidTimeUnit()); EnumTimeUnit enumTimeUnitByUnit = EnumTimeUnit.getEnumTimeUnitByUnit(userVipVo.getValidTimeUnit());
//计算会员结束时间 //计算本次开通的天数
vipOrder.setEndTime(DateUtils.getDateByType(enumTimeUnitByUnit,nowDate, userVipVo.getValidTimeNum())); Date nowDate = new Date();
//开通的天数 if (EnumTimeUnit.DAY == enumTimeUnitByUnit){
vipOrder.setDays((int) DateUtil.betweenDay(vipOrder.getStartTime(), vipOrder.getEndTime(), true)); vipOrder.setDays(userVipVo.getValidTimeNum());
}else {
vipOrder.setDays((int) DateUtil.betweenDay(nowDate, DateUtils.getDateByType(enumTimeUnitByUnit,nowDate, userVipVo.getValidTimeNum()), true));
}
vipOrder.setUserClientType(userClientType); vipOrder.setUserClientType(userClientType);
vipOrder.setOrderNo(OrderUtil.getOrderNo("RV",nowDate, EnumUserClientType.getCodeByType(userClientType),String.valueOf(userId))); vipOrder.setOrderNo(OrderUtil.getOrderNo("RV",nowDate, EnumUserClientType.getCodeByType(userClientType),String.valueOf(userId)));
return vipOrder; return vipOrder;

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

@ -15,8 +15,6 @@
<result column="is_delay" jdbcType="CHAR" property="isDelay" /> <result column="is_delay" jdbcType="CHAR" property="isDelay" />
<result column="days" jdbcType="INTEGER" property="days" /> <result column="days" jdbcType="INTEGER" property="days" />
<result column="vip_type_name" jdbcType="INTEGER" property="vipTypeName" /> <result column="vip_type_name" jdbcType="INTEGER" property="vipTypeName" />
<result column="start_time" jdbcType="TIMESTAMP" property="startTime" />
<result column="end_time" jdbcType="TIMESTAMP" property="endTime" />
<result column="order_status" jdbcType="INTEGER" property="orderStatus" /> <result column="order_status" jdbcType="INTEGER" property="orderStatus" />
<result column="pay_time" jdbcType="TIMESTAMP" property="payTime" /> <result column="pay_time" jdbcType="TIMESTAMP" property="payTime" />
<result column="cancel_time" jdbcType="TIMESTAMP" property="cancelTime" /> <result column="cancel_time" jdbcType="TIMESTAMP" property="cancelTime" />
@ -40,8 +38,6 @@
o.is_delay, o.is_delay,
o.`days`, o.`days`,
o.vip_type_name, o.vip_type_name,
o.start_time,
o.end_time,
o.order_status, o.order_status,
o.pay_time, o.pay_time,
o.cancel_time, o.cancel_time,

21
bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/UnifiedOrderExtDto.java

@ -0,0 +1,21 @@
package com.bnyer.pay.bean.dto;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
/**
* @author :WXC
* @Date :2023/04/03
* @description :
*/
@Getter
@Setter
@NoArgsConstructor
public class UnifiedOrderExtDto extends UnifiedOrderDto{
/**
* 请求的ip地址
*/
private String ip;
}

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

@ -3,10 +3,13 @@ package com.bnyer.pay.controller;
import com.bnyer.common.core.domain.R; import com.bnyer.common.core.domain.R;
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.bean.EntityConvertUtil;
import com.bnyer.common.core.utils.ip.IpUtils;
import com.bnyer.pay.annotation.LimitRepeatRequest; import com.bnyer.pay.annotation.LimitRepeatRequest;
import com.bnyer.pay.bean.dto.RefundDto; import com.bnyer.pay.bean.dto.RefundDto;
import com.bnyer.pay.bean.dto.UnifiedOrderDto; import com.bnyer.pay.bean.dto.UnifiedOrderDto;
import com.bnyer.pay.bean.dto.QueryOrderDto; import com.bnyer.pay.bean.dto.QueryOrderDto;
import com.bnyer.pay.bean.dto.UnifiedOrderExtDto;
import com.bnyer.pay.bean.vo.ThirdRefundVo; import com.bnyer.pay.bean.vo.ThirdRefundVo;
import com.bnyer.pay.service.UnifiedPayService; import com.bnyer.pay.service.UnifiedPayService;
import com.bnyer.pay.bean.vo.UnifiedOrderVo; import com.bnyer.pay.bean.vo.UnifiedOrderVo;
@ -42,7 +45,10 @@ public class UnifiedPayController {
@PostMapping("/unifiedOrder") @PostMapping("/unifiedOrder")
@Operation(summary = "统一下单,并生成支付订单" , description = "生成支付订单,返回前端支付所需参数") @Operation(summary = "统一下单,并生成支付订单" , description = "生成支付订单,返回前端支付所需参数")
public R<UnifiedOrderVo> unifiedOrder(@Valid @RequestBody UnifiedOrderDto dto, HttpServletRequest request){ public R<UnifiedOrderVo> unifiedOrder(@Valid @RequestBody UnifiedOrderDto dto, HttpServletRequest request){
UnifiedOrderVo unifiedOrderVo = unifiedPayService.unifiedOrder(dto,request); UnifiedOrderExtDto unifiedOrderExtDto = EntityConvertUtil.copy(dto, UnifiedOrderExtDto.class);
//单独处理request的ip地址,request不作为参数传递到service,避免后续如果出现异步调用,会导致bean失效问题
unifiedOrderExtDto.setIp(IpUtils.getIpAddr(request));
UnifiedOrderVo unifiedOrderVo = unifiedPayService.unifiedOrder(unifiedOrderExtDto);
return R.ok(unifiedOrderVo); return R.ok(unifiedOrderVo);
} }

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

@ -3,6 +3,7 @@ package com.bnyer.pay.service;
import com.bnyer.pay.bean.dto.RefundDto; import com.bnyer.pay.bean.dto.RefundDto;
import com.bnyer.pay.bean.dto.UnifiedOrderDto; import com.bnyer.pay.bean.dto.UnifiedOrderDto;
import com.bnyer.pay.bean.dto.QueryOrderDto; import com.bnyer.pay.bean.dto.QueryOrderDto;
import com.bnyer.pay.bean.dto.UnifiedOrderExtDto;
import com.bnyer.pay.bean.vo.ThirdRefundVo; import com.bnyer.pay.bean.vo.ThirdRefundVo;
import com.bnyer.pay.bean.vo.UnifiedOrderVo; import com.bnyer.pay.bean.vo.UnifiedOrderVo;
import com.bnyer.pay.bean.vo.QueryOrderVo; import com.bnyer.pay.bean.vo.QueryOrderVo;
@ -19,10 +20,9 @@ public interface UnifiedPayService {
/** /**
* 统一下单并生成支付订单 * 统一下单并生成支付订单
* @param dto * @param dto
* @param request
* @return * @return
*/ */
UnifiedOrderVo unifiedOrder(UnifiedOrderDto dto, HttpServletRequest request); UnifiedOrderVo unifiedOrder(UnifiedOrderExtDto dto);
/** /**
* 统一订单查询 * 统一订单查询

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

@ -20,10 +20,7 @@ import com.bnyer.order.api.remote.RemoteVipOrderService;
import com.bnyer.pay.bean.bo.QueryOrderBo; import com.bnyer.pay.bean.bo.QueryOrderBo;
import com.bnyer.pay.bean.bo.RefundBo; import com.bnyer.pay.bean.bo.RefundBo;
import com.bnyer.pay.bean.bo.UnifiedOrderBo; import com.bnyer.pay.bean.bo.UnifiedOrderBo;
import com.bnyer.pay.bean.dto.AddPayInfoDto; import com.bnyer.pay.bean.dto.*;
import com.bnyer.pay.bean.dto.QueryOrderDto;
import com.bnyer.pay.bean.dto.RefundDto;
import com.bnyer.pay.bean.dto.UnifiedOrderDto;
import com.bnyer.pay.bean.vo.*; 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;
@ -40,7 +37,6 @@ 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;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import java.util.Objects; import java.util.Objects;
@ -66,11 +62,10 @@ public class UnifiedPayServiceImpl implements UnifiedPayService {
/** /**
* 统一下单并生成支付订单 * 统一下单并生成支付订单
* @param dto * @param dto
* @param request
* @return * @return
*/ */
@Override @Override
public UnifiedOrderVo unifiedOrder(UnifiedOrderDto dto, HttpServletRequest request) { public UnifiedOrderVo unifiedOrder(UnifiedOrderExtDto dto) {
//下单前校验 //下单前校验
checkData(dto); checkData(dto);
//支付金额 //支付金额
@ -108,7 +103,7 @@ public class UnifiedPayServiceImpl implements UnifiedPayService {
throw new ServiceException("sceneCode未匹配上对应支付场景"); throw new ServiceException("sceneCode未匹配上对应支付场景");
} }
//构建统一下单请求实体 //构建统一下单请求实体
UnifiedOrderBo unifiedOrderBo = buildUnifiedOrderDto(dto,goodsDesc, goodsType,payAmount,payId, request); UnifiedOrderBo unifiedOrderBo = buildUnifiedOrderDto(dto,goodsDesc, goodsType,payAmount,payId);
//下单,获取第三方返回信息 //下单,获取第三方返回信息
IPayStrategy payStrategy = PayFactory.getInstance().getConcreteStrategy(dto.getPayType()); IPayStrategy payStrategy = PayFactory.getInstance().getConcreteStrategy(dto.getPayType());
if (Objects.isNull(payStrategy)){ if (Objects.isNull(payStrategy)){
@ -141,7 +136,7 @@ public class UnifiedPayServiceImpl implements UnifiedPayService {
* @param dto * @param dto
* @return * @return
*/ */
private AddPayInfoDto buildPayInfo(ThirdUnifiedOrderVo thirdUnifiedOrderVo, UnifiedOrderBo unifiedOrderBo, UnifiedOrderDto dto) { private AddPayInfoDto buildPayInfo(ThirdUnifiedOrderVo thirdUnifiedOrderVo, UnifiedOrderBo unifiedOrderBo, UnifiedOrderExtDto dto) {
AddPayInfoDto addPayInfoDto = new AddPayInfoDto(); AddPayInfoDto addPayInfoDto = new AddPayInfoDto();
addPayInfoDto.setAppid(thirdUnifiedOrderVo.getAppId()); addPayInfoDto.setAppid(thirdUnifiedOrderVo.getAppId());
addPayInfoDto.setOrderNo(dto.getOrderNo()); addPayInfoDto.setOrderNo(dto.getOrderNo());
@ -168,10 +163,9 @@ public class UnifiedPayServiceImpl implements UnifiedPayService {
* @param goodsType 商品类型 * @param goodsType 商品类型
* @param payAmount 不同支付场景下的支付金额 * @param payAmount 不同支付场景下的支付金额
* @param payId 内部系统支付单号 * @param payId 内部系统支付单号
* @param request 请求request用于获取ip地址
* @return * @return
*/ */
private UnifiedOrderBo buildUnifiedOrderDto(UnifiedOrderDto dto, String goodsDesc, int goodsType, String payAmount, String payId, HttpServletRequest request) { private UnifiedOrderBo buildUnifiedOrderDto(UnifiedOrderExtDto dto, String goodsDesc, int goodsType, String payAmount, String payId) {
UserInfoVo userInfo = SecurityUtils.getUserInfo(); UserInfoVo userInfo = SecurityUtils.getUserInfo();
String openId = dto.getOpenId(); String openId = dto.getOpenId();
if (StringUtils.isBlank(openId)){ if (StringUtils.isBlank(openId)){
@ -179,12 +173,10 @@ public class UnifiedPayServiceImpl implements UnifiedPayService {
} }
//当前时间 //当前时间
Date currDate = new Date(); Date currDate = new Date();
//ip地址
String ip = IpUtils.getIpAddr(request);
UnifiedOrderBo unifiedOrderBo = EntityConvertUtil.copy(dto, UnifiedOrderBo.class); UnifiedOrderBo unifiedOrderBo = EntityConvertUtil.copy(dto, UnifiedOrderBo.class);
unifiedOrderBo.setOpenId(openId); unifiedOrderBo.setOpenId(openId);
unifiedOrderBo.setPayId(payId); unifiedOrderBo.setPayId(payId);
unifiedOrderBo.setIp(ip); unifiedOrderBo.setIp(dto.getIp());
unifiedOrderBo.setCurrDate(currDate); unifiedOrderBo.setCurrDate(currDate);
unifiedOrderBo.setPayAmount(payAmount); unifiedOrderBo.setPayAmount(payAmount);
unifiedOrderBo.setGoodsType(goodsType); unifiedOrderBo.setGoodsType(goodsType);

Loading…
Cancel
Save