From 61818816a41a2a11a80a9a3ed17a7d42de6656eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?LI-CCONG=5C=E6=9D=8E=E8=81=AA=E8=81=AA?= <1441652193@qq.com> Date: Fri, 11 Aug 2023 11:59:00 +0800 Subject: [PATCH 1/4] =?UTF-8?q?demo=E6=A8=A1=E5=9D=97=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90v1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- node_modules/.yarn-integrity | 10 ----- .../yunxi-module-demo-biz/pom.xml | 8 ++++ .../admin/material/MaterialController.java | 41 +++++++++---------- .../web/config/DemoWebConfiguration.java | 24 +++++++++++ .../demo/framework/web/package-info.java | 4 ++ .../src/main/resources/application.yaml | 4 +- 6 files changed, 58 insertions(+), 33 deletions(-) delete mode 100644 node_modules/.yarn-integrity create mode 100644 yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/framework/web/config/DemoWebConfiguration.java create mode 100644 yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/framework/web/package-info.java diff --git a/node_modules/.yarn-integrity b/node_modules/.yarn-integrity deleted file mode 100644 index 6b67134..0000000 --- a/node_modules/.yarn-integrity +++ /dev/null @@ -1,10 +0,0 @@ -{ - "systemParams": "win32-x64-93", - "modulesFolders": [], - "flags": [], - "linkedModules": [], - "topLevelPatterns": [], - "lockfileEntries": {}, - "files": [], - "artifacts": {} -} \ No newline at end of file diff --git a/yunxi-module-demo/yunxi-module-demo-biz/pom.xml b/yunxi-module-demo/yunxi-module-demo-biz/pom.xml index 27cd565..a7d7480 100644 --- a/yunxi-module-demo/yunxi-module-demo-biz/pom.xml +++ b/yunxi-module-demo/yunxi-module-demo-biz/pom.xml @@ -37,11 +37,18 @@ yunxi-spring-boot-starter-web + com.yunxi.scm yunxi-spring-boot-starter-security + + + com.yunxi.scm + yunxi-spring-boot-starter-biz-data-permission + + com.yunxi.scm @@ -59,6 +66,7 @@ com.yunxi.scm yunxi-spring-boot-starter-excel + \ No newline at end of file diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/MaterialController.java b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/MaterialController.java index adedc2e..bf1dafd 100644 --- a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/MaterialController.java +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/MaterialController.java @@ -1,32 +1,30 @@ package com.yunxi.scm.module.demo.controller.admin.material; -import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; -import io.swagger.v3.oas.annotations.Operation; - -import javax.validation.constraints.*; -import javax.validation.*; -import javax.servlet.http.*; -import java.util.*; -import java.io.IOException; - -import com.yunxi.scm.framework.common.pojo.PageResult; import com.yunxi.scm.framework.common.pojo.CommonResult; -import static com.yunxi.scm.framework.common.pojo.CommonResult.success; - +import com.yunxi.scm.framework.common.pojo.PageResult; +import com.yunxi.scm.framework.datapermission.core.annotation.DataPermission; import com.yunxi.scm.framework.excel.core.util.ExcelUtils; - import com.yunxi.scm.framework.operatelog.core.annotations.OperateLog; -import static com.yunxi.scm.framework.operatelog.core.enums.OperateTypeEnum.*; - import com.yunxi.scm.module.demo.controller.admin.material.vo.*; -import com.yunxi.scm.module.demo.dal.dataobject.material.MaterialDO; import com.yunxi.scm.module.demo.convert.material.MaterialConvert; +import com.yunxi.scm.module.demo.dal.dataobject.material.MaterialDO; import com.yunxi.scm.module.demo.service.material.MaterialService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.Collection; +import java.util.List; + +import static com.yunxi.scm.framework.common.pojo.CommonResult.success; +import static com.yunxi.scm.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; @Tag(name = "管理后台 - 物料管理") @RestController @@ -82,6 +80,7 @@ public class MaterialController { @GetMapping("/page") @Operation(summary = "获得物料管理分页") @PreAuthorize("@ss.hasPermission('demo:material:query')") + @DataPermission // 数据权限功能,默认是开启的 public CommonResult> getMaterialPage(@Valid MaterialPageReqVO pageVO) { PageResult pageResult = materialService.getMaterialPage(pageVO); return success(MaterialConvert.INSTANCE.convertPage(pageResult)); diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/framework/web/config/DemoWebConfiguration.java b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/framework/web/config/DemoWebConfiguration.java new file mode 100644 index 0000000..44f2b08 --- /dev/null +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/framework/web/config/DemoWebConfiguration.java @@ -0,0 +1,24 @@ +package com.yunxi.scm.module.demo.framework.web.config; + +import com.yunxi.scm.framework.swagger.config.YunxiSwaggerAutoConfiguration; +import org.springdoc.core.GroupedOpenApi; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * system 模块的 web 组件的 Configuration + * + * @author 芋道源码 + */ +@Configuration(proxyBeanMethods = false) +public class DemoWebConfiguration { + + /** + * demo 模块的 API 分组 + */ + @Bean + public GroupedOpenApi dempGroupedOpenApi() { + return YunxiSwaggerAutoConfiguration.buildGroupedOpenApi("demo"); + } + +} diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/framework/web/package-info.java b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/framework/web/package-info.java new file mode 100644 index 0000000..f71416f --- /dev/null +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/framework/web/package-info.java @@ -0,0 +1,4 @@ +/** + * system 模块的 web 配置 + */ +package com.yunxi.scm.module.demo.framework.web; diff --git a/yunxi-server/src/main/resources/application.yaml b/yunxi-server/src/main/resources/application.yaml index a7fb9e9..c4fdadf 100644 --- a/yunxi-server/src/main/resources/application.yaml +++ b/yunxi-server/src/main/resources/application.yaml @@ -86,7 +86,7 @@ aj: cache-number: 1000 # local 缓存的阈值,达到这个值,清除缓存 timing-clear: 180 # local定时清除过期缓存(单位秒),设置为0代表不执行 type: blockPuzzle # 验证码类型 default两种都实例化。 blockPuzzle 滑块拼图 clickWord 文字点选 - water-mark: 芋道源码 # 右下角水印文字(我的水印),可使用 https://tool.chinaz.com/tools/unicode.aspx 中文转 Unicode,Linux 可能需要转 unicode + water-mark: \u957f\u6c5f\u4e91\u606f # 右下角水印文字(我的水印),可使用 https://tool.chinaz.com/tools/unicode.aspx 中文转 Unicode,Linux 可能需要转 unicode interference-options: 0 # 滑动干扰项(0/1/2) req-frequency-limit-enable: false # 接口请求次数一分钟限制是否开启 true|false req-get-lock-limit: 5 # 验证失败 5 次,get接口锁定 @@ -113,7 +113,7 @@ yunxi: maxOnlineCount: 0 # 最大连接人数 sessionMap: true # 保存sessionMap swagger: - title: 芋道快速开发平台 + title: 云息供应链管理平台接口文档 description: 提供管理后台、用户 App 的所有功能 version: ${yunxi.info.version} url: ${yunxi.web.admin-ui.url} From f68b58448c56919400aca90145f270aa95cd4fb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?LI-CCONG=5C=E6=9D=8E=E8=81=AA=E8=81=AA?= <1441652193@qq.com> Date: Thu, 17 Aug 2023 08:59:36 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=8A=9F=E8=83=BD=E3=80=81=E6=B3=A8=E8=A7=A3?= =?UTF-8?q?=E5=AD=97=E5=85=B8=E8=BD=AC=E6=8D=A2=E5=8A=9F=E8=83=BD=E6=A1=88?= =?UTF-8?q?=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../excel/core/convert/JsonConvert.java | 4 +- .../excel/core/convert/MutilDictConvert.java | 81 +++++++++++++++++++ .../controller/admin/DemoTestController.java | 66 ++++++++++++++- .../admin/material/vo/MaterialBaseVO.java | 4 +- .../admin/material/vo/MaterialExcelVO.java | 11 +-- .../material/vo/MaterialExportReqVO.java | 5 +- .../material/vo/MaterialExportTestVO.java | 18 +++++ .../material/vo/MaterialImportTestVO.java | 27 +++++++ .../admin/material/vo/MaterialPageReqVO.java | 5 +- .../convert/material/MaterialConvert.java | 13 +-- .../dal/dataobject/material/MaterialDO.java | 6 +- .../dal/dataobject/material/MaterialXDO.java | 15 ++++ .../dal/mysql/material/MaterialMapper.java | 13 +-- .../demo/enums/material/CategoryEnum.java | 34 ++++++++ .../material/MaterialServiceImplTest.java | 46 +++++------ .../service/file/FileConfigServiceImpl.java | 4 +- .../SensitiveWordController.java | 2 +- .../controller/admin/user/UserController.java | 1 - .../sensitiveword/SensitiveWordDO.java | 6 +- .../SensitiveWordServiceImpl.java | 8 +- .../service/sms/SmsChannelServiceImpl.java | 4 +- .../src/layout/components/Message/index.vue | 6 +- .../src/views/demo/material/index.vue | 22 ++--- .../src/views/system/sensitiveWord/index.vue | 3 +- 24 files changed, 317 insertions(+), 87 deletions(-) create mode 100644 yunxi-framework/yunxi-spring-boot-starter-excel/src/main/java/com/yunxi/scm/framework/excel/core/convert/MutilDictConvert.java create mode 100644 yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialExportTestVO.java create mode 100644 yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialImportTestVO.java create mode 100644 yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/dataobject/material/MaterialXDO.java create mode 100644 yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/enums/material/CategoryEnum.java diff --git a/yunxi-framework/yunxi-spring-boot-starter-excel/src/main/java/com/yunxi/scm/framework/excel/core/convert/JsonConvert.java b/yunxi-framework/yunxi-spring-boot-starter-excel/src/main/java/com/yunxi/scm/framework/excel/core/convert/JsonConvert.java index 16d2060..df64aed 100644 --- a/yunxi-framework/yunxi-spring-boot-starter-excel/src/main/java/com/yunxi/scm/framework/excel/core/convert/JsonConvert.java +++ b/yunxi-framework/yunxi-spring-boot-starter-excel/src/main/java/com/yunxi/scm/framework/excel/core/convert/JsonConvert.java @@ -1,11 +1,11 @@ package com.yunxi.scm.framework.excel.core.convert; -import com.yunxi.scm.framework.common.util.json.JsonUtils; import com.alibaba.excel.converters.Converter; import com.alibaba.excel.enums.CellDataTypeEnum; import com.alibaba.excel.metadata.GlobalConfiguration; import com.alibaba.excel.metadata.data.WriteCellData; import com.alibaba.excel.metadata.property.ExcelContentProperty; +import com.yunxi.scm.framework.common.util.json.JsonUtils; /** * Excel Json 转换器 @@ -16,11 +16,13 @@ public class JsonConvert implements Converter { @Override public Class supportJavaTypeKey() { + throw new UnsupportedOperationException("暂不支持,也不需要"); } @Override public CellDataTypeEnum supportExcelTypeKey() { + throw new UnsupportedOperationException("暂不支持,也不需要"); } diff --git a/yunxi-framework/yunxi-spring-boot-starter-excel/src/main/java/com/yunxi/scm/framework/excel/core/convert/MutilDictConvert.java b/yunxi-framework/yunxi-spring-boot-starter-excel/src/main/java/com/yunxi/scm/framework/excel/core/convert/MutilDictConvert.java new file mode 100644 index 0000000..f0ae0f1 --- /dev/null +++ b/yunxi-framework/yunxi-spring-boot-starter-excel/src/main/java/com/yunxi/scm/framework/excel/core/convert/MutilDictConvert.java @@ -0,0 +1,81 @@ +package com.yunxi.scm.framework.excel.core.convert; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.excel.converters.Converter; +import com.alibaba.excel.enums.CellDataTypeEnum; +import com.alibaba.excel.metadata.GlobalConfiguration; +import com.alibaba.excel.metadata.data.ReadCellData; +import com.alibaba.excel.metadata.data.WriteCellData; +import com.alibaba.excel.metadata.property.ExcelContentProperty; +import com.yunxi.scm.framework.dict.core.util.DictFrameworkUtils; +import com.yunxi.scm.framework.excel.core.annotations.DictFormat; +import lombok.extern.slf4j.Slf4j; + +import java.util.ArrayList; +import java.util.List; +@Slf4j +public class MutilDictConvert implements Converter> { + + // 分隔符 + private static final String COMMA = ","; + + // 指定转化参数的Java类型 + @Override + public Class supportJavaTypeKey() { + return List.class; + } + + // 指定转化参数对应的单元格类型 + @Override + public CellDataTypeEnum supportExcelTypeKey() { + return CellDataTypeEnum.STRING; + } + + @Override + public List convertToJavaData(ReadCellData readCellData, ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) { + // 使用字典解析 + String type = getType(contentProperty); + String strings = readCellData.getStringValue(); +// Class fieldClazz = contentProperty.getField().getType(); // 获取被注解的字段类型 + List labels = StrUtil.splitTrim(strings, COMMA); + List values = new ArrayList<>(); + for(String label : labels) { + String value = DictFrameworkUtils.parseDictDataValue(type, label); + if (value == null) { + log.error("[convertToJavaData][type({}) 解析不掉 label({})]", type, label); + return null; + } + values.add(value); + } +// return Convert.convert(fieldClazz, value); // 类型转换 + return values; + } + + @Override + public WriteCellData convertToExcelData(List values, ExcelContentProperty contentProperty, + GlobalConfiguration globalConfiguration) { + // 空时,返回空 + if (values == null || values.isEmpty()) { + return new WriteCellData<>(""); + } + // 使用字典格式化 + String type = getType(contentProperty); + List labels = new ArrayList<>(); + for(String value : values) { + String label = DictFrameworkUtils.getDictDataLabel(type, value); + if (label == null) { + log.error("[convertToExcelData][type({}) 转换不了 label({})]", type, value); + } else { + labels.add(label); + } + } + // 生成 Excel 小表格 + return new WriteCellData<>(CollUtil.join(labels, COMMA)); + } + + private static String getType(ExcelContentProperty contentProperty) { + return contentProperty.getField().getAnnotation(DictFormat.class).value(); + } +} diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/DemoTestController.java b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/DemoTestController.java index 36699d1..f35bba5 100644 --- a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/DemoTestController.java +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/DemoTestController.java @@ -1,16 +1,32 @@ package com.yunxi.scm.module.demo.controller.admin; import com.yunxi.scm.framework.common.pojo.CommonResult; +import com.yunxi.scm.framework.excel.core.util.ExcelUtils; +import com.yunxi.scm.framework.operatelog.core.annotations.OperateLog; +import com.yunxi.scm.module.demo.controller.admin.material.vo.MaterialExportTestVO; +import com.yunxi.scm.module.demo.controller.admin.material.vo.MaterialImportTestVO; +import com.yunxi.scm.module.demo.convert.material.MaterialConvert; +import com.yunxi.scm.module.demo.dal.dataobject.material.MaterialXDO; +import com.yunxi.scm.module.demo.enums.material.CategoryEnum; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.security.PermitAll; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; import static com.yunxi.scm.framework.common.pojo.CommonResult.success; +import static com.yunxi.scm.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; +import static com.yunxi.scm.framework.operatelog.core.enums.OperateTypeEnum.IMPORT; @Tag(name = "管理后台 - Test") @RestController @@ -25,4 +41,48 @@ public class DemoTestController { return success("无需认证即可访问的后台接口"); } + + @GetMapping("/test_export") + @Operation(summary = "测试导出和字典转化") + @PermitAll + @OperateLog(type = EXPORT) + public void testExport(HttpServletResponse response) throws IOException { + MaterialXDO xdo1 = new MaterialXDO(Arrays.asList("1","2")); + MaterialXDO xdo2 = new MaterialXDO(Arrays.asList("1","3")); + List xdos = new ArrayList<>(); + xdos.add(xdo1); + xdos.add(xdo2); + List datas = MaterialConvert.INSTANCE.convertList03(xdos); + ExcelUtils.write(response, "测试导出.xls", "数据", MaterialExportTestVO.class, datas); + } + + + @PostMapping("/test_import") + @Operation(summary = "测试导入和转化为字典") + @PermitAll + @OperateLog(type = IMPORT) + @Parameters({ + @Parameter(name = "file", description = "Excel 文件", required = true), + @Parameter(name = "updateSupport", description = "是否支持更新,默认为 false", example = "true") + }) + public CommonResult> testImport(@RequestParam("file") MultipartFile file, + @RequestParam(value = "updateSupport", required = false, defaultValue = "false") Boolean updateSupport) throws IOException { + List list = ExcelUtils.read(file, MaterialImportTestVO.class); + return success(list); + } + + + @GetMapping("/get-import-template") + @PermitAll + @Operation(summary = "获得导入模板") + public void importTemplate(HttpServletResponse response) throws IOException { + List values = Arrays.asList(CategoryEnum.COMMON.getCode(),CategoryEnum.KANJIA.getCode()) + .stream().map(v-> String.valueOf(v)).collect(Collectors.toList()); + // 手动创建导出 demo + List list = Arrays.asList( + MaterialImportTestVO.builder().category(values).build() + ); + // 输出 + ExcelUtils.write(response, "导入模板.xls", "物料标准模版", MaterialImportTestVO.class, list); + } } diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialBaseVO.java b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialBaseVO.java index dec2484..24bd461 100644 --- a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialBaseVO.java +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialBaseVO.java @@ -26,9 +26,9 @@ public class MaterialBaseVO { @NotNull(message = "类型不能为空") private Byte type; - @Schema(description = "分类", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1,2]") + @Schema(description = "分类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1,2") @NotNull(message = "分类不能为空") - private List category; + private List categories; @Schema(description = "图片", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn") @NotNull(message = "图片不能为空") diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialExcelVO.java b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialExcelVO.java index 8d568c4..d289090 100644 --- a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialExcelVO.java +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialExcelVO.java @@ -3,6 +3,7 @@ package com.yunxi.scm.module.demo.controller.admin.material.vo; import com.alibaba.excel.annotation.ExcelProperty; import com.yunxi.scm.framework.excel.core.annotations.DictFormat; import com.yunxi.scm.framework.excel.core.convert.DictConvert; +import com.yunxi.scm.framework.excel.core.convert.JsonConvert; import com.yunxi.scm.module.demo.enums.DictTypeConstants; import lombok.Data; @@ -19,7 +20,7 @@ import java.util.List; @Data public class MaterialExcelVO { - @ExcelProperty("ID") + @ExcelProperty("编号") private Long id; @ExcelProperty("名称") @@ -29,13 +30,13 @@ public class MaterialExcelVO { @DictFormat(DictTypeConstants.MATERIAL_STATUS) private Byte status; - @ExcelProperty("类型") + @ExcelProperty(value = "类型", converter = DictConvert.class) @DictFormat(DictTypeConstants.TRADE_ORDER_TYPE) private Byte type; - @ExcelProperty("分类") - @DictFormat(DictTypeConstants.TRADE_ORDER_TYPE) - private List category; + @ExcelProperty(value = "分类", converter = JsonConvert.class) + private List categories; + @ExcelProperty("图片") private String imgurl; diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialExportReqVO.java b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialExportReqVO.java index 3af3bea..52b645b 100644 --- a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialExportReqVO.java +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialExportReqVO.java @@ -5,7 +5,6 @@ import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; -import java.util.List; import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @@ -22,8 +21,8 @@ public class MaterialExportReqVO { @Schema(description = "类型", example = "2") private Byte type; - @Schema(description = "分类") - private List category; + @Schema(description = "分类", example = "1") + private String category; @Schema(description = "创建时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialExportTestVO.java b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialExportTestVO.java new file mode 100644 index 0000000..2a63529 --- /dev/null +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialExportTestVO.java @@ -0,0 +1,18 @@ +package com.yunxi.scm.module.demo.controller.admin.material.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.yunxi.scm.framework.excel.core.annotations.DictFormat; +import com.yunxi.scm.framework.excel.core.convert.MutilDictConvert; +import com.yunxi.scm.module.demo.enums.DictTypeConstants; +import lombok.Data; + +import java.util.List; + +// 测试转换 +@Data +public class MaterialExportTestVO { + + @ExcelProperty(value = "分类测试", converter = MutilDictConvert.class) + @DictFormat(DictTypeConstants.TRADE_ORDER_TYPE) + private List category; +} diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialImportTestVO.java b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialImportTestVO.java new file mode 100644 index 0000000..63ddb9c --- /dev/null +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialImportTestVO.java @@ -0,0 +1,27 @@ +package com.yunxi.scm.module.demo.controller.admin.material.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.yunxi.scm.framework.excel.core.annotations.DictFormat; +import com.yunxi.scm.framework.excel.core.convert.MutilDictConvert; +import com.yunxi.scm.module.demo.enums.DictTypeConstants; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.util.List; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题 +public class MaterialImportTestVO { + + + + @ExcelProperty(value = "分类测试", converter = MutilDictConvert.class) + @DictFormat(DictTypeConstants.TRADE_ORDER_TYPE) + private List category; +} diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialPageReqVO.java b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialPageReqVO.java index 92e0014..1f97dfa 100644 --- a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialPageReqVO.java +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialPageReqVO.java @@ -8,7 +8,6 @@ import lombok.ToString; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; -import java.util.List; import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @@ -27,8 +26,8 @@ public class MaterialPageReqVO extends PageParam { @Schema(description = "类型", example = "2") private Byte type; - @Schema(description = "分类", example = "[1,2]") - private List category; + @Schema(description = "分类", example = "2") + private String category; @Schema(description = "创建时间") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/convert/material/MaterialConvert.java b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/convert/material/MaterialConvert.java index e65e644..0c6b6cb 100644 --- a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/convert/material/MaterialConvert.java +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/convert/material/MaterialConvert.java @@ -1,13 +1,13 @@ package com.yunxi.scm.module.demo.convert.material; -import java.util.*; - import com.yunxi.scm.framework.common.pojo.PageResult; - -import org.mapstruct.Mapper; -import org.mapstruct.factory.Mappers; import com.yunxi.scm.module.demo.controller.admin.material.vo.*; import com.yunxi.scm.module.demo.dal.dataobject.material.MaterialDO; +import com.yunxi.scm.module.demo.dal.dataobject.material.MaterialXDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; /** * 物料管理 Convert @@ -31,4 +31,7 @@ public interface MaterialConvert { List convertList02(List list); + + List convertList03(List list); + } diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/dataobject/material/MaterialDO.java b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/dataobject/material/MaterialDO.java index 43baff2..3eb3e1f 100644 --- a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/dataobject/material/MaterialDO.java +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/dataobject/material/MaterialDO.java @@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.yunxi.scm.framework.mybatis.core.dataobject.BaseDO; -import com.yunxi.scm.framework.mybatis.core.type.IntegerListTypeHandler; +import com.yunxi.scm.framework.mybatis.core.type.StringListTypeHandler; import lombok.*; import java.math.BigDecimal; @@ -49,8 +49,8 @@ public class MaterialDO extends BaseDO { * 分类 */ // @TableField(typeHandler = JacksonTypeHandler.class) - @TableField(typeHandler = IntegerListTypeHandler.class) - private List category; + @TableField(typeHandler = StringListTypeHandler.class) + private List categories; /** * 图片 */ diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/dataobject/material/MaterialXDO.java b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/dataobject/material/MaterialXDO.java new file mode 100644 index 0000000..686cae9 --- /dev/null +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/dataobject/material/MaterialXDO.java @@ -0,0 +1,15 @@ +package com.yunxi.scm.module.demo.dal.dataobject.material; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class MaterialXDO { + + private List category; +} diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/mysql/material/MaterialMapper.java b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/mysql/material/MaterialMapper.java index 567cb60..fd38697 100644 --- a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/mysql/material/MaterialMapper.java +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/mysql/material/MaterialMapper.java @@ -1,13 +1,14 @@ package com.yunxi.scm.module.demo.dal.mysql.material; -import java.util.*; - import com.yunxi.scm.framework.common.pojo.PageResult; -import com.yunxi.scm.framework.mybatis.core.query.LambdaQueryWrapperX; import com.yunxi.scm.framework.mybatis.core.mapper.BaseMapperX; +import com.yunxi.scm.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.yunxi.scm.module.demo.controller.admin.material.vo.MaterialExportReqVO; +import com.yunxi.scm.module.demo.controller.admin.material.vo.MaterialPageReqVO; import com.yunxi.scm.module.demo.dal.dataobject.material.MaterialDO; import org.apache.ibatis.annotations.Mapper; -import com.yunxi.scm.module.demo.controller.admin.material.vo.*; + +import java.util.List; /** * 物料管理 Mapper @@ -22,7 +23,7 @@ public interface MaterialMapper extends BaseMapperX { .likeIfPresent(MaterialDO::getName, reqVO.getName()) .eqIfPresent(MaterialDO::getStatus, reqVO.getStatus()) .eqIfPresent(MaterialDO::getType, reqVO.getType()) - .eqIfPresent(MaterialDO::getCategory, reqVO.getCategory()) + .likeIfPresent(MaterialDO::getCategories, reqVO.getCategory()) .betweenIfPresent(MaterialDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(MaterialDO::getId)); } @@ -32,7 +33,7 @@ public interface MaterialMapper extends BaseMapperX { .likeIfPresent(MaterialDO::getName, reqVO.getName()) .eqIfPresent(MaterialDO::getStatus, reqVO.getStatus()) .eqIfPresent(MaterialDO::getType, reqVO.getType()) - .eqIfPresent(MaterialDO::getCategory, reqVO.getCategory()) + .likeIfPresent(MaterialDO::getCategories, reqVO.getCategory()) .betweenIfPresent(MaterialDO::getCreateTime, reqVO.getCreateTime()) .orderByDesc(MaterialDO::getId)); } diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/enums/material/CategoryEnum.java b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/enums/material/CategoryEnum.java new file mode 100644 index 0000000..881e37f --- /dev/null +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/enums/material/CategoryEnum.java @@ -0,0 +1,34 @@ +package com.yunxi.scm.module.demo.enums.material; + +import com.yunxi.scm.framework.common.core.IntArrayValuable; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +@Getter +@AllArgsConstructor +public enum CategoryEnum implements IntArrayValuable { + COMMON(0, "普通"), + MIAOSHA(1, "秒杀"), + + PINTUAN(2,"拼团"), + + KANJIA(3, "砍价"); + + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(CategoryEnum::getCode).toArray(); + + /** + * 状态值 + */ + private final Integer code; + /** + * 状态名 + */ + private final String name; + + @Override + public int[] array() { + return ARRAYS; + } +} diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/test/java/com/yunxi/scm/module/demo/service/material/MaterialServiceImplTest.java b/yunxi-module-demo/yunxi-module-demo-biz/src/test/java/com/yunxi/scm/module/demo/service/material/MaterialServiceImplTest.java index b3154fa..04c1b14 100644 --- a/yunxi-module-demo/yunxi-module-demo-biz/src/test/java/com/yunxi/scm/module/demo/service/material/MaterialServiceImplTest.java +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/test/java/com/yunxi/scm/module/demo/service/material/MaterialServiceImplTest.java @@ -1,32 +1,28 @@ package com.yunxi.scm.module.demo.service.material; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.mock.mockito.MockBean; - -import javax.annotation.Resource; - +import com.yunxi.scm.framework.common.pojo.PageResult; import com.yunxi.scm.framework.test.core.ut.BaseDbUnitTest; - -import com.yunxi.scm.module.demo.controller.admin.material.vo.*; +import com.yunxi.scm.module.demo.controller.admin.material.vo.MaterialCreateReqVO; +import com.yunxi.scm.module.demo.controller.admin.material.vo.MaterialExportReqVO; +import com.yunxi.scm.module.demo.controller.admin.material.vo.MaterialPageReqVO; +import com.yunxi.scm.module.demo.controller.admin.material.vo.MaterialUpdateReqVO; import com.yunxi.scm.module.demo.dal.dataobject.material.MaterialDO; import com.yunxi.scm.module.demo.dal.mysql.material.MaterialMapper; -import com.yunxi.scm.framework.common.pojo.PageResult; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.context.annotation.Import; import javax.annotation.Resource; -import org.springframework.context.annotation.Import; -import java.util.*; -import java.time.LocalDateTime; - -import static cn.hutool.core.util.RandomUtil.*; -import static com.yunxi.scm.module.demo.enums.ErrorCodeConstants.*; -import static com.yunxi.scm.framework.test.core.util.AssertUtils.*; -import static com.yunxi.scm.framework.test.core.util.RandomUtils.*; -import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*; -import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*; -import static com.yunxi.scm.framework.common.util.date.DateUtils.*; +import java.util.List; + +import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; +import static com.yunxi.scm.framework.common.util.object.ObjectUtils.cloneIgnoreId; +import static com.yunxi.scm.framework.test.core.util.AssertUtils.assertPojoEquals; +import static com.yunxi.scm.framework.test.core.util.AssertUtils.assertServiceException; +import static com.yunxi.scm.framework.test.core.util.RandomUtils.randomLongId; +import static com.yunxi.scm.framework.test.core.util.RandomUtils.randomPojo; +import static com.yunxi.scm.module.demo.enums.ErrorCodeConstants.MATERIAL_NOT_EXISTS; import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; /** * {@link MaterialServiceImpl} 的单元测试类 @@ -113,7 +109,7 @@ public class MaterialServiceImplTest extends BaseDbUnitTest { o.setName(null); o.setStatus(null); o.setType(null); - o.setCategory(null); + o.setCategories(null); o.setCreateTime(null); }); materialMapper.insert(dbMaterial); @@ -124,7 +120,7 @@ public class MaterialServiceImplTest extends BaseDbUnitTest { // 测试 type 不匹配 materialMapper.insert(cloneIgnoreId(dbMaterial, o -> o.setType(null))); // 测试 category 不匹配 - materialMapper.insert(cloneIgnoreId(dbMaterial, o -> o.setCategory(null))); + materialMapper.insert(cloneIgnoreId(dbMaterial, o -> o.setCategories(null))); // 测试 createTime 不匹配 materialMapper.insert(cloneIgnoreId(dbMaterial, o -> o.setCreateTime(null))); // 准备参数 @@ -151,7 +147,7 @@ public class MaterialServiceImplTest extends BaseDbUnitTest { o.setName(null); o.setStatus(null); o.setType(null); - o.setCategory(null); + o.setCategories(null); o.setCreateTime(null); }); materialMapper.insert(dbMaterial); @@ -162,7 +158,7 @@ public class MaterialServiceImplTest extends BaseDbUnitTest { // 测试 type 不匹配 materialMapper.insert(cloneIgnoreId(dbMaterial, o -> o.setType(null))); // 测试 category 不匹配 - materialMapper.insert(cloneIgnoreId(dbMaterial, o -> o.setCategory(null))); + materialMapper.insert(cloneIgnoreId(dbMaterial, o -> o.setCategories(null))); // 测试 createTime 不匹配 materialMapper.insert(cloneIgnoreId(dbMaterial, o -> o.setCreateTime(null))); // 准备参数 diff --git a/yunxi-module-infra/yunxi-module-infra-biz/src/main/java/com/yunxi/scm/module/infra/service/file/FileConfigServiceImpl.java b/yunxi-module-infra/yunxi-module-infra-biz/src/main/java/com/yunxi/scm/module/infra/service/file/FileConfigServiceImpl.java index ae077fe..a875459 100644 --- a/yunxi-module-infra/yunxi-module-infra-biz/src/main/java/com/yunxi/scm/module/infra/service/file/FileConfigServiceImpl.java +++ b/yunxi-module-infra/yunxi-module-infra-biz/src/main/java/com/yunxi/scm/module/infra/service/file/FileConfigServiceImpl.java @@ -19,7 +19,6 @@ import com.yunxi.scm.module.infra.dal.dataobject.file.FileConfigDO; import com.yunxi.scm.module.infra.dal.mysql.file.FileConfigMapper; import lombok.Getter; import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -30,7 +29,6 @@ import javax.validation.Validator; import java.time.LocalDateTime; import java.util.List; import java.util.Map; -import java.util.concurrent.TimeUnit; import static com.yunxi.scm.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.yunxi.scm.module.infra.enums.ErrorCodeConstants.FILE_CONFIG_DELETE_FAIL_MASTER; @@ -88,7 +86,7 @@ public class FileConfigServiceImpl implements FileConfigService { * * 目的:多节点部署时,通过轮询”通知“所有节点,进行刷新 */ - @Scheduled(initialDelay = 60, fixedRate = 60, timeUnit = TimeUnit.SECONDS) +// @Scheduled(initialDelay = 60, fixedRate = 60, timeUnit = TimeUnit.SECONDS) public void refreshLocalCache() { // 情况一:如果缓存里没有数据,则直接刷新缓存 if (CollUtil.isEmpty(fileConfigCache)) { diff --git a/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/controller/admin/sensitiveword/SensitiveWordController.java b/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/controller/admin/sensitiveword/SensitiveWordController.java index ee15d46..0975234 100644 --- a/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/controller/admin/sensitiveword/SensitiveWordController.java +++ b/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/controller/admin/sensitiveword/SensitiveWordController.java @@ -84,7 +84,7 @@ public class SensitiveWordController { List list = sensitiveWordService.getSensitiveWordList(exportReqVO); // 导出 Excel List datas = SensitiveWordConvert.INSTANCE.convertList02(list); - ExcelUtils.write(response, "敏感词.xls", "数据", SensitiveWordExcelVO.class, datas); + ExcelUtils.write(response, "敏感词123.xls", "数据", SensitiveWordExcelVO.class, datas); } @GetMapping("/get-tags") diff --git a/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/controller/admin/user/UserController.java b/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/controller/admin/user/UserController.java index e852794..7e5be65 100644 --- a/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/controller/admin/user/UserController.java +++ b/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/controller/admin/user/UserController.java @@ -171,7 +171,6 @@ public class UserController { UserImportExcelVO.builder().username("yuanma").deptId(2L).email("yuanma@iocoder.cn").mobile("15601701300") .nickname("源码").status(CommonStatusEnum.DISABLE.getStatus()).sex(SexEnum.FEMALE.getSex()).build() ); - // 输出 ExcelUtils.write(response, "用户导入模板.xls", "用户列表", UserImportExcelVO.class, list); } diff --git a/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/dal/dataobject/sensitiveword/SensitiveWordDO.java b/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/dal/dataobject/sensitiveword/SensitiveWordDO.java index fb2f3eb..2cc77c0 100644 --- a/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/dal/dataobject/sensitiveword/SensitiveWordDO.java +++ b/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/dal/dataobject/sensitiveword/SensitiveWordDO.java @@ -1,12 +1,12 @@ package com.yunxi.scm.module.system.dal.dataobject.sensitiveword; -import com.yunxi.scm.framework.common.enums.CommonStatusEnum; -import com.yunxi.scm.framework.mybatis.core.dataobject.BaseDO; -import com.yunxi.scm.framework.mybatis.core.type.StringListTypeHandler; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.yunxi.scm.framework.common.enums.CommonStatusEnum; +import com.yunxi.scm.framework.mybatis.core.dataobject.BaseDO; +import com.yunxi.scm.framework.mybatis.core.type.StringListTypeHandler; import lombok.*; import java.util.List; diff --git a/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/service/sensitiveword/SensitiveWordServiceImpl.java b/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/service/sensitiveword/SensitiveWordServiceImpl.java index 09f4533..b576044 100644 --- a/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/service/sensitiveword/SensitiveWordServiceImpl.java +++ b/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/service/sensitiveword/SensitiveWordServiceImpl.java @@ -1,6 +1,8 @@ package com.yunxi.scm.module.system.service.sensitiveword; import cn.hutool.core.collection.CollUtil; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; import com.yunxi.scm.framework.common.enums.CommonStatusEnum; import com.yunxi.scm.framework.common.pojo.PageResult; import com.yunxi.scm.framework.common.util.collection.CollectionUtils; @@ -12,11 +14,8 @@ import com.yunxi.scm.module.system.convert.sensitiveword.SensitiveWordConvert; import com.yunxi.scm.module.system.dal.dataobject.sensitiveword.SensitiveWordDO; import com.yunxi.scm.module.system.dal.mysql.sensitiveword.SensitiveWordMapper; import com.yunxi.scm.module.system.util.collection.SimpleTrie; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; import lombok.Getter; import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -24,7 +23,6 @@ import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.*; -import java.util.concurrent.TimeUnit; import static com.yunxi.scm.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.yunxi.scm.framework.common.util.collection.CollectionUtils.filterList; @@ -115,7 +113,7 @@ public class SensitiveWordServiceImpl implements SensitiveWordService { * * 目的:多节点部署时,通过轮询”通知“所有节点,进行刷新 */ - @Scheduled(initialDelay = 60, fixedRate = 60, timeUnit = TimeUnit.SECONDS) +// @Scheduled(initialDelay = 60, fixedRate = 60, timeUnit = TimeUnit.SECONDS) public void refreshLocalCache() { // 情况一:如果缓存里没有数据,则直接刷新缓存 if (CollUtil.isEmpty(sensitiveWordCache)) { diff --git a/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/service/sms/SmsChannelServiceImpl.java b/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/service/sms/SmsChannelServiceImpl.java index 1ca39c1..27aa2ff 100644 --- a/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/service/sms/SmsChannelServiceImpl.java +++ b/yunxi-module-system/yunxi-module-system-biz/src/main/java/com/yunxi/scm/module/system/service/sms/SmsChannelServiceImpl.java @@ -12,7 +12,6 @@ import com.yunxi.scm.module.system.dal.dataobject.sms.SmsChannelDO; import com.yunxi.scm.module.system.dal.mysql.sms.SmsChannelMapper; import lombok.Getter; import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; @@ -20,7 +19,6 @@ import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.Collections; import java.util.List; -import java.util.concurrent.TimeUnit; import static com.yunxi.scm.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.yunxi.scm.framework.common.util.collection.CollectionUtils.getMaxValue; @@ -69,7 +67,7 @@ public class SmsChannelServiceImpl implements SmsChannelService { * * 目的:多节点部署时,通过轮询”通知“所有节点,进行刷新 */ - @Scheduled(initialDelay = 60, fixedRate = 60, timeUnit = TimeUnit.SECONDS) +// @Scheduled(initialDelay = 60, fixedRate = 60, timeUnit = TimeUnit.SECONDS) public void refreshLocalCache() { // 情况一:如果缓存里没有数据,则直接刷新缓存 if (CollUtil.isEmpty(channelCache)) { diff --git a/yunxi-ui-admin/src/layout/components/Message/index.vue b/yunxi-ui-admin/src/layout/components/Message/index.vue index c27e8ee..ebfd2ef 100644 --- a/yunxi-ui-admin/src/layout/components/Message/index.vue +++ b/yunxi-ui-admin/src/layout/components/Message/index.vue @@ -49,9 +49,9 @@ export default { // 首次加载小红点 this.getUnreadCount() // 轮询刷新小红点 - setInterval(() => { - this.getUnreadCount() - },1000 * 60 * 2) + // setInterval(() => { + // this.getUnreadCount() + // },1000 * 60 * 2) }, methods: { getList: function() { diff --git a/yunxi-ui-admin/src/views/demo/material/index.vue b/yunxi-ui-admin/src/views/demo/material/index.vue index 7e964b4..b7f088c 100644 --- a/yunxi-ui-admin/src/views/demo/material/index.vue +++ b/yunxi-ui-admin/src/views/demo/material/index.vue @@ -9,21 +9,21 @@ + :key="dict.value" :label="dict.label" :value="parseInt(dict.value)"/> + :key="dict.value" :label="dict.label" :value="parseInt(dict.value)"/> + + + + + - - - - - - @@ -63,7 +63,7 @@ @@ -288,11 +288,11 @@ export default { params.pageNo = undefined; params.pageSize = undefined; this.$modal.confirm('是否确认导出所有物料管理数据项?').then(() => { - this.exportLoading = true; + // this.exportLoading = true; return exportMaterialExcel(params); }).then(response => { this.$download.excel(response, '物料管理.xls'); - this.exportLoading = false; + // this.exportLoading = false; }).catch(() => {}); } } diff --git a/yunxi-ui-admin/src/views/system/sensitiveWord/index.vue b/yunxi-ui-admin/src/views/system/sensitiveWord/index.vue index acc681c..164d1d8 100644 --- a/yunxi-ui-admin/src/views/system/sensitiveWord/index.vue +++ b/yunxi-ui-admin/src/views/system/sensitiveWord/index.vue @@ -315,7 +315,8 @@ export default { this.exportLoading = true; return exportSensitiveWordExcel(params); }).then(response => { - this.$download.excel(response, '${table.classComment}.xls'); + // this.$download.excel(response, '${table.classComment}.xls'); + this.$download.excel(response, '敏感词.xls'); this.exportLoading = false; }).catch(() => { }); From aa4c6b5c8667fd03d6449800036db346c1a41327 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?LI-CCONG=5C=E6=9D=8E=E8=81=AA=E8=81=AA?= <1441652193@qq.com> Date: Fri, 18 Aug 2023 16:44:00 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E5=AD=97=E6=AE=B5=E5=8A=A0=E5=AF=86?= =?UTF-8?q?=E8=A7=A3=E5=AF=86=E5=8A=9F=E8=83=BD=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatis/core/type/EncryptTypeHandler.java | 1 + .../controller/admin/DemoTestController.java | 43 ++++++++++++++++--- .../material/vo/MaterialExportTestVO.java | 3 ++ .../convert/material/MaterialXConvert.java | 24 +++++++++++ .../dal/dataobject/material/MaterialXDO.java | 17 +++++++- .../dal/mysql/material/MaterialXMapper.java | 15 +++++++ .../db/DataSourceConfigServiceImplTest.java | 15 +++---- .../test/resources/application-unit-test.yaml | 2 + .../src/main/resources/application.yaml | 1 + 9 files changed, 106 insertions(+), 15 deletions(-) create mode 100644 yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/convert/material/MaterialXConvert.java create mode 100644 yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/mysql/material/MaterialXMapper.java diff --git a/yunxi-framework/yunxi-spring-boot-starter-mybatis/src/main/java/com/yunxi/scm/framework/mybatis/core/type/EncryptTypeHandler.java b/yunxi-framework/yunxi-spring-boot-starter-mybatis/src/main/java/com/yunxi/scm/framework/mybatis/core/type/EncryptTypeHandler.java index ea029a9..985358f 100644 --- a/yunxi-framework/yunxi-spring-boot-starter-mybatis/src/main/java/com/yunxi/scm/framework/mybatis/core/type/EncryptTypeHandler.java +++ b/yunxi-framework/yunxi-spring-boot-starter-mybatis/src/main/java/com/yunxi/scm/framework/mybatis/core/type/EncryptTypeHandler.java @@ -67,6 +67,7 @@ public class EncryptTypeHandler extends BaseTypeHandler { } // 构建 AES String password = SpringUtil.getProperty(ENCRYPTOR_PROPERTY_NAME); +// String password = Optional.ofNullable(SpringUtil.getProperty(ENCRYPTOR_PROPERTY_NAME)).orElse("X+aZvWkl9jtRP9b2"); Assert.notEmpty(password, "配置项({}) 不能为空", ENCRYPTOR_PROPERTY_NAME); aes = SecureUtil.aes(password.getBytes()); return aes; diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/DemoTestController.java b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/DemoTestController.java index f35bba5..e0ea321 100644 --- a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/DemoTestController.java +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/DemoTestController.java @@ -2,11 +2,13 @@ package com.yunxi.scm.module.demo.controller.admin; import com.yunxi.scm.framework.common.pojo.CommonResult; import com.yunxi.scm.framework.excel.core.util.ExcelUtils; +import com.yunxi.scm.framework.mybatis.core.query.LambdaQueryWrapperX; import com.yunxi.scm.framework.operatelog.core.annotations.OperateLog; import com.yunxi.scm.module.demo.controller.admin.material.vo.MaterialExportTestVO; import com.yunxi.scm.module.demo.controller.admin.material.vo.MaterialImportTestVO; -import com.yunxi.scm.module.demo.convert.material.MaterialConvert; +import com.yunxi.scm.module.demo.convert.material.MaterialXConvert; import com.yunxi.scm.module.demo.dal.dataobject.material.MaterialXDO; +import com.yunxi.scm.module.demo.dal.mysql.material.MaterialXMapper; import com.yunxi.scm.module.demo.enums.material.CategoryEnum; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -16,6 +18,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; import javax.annotation.security.PermitAll; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @@ -23,6 +26,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; +import java.util.stream.Stream; import static com.yunxi.scm.framework.common.pojo.CommonResult.success; import static com.yunxi.scm.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; @@ -47,12 +51,12 @@ public class DemoTestController { @PermitAll @OperateLog(type = EXPORT) public void testExport(HttpServletResponse response) throws IOException { - MaterialXDO xdo1 = new MaterialXDO(Arrays.asList("1","2")); - MaterialXDO xdo2 = new MaterialXDO(Arrays.asList("1","3")); + MaterialXDO xdo1 = new MaterialXDO(1L,"80inu5yxl3",Arrays.asList("1","2")); + MaterialXDO xdo2 = new MaterialXDO(2L,"Q2ZY1I9cCBf0YKvDUlzCbw==",Arrays.asList("1","3")); List xdos = new ArrayList<>(); xdos.add(xdo1); xdos.add(xdo2); - List datas = MaterialConvert.INSTANCE.convertList03(xdos); + List datas = MaterialXConvert.INSTANCE.convertList03(xdos); ExcelUtils.write(response, "测试导出.xls", "数据", MaterialExportTestVO.class, datas); } @@ -76,8 +80,8 @@ public class DemoTestController { @PermitAll @Operation(summary = "获得导入模板") public void importTemplate(HttpServletResponse response) throws IOException { - List values = Arrays.asList(CategoryEnum.COMMON.getCode(),CategoryEnum.KANJIA.getCode()) - .stream().map(v-> String.valueOf(v)).collect(Collectors.toList()); + List values = Stream.of(CategoryEnum.COMMON.getCode(),CategoryEnum.KANJIA.getCode()) + .map(String::valueOf).collect(Collectors.toList()); // 手动创建导出 demo List list = Arrays.asList( MaterialImportTestVO.builder().category(values).build() @@ -85,4 +89,31 @@ public class DemoTestController { // 输出 ExcelUtils.write(response, "导入模板.xls", "物料标准模版", MaterialImportTestVO.class, list); } + + @Resource + MaterialXMapper materialXMapper; + + @GetMapping("/test_encrypt") + @Operation(summary = "测试字段加密") + @PermitAll + public CommonResult testEncrypt() { + MaterialXDO xdo1 = new MaterialXDO(1L,"80inu5yxl3",Arrays.asList("1","2")); + MaterialXDO xdo2 = new MaterialXDO(2L,"80inu5yxl3",Arrays.asList("1","3")); + List xdos = new ArrayList<>(); + xdos.add(xdo1); + xdos.add(xdo2); + materialXMapper.insertBatch(xdos); + return success("ok"); + } + + @GetMapping("/test_decrypt") + @Operation(summary = "测试字段解密") + @PermitAll + public CommonResult testDecrypt() { + LambdaQueryWrapperX wrapperX = new LambdaQueryWrapperX<>(); + wrapperX.eq(MaterialXDO::getId, 1); + MaterialXDO xdo = materialXMapper.selectOne(wrapperX); + return success(MaterialXConvert.INSTANCE.convert(xdo)); + } + } diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialExportTestVO.java b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialExportTestVO.java index 2a63529..55330c8 100644 --- a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialExportTestVO.java +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/vo/MaterialExportTestVO.java @@ -12,6 +12,9 @@ import java.util.List; @Data public class MaterialExportTestVO { + @ExcelProperty(value = "密码") + private String password; + @ExcelProperty(value = "分类测试", converter = MutilDictConvert.class) @DictFormat(DictTypeConstants.TRADE_ORDER_TYPE) private List category; diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/convert/material/MaterialXConvert.java b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/convert/material/MaterialXConvert.java new file mode 100644 index 0000000..b59f25f --- /dev/null +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/convert/material/MaterialXConvert.java @@ -0,0 +1,24 @@ +package com.yunxi.scm.module.demo.convert.material; + +import com.yunxi.scm.module.demo.controller.admin.material.vo.MaterialExportTestVO; +import com.yunxi.scm.module.demo.dal.dataobject.material.MaterialXDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.List; + +/** + * 物料管理 Convert + * + * @author ccongli + */ +@Mapper +public interface MaterialXConvert { + + MaterialXConvert INSTANCE = Mappers.getMapper(MaterialXConvert.class); + + MaterialExportTestVO convert(MaterialXDO xdo); + + List convertList03(List list); + +} diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/dataobject/material/MaterialXDO.java b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/dataobject/material/MaterialXDO.java index 686cae9..f0c246e 100644 --- a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/dataobject/material/MaterialXDO.java +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/dataobject/material/MaterialXDO.java @@ -1,15 +1,30 @@ package com.yunxi.scm.module.demo.dal.dataobject.material; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.yunxi.scm.framework.mybatis.core.type.EncryptTypeHandler; +import com.yunxi.scm.framework.mybatis.core.type.StringListTypeHandler; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import java.io.Serializable; import java.util.List; @Data @NoArgsConstructor @AllArgsConstructor -public class MaterialXDO { +@TableName(value = "demo_xxx", autoResultMap = true) +public class MaterialXDO implements Serializable { + @TableId + private Long id; + + // 字段加密注解 + @TableField(typeHandler = EncryptTypeHandler.class) + private String password; + + @TableField(typeHandler = StringListTypeHandler.class) private List category; } diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/mysql/material/MaterialXMapper.java b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/mysql/material/MaterialXMapper.java new file mode 100644 index 0000000..ea31e5b --- /dev/null +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/mysql/material/MaterialXMapper.java @@ -0,0 +1,15 @@ +package com.yunxi.scm.module.demo.dal.mysql.material; + +import com.yunxi.scm.framework.mybatis.core.mapper.BaseMapperX; +import com.yunxi.scm.module.demo.dal.dataobject.material.MaterialXDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 测试专用 Mapper + * + * @author ccongli + */ +@Mapper +public interface MaterialXMapper extends BaseMapperX { + +} diff --git a/yunxi-module-infra/yunxi-module-infra-biz/src/test/java/com/yunxi/scm/module/infra/service/db/DataSourceConfigServiceImplTest.java b/yunxi-module-infra/yunxi-module-infra-biz/src/test/java/com/yunxi/scm/module/infra/service/db/DataSourceConfigServiceImplTest.java index 89d01d4..46f6f54 100644 --- a/yunxi-module-infra/yunxi-module-infra-biz/src/test/java/com/yunxi/scm/module/infra/service/db/DataSourceConfigServiceImplTest.java +++ b/yunxi-module-infra/yunxi-module-infra-biz/src/test/java/com/yunxi/scm/module/infra/service/db/DataSourceConfigServiceImplTest.java @@ -1,8 +1,9 @@ package com.yunxi.scm.module.infra.service.db; import cn.hutool.core.map.MapUtil; -import cn.hutool.core.util.ReflectUtil; import cn.hutool.crypto.symmetric.AES; +import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty; +import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties; import com.yunxi.scm.framework.mybatis.core.type.EncryptTypeHandler; import com.yunxi.scm.framework.mybatis.core.util.JdbcUtils; import com.yunxi.scm.framework.test.core.ut.BaseDbUnitTest; @@ -10,12 +11,9 @@ import com.yunxi.scm.module.infra.controller.admin.db.vo.DataSourceConfigCreateR import com.yunxi.scm.module.infra.controller.admin.db.vo.DataSourceConfigUpdateReqVO; import com.yunxi.scm.module.infra.dal.dataobject.db.DataSourceConfigDO; import com.yunxi.scm.module.infra.dal.mysql.db.DataSourceConfigMapper; -import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty; -import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.MockedStatic; -import org.mockito.stubbing.Answer; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.context.annotation.Import; @@ -28,7 +26,6 @@ import static com.yunxi.scm.framework.test.core.util.RandomUtils.randomLongId; import static com.yunxi.scm.framework.test.core.util.RandomUtils.randomPojo; import static com.yunxi.scm.module.infra.enums.ErrorCodeConstants.DATA_SOURCE_CONFIG_NOT_EXISTS; import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mockStatic; import static org.mockito.Mockito.when; @@ -56,9 +53,9 @@ public class DataSourceConfigServiceImplTest extends BaseDbUnitTest { @BeforeEach public void setUp() { // mock 一个空实现的 StringEncryptor,避免 EncryptTypeHandler 报错 - ReflectUtil.setFieldValue(EncryptTypeHandler.class, "aes", aes); - when(aes.encryptBase64(anyString())).then((Answer) invocation -> invocation.getArgument(0)); - when(aes.decryptStr(anyString())).then((Answer) invocation -> invocation.getArgument(0)); +// ReflectUtil.setFieldValue(EncryptTypeHandler.class, "aes", aes); +// when(aes.encryptBase64(anyString())).then((Answer) invocation -> invocation.getArgument(0)); +// when(aes.decryptStr(anyString())).then((Answer) invocation -> invocation.getArgument(0)); // mock DynamicDataSourceProperties when(dynamicDataSourceProperties.getPrimary()).thenReturn("primary"); @@ -145,6 +142,8 @@ public class DataSourceConfigServiceImplTest extends BaseDbUnitTest { DataSourceConfigDO dbDataSourceConfig = randomPojo(DataSourceConfigDO.class); dataSourceConfigMapper.insert(dbDataSourceConfig);// @Sql: 先插入出一条存在的数据 + System.out.println(dbDataSourceConfig.getPassword()); + System.out.println(EncryptTypeHandler.encrypt(dbDataSourceConfig.getPassword())); // 调用 DataSourceConfigDO result = dataSourceConfigMapper.selectOne(DataSourceConfigDO::getPassword, EncryptTypeHandler.encrypt(dbDataSourceConfig.getPassword())); diff --git a/yunxi-module-infra/yunxi-module-infra-biz/src/test/resources/application-unit-test.yaml b/yunxi-module-infra/yunxi-module-infra-biz/src/test/resources/application-unit-test.yaml index b994814..2684a2d 100644 --- a/yunxi-module-infra/yunxi-module-infra-biz/src/test/resources/application-unit-test.yaml +++ b/yunxi-module-infra/yunxi-module-infra-biz/src/test/resources/application-unit-test.yaml @@ -29,6 +29,8 @@ spring: mybatis-plus: lazy-initialization: true # 单元测试,设置 MyBatis Mapper 延迟加载,加速每个单元测试 type-aliases-package: ${yunxi.info.base-package}.module.*.dal.dataobject + encryptor: + password: X+aZvWkl9jtRP9b2 --- #################### 定时任务相关配置 #################### diff --git a/yunxi-server/src/main/resources/application.yaml b/yunxi-server/src/main/resources/application.yaml index c4fdadf..b73a62d 100644 --- a/yunxi-server/src/main/resources/application.yaml +++ b/yunxi-server/src/main/resources/application.yaml @@ -194,6 +194,7 @@ yunxi: - rep_demo_jianpiao - tmp_report_data_1 - tmp_report_data_income + - demo_xxx sms-code: # 短信验证码相关的配置项 expire-times: 10m send-frequency: 1m From 4302e820b0547ffe16bfd6d68af3c42cee0c8b21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?LI-CCONG=5C=E6=9D=8E=E8=81=AA=E8=81=AA?= <1441652193@qq.com> Date: Fri, 18 Aug 2023 17:59:40 +0800 Subject: [PATCH 4/4] =?UTF-8?q?demo=E6=B5=8B=E8=AF=95=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E7=B1=BB=E9=87=8D=E5=91=BD=E5=90=8D-=E9=98=B2Bean=E5=86=B2?= =?UTF-8?q?=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ntroller.java => PMaterialController.java} | 6 ++--- ...terialMapper.java => PMaterialMapper.java} | 2 +- ...rialService.java => PMaterialService.java} | 2 +- ...iceImpl.java => PMaterialServiceImpl.java} | 25 +++++++++++-------- .../mapper/material/MaterialMapper.xml | 2 +- .../material/MaterialServiceImplTest.java | 10 ++++---- 6 files changed, 25 insertions(+), 22 deletions(-) rename yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/{MaterialController.java => PMaterialController.java} (96%) rename yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/mysql/material/{MaterialMapper.java => PMaterialMapper.java} (96%) rename yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/service/material/{MaterialService.java => PMaterialService.java} (97%) rename yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/service/material/{MaterialServiceImpl.java => PMaterialServiceImpl.java} (78%) diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/MaterialController.java b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/PMaterialController.java similarity index 96% rename from yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/MaterialController.java rename to yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/PMaterialController.java index bf1dafd..aa3121b 100644 --- a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/MaterialController.java +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/controller/admin/material/PMaterialController.java @@ -8,7 +8,7 @@ import com.yunxi.scm.framework.operatelog.core.annotations.OperateLog; import com.yunxi.scm.module.demo.controller.admin.material.vo.*; import com.yunxi.scm.module.demo.convert.material.MaterialConvert; import com.yunxi.scm.module.demo.dal.dataobject.material.MaterialDO; -import com.yunxi.scm.module.demo.service.material.MaterialService; +import com.yunxi.scm.module.demo.service.material.PMaterialService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -30,10 +30,10 @@ import static com.yunxi.scm.framework.operatelog.core.enums.OperateTypeEnum.EXPO @RestController @RequestMapping("/demo/material") @Validated -public class MaterialController { +public class PMaterialController { @Resource - private MaterialService materialService; + private PMaterialService materialService; @PostMapping("/create") @Operation(summary = "创建物料管理") diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/mysql/material/MaterialMapper.java b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/mysql/material/PMaterialMapper.java similarity index 96% rename from yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/mysql/material/MaterialMapper.java rename to yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/mysql/material/PMaterialMapper.java index fd38697..297bf07 100644 --- a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/mysql/material/MaterialMapper.java +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/dal/mysql/material/PMaterialMapper.java @@ -16,7 +16,7 @@ import java.util.List; * @author ccongli */ @Mapper -public interface MaterialMapper extends BaseMapperX { +public interface PMaterialMapper extends BaseMapperX { default PageResult selectPage(MaterialPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/service/material/MaterialService.java b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/service/material/PMaterialService.java similarity index 97% rename from yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/service/material/MaterialService.java rename to yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/service/material/PMaterialService.java index 66433c5..f318e18 100644 --- a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/service/material/MaterialService.java +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/service/material/PMaterialService.java @@ -11,7 +11,7 @@ import com.yunxi.scm.framework.common.pojo.PageResult; * * @author ccongli */ -public interface MaterialService { +public interface PMaterialService { /** * 创建物料管理 diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/service/material/MaterialServiceImpl.java b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/service/material/PMaterialServiceImpl.java similarity index 78% rename from yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/service/material/MaterialServiceImpl.java rename to yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/service/material/PMaterialServiceImpl.java index e64e8ec..5b51fb2 100644 --- a/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/service/material/MaterialServiceImpl.java +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/java/com/yunxi/scm/module/demo/service/material/PMaterialServiceImpl.java @@ -1,19 +1,22 @@ package com.yunxi.scm.module.demo.service.material; +import com.yunxi.scm.framework.common.pojo.PageResult; +import com.yunxi.scm.module.demo.controller.admin.material.vo.MaterialCreateReqVO; +import com.yunxi.scm.module.demo.controller.admin.material.vo.MaterialExportReqVO; +import com.yunxi.scm.module.demo.controller.admin.material.vo.MaterialPageReqVO; +import com.yunxi.scm.module.demo.controller.admin.material.vo.MaterialUpdateReqVO; +import com.yunxi.scm.module.demo.convert.material.MaterialConvert; +import com.yunxi.scm.module.demo.dal.dataobject.material.MaterialDO; +import com.yunxi.scm.module.demo.dal.mysql.material.PMaterialMapper; import org.springframework.stereotype.Service; -import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; -import java.util.*; -import com.yunxi.scm.module.demo.controller.admin.material.vo.*; -import com.yunxi.scm.module.demo.dal.dataobject.material.MaterialDO; -import com.yunxi.scm.framework.common.pojo.PageResult; - -import com.yunxi.scm.module.demo.convert.material.MaterialConvert; -import com.yunxi.scm.module.demo.dal.mysql.material.MaterialMapper; +import javax.annotation.Resource; +import java.util.Collection; +import java.util.List; import static com.yunxi.scm.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.yunxi.scm.module.demo.enums.ErrorCodeConstants.*; +import static com.yunxi.scm.module.demo.enums.ErrorCodeConstants.MATERIAL_NOT_EXISTS; /** * 物料管理 Service 实现类 @@ -22,10 +25,10 @@ import static com.yunxi.scm.module.demo.enums.ErrorCodeConstants.*; */ @Service @Validated -public class MaterialServiceImpl implements MaterialService { +public class PMaterialServiceImpl implements PMaterialService { @Resource - private MaterialMapper materialMapper; + private PMaterialMapper materialMapper; @Override public Long createMaterial(MaterialCreateReqVO createReqVO) { diff --git a/yunxi-module-demo/yunxi-module-demo-biz/src/main/resources/mapper/material/MaterialMapper.xml b/yunxi-module-demo/yunxi-module-demo-biz/src/main/resources/mapper/material/MaterialMapper.xml index 298d139..f2091d2 100644 --- a/yunxi-module-demo/yunxi-module-demo-biz/src/main/resources/mapper/material/MaterialMapper.xml +++ b/yunxi-module-demo/yunxi-module-demo-biz/src/main/resources/mapper/material/MaterialMapper.xml @@ -1,6 +1,6 @@ - +