diff --git a/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/vo/UserVipVo.java b/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/vo/UserVipVo.java index 71dbcea..67db1df 100644 --- a/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/vo/UserVipVo.java +++ b/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/vo/UserVipVo.java @@ -1,16 +1,12 @@ package com.bnyer.img.api.vo; -import com.baomidou.mybatisplus.annotation.TableField; -import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; -import javax.validation.constraints.NotBlank; import java.io.Serializable; import java.math.BigDecimal; -import java.util.Date; @Getter @@ -21,15 +17,15 @@ public class UserVipVo implements Serializable { @ApiModelProperty(value="主键Id") private Long id; + @ApiModelProperty(value="vip类型id") + private Long vipTypeId; + @ApiModelProperty(value="vip编码") private String vipCode; @ApiModelProperty(value="vip名称") private String vipName; - @ApiModelProperty(value = "vip类型:下图:0(月卡) 1(季卡) 2(年卡) ") - private String vipType; - @ApiModelProperty(value="原价") private BigDecimal originPrice; @@ -48,25 +44,20 @@ public class UserVipVo implements Serializable { @ApiModelProperty(value="是否到期自动续费(0>否;1->是)") private String isDelay; - @ApiModelProperty(value="时长天数") - private Integer days; - - @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; - @ApiModelProperty(value = "分类:下图会员、视频会员、ai会员") - private String categoryCode; + @ApiModelProperty(value = "有效时长单位:0天,1周,2月,3季,4年") + private Integer validTimeUnit; + + @ApiModelProperty(value = "有效时长:表示几天、几周、几月、几年") + private Integer validTimeNum; + + @ApiModelProperty(value = "会员类型编码") + private String vipTypeCode; - @ApiModelProperty(value = "分类名称") - private String categoryName; + @ApiModelProperty(value = "会员类型名称") + private String vipTypeName; private static final long serialVersionUID = 1L; } diff --git a/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/vo/VipOrderVo.java b/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/vo/VipOrderVo.java index 5c9c0aa..e13fb7c 100644 --- a/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/vo/VipOrderVo.java +++ b/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/vo/VipOrderVo.java @@ -20,9 +20,18 @@ import java.util.Date; @NoArgsConstructor public class VipOrderVo { + @ApiModelProperty(value="主键") + private Long id; + + @ApiModelProperty(value="订单id") + private String orderId; + @ApiModelProperty(value="手机号") private String phone; + @ApiModelProperty(value="用户id") + private Long userId; + @ApiModelProperty(value="vip表id") private Long vipId; @@ -43,9 +52,6 @@ public class VipOrderVo { @ApiModelProperty(value = "用户客户端类型:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信") private Integer userClientType; - @ApiModelProperty(value="热门描述") - private String hotSignDesc; - @ApiModelProperty(value="是否到期自动续费(0>否;1->是)") private String isDelay; @@ -55,9 +61,6 @@ public class VipOrderVo { @ApiModelProperty(value="支付金额") private BigDecimal payAmount; - @ApiModelProperty(value = "分类名称") - private String categoryName; - @ApiModelProperty(value = "vip类型名称") private String vipTypeName; diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/annotation/CustomParamsValidation.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/annotation/CustomParamsValidation.java new file mode 100644 index 0000000..861c600 --- /dev/null +++ b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/annotation/CustomParamsValidation.java @@ -0,0 +1,351 @@ +package com.bnyer.common.core.annotation; + + +import org.apache.commons.lang3.StringUtils; + +import javax.validation.Constraint; +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import javax.validation.Payload; +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static java.lang.annotation.ElementType.*; + +/** + * @author :WXC + * @Date :2023/04/11 + * @description : + */ +@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Constraint(validatedBy = { CustomParamsValidation.CustomParamsValidationImpl.class }) +public @interface CustomParamsValidation { + + /** + * 预定义的正则表达式 + */ + class Regexp{ + /** + * 常规输入框:匹配中文,字母,数字 + */ + private final static String INPUTTXT="^[A-Za-z0-9\u4e00-\u9fa5]*$"; + + /** + * 昵称匹配:匹配中文,字母,数字 下划线 + */ + private final static String NICKNAME="^[A-Za-z0-9_\u4e00-\u9fa5]*$"; + + /**********以上public 的正则提供 regexp 属性使用**********/ + + /**********以下private 的正则提供 paramType 计算**********/ + /** + * 匹配邮箱 + */ + private final static String EMAIL="^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$"; + /** + * uuid + * 格式 + * {8}-{4}-{4}-{4}-{12} + * 如 + * 4cbd6c8b-1111-45f4-b477-a524707aedfd + */ + private static final String UUID="^[a-z0-9]{8}(-[a-z0-9]{4}){3}-[a-z0-9]{12}$"; + /** + * yyyy-MM-dd + */ + private static final String DATE = "^[1-9][0-9]{3}-((01|03|05|07|08|10|12)-(0[1-9]|[1-2][0-9]|30|31)|(04|06|09|11)-(0[1-9]|[1-2][0-9]|30)|(02)-(0[1-9]|1[0-9]|2[0-9]))$"; + /** + * yyyyMMdd + */ + private static final String DATE2 = "^[1-9][0-9]{3}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|30|31)|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|(02)(0[1-9]|1[0-9]|2[0-9]))$"; + /** + * yyyy-MM-dd HH:mm:ss + */ + private static final String DATETIME = "^[1-9][0-9]{3}-((01|03|05|07|08|10|12)-(0[1-9]|[1-2][0-9]|30|31)|(04|06|09|11)-(0[1-9]|[1-2][0-9]|30)|(02)-(0[1-9]|1[0-9]|2[0-9])) ([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$"; + /** + * yyyyMMddHHmmss + */ + private static final String DATETIME2 = "^[1-9][0-9]{3}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|30|31)|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|(02)(0[1-9]|1[0-9]|2[0-9]))([01][0-9]|2[0-3])([0-5][0-9])([0-5][0-9])$"; + /** + * yyyy-MM-dd HH:mm + */ + private static final String DATETIME3 = "^[1-9][0-9]{3}-((01|03|05|07|08|10|12)-(0[1-9]|[1-2][0-9]|30|31)|(04|06|09|11)-(0[1-9]|[1-2][0-9]|30)|(02)-(0[1-9]|1[0-9]|2[0-9])) ([01][0-9]|2[0-3]):([0-5][0-9])$"; + + /** + * HH:mm:ss + */ + private static final String TIME = "^([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$"; + /** + * HHmmss + */ + private static final String TIME2 = "^([01][0-9]|2[0-3])([0-5][0-9])([0-5][0-9])$"; + + /** + * 手机号码 + */ + private static final String MOBILEPHONE="^1\\d{10}$"; + + /** + * 匹配IPV4地址 + */ + private final static String IPV4="((25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))"; + //=============可以在此扩展正则============= + + + /** + * 校验正则 + * @param regexp + * @param value + * @return + */ + public static boolean validateRegexp(String regexp,String value){ + Pattern pattern = Pattern.compile(regexp); + Matcher matcher = pattern.matcher(value); + return matcher.matches(); + } + } + + + /** + * 预定义的参数类型 + */ + class ParamType { + //匹配IPV4地址 + public static final String IPV4 = "ipv4"; + /** + * uuid + */ + public static final String UUID="uuid"; + /** + * 匹配中文 + */ + public static final String INPUTTXT="inputtxt"; + /** + * 匹配中文英文数字下划线 + */ + public static final String NICKNAME="nickname"; + + /** + * 匹配邮箱 + */ + public static final String EMAIL="email"; + + /** + * 手机号码 + */ + public static final String MOBILEPHONE="mobilephone"; + + /** + * yyyy-MM-dd + */ + public static final String DATE = "yyyy-MM-dd"; + /** + * yyyyMMdd + */ + public static final String DATE2 = "yyyyMMdd"; + /** + * yyyy-MM-dd HH:mm:ss + */ + public static final String DATETIME = "yyyy-MM-dd HH:mm:ss"; + /** + * yyyyMMddHHmmss + */ + public static final String DATETIME2 = "yyyyMMddHHmmss"; + /** + * yyyy-MM-dd HH:mm + */ + public static final String DATETIME3 = "yyyy-MM-dd HH:mm"; + + /** + * HH:mm:ss + */ + public static final String TIME = "HH:mm:ss"; + /** + * HHmmss + */ + public static final String TIME2 = "HHmmss"; + /** + * 参数类型校验 + * + * @param paramType + * @param value + * @return + */ + public static boolean validateParamType(String paramType, String value) { + boolean flag = false; + + switch (paramType) { + case ParamType.IPV4: + value = value.replaceAll(" ",""); + flag = Regexp.validateRegexp(Regexp.IPV4, value); + break; + case ParamType.MOBILEPHONE: flag = Regexp.validateRegexp(Regexp.MOBILEPHONE, value);break; + case ParamType.NICKNAME: flag = Regexp.validateRegexp(Regexp.NICKNAME, value);break; + case ParamType.EMAIL: flag = Regexp.validateRegexp(Regexp.EMAIL, value);break; + case ParamType.UUID : flag = Regexp.validateRegexp(Regexp.UUID, value);break; + case ParamType.INPUTTXT : flag = Regexp.validateRegexp(Regexp.INPUTTXT, value);break; + case ParamType.DATE : flag = validateDateParamType(ParamType.DATE, value);break; + case ParamType.DATE2 : flag = validateDateParamType(ParamType.DATE2, value);break; + case ParamType.DATETIME : flag = validateDateParamType(ParamType.DATETIME, value);break; + case ParamType.DATETIME2 : flag = validateDateParamType(ParamType.DATETIME2, value);break; + case ParamType.DATETIME3 : flag = validateDateParamType(ParamType.DATETIME3, value);break; + case ParamType.TIME : flag = validateDateParamType(ParamType.TIME, value);break; + case ParamType.TIME2 : flag = validateDateParamType(ParamType.TIME2, value);break; + } + return flag; + } + + /** + * dateFormat 属性配置,配置的值 不是内置值,验证无法通过 + * @param dateFormat + * @param value + * @return + */ + private static boolean validateDateParamType(String dateFormat,String value){ + String regexp = null; + + if(DATE.equals(dateFormat)){ + regexp = Regexp.DATE; + }else if(DATE2.equals(dateFormat)){ + regexp = Regexp.DATE2; + }else if(DATETIME.equals(dateFormat)){ + regexp = Regexp.DATETIME; + }else if(DATETIME2.equals(dateFormat)){ + regexp = Regexp.DATETIME2; + }else if(DATETIME3.equals(dateFormat)){ + regexp = Regexp.DATETIME3; + }else if(TIME.equals(dateFormat)){ + regexp = Regexp.TIME; + }else if(TIME2.equals(dateFormat)){ + regexp = Regexp.TIME2; + } + + if(regexp!=null){ + boolean flag = Regexp.validateRegexp(regexp, value); + //时间不用做2月29日瑞年判断 + if(TIME.equals(dateFormat) || TIME2.equals(dateFormat)){ + return flag; + } + if(flag){ + //月份和日期部分 + String monthAndDay = ""; + //2月29日常量 + String monthAndDayConstant = ""; + Integer year = null; + switch (dateFormat) { + case DATE: + case DATETIME: + case DATETIME3: + monthAndDay = StringUtils.substring(value, 5, 10); + monthAndDayConstant = "02-29"; + year = Integer.valueOf(StringUtils.substring(value, 0, 4)); + break; + case DATE2: + case DATETIME2: + monthAndDay = StringUtils.substring(value, 4, 8); + monthAndDayConstant = "0229"; + year = Integer.valueOf(StringUtils.substring(value, 0, 4)); + break; + } + //2月29日判断是否是润年,非润年没有2月29日 + if(monthAndDay.equals(monthAndDayConstant)){ + if(!isLeapYear(year)){ + flag = false; + } + } + } + return flag; + } + + return false; + } + + /** + * 判断是否是润年 + * @param year + * @return + */ + private static boolean isLeapYear(int year){ + return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0); + } + } + + + /** + * 预定义Range + * + */ + class Range{ + private static boolean contains(String range,String value){ + boolean flag = false; + if(StringUtils.isEmpty(value)){ + return false; + } + if(StringUtils.isNotEmpty(range)){ + String[] arr = range.split("\\|"); + for (String string : arr) { + if(value.equals(string)){ + flag = true; + break; + } + } + } + return flag; + } + } + + + /** + * 参数类型,最优先推荐使用的属性 + * @return + */ + String paramType() default ""; + + /** + * 限制字符串或者数字 可选项,用 | 分割 ,如 00|10|20 + * @return + */ + String range() default ""; + + String message() default "参数基本校验不通过错误:注意格式及长度"; + + Class[]groups() default {}; + + Class[]payload() default {}; + + class CustomParamsValidationImpl implements ConstraintValidator { + + String paramType; + + String range; + + + @Override + public void initialize(CustomParamsValidation constraintAnnotation) { + paramType = constraintAnnotation.paramType(); + range = constraintAnnotation.range(); + } + + @Override + public boolean isValid(String value, ConstraintValidatorContext context) { + if(StringUtils.isNotEmpty(value)){ + //根据参数类型校验正则 + if(StringUtils.isNotEmpty(paramType)){ + return ParamType.validateParamType(paramType, value); + } + //校验参数范围 + if (StringUtils.isNotEmpty(range)){ + return Range.contains(range, value); + } + } + return true; + } + } + +} diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/annotation/DiyParamsValidation.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/annotation/DiyParamsValidation.java deleted file mode 100644 index 403d7b5..0000000 --- a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/annotation/DiyParamsValidation.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.bnyer.common.core.annotation; - -import org.apache.commons.lang3.StringUtils; - -import java.lang.annotation.Documented; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -import static java.lang.annotation.ElementType.*; - -/** - * @author :WXC - * @Date :2023/03/31 - * @description : 自定义参数校验注解 - */ -@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) -@Retention(RetentionPolicy.RUNTIME) -@Documented -public @interface DiyParamsValidation { - - /** - * 限制字符串或者数字 可选项,用 | 分割 ,如 00|10|20 - * @return - */ - String range() default ""; - - - /** - * 预定义Range - * - */ - public static class Range{ - /** - * 参数只能是00,20 - */ - public static final String STATE_D_E="00|20"; - /** - * 参数只能是00,10,20 - */ - public static final String STATE_ALL="00|10|20"; - /** - * 参数只能是desc,asc - */ - public static final String SORT_DIRECTION="desc|asc"; - - private static boolean contains(String range,String value){ - boolean flag = false; - if(StringUtils.isEmpty(value)){ - return false; - } - if(StringUtils.isNotEmpty(range)){ - String[] arr = range.split("\\|"); - for (String string : arr) { - if(value.equals(string)){ - flag = true; - break; - } - } - } - return flag; - } - } - - - String message() default "参数基本校验不通过错误:注意格式及长度"; -} diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/UserVip.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/UserVip.java index 41ff218..15906c7 100644 --- a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/UserVip.java +++ b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/domain/UserVip.java @@ -21,10 +21,17 @@ public class UserVip extends BaseDomain { /** * 主键Id */ - @TableId(value = "id", type = IdType.AUTO) + @TableId(value = "id", type = IdType.ASSIGN_ID) @ApiModelProperty(value="主键Id") private Long id; + /** + * vip类型id + */ + @TableField(value = "vip_type_id") + @ApiModelProperty(value="vip类型id") + private Long vipTypeId; + /** * vip名称 */ @@ -39,13 +46,6 @@ public class UserVip extends BaseDomain { @ApiModelProperty(value="vip编码") private String vipCode; - /** - * vip类型 - */ - @TableField(value = "vip_type") - @ApiModelProperty(value = "vip类型:下图:0(月卡) 1(季卡) 2(年卡) 视频:ai:") - private String vipType; - /** * 原价 */ @@ -74,13 +74,6 @@ public class UserVip extends BaseDomain { @ApiModelProperty(value="热门描述") private String hotSignDesc; - /** - * 时长天数 - */ - @TableField(value = "days") - @ApiModelProperty(value="时长天数") - private Integer days; - /** * 是否到期自动续费(0>否;1->是) */ @@ -89,19 +82,18 @@ public class UserVip extends BaseDomain { private String isDelay; /** - * 用户客户端类型:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信 + * 有效时长单位:0天,1周,2月,3季,4年 */ - @TableField(value = "user_client_type") - @ApiModelProperty(value="vip客户端类型:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信") - private Integer userClientType; + @TableField(value = "valid_time_unit") + @ApiModelProperty(value = "有效时长单位:0天,1周,2月,3季,4年") + private Integer validTimeUnit; - @TableField(value = "category_code") - @ApiModelProperty(value = "分类:下图会员、视频会员、ai会员") - private String categoryCode; - - @TableField(value = "category_name") - @ApiModelProperty(value = "分类名称") - private String categoryName; + /** + * 有效时长:表示几天、几周、几月、几年 + */ + @TableField(value = "valid_time_num") + @ApiModelProperty(value = "有效时长:表示几天、几周、几月、几年") + private Integer validTimeNum; private static final long serialVersionUID = 1L; } \ No newline at end of file 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 68be9da..e68c242 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 @@ -23,7 +23,7 @@ public class UserVipRecord extends BaseDomain { /** * 主键id */ - @TableId(value = "id", type = IdType.AUTO) + @TableId(value = "id", type = IdType.ASSIGN_ID) @ApiModelProperty(value="主键id") private Long id; @@ -64,20 +64,6 @@ public class UserVipRecord extends BaseDomain { @ApiModelProperty(value="到期时间") private Date endTime; - /** - * 支付金额 - */ - @TableField(value = "price") - @ApiModelProperty(value="支付金额") - private BigDecimal price; - - /** - * vip类型 - */ - @TableField(value = "vip_type") - @ApiModelProperty(value="vip类型") - private String vipType; - /** * 支付状态(0->待支付;1->已支付;2->支付失败;3->支付异常) */ @@ -92,13 +78,6 @@ public class UserVipRecord extends BaseDomain { @ApiModelProperty(value="vip名称") private String vipName; - /** - * 分类名称 - */ - @TableField(value = "category_name") - @ApiModelProperty(value = "分类名称") - private String categoryName; - /** * vip类型名称 */ 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 6d5f8c7..5da1a71 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 @@ -33,7 +33,7 @@ public class VipOrder extends BaseDomain { /** * 主键 */ - @TableId(value = "id", type = IdType.AUTO) + @TableId(value = "id", type = IdType.ASSIGN_ID) @ApiModelProperty(value="主键") private Long id; @@ -151,13 +151,6 @@ public class VipOrder extends BaseDomain { @ApiModelProperty(value = "用户客户端类型:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信") private Integer userClientType; - /** - * 分类名称 - */ - @TableField(value = "category_name") - @ApiModelProperty(value = "分类名称") - private String categoryName; - /** * vip类型名称 */ diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/dto/UserVipDto.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/dto/UserVipDto.java index 78584c6..824ccf9 100644 --- a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/dto/UserVipDto.java +++ b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/dto/UserVipDto.java @@ -54,7 +54,7 @@ public class UserVipDto implements Serializable { if(StringUtils.isNotBlank(this.getHotSignDesc())){ userVip.setHotSignDesc(this.getHotSignDesc()); } - userVip.setDays(this.getDays()); +// userVip.setDays(this.getDays()); userVip.setIsDelay(this.getIsDelay()); return userVip; } diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/EnumTimeUnit.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/EnumTimeUnit.java new file mode 100644 index 0000000..c8318d3 --- /dev/null +++ b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/EnumTimeUnit.java @@ -0,0 +1,36 @@ +package com.bnyer.common.core.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * @author :WXC + * @Date :2023/04/23 + * @description :时间单位 + */ +@Getter +@AllArgsConstructor +public enum EnumTimeUnit { + + DAY(0,"天"), + WEEK(1,"周"), + MONTH(2,"月"), + QUARTER(3,"季"), + YEAR(4,"年"), + HOURS(5,"时"), + MINUTE(6,"分"), + SECONDS(7,"秒"), + ; + + private final int unit; + private final String name; + + public static EnumTimeUnit getEnumTimeUnitByUnit(int unit) { + return Arrays.stream(values()) + .filter(vipTimeUnit -> unit == vipTimeUnit.getUnit()) + .findFirst().orElseThrow(() -> new SecurityException("unit 未匹配上对应的时间单位")); + } + +} diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/EnumVipCategory.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/EnumVipType.java similarity index 76% rename from bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/EnumVipCategory.java rename to bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/EnumVipType.java index ac46d56..544a5a8 100644 --- a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/EnumVipCategory.java +++ b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/enums/EnumVipType.java @@ -12,7 +12,7 @@ import java.util.Objects; */ @Getter @AllArgsConstructor -public enum EnumVipCategory { +public enum EnumVipType { IMG_VIP("img","下图会员"), VIDEO_VIP("video","视频会员"), @@ -25,7 +25,7 @@ public enum EnumVipCategory { private final String name; public static String getNameByCode(String code) { - for (EnumVipCategory s : EnumVipCategory.values()) { + for (EnumVipType s : EnumVipType.values()) { if (Objects.equals(code, s.code)) { return s.getName(); } @@ -33,9 +33,9 @@ public enum EnumVipCategory { return null; } - public static EnumVipCategory getVipCategoryByCode(String code) { + public static EnumVipType getVipTypeByCode(String code) { return Arrays.stream(values()) .filter(vipCategory -> Objects.equals(vipCategory.getCode(), code)) - .findFirst().orElse(EnumVipCategory.UNKNOWN); + .findFirst().orElse(EnumVipType.UNKNOWN); } } diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/utils/DateUtils.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/utils/DateUtils.java index cf62174..07b3e37 100644 --- a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/utils/DateUtils.java +++ b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/utils/DateUtils.java @@ -9,6 +9,7 @@ import java.time.temporal.TemporalAdjusters; import java.util.Calendar; import java.util.Date; +import com.bnyer.common.core.enums.EnumTimeUnit; import com.bnyer.common.core.enums.ResponseEnum; import com.bnyer.common.core.exception.ServiceException; import org.apache.commons.lang3.time.DateFormatUtils; @@ -233,53 +234,60 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils /** * 根据时间类型+周期创建时间 - * @param type 时间类型 + * @param unit 时间单位 * @param date 时间 * @param num 周期数 * @return */ - public static Date getDateByType(int type,Date date,long num){ + public static Date getDateByType(EnumTimeUnit unit, Date date, long num){ DateTimeFormatter formatter = DateTimeFormatter.ofPattern(YYYY_MM_DD_HH_MM_SS); Instant instant = date.toInstant(); ZoneId zoneId = ZoneId.systemDefault(); LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime(); String format = ""; - switch (type){ - case 0: + switch (unit){ + case SECONDS: //秒 LocalDateTime secondsDateTime = localDateTime.plusSeconds(num); format = secondsDateTime.format(formatter); break; - case 1: + case MINUTE: //分 LocalDateTime minuteDateTime = localDateTime.plusMinutes(num); format = minuteDateTime.format(formatter); break; - case 2: + case HOURS: //时 LocalDateTime hoursDateTime = localDateTime.plusHours(num); format = hoursDateTime.format(formatter); break; - case 3: + case DAY: //日 LocalDateTime daysDateTime = localDateTime.plusDays(num); format = daysDateTime.format(formatter); break; - case 4: + case MONTH: //月 LocalDateTime monthsDateTime = localDateTime.plusMonths(num); format = monthsDateTime.format(formatter); break; - case 5: + case YEAR: //年 LocalDateTime yearsDateTime = localDateTime.plusYears(num); format = yearsDateTime.format(formatter); break; - case 6: + case WEEK: //周 LocalDateTime weeksDateTime = localDateTime.plusWeeks(num); format = weeksDateTime.format(formatter); break; + case QUARTER: + //季 + int monthValue = localDateTime.getMonthValue(); + int nextQuarterMonth = (monthValue - 1) / 3 * 3 + ((int) num * 4); + LocalDateTime nextQuarterToday = localDateTime.withMonth(nextQuarterMonth); + format = nextQuarterToday.format(formatter); + break; default: throw new IllegalArgumentException("时间类型参数错误"); } @@ -296,7 +304,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils // 下一季度的今天 int currentMonth = now.getMonthValue(); - int nextQuarterMonth = (currentMonth - 1) / 3 * 3 + 4; + int nextQuarterMonth = (currentMonth - 1) / 3 * 3 + (2 * 4); LocalDateTime nextQuarterToday = now.withMonth(nextQuarterMonth); // 下一年的今天 diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/UserVipServiceRecordImpl.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/UserVipServiceRecordImpl.java index 53c580c..8f9b866 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/UserVipServiceRecordImpl.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/UserVipServiceRecordImpl.java @@ -31,53 +31,53 @@ public class UserVipServiceRecordImpl implements UserVipRecordService { @Override public boolean payUserVip(PayUserVipDto param) { - UserVipRecord userVipRecord = new UserVipRecord(); - //生成订单id - userVipRecord.setOrderId(IdUtil.getSnowflakeNextIdStr()); - //获取分布式锁 - RLock lock = redissonService.getRLock(RedisKeyConstant.PAY_USER_VIP_LOCK_KEY + userVipRecord.getOrderId()); - try{ - if(lock.tryLock(500, 10000, TimeUnit.MILLISECONDS)){ - //调用支付 - - //保存订单 - userVipRecord.setCreateTime(new Date()); - userVipRecord.setUpdateTime(new Date()); - userVipRecord.setPrice(new BigDecimal(param.getPrice())); - userVipRecord.setStatus(UserVipOrderStatusConstant.UN_PAY); - userVipRecord.setIsShow("1"); - Date startTime = new Date(); - userVipRecord.setStartTime(startTime); -// if(userVipRecord.getType().equals(UserVipTypeConstant.MONTH_CARD)){ -// //计算月卡(30天)的结束时间 -// userVipRecord.setEndTime(DateUtils.getDateAfter(startTime, 30)); -// }else if(userVipRecord.getType().equals(UserVipTypeConstant.SEASON_CARD)){ -// //结算季卡(90天)的结束时间 -// userVipRecord.setEndTime(DateUtils.getDateAfter(startTime, 90)); -// }else{ -// //计算年卡(365天)的结束时间 -// userVipRecord.setEndTime(DateUtils.getDateAfter(startTime, 365)); -// } - }else{ - userVipRecord.setStatus(UserVipOrderStatusConstant.PAY_EXCEPTION); - log.error("用户会员vip支付异常,锁被占用!"); - throw new ServiceException("系统繁忙,请稍候重试!"); - } - }catch (Exception e){ - userVipRecord.setStatus(UserVipOrderStatusConstant.PAY_FAIL); - log.error("用户会员vip支付失败!错误原因为【{}】",e.getMessage()); - throw new ServiceException("系统繁忙,请勿重复操作!"); - }finally { - int insert = userVipRecordMapper.insert(userVipRecord); - if(insert > 0){ - return true; - } - //释放锁 - if(lock.isHeldByCurrentThread()){ - lock.unlock(); - log.info("用户会员vip支付操作执行完毕,释放锁成功!"); - } - } +// UserVipRecord userVipRecord = new UserVipRecord(); +// //生成订单id +// userVipRecord.setOrderId(IdUtil.getSnowflakeNextIdStr()); +// //获取分布式锁 +// RLock lock = redissonService.getRLock(RedisKeyConstant.PAY_USER_VIP_LOCK_KEY + userVipRecord.getOrderId()); +// try{ +// if(lock.tryLock(500, 10000, TimeUnit.MILLISECONDS)){ +// //调用支付 +// +// //保存订单 +// userVipRecord.setCreateTime(new Date()); +// userVipRecord.setUpdateTime(new Date()); +// userVipRecord.setPrice(new BigDecimal(param.getPrice())); +// userVipRecord.setStatus(UserVipOrderStatusConstant.UN_PAY); +// userVipRecord.setIsShow("1"); +// Date startTime = new Date(); +// userVipRecord.setStartTime(startTime); +//// if(userVipRecord.getType().equals(UserVipTypeConstant.MONTH_CARD)){ +//// //计算月卡(30天)的结束时间 +//// userVipRecord.setEndTime(DateUtils.getDateAfter(startTime, 30)); +//// }else if(userVipRecord.getType().equals(UserVipTypeConstant.SEASON_CARD)){ +//// //结算季卡(90天)的结束时间 +//// userVipRecord.setEndTime(DateUtils.getDateAfter(startTime, 90)); +//// }else{ +//// //计算年卡(365天)的结束时间 +//// userVipRecord.setEndTime(DateUtils.getDateAfter(startTime, 365)); +//// } +// }else{ +// userVipRecord.setStatus(UserVipOrderStatusConstant.PAY_EXCEPTION); +// log.error("用户会员vip支付异常,锁被占用!"); +// throw new ServiceException("系统繁忙,请稍候重试!"); +// } +// }catch (Exception e){ +// userVipRecord.setStatus(UserVipOrderStatusConstant.PAY_FAIL); +// log.error("用户会员vip支付失败!错误原因为【{}】",e.getMessage()); +// throw new ServiceException("系统繁忙,请勿重复操作!"); +// }finally { +// int insert = userVipRecordMapper.insert(userVipRecord); +// if(insert > 0){ +// return true; +// } +// //释放锁 +// if(lock.isHeldByCurrentThread()){ +// lock.unlock(); +// log.info("用户会员vip支付操作执行完毕,释放锁成功!"); +// } +// } return false; } } diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/UserVipVo.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/UserVipVo.java index 69ffd22..638b2d4 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/UserVipVo.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/UserVipVo.java @@ -18,6 +18,9 @@ public class UserVipVo implements Serializable { @ApiModelProperty(value="主键Id") private Long id; + @ApiModelProperty(value="vip类型id") + private Long vipTypeId; + @ApiModelProperty(value="vip编码") private String vipCode; @@ -45,17 +48,20 @@ public class UserVipVo implements Serializable { @ApiModelProperty(value="是否到期自动续费(0>否;1->是)") private String isDelay; - @ApiModelProperty(value="时长天数") - private Integer days; - @ApiModelProperty(value = "用户客户端类型:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信") private Integer userClientType; - @ApiModelProperty(value = "分类:下图会员、视频会员、ai会员") - private String categoryCode; + @ApiModelProperty(value = "有效时长单位:0天,1周,2月,3季,4年") + private Integer validTimeUnit; + + @ApiModelProperty(value = "有效时长:表示几天、几周、几月、几年") + private Integer validTimeNum; + + @ApiModelProperty(value = "会员类型编码") + private String vipTypeCode; - @ApiModelProperty(value = "分类名称") - private String categoryName; + @ApiModelProperty(value = "会员类型名称") + private String vipTypeName; private static final long serialVersionUID = 1L; } diff --git a/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/UserVipMapper.xml b/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/UserVipMapper.xml index 586e741..26c8868 100644 --- a/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/UserVipMapper.xml +++ b/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/UserVipMapper.xml @@ -6,53 +6,50 @@ + - + - + + - - - v.id, v.vip_name, v.vip_code, - v.vip_type, + v.vip_type_id, v.origin_price, v.price, v.description, v.hot_sign_desc, - v.`days`, + v.valid_time_unit, + v.valid_time_num, v.is_delay, v.is_show, v.create_time, v.update_time, - v.sort, - v.user_client_type, - v.category_code, - v.category_name + v.sort \ No newline at end of file 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 50c8fee..87ed589 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 @@ -10,10 +10,8 @@ - - @@ -22,7 +20,7 @@ - id,order_id, phone,price,vip_name,vip_type_name,category_name,status, vip_id, start_time, end_time,type, is_show, create_time, update_time, + id,order_id, phone,vip_name,vip_type_name,status, vip_id, start_time, end_time, is_show, create_time, update_time, sort diff --git a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/dto/AddVipOrderDto.java b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/dto/AddVipOrderDto.java index 2bbcf43..d253ed7 100644 --- a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/dto/AddVipOrderDto.java +++ b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/dto/AddVipOrderDto.java @@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import org.hibernate.validator.constraints.Range; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; @@ -27,9 +28,9 @@ public class AddVipOrderDto implements Serializable { @ApiModelProperty(value="vip表id") private Long vipId; -// @NotBlank(message = "用户客户端类型不能为空!") -// @Range(min = 10,max = 40,message = "用户客户端类型只能包含:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信") -// @ApiModelProperty(value="用户客户端类型:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信") -// private Integer userClientType; + @NotBlank(message = "用户客户端类型不能为空!") + @Range(min = 10,max = 40,message = "用户客户端类型只能包含:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信") + @ApiModelProperty(value="用户客户端类型:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信") + private Integer userClientType; } diff --git a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/enums/EnumVipType.java b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/enums/EnumVipType.java index 3b90bf7..559ff0b 100644 --- a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/enums/EnumVipType.java +++ b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/enums/EnumVipType.java @@ -1,6 +1,5 @@ package com.bnyer.order.enums; -import com.bnyer.common.core.enums.EnumVipCategory; import lombok.AllArgsConstructor; import lombok.Getter; @@ -14,9 +13,9 @@ import lombok.Getter; public enum EnumVipType { //========================下图会员=================== - MONTH_CARD("0","月卡",EnumVipCategory.IMG_VIP), - SEASON_CARD("1","季卡",EnumVipCategory.IMG_VIP), - YEAR_CARD("2","年卡",EnumVipCategory.IMG_VIP), + MONTH_CARD("0","月卡", com.bnyer.common.core.enums.EnumVipType.IMG_VIP), + SEASON_CARD("1","季卡", com.bnyer.common.core.enums.EnumVipType.IMG_VIP), + YEAR_CARD("2","年卡", com.bnyer.common.core.enums.EnumVipType.IMG_VIP), //========================视频会员(待扩展)=================== @@ -29,10 +28,10 @@ public enum EnumVipType { private final String typeName; - private final EnumVipCategory enumVipCategory; + private final com.bnyer.common.core.enums.EnumVipType enumVipType; public static String getNameByTypeCode(String typeCode) { - for (EnumVipType s : EnumVipType.values()) { + for (EnumVipType s : com.bnyer.order.enums.EnumVipType.values()) { if (typeCode.equals(s.getTypeCode())) { return s.getTypeName(); } @@ -41,9 +40,9 @@ public enum EnumVipType { } public static String getCategoryByTypeCode(String typeCode){ - for (EnumVipType s : EnumVipType.values()) { + for (EnumVipType s : com.bnyer.order.enums.EnumVipType.values()) { if (typeCode.equals(s.getTypeCode())) { - return s.getEnumVipCategory().getCode(); + return s.getEnumVipType().getCode(); } } return null; 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 14799f8..66a3b31 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 @@ -76,7 +76,6 @@ public class VipOrderPayNotifyConsumer implements RocketMQListener { jsonObject.put("vipId",vipOrder.getVipId()); jsonObject.put("vipName",vipOrder.getVipName()); jsonObject.put("vipTypeName",vipOrder.getVipTypeName()); - jsonObject.put("categoryName",vipOrder.getCategoryName()); jsonObject.put("phone",vipOrder.getPhone()); jsonObject.put("userId",vipOrder.getUserId()); return JSON.toJSONString(jsonObject); diff --git a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/impl/VipOrderServiceImpl.java b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/impl/VipOrderServiceImpl.java index 5596d1b..acb7e9c 100644 --- a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/impl/VipOrderServiceImpl.java +++ b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/service/impl/VipOrderServiceImpl.java @@ -8,7 +8,7 @@ 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.EnumVipCategory; +import com.bnyer.common.core.enums.EnumVipType; import com.bnyer.common.core.enums.ResponseEnum; import com.bnyer.common.core.exception.ServiceException; import com.bnyer.common.core.utils.DateUtils; @@ -22,7 +22,7 @@ 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.order.enums.EnumVipType; +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; @@ -113,8 +113,8 @@ public class VipOrderServiceImpl extends ServiceImpl i } UserVipVo userVipVo = userVipVoList.get(0); VipOrder vipOrder = null; - EnumVipCategory enumVipCategory = EnumVipCategory.getVipCategoryByCode(userVipVo.getCategoryCode()); - switch (enumVipCategory){ + EnumVipType enumVipType = EnumVipType.getVipTypeByCode(userVipVo.getVipTypeCode()); + switch (enumVipType){ case IMG_VIP: vipOrder = buildImgVipOrder(userVipVo,addVipOrderDto); break; @@ -139,17 +139,21 @@ public class VipOrderServiceImpl extends ServiceImpl i VipOrder vipOrder = EntityConvertUtil.copy(userVipVo, VipOrder.class); vipOrder.setPhone(addVipOrderDto.getPhone()); vipOrder.setVipId(addVipOrderDto.getVipId()); + vipOrder.setVipName(userVipVo.getVipName()); + vipOrder.setVipTypeName(userVipVo.getVipTypeName()); vipOrder.setPayAmount(userVipVo.getPrice()); - vipOrder.setCategoryName(EnumVipCategory.getNameByCode(userVipVo.getCategoryCode())); - vipOrder.setVipTypeName(EnumVipType.getNameByTypeCode(userVipVo.getVipType())); - vipOrder.setIsDelay("0"); + vipOrder.setVipTypeName(userVipVo.getVipTypeName()); + vipOrder.setUserId(userId); +// vipOrder.setIsDelay("0"); Date nowDate = new Date(); vipOrder.setStartTime(nowDate); + EnumTimeUnit enumTimeUnitByUnit = EnumTimeUnit.getEnumTimeUnitByUnit(userVipVo.getValidTimeUnit()); //计算会员结束时间 - vipOrder.setEndTime(DateUtils.getNextDateByType(Integer.parseInt(userVipVo.getVipType()), nowDate)); + vipOrder.setEndTime(DateUtils.getDateByType(enumTimeUnitByUnit,nowDate,userVipVo.getValidTimeNum())); //开通的天数 vipOrder.setDays((int) DateUtil.betweenDay(vipOrder.getStartTime(), vipOrder.getEndTime(), true)); - vipOrder.setOrderId(OrderUtil.getOrderId("RV",nowDate, EnumUserClientType.getCodeByType(userVipVo.getUserClientType()),String.valueOf(userId))); + vipOrder.setUserClientType(addVipOrderDto.getUserClientType()); + vipOrder.setOrderId(OrderUtil.getOrderId("RV",nowDate, EnumUserClientType.getCodeByType(addVipOrderDto.getUserClientType()),String.valueOf(userId))); vipOrder.setCreateTime(nowDate); return vipOrder; } diff --git a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/vo/VipOrderVo.java b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/vo/VipOrderVo.java index d38e135..3c436b3 100644 --- a/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/vo/VipOrderVo.java +++ b/bnyer-services/bnyer-order/src/main/java/com/bnyer/order/vo/VipOrderVo.java @@ -1,5 +1,7 @@ package com.bnyer.order.vo; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; @@ -19,9 +21,18 @@ import java.util.Date; @NoArgsConstructor public class VipOrderVo { + @ApiModelProperty(value="主键") + private Long id; + + @ApiModelProperty(value="订单id") + private String orderId; + @ApiModelProperty(value="手机号") private String phone; + @ApiModelProperty(value="用户id") + private Long userId; + @ApiModelProperty(value="vip表id") private Long vipId; @@ -42,9 +53,6 @@ public class VipOrderVo { @ApiModelProperty(value = "用户客户端类型:10用户-抖音 20用户-快手 30用户-微信 40艺术家-微信") private Integer userClientType; - @ApiModelProperty(value="热门描述") - private String hotSignDesc; - @ApiModelProperty(value="是否到期自动续费(0>否;1->是)") private String isDelay; @@ -54,9 +62,6 @@ public class VipOrderVo { @ApiModelProperty(value="支付金额") private BigDecimal payAmount; - @ApiModelProperty(value = "分类名称") - private String categoryName; - @ApiModelProperty(value = "vip类型名称") private String vipTypeName; 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 424e057..b6c3038 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,7 +15,6 @@ - @@ -43,7 +42,6 @@ o.is_delay, o.`days`, o.vip_type_name, - o.category_name, o.start_time, o.end_time, o.order_status, diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AbstractPayStrategy.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AbstractPayStrategy.java index 080d16d..b6ac5aa 100644 --- a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AbstractPayStrategy.java +++ b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AbstractPayStrategy.java @@ -24,16 +24,6 @@ public abstract class AbstractPayStrategy implements IPayStrategy { @Resource private PayInfoMapper payInfoMapper; - public T payNotify(Object o,Class tClass,EnumPayType payType){ - String string = ""; - if (EnumPayType.ALI_PAY == payType){ - string = o.toString(); - }else if (EnumPayType.WX_PAY == payType){ - - } - return JSON.parseObject(string,tClass); - } - /** * 校验是否已支付避免重复调用 * @param checkDto @@ -52,7 +42,7 @@ public abstract class AbstractPayStrategy implements IPayStrategy { String notifyPayAmount = checkDto.getPayAmount(); //对账状态 Integer singleStatus = payInfo.getSingleStatus(); - log.info("回调中的金额:{},订单中的金额:{}",payInfoPayAmount,notifyPayAmount); + log.info("回调中的金额:{},订单中的金额:{}",notifyPayAmount,payInfoPayAmount); if (payInfoPayAmount.equals(notifyPayAmount)){ if (Objects.nonNull(singleStatus)){ resultMsg = buildNotifyCheckResultMsg(checkDto.getPayType(),true,"OK"); diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AliPayStrategy.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AliPayStrategy.java index b049aaa..6adaa4c 100644 --- a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AliPayStrategy.java +++ b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/design/strategy/AliPayStrategy.java @@ -15,6 +15,7 @@ import com.alipay.api.response.AlipayTradeAppPayResponse; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.bnyer.common.core.domain.AlipayConfig; import com.bnyer.common.core.enums.EnumPayType; +import com.bnyer.common.core.enums.EnumTimeUnit; import com.bnyer.common.core.enums.ResponseEnum; import com.bnyer.common.core.exception.ServiceException; import com.bnyer.common.core.utils.DateUtils; @@ -75,7 +76,7 @@ public class AliPayStrategy extends AbstractPayStrategy { model.setBody(dto.getGoodsDesc()); model.setOutTradeNo(dto.getOrderId()); //直接固定好过期时间比较好 - model.setTimeExpire(DateUtil.formatDateTime(DateUtils.getDateByType(1,dto.getCurrDate(),30))); + model.setTimeExpire(DateUtil.formatDateTime(DateUtils.getDateByType(EnumTimeUnit.MINUTE,dto.getCurrDate(),30))); // model.setTimeoutExpress(AliPayConstant.timeoutExpress); //元 model.setTotalAmount(dto.getPayAmount()); diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/AddPayInfoDto.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/AddPayInfoDto.java index ad4c6fa..2bbdf5e 100644 --- a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/AddPayInfoDto.java +++ b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/AddPayInfoDto.java @@ -1,6 +1,6 @@ package com.bnyer.pay.dto; -import com.bnyer.common.core.annotation.DiyParamsValidation; +import com.bnyer.common.core.annotation.CustomParamsValidation; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.NoArgsConstructor; @@ -31,7 +31,7 @@ public class AddPayInfoDto { private String payType; @ApiModelProperty(value="交易类型 1--JSAPI支付(小程序appId支付)、2--Native支付、3--app支付,4--JSAPI支付(公众号appId支付)5--H5支付,微信支付必填",example = "1") - @DiyParamsValidation(range = "1",message = "交易类型暂时只支持JSAPI") + @CustomParamsValidation(range = "1",message = "交易类型暂时只支持JSAPI") private String tradeType; @ApiModelProperty(value="备注") diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/AliPayInOrderDto.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/AliPayInOrderDto.java deleted file mode 100644 index fc41e48..0000000 --- a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/AliPayInOrderDto.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.bnyer.pay.dto; - -import com.bnyer.common.core.annotation.DiyParamsValidation; -import io.swagger.annotations.ApiModelProperty; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -import javax.validation.constraints.NotBlank; - -/** - * @author :WXC - * @Date :2023/04/03 - * @description : - */ -@Getter -@Setter -@NoArgsConstructor -public class AliPayInOrderDto { - @ApiModelProperty(value="orderId",example = "1") - @NotBlank(message = "orderId 不能为空") - private String orderId; - - @ApiModelProperty(value="费用(单位元)",example = "0.01") - @NotBlank(message = "请输入金额(单位元)") - private String payAmount; - - @ApiModelProperty(value="用户ip",example = "127.0.0.1") - @NotBlank(message = "请输入终端IP") - private String ip; - - @ApiModelProperty(value="商品标题",example = "商品标题") - @NotBlank(message = "请输入支付标题") - private String goodsSubject; - - @ApiModelProperty(value="商品描述",example = "商品描述") - @NotBlank(message = "请输入支付描述") - private String goodsDesc; -} diff --git a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/WxPayInOrderDto.java b/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/WxPayInOrderDto.java deleted file mode 100644 index 245f39e..0000000 --- a/bnyer-services/bnyer-pay/src/main/java/com/bnyer/pay/dto/WxPayInOrderDto.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.bnyer.pay.dto; - -import com.bnyer.common.core.annotation.DiyParamsValidation; -import io.swagger.annotations.ApiModelProperty; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -import javax.validation.constraints.NotBlank; - -/** - * @author :WXC - * @Date :2023/04/05 - * @description : - */ -@Getter -@Setter -@NoArgsConstructor -public class WxPayInOrderDto { - - @ApiModelProperty(value="orderId",example = "1") - @NotBlank - private String orderId; - - @ApiModelProperty(value="timestamp",example = "1111111111") - @NotBlank - private String timestamp; - - @ApiModelProperty(value="费用(单位分)",example = "1") - @NotBlank(message = "请输入金额(单位分)") - private String feeFen; - - @ApiModelProperty(value="商品描述",example = "商品描述") - @NotBlank(message = "请输入支付描述") - private String goodsDesc; - - @ApiModelProperty(value="用户ip",example = "127.0.0.1") - @NotBlank(message = "请输入终端IP") - private String ip; - - @ApiModelProperty(value="交易类型[APP不传,JSAPI必传|MINIPROGRAM],APP|JSAPI|MWEB|MINIPROGRAM",example = "JSAPI") - @DiyParamsValidation(range = "APP|JSAPI|MWEB|MINIPROGRAM",message = "请输入正确的交易类型") - private String tradeType; - - @ApiModelProperty(value="openid[APP不传,JSAPI必传]",example = "12345678") - private String openid; - -}