diff --git a/cash-api/product-server/pom.xml b/cash-api/product-server/pom.xml
index 480fd4b7..ed62c07a 100644
--- a/cash-api/product-server/pom.xml
+++ b/cash-api/product-server/pom.xml
@@ -18,4 +18,18 @@
UTF-8
+
+
+ com.czg
+ product-service
+ 1.0.0
+
+
+ org.apache.tomcat.embed
+ tomcat-embed-core
+
+
+
+
+
\ No newline at end of file
diff --git a/cash-api/product-server/src/main/java/com/czg/ProductApplication.java b/cash-api/product-server/src/main/java/com/czg/ProductApplication.java
index 4f771539..649dfdec 100644
--- a/cash-api/product-server/src/main/java/com/czg/ProductApplication.java
+++ b/cash-api/product-server/src/main/java/com/czg/ProductApplication.java
@@ -1,12 +1,16 @@
package com.czg;
+import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* @author ww
*/
@SpringBootApplication
+@EnableDiscoveryClient
+@MapperScan("com.czg.service.product.mapper")
public class ProductApplication {
public static void main(String[] args) {
diff --git a/cash-api/product-server/src/main/java/com/czg/controller/AbcController.java b/cash-api/product-server/src/main/java/com/czg/controller/AbcController.java
new file mode 100644
index 00000000..ae7c5911
--- /dev/null
+++ b/cash-api/product-server/src/main/java/com/czg/controller/AbcController.java
@@ -0,0 +1,8 @@
+package com.czg.controller;
+
+/**
+ * @author tankaikai
+ * @since 2025-02-10 11:32
+ */
+public class AbcController {
+}
diff --git a/cash-api/product-server/src/main/java/com/czg/controller/ProductController.java b/cash-api/product-server/src/main/java/com/czg/controller/ProductController.java
new file mode 100644
index 00000000..8a97da90
--- /dev/null
+++ b/cash-api/product-server/src/main/java/com/czg/controller/ProductController.java
@@ -0,0 +1,100 @@
+package com.czg.controller;
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.lang.Validator;
+import com.czg.annotation.LogOperation;
+import com.czg.annotation.SaAdminCheckPermission;
+import com.czg.page.PageData;
+import com.czg.resp.CzgResult;
+import com.czg.service.product.dto.ProductDTO;
+import com.czg.service.product.service.ProductService;
+import com.czg.utils.AssertUtil;
+import com.czg.validator.ValidatorUtil;
+import com.czg.validator.group.DefaultGroup;
+import com.czg.validator.group.InsertGroup;
+import com.czg.validator.group.UpdateGroup;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+* 商品
+*
+* @author Tankaikai tankaikai@aliyun.com
+* @since 1.0 2025-02-10
+*/
+@AllArgsConstructor
+@RestController
+@RequestMapping("/prod/product")
+public class ProductController {
+ private final ProductService productService;
+
+ @GetMapping("page")
+ @LogOperation("分页")
+ @SaAdminCheckPermission("prod:product:all")
+ public CzgResult> page(@RequestParam Map params){
+ PageData page = null;
+
+ return CzgResult.success(page);
+ }
+
+ @GetMapping("list")
+ @LogOperation("列表")
+ @SaAdminCheckPermission("prod:product:all")
+ public CzgResult> list(@RequestParam Map params){
+ List data = null;
+
+ return CzgResult.success(data);
+ }
+
+ @GetMapping("{id}")
+ @LogOperation("信息")
+ @SaAdminCheckPermission("prod:product:all")
+ public CzgResult get(@PathVariable("id") Long id){
+ ProductDTO data = null;
+
+ return CzgResult.success(data);
+ }
+
+ @PostMapping
+ @LogOperation("保存")
+ @SaAdminCheckPermission("prod:product:all")
+ public CzgResult save(@RequestBody ProductDTO dto){
+ //效验数据
+ ValidatorUtil.validateEntity(dto, InsertGroup.class, DefaultGroup.class);
+
+ //productService.save(dto);
+
+ return CzgResult.success();
+ }
+
+ @PutMapping
+ @LogOperation("修改")
+ @SaAdminCheckPermission("prod:product:all")
+ public CzgResult update(@RequestBody ProductDTO dto){
+ //效验数据
+ ValidatorUtil.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
+
+ //productService.update(dto);
+
+ return CzgResult.success();
+ }
+
+ @DeleteMapping
+ @LogOperation("删除")
+ @SaAdminCheckPermission("prod:product:all")
+ public CzgResult delete(@RequestBody Long[] ids){
+ //效验数据
+ Assert.notNull(ids, "{}不能为空", "id");
+ AssertUtil.isArrayEmpty(ids, "请求id数组不能为空");
+ AssertUtil.isArrayEmpty(ids, "请求{}{}数组不能为空", "id", "的");
+ Validator.validateBirthday("2022-12-12", "生日格式不正确");
+
+ //productService.delete(ids);
+
+ return CzgResult.success();
+ }
+}
\ No newline at end of file
diff --git a/cash-api/product-server/src/main/java/com/czg/controller/ShopProdCategoryController.java b/cash-api/product-server/src/main/java/com/czg/controller/ShopProdCategoryController.java
new file mode 100644
index 00000000..217865b6
--- /dev/null
+++ b/cash-api/product-server/src/main/java/com/czg/controller/ShopProdCategoryController.java
@@ -0,0 +1,100 @@
+package com.czg.controller;
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.lang.Validator;
+import com.czg.annotation.LogOperation;
+import com.czg.annotation.SaAdminCheckPermission;
+import com.czg.page.PageData;
+import com.czg.resp.CzgResult;
+import com.czg.service.product.dto.ShopProdCategoryDTO;
+import com.czg.service.product.service.ShopProdCategoryService;
+import com.czg.utils.AssertUtil;
+import com.czg.validator.ValidatorUtil;
+import com.czg.validator.group.DefaultGroup;
+import com.czg.validator.group.InsertGroup;
+import com.czg.validator.group.UpdateGroup;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+* 店铺商品分类
+*
+* @author Tankaikai tankaikai@aliyun.com
+* @since 1.0 2025-02-10
+*/
+@AllArgsConstructor
+@RestController
+@RequestMapping("/prod/category")
+public class ShopProdCategoryController {
+ private final ShopProdCategoryService shopProdCategoryService;
+
+ @GetMapping("page")
+ @LogOperation("分页")
+ @SaAdminCheckPermission("prod:category:all")
+ public CzgResult> page(@RequestParam Map params){
+ PageData page = null;
+
+ return CzgResult.success(page);
+ }
+
+ @GetMapping("list")
+ @LogOperation("列表")
+ @SaAdminCheckPermission("prod:category:all")
+ public CzgResult> list(@RequestParam Map params){
+ List data = null;
+
+ return CzgResult.success(data);
+ }
+
+ @GetMapping("{id}")
+ @LogOperation("信息")
+ @SaAdminCheckPermission("prod:category:all")
+ public CzgResult get(@PathVariable("id") Long id){
+ ShopProdCategoryDTO data = null;
+
+ return CzgResult.success(data);
+ }
+
+ @PostMapping
+ @LogOperation("保存")
+ @SaAdminCheckPermission("prod:category:all")
+ public CzgResult save(@RequestBody ShopProdCategoryDTO dto){
+ //效验数据
+ ValidatorUtil.validateEntity(dto, InsertGroup.class, DefaultGroup.class);
+
+ //shopProdCategoryService.save(dto);
+
+ return CzgResult.success();
+ }
+
+ @PutMapping
+ @LogOperation("修改")
+ @SaAdminCheckPermission("prod:category:all")
+ public CzgResult update(@RequestBody ShopProdCategoryDTO dto){
+ //效验数据
+ ValidatorUtil.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
+
+ //shopProdCategoryService.update(dto);
+
+ return CzgResult.success();
+ }
+
+ @DeleteMapping
+ @LogOperation("删除")
+ @SaAdminCheckPermission("prod:category:all")
+ public CzgResult delete(@RequestBody Long[] ids){
+ //效验数据
+ Assert.notNull(ids, "{}不能为空", "id");
+ AssertUtil.isArrayEmpty(ids, "请求id数组不能为空");
+ AssertUtil.isArrayEmpty(ids, "请求{}{}数组不能为空", "id", "的");
+ Validator.validateBirthday("2022-12-12", "生日格式不正确");
+
+ //shopProdCategoryService.delete(ids);
+
+ return CzgResult.success();
+ }
+}
\ No newline at end of file
diff --git a/cash-api/product-server/src/main/java/com/czg/controller/ShopProdUnitController.java b/cash-api/product-server/src/main/java/com/czg/controller/ShopProdUnitController.java
new file mode 100644
index 00000000..a7e35501
--- /dev/null
+++ b/cash-api/product-server/src/main/java/com/czg/controller/ShopProdUnitController.java
@@ -0,0 +1,100 @@
+package com.czg.controller;
+
+import cn.hutool.core.lang.Assert;
+import cn.hutool.core.lang.Validator;
+import com.czg.annotation.LogOperation;
+import com.czg.annotation.SaAdminCheckPermission;
+import com.czg.page.PageData;
+import com.czg.resp.CzgResult;
+import com.czg.service.product.dto.ShopProdUnitDTO;
+import com.czg.service.product.service.ShopProdUnitService;
+import com.czg.utils.AssertUtil;
+import com.czg.validator.ValidatorUtil;
+import com.czg.validator.group.DefaultGroup;
+import com.czg.validator.group.InsertGroup;
+import com.czg.validator.group.UpdateGroup;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+* 商品单位
+*
+* @author Tankaikai tankaikai@aliyun.com
+* @since 1.0 2025-02-10
+*/
+@AllArgsConstructor
+@RestController
+@RequestMapping("/prod/unit")
+public class ShopProdUnitController {
+ private final ShopProdUnitService shopProdUnitService;
+
+ @GetMapping("page")
+ @LogOperation("分页")
+ @SaAdminCheckPermission("prod:unit:all")
+ public CzgResult> page(@RequestParam Map params){
+ PageData page = null;
+
+ return CzgResult.success(page);
+ }
+
+ @GetMapping("list")
+ @LogOperation("列表")
+ @SaAdminCheckPermission("prod:unit:all")
+ public CzgResult> list(@RequestParam Map params){
+ List data = null;
+
+ return CzgResult.success(data);
+ }
+
+ @GetMapping("{id}")
+ @LogOperation("信息")
+ @SaAdminCheckPermission("prod:unit:all")
+ public CzgResult get(@PathVariable("id") Long id){
+ ShopProdUnitDTO data = null;
+
+ return CzgResult.success(data);
+ }
+
+ @PostMapping
+ @LogOperation("保存")
+ @SaAdminCheckPermission("prod:unit:all")
+ public CzgResult save(@RequestBody ShopProdUnitDTO dto){
+ //效验数据
+ ValidatorUtil.validateEntity(dto, InsertGroup.class, DefaultGroup.class);
+
+ //shopProdUnitService.save(dto);
+
+ return CzgResult.success();
+ }
+
+ @PutMapping
+ @LogOperation("修改")
+ @SaAdminCheckPermission("prod:unit:all")
+ public CzgResult update(@RequestBody ShopProdUnitDTO dto){
+ //效验数据
+ ValidatorUtil.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
+
+ //shopProdUnitService.update(dto);
+
+ return CzgResult.success();
+ }
+
+ @DeleteMapping
+ @LogOperation("删除")
+ @SaAdminCheckPermission("prod:unit:all")
+ public CzgResult delete(@RequestBody Long[] ids){
+ //效验数据
+ Assert.notNull(ids, "{}不能为空", "id");
+ AssertUtil.isArrayEmpty(ids, "请求id数组不能为空");
+ AssertUtil.isArrayEmpty(ids, "请求{}{}数组不能为空", "id", "的");
+ Validator.validateBirthday("2022-12-12", "生日格式不正确");
+
+ //shopProdUnitService.delete(ids);
+
+ return CzgResult.success();
+ }
+}
\ No newline at end of file
diff --git a/cash-api/product-server/src/main/resources/application-dev.yml b/cash-api/product-server/src/main/resources/application-dev.yml
new file mode 100644
index 00000000..4ec5d1d3
--- /dev/null
+++ b/cash-api/product-server/src/main/resources/application-dev.yml
@@ -0,0 +1,26 @@
+
+spring:
+ datasource:
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ url: jdbc:mysql://rm-bp1kn7h89nz62cno1ro.mysql.rds.aliyuncs.com:3306/czg_cashier?useUnicode=true&characterEncoding=utf-8
+ username: cashier
+ password: Cashier@1@
+
+ data:
+ redis:
+ host: 121.40.128.145
+ port: 6379
+ password: 111111
+ timeout: 1000
+ lettuce:
+ pool:
+ min-idle: 0
+ max-idle: 8
+ max-wait: -1ms
+ max-active: 16
+
+ cloud:
+ nacos:
+ discovery:
+ server-addr: 101.37.12.135:8848
+ namespace: 237e1905-0a66-4375-9bb6-a51c3c034aca
diff --git a/cash-api/product-server/src/test/java/com/czg/service/DemoTest.java b/cash-api/product-server/src/test/java/com/czg/service/DemoTest.java
new file mode 100644
index 00000000..08929e9a
--- /dev/null
+++ b/cash-api/product-server/src/test/java/com/czg/service/DemoTest.java
@@ -0,0 +1,24 @@
+package com.czg.service;
+
+import jakarta.annotation.Resource;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.security.crypto.password.PasswordEncoder;
+
+/**
+ * @author tankaikai
+ * @since 2025-02-10 11:35
+ */
+@SpringBootTest
+public class DemoTest {
+ @Resource
+ private PasswordEncoder passwordEncoder;
+
+ @Test
+ public void encode() {
+ String password = "123456";
+ password = passwordEncoder.encode(password);
+
+ System.out.println(password);
+ }
+}
diff --git a/cash-api/system-server/src/main/java/com/czg/controller/SysParamController.java b/cash-api/system-server/src/main/java/com/czg/controller/SysParamController.java
index fd234dd3..91c8c426 100644
--- a/cash-api/system-server/src/main/java/com/czg/controller/SysParamController.java
+++ b/cash-api/system-server/src/main/java/com/czg/controller/SysParamController.java
@@ -1,10 +1,10 @@
package com.czg.controller;
-import com.czg.group.InsertGroup;
-import com.czg.group.UpdateGroup;
import com.czg.resp.CzgResult;
import com.czg.service.system.dto.SysParamsDTO;
import com.czg.service.system.service.SysParamsService;
+import com.czg.validator.group.InsertGroup;
+import com.czg.validator.group.UpdateGroup;
import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
diff --git a/cash-common/cash-common-api-config/src/main/java/com/czg/exception/CzgControllerAdvice.java b/cash-common/cash-common-api-config/src/main/java/com/czg/exception/CzgControllerAdvice.java
index d11682b6..08c650df 100644
--- a/cash-common/cash-common-api-config/src/main/java/com/czg/exception/CzgControllerAdvice.java
+++ b/cash-common/cash-common-api-config/src/main/java/com/czg/exception/CzgControllerAdvice.java
@@ -1,5 +1,7 @@
package com.czg.exception;
+import cn.dev33.satoken.exception.NotPermissionException;
+import cn.hutool.core.exceptions.ValidateException;
import cn.dev33.satoken.exception.NotPermissionException;
import com.czg.resp.CzgRespCode;
import com.czg.resp.CzgResult;
@@ -48,6 +50,30 @@ public class CzgControllerAdvice {
return CzgResult.failure(CzgRespCode.PARAM_ERROR.getCode(), message);
}
+ /**
+ * 处理自定义异常
+ */
+ @ExceptionHandler(value = {CzgException.class, IllegalArgumentException.class})
+ public CzgResult handleCzgException(CzgException ex) {
+ return CzgResult.failure(ex.getCode(), ex.getMsg());
+ }
+
+ /**
+ * 处理Hutool的断言抛出异常
+ */
+ @ExceptionHandler(IllegalArgumentException.class)
+ public CzgResult handleAssertException(IllegalArgumentException ex) {
+ return CzgResult.failure(CzgRespCode.PARAM_ERROR.getCode(), ex.getMessage());
+ }
+
+ /**
+ * 处理Hutool的校验工具类抛出异常
+ */
+ @ExceptionHandler(ValidateException.class)
+ public CzgResult handleHutoolValidateException(ValidateException ex) {
+ return CzgResult.failure(CzgRespCode.PARAM_ERROR.getCode(), ex.getMessage());
+ }
+
private void setErrorLog(Exception ex) {
log.error(ex.getMessage());
}
diff --git a/cash-common/cash-common-tools/src/main/java/com/czg/annotation/LogOperation.java b/cash-common/cash-common-tools/src/main/java/com/czg/annotation/LogOperation.java
new file mode 100644
index 00000000..81511029
--- /dev/null
+++ b/cash-common/cash-common-tools/src/main/java/com/czg/annotation/LogOperation.java
@@ -0,0 +1,18 @@
+
+
+package com.czg.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 操作日志注解
+ *
+ * @author admin admin@cashier.com
+ * @since 1.0.0
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface LogOperation {
+ String value() default "";
+}
\ No newline at end of file
diff --git a/cash-common/cash-common-tools/src/main/java/com/czg/exception/CzgException.java b/cash-common/cash-common-tools/src/main/java/com/czg/exception/CzgException.java
new file mode 100644
index 00000000..4c39e95e
--- /dev/null
+++ b/cash-common/cash-common-tools/src/main/java/com/czg/exception/CzgException.java
@@ -0,0 +1,47 @@
+
+
+package com.czg.exception;
+
+import com.czg.resp.CzgRespCode;
+
+/**
+ * 自定义异常
+ *
+ * @author admin admin@cashier.com
+ * @since 1.0.0
+ */
+public class CzgException extends RuntimeException {
+ private static final long serialVersionUID = 1L;
+
+ private int code;
+ private String msg;
+
+ public CzgException(String msg) {
+ super(msg);
+ this.code = CzgRespCode.FAILURE.getCode();
+ this.msg = msg;
+ }
+
+ public CzgException(String msg, Throwable e) {
+ super(msg, e);
+ this.code = CzgRespCode.FAILURE.getCode();
+ this.msg = msg;
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+
+ public void setMsg(String msg) {
+ this.msg = msg;
+ }
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+}
\ No newline at end of file
diff --git a/cash-common/cash-common-tools/src/main/java/com/czg/group/InsertGroup.java b/cash-common/cash-common-tools/src/main/java/com/czg/group/InsertGroup.java
deleted file mode 100644
index f0f55dae..00000000
--- a/cash-common/cash-common-tools/src/main/java/com/czg/group/InsertGroup.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.czg.group;
-
-/**
- * @author GYJoker
- */
-public interface InsertGroup {
-}
diff --git a/cash-common/cash-common-tools/src/main/java/com/czg/group/UpdateGroup.java b/cash-common/cash-common-tools/src/main/java/com/czg/group/UpdateGroup.java
deleted file mode 100644
index 68d5b478..00000000
--- a/cash-common/cash-common-tools/src/main/java/com/czg/group/UpdateGroup.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.czg.group;
-
-/**
- * @author GYJoker
- */
-public interface UpdateGroup {
-}
diff --git a/cash-common/cash-common-tools/src/main/java/com/czg/page/PageData.java b/cash-common/cash-common-tools/src/main/java/com/czg/page/PageData.java
new file mode 100644
index 00000000..717de137
--- /dev/null
+++ b/cash-common/cash-common-tools/src/main/java/com/czg/page/PageData.java
@@ -0,0 +1,35 @@
+package com.czg.page;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 分页工具类
+ *
+ * @author Tankaikai tankaikai@aliyun.com
+ */
+@Data
+public class PageData implements Serializable {
+ /**
+ * 总记录数
+ */
+ private int total;
+
+ /**
+ * 列表数据
+ */
+ private List list;
+
+ /**
+ * 分页
+ *
+ * @param list 列表数据
+ * @param total 总记录数
+ */
+ public PageData(List list, long total) {
+ this.list = list;
+ this.total = (int) total;
+ }
+}
\ No newline at end of file
diff --git a/cash-common/cash-common-tools/src/main/java/com/czg/utils/AssertUtil.java b/cash-common/cash-common-tools/src/main/java/com/czg/utils/AssertUtil.java
new file mode 100644
index 00000000..46bec8d7
--- /dev/null
+++ b/cash-common/cash-common-tools/src/main/java/com/czg/utils/AssertUtil.java
@@ -0,0 +1,71 @@
+
+
+package com.czg.utils;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.util.StrUtil;
+import com.czg.exception.CzgException;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 校验工具类
+ *
+ * @author admin admin@cashier.com
+ * @since 1.0.0
+ */
+public class AssertUtil {
+
+ public static void isBlank(String str, String msg) {
+ if (StrUtil.isBlank(str)) {
+ throw new CzgException(msg);
+ }
+ }
+
+ public static void isBlank(String str, String errorMsgTemplate, Object... params) {
+ isBlank(str, StrUtil.format(errorMsgTemplate, params));
+ }
+
+ public static void isNull(Object object, String msg) {
+ if (object == null) {
+ throw new CzgException(msg);
+ }
+ }
+
+ public static void isNull(Object object, String errorMsgTemplate, Object... params) {
+ isNull(object, StrUtil.format(errorMsgTemplate, params));
+ }
+
+ public static void isArrayEmpty(Object[] array, String msg) {
+ if (ArrayUtil.isEmpty(array)) {
+ throw new CzgException(msg);
+ }
+ }
+
+ public static void isArrayEmpty(Object[] array, String errorMsgTemplate, Object... params) {
+ isArrayEmpty(array, StrUtil.format(errorMsgTemplate, params));
+ }
+
+ public static void isListEmpty(List> list, String msg) {
+ if (CollUtil.isEmpty(list)) {
+ throw new CzgException(msg);
+ }
+ }
+
+ public static void isListEmpty(List> list, String errorMsgTemplate, Object... params) {
+ isListEmpty(list, StrUtil.format(errorMsgTemplate, params));
+ }
+
+ public static void isMapEmpty(Map map, String msg) {
+ if (MapUtil.isEmpty(map)) {
+ throw new CzgException(msg);
+ }
+ }
+
+ public static void isMapEmpty(Map map, String errorMsgTemplate, Object... params) {
+ isMapEmpty(map, StrUtil.format(errorMsgTemplate, params));
+ }
+}
\ No newline at end of file
diff --git a/cash-common/cash-common-tools/src/main/java/com/czg/validator/ValidatorUtil.java b/cash-common/cash-common-tools/src/main/java/com/czg/validator/ValidatorUtil.java
new file mode 100644
index 00000000..790ca981
--- /dev/null
+++ b/cash-common/cash-common-tools/src/main/java/com/czg/validator/ValidatorUtil.java
@@ -0,0 +1,49 @@
+package com.czg.validator;
+
+import com.czg.exception.CzgException;
+import jakarta.validation.ConstraintViolation;
+import jakarta.validation.Validation;
+import jakarta.validation.Validator;
+import org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator;
+import org.springframework.context.i18n.LocaleContextHolder;
+import org.springframework.context.support.ResourceBundleMessageSource;
+import org.springframework.validation.beanvalidation.MessageSourceResourceBundleLocator;
+
+import java.util.Locale;
+import java.util.Set;
+
+/**
+ * hibernate-validator校验工具类
+ * 参考文档:http://docs.jboss.org/hibernate/validator/6.0/reference/en-US/html_single/
+ *
+ * @author admin admin@cashier.com
+ * @since 1.0.0
+ */
+public class ValidatorUtil {
+
+ private static ResourceBundleMessageSource getMessageSource() {
+ ResourceBundleMessageSource bundleMessageSource = new ResourceBundleMessageSource();
+ bundleMessageSource.setDefaultEncoding("UTF-8");
+ //bundleMessageSource.setBasenames("i18n/validation", "i18n/validation_common");
+ return bundleMessageSource;
+ }
+
+ /**
+ * 校验对象
+ * @param object 待校验对象
+ * @param groups 待校验的组
+ * @throws CzgException 校验不通过,则报CzgException异常
+ */
+ public static void validateEntity(Object object, Class>... groups)
+ throws CzgException {
+ Locale.setDefault(LocaleContextHolder.getLocale());
+ Validator validator = Validation.byDefaultProvider().configure().messageInterpolator(
+ new ResourceBundleMessageInterpolator(new MessageSourceResourceBundleLocator(getMessageSource())))
+ .buildValidatorFactory().getValidator();
+ Set> constraintViolations = validator.validate(object, groups);
+ if (!constraintViolations.isEmpty()) {
+ ConstraintViolation