From dee5eb0518ed48dda39a294d4d1f1077584b0485 Mon Sep 17 00:00:00 2001 From: ChenYan <3139166962@qq.com> Date: Mon, 30 Dec 2024 14:47:34 +0800 Subject: [PATCH] =?UTF-8?q?build:=20=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mcwl-common/pom.xml | 6 +- .../com/mcwl/common/config/QiNiuConfig.java | 41 ++++++++++++++ .../com/mcwl/common/interfaces/MaxMoney.java | 56 +++++++++++++++++++ .../com/mcwl/common/interfaces/MinMoney.java | 54 ++++++++++++++++++ .../mcwl/common/interfaces/ValidPhone.java | 34 +++++++++++ .../com/mcwl/common/utils/OrderCodeUtil.java | 45 +++++++++++++++ .../java/com/mcwl/common/utils/QiNiuUtil.java | 50 +++++++++++++++++ .../valid/MaxMoneyConstraintValidator.java | 29 ++++++++++ .../valid/MinMoneyConstraintValidator.java | 30 ++++++++++ .../com/mcwl/common/valid/PhoneValidator.java | 28 ++++++++++ 10 files changed, 372 insertions(+), 1 deletion(-) create mode 100644 mcwl-common/src/main/java/com/mcwl/common/config/QiNiuConfig.java create mode 100644 mcwl-common/src/main/java/com/mcwl/common/interfaces/MaxMoney.java create mode 100644 mcwl-common/src/main/java/com/mcwl/common/interfaces/MinMoney.java create mode 100644 mcwl-common/src/main/java/com/mcwl/common/interfaces/ValidPhone.java create mode 100644 mcwl-common/src/main/java/com/mcwl/common/utils/OrderCodeUtil.java create mode 100644 mcwl-common/src/main/java/com/mcwl/common/utils/QiNiuUtil.java create mode 100644 mcwl-common/src/main/java/com/mcwl/common/valid/MaxMoneyConstraintValidator.java create mode 100644 mcwl-common/src/main/java/com/mcwl/common/valid/MinMoneyConstraintValidator.java create mode 100644 mcwl-common/src/main/java/com/mcwl/common/valid/PhoneValidator.java diff --git a/mcwl-common/pom.xml b/mcwl-common/pom.xml index e7b8731..b63b0df 100644 --- a/mcwl-common/pom.xml +++ b/mcwl-common/pom.xml @@ -63,7 +63,11 @@ org.apache.commons commons-lang3 - + + com.qiniu + qiniu-java-sdk + 7.4.0 + com.fasterxml.jackson.core diff --git a/mcwl-common/src/main/java/com/mcwl/common/config/QiNiuConfig.java b/mcwl-common/src/main/java/com/mcwl/common/config/QiNiuConfig.java new file mode 100644 index 0000000..8ebed53 --- /dev/null +++ b/mcwl-common/src/main/java/com/mcwl/common/config/QiNiuConfig.java @@ -0,0 +1,41 @@ +package com.mcwl.common.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * 七牛云配置 + * + * @date 2024/5/5 下午5:01 + */ +@Component +@ConfigurationProperties(prefix = "oss.qiniu") +@Data +public class QiNiuConfig { + + /** + * AccessKey + */ + private String accessKey; + /** + * SecretKey + */ + private String secretKey; + /** + * 图片存储空间名 + */ + private String bucketPictureName; + /** + * 图片外链 + */ + private String domainPicture; + /** + * 文件存储空间名 + */ + private String bucketFileName; + /** + * 文件外链 + */ + private String domainFile; +} diff --git a/mcwl-common/src/main/java/com/mcwl/common/interfaces/MaxMoney.java b/mcwl-common/src/main/java/com/mcwl/common/interfaces/MaxMoney.java new file mode 100644 index 0000000..48f7b8d --- /dev/null +++ b/mcwl-common/src/main/java/com/mcwl/common/interfaces/MaxMoney.java @@ -0,0 +1,56 @@ + +package com.mcwl.common.interfaces; +/** + * @author 苏三,该项目是知识星球:java突击队 的内部项目 + * @date 2024/6/11 下午4:12 + */ + + + +import com.mcwl.common.valid.MaxMoneyConstraintValidator; + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 最大值约束. + * + * @author 苏三,该项目是知识星球:java突击队 的内部项目 + * @date 2024/6/11 下午4:13 + */ +@Target({ElementType.METHOD, ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Constraint(validatedBy = MaxMoneyConstraintValidator.class) +public @interface MaxMoney { + /** + * message. + * + * @return + */ + String message() default "{minMoney.message.error}"; + + /** + * max value. + * + * @return + */ + double value() default 0; + + /** + * group. + * + * @return + */ + Class[] groups() default {}; + + /** + * payload. + * + * @return + */ + Class[] payload() default {}; +} diff --git a/mcwl-common/src/main/java/com/mcwl/common/interfaces/MinMoney.java b/mcwl-common/src/main/java/com/mcwl/common/interfaces/MinMoney.java new file mode 100644 index 0000000..56fd4d2 --- /dev/null +++ b/mcwl-common/src/main/java/com/mcwl/common/interfaces/MinMoney.java @@ -0,0 +1,54 @@ +package com.mcwl.common.interfaces; + +/** + * @date 2024/6/11 下午4:12 + */ + + +import com.mcwl.common.valid.MinMoneyConstraintValidator; + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 最小值约束. + * + + * @date 2024/6/11 下午4:13 + */ +@Target({ElementType.METHOD, ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Constraint(validatedBy = MinMoneyConstraintValidator.class) +public @interface MinMoney { + /** + * message. + * + * @return + */ + String message() default "{minMoney.message.error}"; + + /** + * min value. + * + * @return + */ + double value() default 0; + + /** + * group. + * + * @return + */ + Class[] groups() default {}; + + /** + * payload. + * + * @return + */ + Class[] payload() default {}; +} diff --git a/mcwl-common/src/main/java/com/mcwl/common/interfaces/ValidPhone.java b/mcwl-common/src/main/java/com/mcwl/common/interfaces/ValidPhone.java new file mode 100644 index 0000000..4afe68e --- /dev/null +++ b/mcwl-common/src/main/java/com/mcwl/common/interfaces/ValidPhone.java @@ -0,0 +1,34 @@ +package com.mcwl.common.interfaces; + +import com.mcwl.common.valid.PhoneValidator; + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.*; + +/** + * @author 苏三 + * @date 2024/9/24 下午3:09 + */ +@Documented +@Constraint(validatedBy = {PhoneValidator.class}) +@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER}) +@Retention(RetentionPolicy.RUNTIME) +public @interface ValidPhone { + /** + * 返回信息 + */ + String message() default "手机号码格式不正确"; + + /** + * 分组 + * @return + */ + Class[] groups() default {}; + + Class[] payload() default {}; +} + + + + diff --git a/mcwl-common/src/main/java/com/mcwl/common/utils/OrderCodeUtil.java b/mcwl-common/src/main/java/com/mcwl/common/utils/OrderCodeUtil.java new file mode 100644 index 0000000..89586aa --- /dev/null +++ b/mcwl-common/src/main/java/com/mcwl/common/utils/OrderCodeUtil.java @@ -0,0 +1,45 @@ +package com.mcwl.common.utils; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Random; + +/** + * 订单编号生成工具 + * + * @date 2024/5/30 下午6:02 + */ +public class OrderCodeUtil { + + public static final int ORDER_CODE_LENGTH = 24; + private static final String ORDER_CODE_DATA_FORMAT = "yyyyMMddHHmmss"; + private static final int ORDER_CODE_RANDOM_NUMBER = 10; + private static final int ORDER_CODE_RANDOM_LENGTH = 6; + + + /** + * 生成订单编号 + * + * @return 订单编号 + */ + public static String generateOrderCode() { + SimpleDateFormat dateFormat = new SimpleDateFormat(ORDER_CODE_DATA_FORMAT); + String random = getRandom(ORDER_CODE_RANDOM_LENGTH); + Date date = new Date(); + String time = dateFormat.format(date); + String code = "XS" + time + random; + while (code.length() < ORDER_CODE_LENGTH) { + code = code + 0; + } + return code; + } + + private static String getRandom(int len) { + Random r = new Random(); + StringBuilder rs = new StringBuilder(); + for (int i = 0; i < len; i++) { + rs.append(r.nextInt(ORDER_CODE_RANDOM_NUMBER)); + } + return rs.toString(); + } +} diff --git a/mcwl-common/src/main/java/com/mcwl/common/utils/QiNiuUtil.java b/mcwl-common/src/main/java/com/mcwl/common/utils/QiNiuUtil.java new file mode 100644 index 0000000..f98571b --- /dev/null +++ b/mcwl-common/src/main/java/com/mcwl/common/utils/QiNiuUtil.java @@ -0,0 +1,50 @@ +package com.mcwl.common.utils; + +import com.qiniu.http.Response; +import com.qiniu.storage.Configuration; +import com.qiniu.storage.Region; +import com.qiniu.storage.UploadManager; +import com.qiniu.storage.model.DefaultPutRet; +import com.qiniu.util.Auth; +import com.google.gson.Gson; +import com.mcwl.common.config.QiNiuConfig; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.io.InputStream; + + +/** + * 七牛云上传工具 + * + * @date 2024/5/5 下午5:02 + */ +@Component +public class QiNiuUtil { + public static final String IMAGE = "image"; + public static final String FILE = "file"; + + @Autowired + private QiNiuConfig qiNiuConfig; + + /** + * 将图片上传到七牛云 + */ + public String upload(InputStream file, String fileType, String fileContextType) throws Exception { + Configuration cfg = new Configuration(Region.region2()); + UploadManager uploadManager = new UploadManager(cfg); + Auth auth = Auth.create(qiNiuConfig.getAccessKey(), qiNiuConfig.getSecretKey()); + String upToken = null; + String path = null; + if (fileType.equals(IMAGE)) { + upToken = auth.uploadToken(qiNiuConfig.getBucketPictureName()); + path = qiNiuConfig.getDomainFile(); + } else if (fileType.equals(FILE)) { + upToken = auth.uploadToken(qiNiuConfig.getBucketFileName()); + path = qiNiuConfig.getDomainFile(); + } + Response response = uploadManager.put(file, null, upToken, null, fileContextType); + DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class); + return path + putRet.key; + } +} diff --git a/mcwl-common/src/main/java/com/mcwl/common/valid/MaxMoneyConstraintValidator.java b/mcwl-common/src/main/java/com/mcwl/common/valid/MaxMoneyConstraintValidator.java new file mode 100644 index 0000000..4ba54c5 --- /dev/null +++ b/mcwl-common/src/main/java/com/mcwl/common/valid/MaxMoneyConstraintValidator.java @@ -0,0 +1,29 @@ +package com.mcwl.common.valid; + + + +import com.mcwl.common.interfaces.MaxMoney; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import java.math.BigDecimal; + +/** + * 最大金额校验 + * @date 2024/6/11 下午4:13 + */ +public class MaxMoneyConstraintValidator implements ConstraintValidator { + + private MaxMoney constraint; + + @Override + public void initialize(MaxMoney constraint) { + this.constraint = constraint; + } + + @Override + public boolean isValid(BigDecimal value, ConstraintValidatorContext context) { + return value != null && value.doubleValue() < constraint.value(); + } + +} diff --git a/mcwl-common/src/main/java/com/mcwl/common/valid/MinMoneyConstraintValidator.java b/mcwl-common/src/main/java/com/mcwl/common/valid/MinMoneyConstraintValidator.java new file mode 100644 index 0000000..7f8d90b --- /dev/null +++ b/mcwl-common/src/main/java/com/mcwl/common/valid/MinMoneyConstraintValidator.java @@ -0,0 +1,30 @@ +package com.mcwl.common.valid; + + + +import com.mcwl.common.interfaces.MinMoney; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import java.math.BigDecimal; + +/** + * 最小金额校验 + * + * @date 2024/6/11 下午4:13 + */ +public class MinMoneyConstraintValidator implements ConstraintValidator { + + private MinMoney constraint; + + @Override + public void initialize(MinMoney constraint) { + this.constraint = constraint; + } + + @Override + public boolean isValid(BigDecimal value, ConstraintValidatorContext context) { + return value != null && value.doubleValue() >= constraint.value(); + } + +} diff --git a/mcwl-common/src/main/java/com/mcwl/common/valid/PhoneValidator.java b/mcwl-common/src/main/java/com/mcwl/common/valid/PhoneValidator.java new file mode 100644 index 0000000..d0a9a9f --- /dev/null +++ b/mcwl-common/src/main/java/com/mcwl/common/valid/PhoneValidator.java @@ -0,0 +1,28 @@ +package com.mcwl.common.valid; + + + +import com.mcwl.common.interfaces.ValidPhone; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import java.util.regex.Pattern; + +/** + * 手机号校验 + * + * @author 苏三 + * @date 2024/9/24 下午3:12 + */ +public class PhoneValidator implements ConstraintValidator { + private static final String PHONE_REGEX = "^1([38][0-9]|4[5-9]|5[0-3,5-9]|6[6]|7[0-8]|9[89])[0-9]{8}$"; + private final Pattern pattern = Pattern.compile(PHONE_REGEX); + + @Override + public boolean isValid(String value, ConstraintValidatorContext context) { + if (value == null) { + return true; + } + return pattern.matcher(value).matches(); + } +}