From c5f16daf6336d456b5782721616548d67b605fd4 Mon Sep 17 00:00:00 2001 From: wuxicheng <1441859745@qq.com> Date: Thu, 18 May 2023 10:46:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BC=9A=E5=91=98=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bnyer/order/api/bean/vo/VipOrderVo.java | 8 ---- .../common/core/domain/UserVipRecord.java | 7 ---- .../bnyer/common/core/domain/VipOrder.java | 16 -------- .../common/core/dto/AddUserVipRecordDto.java | 10 +++-- .../domain/img/AddUserVipRecordMessage.java | 6 +-- .../img/listener/VipRecordCreateConsumer.java | 4 +- .../img/service/UserVipRecordService.java | 4 +- .../impl/UserVipServiceRecordImpl.java | 37 +++++++++++-------- .../com/bnyer/img/vo/UserVipRecordVo.java | 3 -- .../bnyer/img/mapper/UserVipRecordMapper.xml | 2 - .../com/bnyer/order/bean/vo/VipOrderVo.java | 8 ---- .../vip/VipOrderPayNotifyConsumer.java | 4 +- .../service/impl/VipOrderServiceImpl.java | 17 ++++++--- .../com/bnyer/order/mapper/VipOrderMapper.xml | 4 -- .../pay/bean/dto/UnifiedOrderExtDto.java | 21 +++++++++++ .../pay/controller/UnifiedPayController.java | 8 +++- .../bnyer/pay/service/UnifiedPayService.java | 4 +- .../service/impl/UnifiedPayServiceImpl.java | 20 +++------- 18 files changed, 82 insertions(+), 101 deletions(-) create mode 100644 bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/UnifiedOrderExtDto.java diff --git a/bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/bean/vo/VipOrderVo.java b/bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/bean/vo/VipOrderVo.java index 19a207d..d30addc 100644 --- a/bnyer-api/bnyer-api-order/src/main/java/com/bnyer/order/api/bean/vo/VipOrderVo.java +++ b/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名称") 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艺术家-微信") private Integer userClientType; diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/UserVipRecord.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/UserVipRecord.java index 0744aa4..b76c4fe 100644 --- a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/UserVipRecord.java +++ b/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") public class UserVipRecord extends BaseDomain { - /** - * 订单号 - */ - @TableField(value = "order_no") - @ApiModelProperty(value="订单号") - private String orderNo; - /** * 用户id */ diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/VipOrder.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/VipOrder.java index 03eb818..9cbc9ab 100644 --- a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/VipOrder.java +++ b/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="时长天数") 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失败 */ diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/dto/AddUserVipRecordDto.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/dto/AddUserVipRecordDto.java index 54025f9..fad4aca 100644 --- a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/dto/AddUserVipRecordDto.java +++ b/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.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; -import lombok.*; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; import java.util.Date; @@ -12,9 +14,6 @@ import java.util.Date; @NoArgsConstructor public class AddUserVipRecordDto extends BaseDto{ - @ApiModelProperty(value="订单号") - private String orderNo; - @ApiModelProperty(value="用户id") private Long userId; @@ -32,6 +31,9 @@ public class AddUserVipRecordDto extends BaseDto{ @ApiModelProperty(value="到期时间") private Date endTime; + @ApiModelProperty(value="时长天数") + private Integer days; + @ApiModelProperty(value="vip名称") private String vipName; diff --git a/bnyer-common/bnyer-common-rocketmq/src/main/java/com/bnyer/common/rocketmq/domain/img/AddUserVipRecordMessage.java b/bnyer-common/bnyer-common-rocketmq/src/main/java/com/bnyer/common/rocketmq/domain/img/AddUserVipRecordMessage.java index 3661bab..50c3759 100644 --- a/bnyer-common/bnyer-common-rocketmq/src/main/java/com/bnyer/common/rocketmq/domain/img/AddUserVipRecordMessage.java +++ b/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 public class AddUserVipRecordMessage extends BaseMessage { - @ApiModelProperty(value="订单号") - private String orderNo; - @ApiModelProperty(value="用户id") private Long userId; @@ -39,6 +36,9 @@ public class AddUserVipRecordMessage extends BaseMessage { @ApiModelProperty(value="到期时间") private Date endTime; + @ApiModelProperty(value="本次开通计算后的天数") + private Integer days; + @ApiModelProperty(value="vip名称") private String vipName; diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/listener/VipRecordCreateConsumer.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/listener/VipRecordCreateConsumer.java index 608a209..d1187d1 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/listener/VipRecordCreateConsumer.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/listener/VipRecordCreateConsumer.java @@ -29,8 +29,8 @@ public class VipRecordCreateConsumer extends EnhanceMessageHandler().eq(UserVipRecord::getUserId, userVipRecord.getUserId()) + .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); + } } /** diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/UserVipRecordVo.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/UserVipRecordVo.java index 6c03a22..f5fdef5 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/UserVipRecordVo.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/UserVipRecordVo.java @@ -18,9 +18,6 @@ public class UserVipRecordVo { @ApiModelProperty(value="id") private Long id; - @ApiModelProperty(value="订单号") - private String orderNo; - @ApiModelProperty(value="用户id") private Long userId; diff --git a/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/UserVipRecordMapper.xml b/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/UserVipRecordMapper.xml index 7f8ac82..7b5e5e2 100644 --- a/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/UserVipRecordMapper.xml +++ b/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/UserVipRecordMapper.xml @@ -5,7 +5,6 @@ - @@ -23,7 +22,6 @@ a.id, - a.order_no, a.user_id , a.phone,vip_name, a.vip_type_name, diff --git a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/bean/vo/VipOrderVo.java b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/bean/vo/VipOrderVo.java index 8ef8f5b..e0f3fef 100644 --- a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/bean/vo/VipOrderVo.java +++ b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/bean/vo/VipOrderVo.java @@ -40,14 +40,6 @@ public class VipOrderVo { @ApiModelProperty(value = "vip名称") 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艺术家-微信") private Integer userClientType; diff --git a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/listener/vip/VipOrderPayNotifyConsumer.java b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/listener/vip/VipOrderPayNotifyConsumer.java index e3b304f..0a8527f 100644 --- a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/listener/vip/VipOrderPayNotifyConsumer.java +++ b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/listener/vip/VipOrderPayNotifyConsumer.java @@ -72,9 +72,7 @@ public class VipOrderPayNotifyConsumer extends EnhanceMessageHandler i vipOrder.setVipTypeName(userVipVo.getVipTypeName()); vipOrder.setUserId(userId); // 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()); - //计算会员结束时间 - vipOrder.setEndTime(DateUtils.getDateByType(enumTimeUnitByUnit,nowDate, userVipVo.getValidTimeNum())); - //开通的天数 - vipOrder.setDays((int) DateUtil.betweenDay(vipOrder.getStartTime(), vipOrder.getEndTime(), true)); + //计算本次开通的天数 + Date nowDate = new Date(); + if (EnumTimeUnit.DAY == enumTimeUnitByUnit){ + vipOrder.setDays(userVipVo.getValidTimeNum()); + }else { + vipOrder.setDays((int) DateUtil.betweenDay(nowDate, DateUtils.getDateByType(enumTimeUnitByUnit,nowDate, userVipVo.getValidTimeNum()), true)); + } vipOrder.setUserClientType(userClientType); vipOrder.setOrderNo(OrderUtil.getOrderNo("RV",nowDate, EnumUserClientType.getCodeByType(userClientType),String.valueOf(userId))); return vipOrder; diff --git a/bnyer-services/bnyer-order/src/main/resources/com/bnyer/order/mapper/VipOrderMapper.xml b/bnyer-services/bnyer-order/src/main/resources/com/bnyer/order/mapper/VipOrderMapper.xml index acd6a80..83becc5 100644 --- a/bnyer-services/bnyer-order/src/main/resources/com/bnyer/order/mapper/VipOrderMapper.xml +++ b/bnyer-services/bnyer-order/src/main/resources/com/bnyer/order/mapper/VipOrderMapper.xml @@ -15,8 +15,6 @@ - - @@ -40,8 +38,6 @@ o.is_delay, o.`days`, o.vip_type_name, - o.start_time, - o.end_time, o.order_status, o.pay_time, o.cancel_time, diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/UnifiedOrderExtDto.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/bean/dto/UnifiedOrderExtDto.java new file mode 100644 index 0000000..df59567 --- /dev/null +++ b/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; + +} diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/controller/UnifiedPayController.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/controller/UnifiedPayController.java index 6086845..88fc87a 100644 --- a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/controller/UnifiedPayController.java +++ b/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.enums.ResponseEnum; 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.bean.dto.RefundDto; import com.bnyer.pay.bean.dto.UnifiedOrderDto; 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.service.UnifiedPayService; import com.bnyer.pay.bean.vo.UnifiedOrderVo; @@ -42,7 +45,10 @@ public class UnifiedPayController { @PostMapping("/unifiedOrder") @Operation(summary = "统一下单,并生成支付订单" , description = "生成支付订单,返回前端支付所需参数") public R 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); } diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/UnifiedPayService.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/UnifiedPayService.java index 59ed825..40edb1b 100644 --- a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/UnifiedPayService.java +++ b/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.UnifiedOrderDto; 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.UnifiedOrderVo; import com.bnyer.pay.bean.vo.QueryOrderVo; @@ -19,10 +20,9 @@ public interface UnifiedPayService { /** * 统一下单,并生成支付订单 * @param dto - * @param request * @return */ - UnifiedOrderVo unifiedOrder(UnifiedOrderDto dto, HttpServletRequest request); + UnifiedOrderVo unifiedOrder(UnifiedOrderExtDto dto); /** * 统一订单查询 diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/impl/UnifiedPayServiceImpl.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/impl/UnifiedPayServiceImpl.java index f8ce54b..739a770 100644 --- a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/service/impl/UnifiedPayServiceImpl.java +++ b/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.RefundBo; 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.RefundDto; -import com.bnyer.pay.bean.dto.UnifiedOrderDto; +import com.bnyer.pay.bean.dto.*; import com.bnyer.pay.bean.vo.*; import com.bnyer.pay.constant.KSPayConstants; 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.stereotype.Service; -import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.util.Date; import java.util.Objects; @@ -66,11 +62,10 @@ public class UnifiedPayServiceImpl implements UnifiedPayService { /** * 统一下单,并生成支付订单 * @param dto - * @param request * @return */ @Override - public UnifiedOrderVo unifiedOrder(UnifiedOrderDto dto, HttpServletRequest request) { + public UnifiedOrderVo unifiedOrder(UnifiedOrderExtDto dto) { //下单前校验 checkData(dto); //支付金额 @@ -108,7 +103,7 @@ public class UnifiedPayServiceImpl implements UnifiedPayService { 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()); if (Objects.isNull(payStrategy)){ @@ -141,7 +136,7 @@ public class UnifiedPayServiceImpl implements UnifiedPayService { * @param dto * @return */ - private AddPayInfoDto buildPayInfo(ThirdUnifiedOrderVo thirdUnifiedOrderVo, UnifiedOrderBo unifiedOrderBo, UnifiedOrderDto dto) { + private AddPayInfoDto buildPayInfo(ThirdUnifiedOrderVo thirdUnifiedOrderVo, UnifiedOrderBo unifiedOrderBo, UnifiedOrderExtDto dto) { AddPayInfoDto addPayInfoDto = new AddPayInfoDto(); addPayInfoDto.setAppid(thirdUnifiedOrderVo.getAppId()); addPayInfoDto.setOrderNo(dto.getOrderNo()); @@ -168,10 +163,9 @@ public class UnifiedPayServiceImpl implements UnifiedPayService { * @param goodsType 商品类型 * @param payAmount 不同支付场景下的支付金额 * @param payId 内部系统支付单号 - * @param request 请求request用于获取ip地址 * @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(); String openId = dto.getOpenId(); if (StringUtils.isBlank(openId)){ @@ -179,12 +173,10 @@ public class UnifiedPayServiceImpl implements UnifiedPayService { } //当前时间 Date currDate = new Date(); - //ip地址 - String ip = IpUtils.getIpAddr(request); UnifiedOrderBo unifiedOrderBo = EntityConvertUtil.copy(dto, UnifiedOrderBo.class); unifiedOrderBo.setOpenId(openId); unifiedOrderBo.setPayId(payId); - unifiedOrderBo.setIp(ip); + unifiedOrderBo.setIp(dto.getIp()); unifiedOrderBo.setCurrDate(currDate); unifiedOrderBo.setPayAmount(payAmount); unifiedOrderBo.setGoodsType(goodsType);