From bc4f2e1df854c5d2708f53ce454ebd06202a39ce 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: Mon, 21 Aug 2023 12:56:08 +0800
Subject: [PATCH] =?UTF-8?q?=E4=B8=8D=E5=90=8C=E5=8C=85=E4=B8=8B=E7=9A=84?=
=?UTF-8?q?=E7=9B=B8=E5=90=8C=E7=B1=BBBean=E6=B3=A8=E5=86=8C=E5=8F=91?=
=?UTF-8?q?=E7=94=9F=E5=86=B2=E7=AA=81=E8=A7=A3=E5=86=B3=E6=96=B9=E6=A1=88?=
=?UTF-8?q?=E6=A1=88=E4=BE=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 1 +
yunxi-module-demo2/pom.xml | 24 +++
.../yunxi-module-demo2-api/pom.xml | 28 +++
.../module/demo2/enums/DictTypeConstants.java | 18 ++
.../demo2/enums/ErrorCodeConstants.java | 9 +
.../yunxi-module-demo2-biz/pom.xml | 72 +++++++
.../admin/DemoTest88Controller.java | 119 ++++++++++++
.../admin/pmaterial/PMaterialController.java | 103 ++++++++++
.../admin/pmaterial/vo/PMaterialBaseVO.java | 48 +++++
.../pmaterial/vo/PMaterialCreateReqVO.java | 12 ++
.../admin/pmaterial/vo/PMaterialExcelVO.java | 56 ++++++
.../pmaterial/vo/PMaterialExportReqVO.java | 31 +++
.../pmaterial/vo/PMaterialExportTestVO.java | 21 ++
.../pmaterial/vo/PMaterialImportTestVO.java | 27 +++
.../pmaterial/vo/PMaterialPageReqVO.java | 36 ++++
.../admin/pmaterial/vo/PMaterialRespVO.java | 19 ++
.../pmaterial/vo/PMaterialUpdateReqVO.java | 18 ++
.../convert/pmaterial/PMaterialConvert.java | 37 ++++
.../convert/pmaterial/PMaterialXConvert.java | 24 +++
.../dal/dataobject/pmaterial/PMaterialDO.java | 73 +++++++
.../dataobject/pmaterial/PMaterialXDO.java | 32 ++++
.../dal/mysql/pmaterial/PMaterialMapper.java | 43 +++++
.../dal/mysql/pmaterial/PMaterialXMapper.java | 17 ++
.../demo2/enums/pmaterial/CategoryEnum.java | 34 ++++
.../service/pmaterial/PMaterialService.java | 73 +++++++
.../pmaterial/PMaterialServiceImpl.java | 85 +++++++++
.../mapper/pmaterial/PMaterialMapper.xml | 12 ++
.../pmaterial/MaterialServiceImplTest.java | 179 ++++++++++++++++++
.../src/test/resources/sql/clean.sql | 2 +
.../src/test/resources/sql/create_tables.sql | 19 ++
.../src/test/resources/sql/menu.sql | 55 ++++++
yunxi-server/pom.xml | 6 +
.../scm/server/YunxiServerApplication.java | 23 ++-
33 files changed, 1349 insertions(+), 7 deletions(-)
create mode 100644 yunxi-module-demo2/pom.xml
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-api/pom.xml
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-api/src/main/java/com/yunxi/scm/module/demo2/enums/DictTypeConstants.java
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-api/src/main/java/com/yunxi/scm/module/demo2/enums/ErrorCodeConstants.java
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/pom.xml
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/DemoTest88Controller.java
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/PMaterialController.java
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialBaseVO.java
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialCreateReqVO.java
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialExcelVO.java
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialExportReqVO.java
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialExportTestVO.java
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialImportTestVO.java
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialPageReqVO.java
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialRespVO.java
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialUpdateReqVO.java
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/convert/pmaterial/PMaterialConvert.java
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/convert/pmaterial/PMaterialXConvert.java
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/dal/dataobject/pmaterial/PMaterialDO.java
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/dal/dataobject/pmaterial/PMaterialXDO.java
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/dal/mysql/pmaterial/PMaterialMapper.java
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/dal/mysql/pmaterial/PMaterialXMapper.java
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/enums/pmaterial/CategoryEnum.java
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/service/pmaterial/PMaterialService.java
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/service/pmaterial/PMaterialServiceImpl.java
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/main/resources/mapper/pmaterial/PMaterialMapper.xml
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/test/java/com/yunxi/scm/module/demo2/service/pmaterial/MaterialServiceImplTest.java
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/test/resources/sql/clean.sql
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/test/resources/sql/create_tables.sql
create mode 100644 yunxi-module-demo2/yunxi-module-demo2-biz/src/test/resources/sql/menu.sql
diff --git a/pom.xml b/pom.xml
index 505e746..9e72910 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,6 +24,7 @@
yunxi-example
yunxi-module-demo
+ yunxi-module-demo2
yunxi-module-xxjj
diff --git a/yunxi-module-demo2/pom.xml b/yunxi-module-demo2/pom.xml
new file mode 100644
index 0000000..243a014
--- /dev/null
+++ b/yunxi-module-demo2/pom.xml
@@ -0,0 +1,24 @@
+
+
+
+ yunxi
+ com.yunxi.scm
+ ${revision}
+
+ 4.0.0
+
+ yunxi-module-demo2
+ pom
+
+ ${project.artifactId}
+
+ demo2 模块,主要实现 XXX、YYY、ZZZ 等功能。
+
+
+ yunxi-module-demo2-api
+ yunxi-module-demo2-biz
+
+
+
\ No newline at end of file
diff --git a/yunxi-module-demo2/yunxi-module-demo2-api/pom.xml b/yunxi-module-demo2/yunxi-module-demo2-api/pom.xml
new file mode 100644
index 0000000..5a90a5a
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-api/pom.xml
@@ -0,0 +1,28 @@
+
+
+
+ yunxi-module-demo2
+ com.yunxi.scm
+ ${revision}
+
+ 4.0.0
+
+ yunxi-module-demo2-api
+ jar
+
+ ${project.artifactId}
+
+ demo2 模块 API,暴露给其它模块调用
+
+
+
+
+
+ com.yunxi.scm
+ yunxi-common
+
+
+
+
\ No newline at end of file
diff --git a/yunxi-module-demo2/yunxi-module-demo2-api/src/main/java/com/yunxi/scm/module/demo2/enums/DictTypeConstants.java b/yunxi-module-demo2/yunxi-module-demo2-api/src/main/java/com/yunxi/scm/module/demo2/enums/DictTypeConstants.java
new file mode 100644
index 0000000..f789062
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-api/src/main/java/com/yunxi/scm/module/demo2/enums/DictTypeConstants.java
@@ -0,0 +1,18 @@
+package com.yunxi.scm.module.demo2.enums;
+
+/**
+ * System 字典类型的枚举类
+ *
+ * @author 芋道源码
+ */
+public interface DictTypeConstants {
+
+ String USER_TYPE = "user_type"; // 用户类型
+ String COMMON_STATUS = "common_status"; // 系统状态
+
+ String MATERIAL_STATUS = "material_status"; // 物料状态
+
+ // ========== SYSTEM 模块 ==========
+ String TRADE_ORDER_TYPE = "trade_order_type"; // 订单交易类型
+
+}
diff --git a/yunxi-module-demo2/yunxi-module-demo2-api/src/main/java/com/yunxi/scm/module/demo2/enums/ErrorCodeConstants.java b/yunxi-module-demo2/yunxi-module-demo2-api/src/main/java/com/yunxi/scm/module/demo2/enums/ErrorCodeConstants.java
new file mode 100644
index 0000000..4c28f87
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-api/src/main/java/com/yunxi/scm/module/demo2/enums/ErrorCodeConstants.java
@@ -0,0 +1,9 @@
+// TODO 待办:请将下面的错误码复制到 yunxi-module-demo-api 模块的 ErrorCodeConstants 类中。注意,请给“TODO 补充编号”设置一个错误码编号!!!
+// ========== 物料管理 TODO 补充编号 ==========
+package com.yunxi.scm.module.demo2.enums;
+
+import com.yunxi.scm.framework.common.exception.ErrorCode;
+
+public interface ErrorCodeConstants {
+ ErrorCode MATERIAL_NOT_EXISTS = new ErrorCode(2023091001, "物料管理不存在");
+}
\ No newline at end of file
diff --git a/yunxi-module-demo2/yunxi-module-demo2-biz/pom.xml b/yunxi-module-demo2/yunxi-module-demo2-biz/pom.xml
new file mode 100644
index 0000000..fcd7859
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/pom.xml
@@ -0,0 +1,72 @@
+
+
+
+ yunxi-module-demo2
+ com.yunxi.scm
+ ${revision}
+
+ 4.0.0
+ jar
+
+ yunxi-module-demo2-biz
+
+ ${project.artifactId}
+
+ demo 模块,主要实现 XXX、YYY、ZZZ 等功能。
+
+
+
+
+
+ com.yunxi.scm
+ yunxi-module-demo2-api
+ ${revision}
+
+
+
+
+ com.yunxi.scm
+ yunxi-spring-boot-starter-biz-operatelog
+
+
+
+
+ com.yunxi.scm
+ 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
+ yunxi-spring-boot-starter-mybatis
+
+
+
+
+ com.yunxi.scm
+ yunxi-spring-boot-starter-test
+
+
+
+
+ com.yunxi.scm
+ yunxi-spring-boot-starter-excel
+
+
+
+
+
\ No newline at end of file
diff --git a/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/DemoTest88Controller.java b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/DemoTest88Controller.java
new file mode 100644
index 0000000..10d3149
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/DemoTest88Controller.java
@@ -0,0 +1,119 @@
+package com.yunxi.scm.module.demo2.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.demo2.controller.admin.pmaterial.vo.PMaterialExportTestVO;
+import com.yunxi.scm.module.demo2.controller.admin.pmaterial.vo.PMaterialImportTestVO;
+import com.yunxi.scm.module.demo2.convert.pmaterial.PMaterialXConvert;
+import com.yunxi.scm.module.demo2.dal.dataobject.pmaterial.PMaterialXDO;
+import com.yunxi.scm.module.demo2.dal.mysql.pmaterial.PMaterialXMapper;
+import com.yunxi.scm.module.demo2.enums.pmaterial.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.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+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 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;
+import static com.yunxi.scm.framework.operatelog.core.enums.OperateTypeEnum.IMPORT;
+
+@Tag(name = "管理后台 - Test2")
+@RestController
+@RequestMapping("/demo2/test")
+@Validated
+public class DemoTest88Controller {
+
+ @GetMapping("/get")
+ @Operation(summary = "获取 test 信息")
+ @PermitAll // 无需认证即可访问
+ public CommonResult get() {
+ return success("无需认证即可访问的后台接口");
+ }
+
+
+ @GetMapping("/test_export")
+ @Operation(summary = "测试导出和字典转化")
+ @PermitAll
+ @OperateLog(type = EXPORT)
+ public void testExport(HttpServletResponse response) throws IOException {
+ PMaterialXDO xdo1 = new PMaterialXDO(1L,"80inu5yxl3",Arrays.asList("1","2"));
+ PMaterialXDO xdo2 = new PMaterialXDO(2L,"Q2ZY1I9cCBf0YKvDUlzCbw==",Arrays.asList("1","3"));
+ List xdos = new ArrayList<>();
+ xdos.add(xdo1);
+ xdos.add(xdo2);
+ List datas = PMaterialXConvert.INSTANCE.convertList03(xdos);
+ ExcelUtils.write(response, "测试导出.xls", "数据", PMaterialExportTestVO.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, PMaterialImportTestVO.class);
+ return success(list);
+ }
+
+
+ @GetMapping("/get-import-template")
+ @PermitAll
+ @Operation(summary = "获得导入模板")
+ public void importTemplate(HttpServletResponse response) throws IOException {
+ List values = Stream.of(CategoryEnum.COMMON.getCode(),CategoryEnum.KANJIA.getCode())
+ .map(String::valueOf).collect(Collectors.toList());
+ // 手动创建导出 demo
+ List list = Arrays.asList(
+ PMaterialImportTestVO.builder().category(values).build()
+ );
+ // 输出
+ ExcelUtils.write(response, "导入模板.xls", "物料标准模版", PMaterialImportTestVO.class, list);
+ }
+
+ @Resource
+ PMaterialXMapper materialXMapper;
+
+ @GetMapping("/test_encrypt")
+ @Operation(summary = "测试字段加密")
+ @PermitAll
+ public CommonResult testEncrypt() {
+ PMaterialXDO xdo1 = new PMaterialXDO(1L,"80inu5yxl3",Arrays.asList("1","2"));
+ PMaterialXDO xdo2 = new PMaterialXDO(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(PMaterialXDO::getId, 1);
+ PMaterialXDO xdo = materialXMapper.selectOne(wrapperX);
+ return success(PMaterialXConvert.INSTANCE.convert(xdo));
+ }
+
+}
diff --git a/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/PMaterialController.java b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/PMaterialController.java
new file mode 100644
index 0000000..d193aed
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/PMaterialController.java
@@ -0,0 +1,103 @@
+package com.yunxi.scm.module.demo2.controller.admin.pmaterial;
+
+import com.yunxi.scm.framework.common.pojo.CommonResult;
+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 com.yunxi.scm.module.demo2.convert.pmaterial.PMaterialConvert;
+import com.yunxi.scm.module.demo2.dal.dataobject.pmaterial.PMaterialDO;
+import com.yunxi.scm.module.demo2.service.pmaterial.PMaterialService;
+import com.yunxi.scm.module.demo2.controller.admin.pmaterial.vo.*;
+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.annotation.security.PermitAll;
+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("PMaterialController2")
+@RequestMapping("/demo2/material")
+@Validated
+public class PMaterialController {
+
+ @Resource // 先ByName,找不到再ByType,如果指定了name属性,ByName找不到则报错
+ private PMaterialService materialService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建物料管理")
+ @PreAuthorize("@ss.hasPermission('demo:material:create')")
+ public CommonResult createMaterial(@Valid @RequestBody PMaterialCreateReqVO createReqVO) {
+ return success(materialService.createMaterial(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新物料管理")
+ @PreAuthorize("@ss.hasPermission('demo:material:update')")
+ public CommonResult updateMaterial(@Valid @RequestBody PMaterialUpdateReqVO updateReqVO) {
+ materialService.updateMaterial(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除物料管理")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('demo:material:delete')")
+ public CommonResult deleteMaterial(@RequestParam("id") Long id) {
+ materialService.deleteMaterial(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得物料管理")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('demo:material:query')")
+ public CommonResult getMaterial(@RequestParam("id") Long id) {
+ PMaterialDO material = materialService.getMaterial(id);
+ return success(PMaterialConvert.INSTANCE.convert(material));
+ }
+
+ @GetMapping("/list")
+ @Operation(summary = "获得物料管理列表")
+ @Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
+// @PreAuthorize("@ss.hasPermission('demo:material:query')")
+ @PermitAll
+ public CommonResult> getMaterialList(@RequestParam("ids") Collection ids) {
+ List list = materialService.getMaterialList(ids);
+ return success(PMaterialConvert.INSTANCE.convertList(list));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得物料管理分页")
+ @PreAuthorize("@ss.hasPermission('demo:material:query')")
+ @DataPermission // 数据权限功能,默认是开启的
+ public CommonResult> getMaterialPage(@Valid PMaterialPageReqVO pageVO) {
+ PageResult pageResult = materialService.getMaterialPage(pageVO);
+ return success(PMaterialConvert.INSTANCE.convertPage(pageResult));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出物料管理 Excel")
+ @PreAuthorize("@ss.hasPermission('demo:material:export')")
+ @OperateLog(type = EXPORT)
+ public void exportMaterialExcel(@Valid PMaterialExportReqVO exportReqVO,
+ HttpServletResponse response) throws IOException {
+ List list = materialService.getMaterialList(exportReqVO);
+ // 导出 Excel
+ List datas = PMaterialConvert.INSTANCE.convertList02(list);
+ ExcelUtils.write(response, "物料管理.xls", "数据", PMaterialExcelVO.class, datas);
+ }
+
+}
diff --git a/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialBaseVO.java b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialBaseVO.java
new file mode 100644
index 0000000..60ece6c
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialBaseVO.java
@@ -0,0 +1,48 @@
+package com.yunxi.scm.module.demo2.controller.admin.pmaterial.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 物料管理 Base VO,提供给添加、修改、详细的子 VO 使用
+ * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
+ */
+@Data
+public class PMaterialBaseVO {
+
+ @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+ @NotNull(message = "名称不能为空")
+ private String name;
+
+ @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @NotNull(message = "状态不能为空")
+ private Byte status;
+
+ @Schema(description = "类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+ @NotNull(message = "类型不能为空")
+ private Byte type;
+
+ @Schema(description = "分类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1,2")
+ @NotNull(message = "分类不能为空")
+ private List categories;
+
+ @Schema(description = "图片", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn")
+ @NotNull(message = "图片不能为空")
+ private String imgurl;
+
+ @Schema(description = "库存数量", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "库存数量不能为空")
+ private Integer stock;
+
+ @Schema(description = "单价", requiredMode = Schema.RequiredMode.REQUIRED, example = "18.00")
+ @NotNull(message = "单价不能为空")
+ private BigDecimal price;
+
+ @Schema(description = "备注", example = "物料备注")
+ private String remark;
+
+}
diff --git a/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialCreateReqVO.java b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialCreateReqVO.java
new file mode 100644
index 0000000..6711268
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialCreateReqVO.java
@@ -0,0 +1,12 @@
+package com.yunxi.scm.module.demo2.controller.admin.pmaterial.vo;
+
+import lombok.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+@Schema(description = "管理后台 - 物料管理创建 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class PMaterialCreateReqVO extends PMaterialBaseVO {
+
+}
diff --git a/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialExcelVO.java b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialExcelVO.java
new file mode 100644
index 0000000..25030bf
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialExcelVO.java
@@ -0,0 +1,56 @@
+package com.yunxi.scm.module.demo2.controller.admin.pmaterial.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.demo2.enums.DictTypeConstants;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+
+/**
+ * 物料管理 Excel VO
+ *
+ * @author ccongli
+ */
+@Data
+public class PMaterialExcelVO {
+
+ @ExcelProperty("编号")
+ private Long id;
+
+ @ExcelProperty("名称")
+ private String name;
+
+ @ExcelProperty(value = "状态", converter = DictConvert.class)
+ @DictFormat(DictTypeConstants.MATERIAL_STATUS)
+ private Byte status;
+
+ @ExcelProperty(value = "类型", converter = DictConvert.class)
+ @DictFormat(DictTypeConstants.TRADE_ORDER_TYPE)
+ private Byte type;
+
+ @ExcelProperty(value = "分类", converter = JsonConvert.class)
+ private List categories;
+
+
+ @ExcelProperty("图片")
+ private String imgurl;
+
+ @ExcelProperty("库存数量")
+ private Integer stock;
+
+ @ExcelProperty("单价")
+ private BigDecimal price;
+
+ @ExcelProperty("备注")
+ private String remark;
+
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+}
diff --git a/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialExportReqVO.java b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialExportReqVO.java
new file mode 100644
index 0000000..96b2f98
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialExportReqVO.java
@@ -0,0 +1,31 @@
+package com.yunxi.scm.module.demo2.controller.admin.pmaterial.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 物料管理 Excel 导出 Request VO,参数和 PMaterialPageReqVO 是一致的")
+@Data
+public class PMaterialExportReqVO {
+
+ @Schema(description = "名称", example = "李四")
+ private String name;
+
+ @Schema(description = "状态", example = "1")
+ private Byte status;
+
+ @Schema(description = "类型", example = "2")
+ private Byte type;
+
+ @Schema(description = "分类", example = "1")
+ private String category;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
diff --git a/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialExportTestVO.java b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialExportTestVO.java
new file mode 100644
index 0000000..e81afa6
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialExportTestVO.java
@@ -0,0 +1,21 @@
+package com.yunxi.scm.module.demo2.controller.admin.pmaterial.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.demo2.enums.DictTypeConstants;
+import lombok.Data;
+
+import java.util.List;
+
+// 测试转换
+@Data
+public class PMaterialExportTestVO {
+
+ @ExcelProperty(value = "密码")
+ private String password;
+
+ @ExcelProperty(value = "分类测试", converter = MutilDictConvert.class)
+ @DictFormat(DictTypeConstants.TRADE_ORDER_TYPE)
+ private List category;
+}
diff --git a/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialImportTestVO.java b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialImportTestVO.java
new file mode 100644
index 0000000..b2f4795
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialImportTestVO.java
@@ -0,0 +1,27 @@
+package com.yunxi.scm.module.demo2.controller.admin.pmaterial.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.demo2.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 PMaterialImportTestVO {
+
+
+
+ @ExcelProperty(value = "分类测试", converter = MutilDictConvert.class)
+ @DictFormat(DictTypeConstants.TRADE_ORDER_TYPE)
+ private List category;
+}
diff --git a/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialPageReqVO.java b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialPageReqVO.java
new file mode 100644
index 0000000..92a7f5c
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialPageReqVO.java
@@ -0,0 +1,36 @@
+package com.yunxi.scm.module.demo2.controller.admin.pmaterial.vo;
+
+import com.yunxi.scm.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 物料管理分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class PMaterialPageReqVO extends PageParam {
+
+ @Schema(description = "名称", example = "李四")
+ private String name;
+
+ @Schema(description = "状态", example = "1")
+ private Byte status;
+
+ @Schema(description = "类型", example = "2")
+ private Byte type;
+
+ @Schema(description = "分类", example = "2")
+ private String category;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
diff --git a/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialRespVO.java b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialRespVO.java
new file mode 100644
index 0000000..202f560
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialRespVO.java
@@ -0,0 +1,19 @@
+package com.yunxi.scm.module.demo2.controller.admin.pmaterial.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 物料管理 Response VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class PMaterialRespVO extends PMaterialBaseVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14541")
+ private Long id;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ private LocalDateTime createTime;
+
+}
diff --git a/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialUpdateReqVO.java b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialUpdateReqVO.java
new file mode 100644
index 0000000..f35baf6
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/controller/admin/pmaterial/vo/PMaterialUpdateReqVO.java
@@ -0,0 +1,18 @@
+package com.yunxi.scm.module.demo2.controller.admin.pmaterial.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 物料管理更新 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class PMaterialUpdateReqVO extends PMaterialBaseVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14541")
+ @NotNull(message = "ID不能为空")
+ private Long id;
+
+}
diff --git a/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/convert/pmaterial/PMaterialConvert.java b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/convert/pmaterial/PMaterialConvert.java
new file mode 100644
index 0000000..383f4fa
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/convert/pmaterial/PMaterialConvert.java
@@ -0,0 +1,37 @@
+package com.yunxi.scm.module.demo2.convert.pmaterial;
+
+import com.yunxi.scm.framework.common.pojo.PageResult;
+import com.yunxi.scm.module.demo2.controller.admin.pmaterial.vo.*;
+import com.yunxi.scm.module.demo2.dal.dataobject.pmaterial.PMaterialDO;
+import com.yunxi.scm.module.demo2.dal.dataobject.pmaterial.PMaterialXDO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 物料管理 Convert
+ *
+ * @author ccongli
+ */
+@Mapper
+public interface PMaterialConvert {
+
+ PMaterialConvert INSTANCE = Mappers.getMapper(PMaterialConvert.class);
+
+ PMaterialDO convert(PMaterialCreateReqVO bean);
+
+ PMaterialDO convert(PMaterialUpdateReqVO bean);
+
+ PMaterialRespVO convert(PMaterialDO bean);
+
+ List convertList(List list);
+
+ PageResult convertPage(PageResult page);
+
+ List convertList02(List list);
+
+
+ List convertList03(List list);
+
+}
diff --git a/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/convert/pmaterial/PMaterialXConvert.java b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/convert/pmaterial/PMaterialXConvert.java
new file mode 100644
index 0000000..988cd0e
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/convert/pmaterial/PMaterialXConvert.java
@@ -0,0 +1,24 @@
+package com.yunxi.scm.module.demo2.convert.pmaterial;
+
+import com.yunxi.scm.module.demo2.controller.admin.pmaterial.vo.PMaterialExportTestVO;
+import com.yunxi.scm.module.demo2.dal.dataobject.pmaterial.PMaterialXDO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 物料管理 Convert
+ *
+ * @author ccongli
+ */
+@Mapper
+public interface PMaterialXConvert {
+
+ PMaterialXConvert INSTANCE = Mappers.getMapper(PMaterialXConvert.class);
+
+ PMaterialExportTestVO convert(PMaterialXDO xdo);
+
+ List convertList03(List list);
+
+}
diff --git a/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/dal/dataobject/pmaterial/PMaterialDO.java b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/dal/dataobject/pmaterial/PMaterialDO.java
new file mode 100644
index 0000000..211bfa6
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/dal/dataobject/pmaterial/PMaterialDO.java
@@ -0,0 +1,73 @@
+package com.yunxi.scm.module.demo2.dal.dataobject.pmaterial;
+
+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.mybatis.core.dataobject.BaseDO;
+import com.yunxi.scm.framework.mybatis.core.type.StringListTypeHandler;
+import lombok.*;
+import org.apache.ibatis.type.Alias;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 物料管理 DO
+ *
+ * @author ccongli
+ */
+@TableName(value = "demo_material",autoResultMap = true)
+@KeySequence("demo_material_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@Alias("PMaterialDO2") // 解决实体类名重复映射问题
+public class PMaterialDO extends BaseDO {
+
+ /**
+ * ID
+ */
+ @TableId
+ private Long id;
+ /**
+ * 名称
+ */
+ private String name;
+ /**
+ * 状态
+ *
+ * 枚举 {@link TODO material_status 对应的类}
+ */
+ private Byte status;
+ /**
+ * 类型
+ */
+ private Byte type;
+ /**
+ * 分类
+ */
+// @TableField(typeHandler = JacksonTypeHandler.class)
+ @TableField(typeHandler = StringListTypeHandler.class)
+ private List categories;
+ /**
+ * 图片
+ */
+ private String imgurl;
+ /**
+ * 库存数量
+ */
+ private Integer stock;
+ /**
+ * 单价
+ */
+ private BigDecimal price;
+ /**
+ * 备注
+ */
+ private String remark;
+
+}
diff --git a/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/dal/dataobject/pmaterial/PMaterialXDO.java b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/dal/dataobject/pmaterial/PMaterialXDO.java
new file mode 100644
index 0000000..e993c32
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/dal/dataobject/pmaterial/PMaterialXDO.java
@@ -0,0 +1,32 @@
+package com.yunxi.scm.module.demo2.dal.dataobject.pmaterial;
+
+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 org.apache.ibatis.type.Alias;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@TableName(value = "demo_xxx", autoResultMap = true)
+@Alias("PMaterialXDO2")
+public class PMaterialXDO 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-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/dal/mysql/pmaterial/PMaterialMapper.java b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/dal/mysql/pmaterial/PMaterialMapper.java
new file mode 100644
index 0000000..863b254
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/dal/mysql/pmaterial/PMaterialMapper.java
@@ -0,0 +1,43 @@
+package com.yunxi.scm.module.demo2.dal.mysql.pmaterial;
+
+import com.yunxi.scm.framework.common.pojo.PageResult;
+import com.yunxi.scm.framework.mybatis.core.mapper.BaseMapperX;
+import com.yunxi.scm.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.yunxi.scm.module.demo2.controller.admin.pmaterial.vo.PMaterialExportReqVO;
+import com.yunxi.scm.module.demo2.controller.admin.pmaterial.vo.PMaterialPageReqVO;
+import com.yunxi.scm.module.demo2.dal.dataobject.pmaterial.PMaterialDO;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * 物料管理 Mapper
+ *
+ * @author ccongli
+ */
+@Mapper // 启动类加了MapperScan注解扫描之后可以不用再写Mapper注解
+@Repository("PMaterialMapper2")
+public interface PMaterialMapper extends BaseMapperX {
+
+ default PageResult selectPage(PMaterialPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .likeIfPresent(PMaterialDO::getName, reqVO.getName())
+ .eqIfPresent(PMaterialDO::getStatus, reqVO.getStatus())
+ .eqIfPresent(PMaterialDO::getType, reqVO.getType())
+ .likeIfPresent(PMaterialDO::getCategories, reqVO.getCategory())
+ .betweenIfPresent(PMaterialDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(PMaterialDO::getId));
+ }
+
+ default List selectList(PMaterialExportReqVO reqVO) {
+ return selectList(new LambdaQueryWrapperX()
+ .likeIfPresent(PMaterialDO::getName, reqVO.getName())
+ .eqIfPresent(PMaterialDO::getStatus, reqVO.getStatus())
+ .eqIfPresent(PMaterialDO::getType, reqVO.getType())
+ .likeIfPresent(PMaterialDO::getCategories, reqVO.getCategory())
+ .betweenIfPresent(PMaterialDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(PMaterialDO::getId));
+ }
+
+}
diff --git a/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/dal/mysql/pmaterial/PMaterialXMapper.java b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/dal/mysql/pmaterial/PMaterialXMapper.java
new file mode 100644
index 0000000..57ec03b
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/dal/mysql/pmaterial/PMaterialXMapper.java
@@ -0,0 +1,17 @@
+package com.yunxi.scm.module.demo2.dal.mysql.pmaterial;
+
+import com.yunxi.scm.framework.mybatis.core.mapper.BaseMapperX;
+import com.yunxi.scm.module.demo2.dal.dataobject.pmaterial.PMaterialXDO;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * 测试专用 Mapper
+ *
+ * @author ccongli
+ */
+@Mapper
+@Repository("PMaterialXMapper2")
+public interface PMaterialXMapper extends BaseMapperX {
+
+}
diff --git a/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/enums/pmaterial/CategoryEnum.java b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/enums/pmaterial/CategoryEnum.java
new file mode 100644
index 0000000..646f0ff
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/enums/pmaterial/CategoryEnum.java
@@ -0,0 +1,34 @@
+package com.yunxi.scm.module.demo2.enums.pmaterial;
+
+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-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/service/pmaterial/PMaterialService.java b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/service/pmaterial/PMaterialService.java
new file mode 100644
index 0000000..26e16dd
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/service/pmaterial/PMaterialService.java
@@ -0,0 +1,73 @@
+package com.yunxi.scm.module.demo2.service.pmaterial;
+
+import java.util.*;
+import javax.validation.*;
+import com.yunxi.scm.module.demo2.dal.dataobject.pmaterial.PMaterialDO;
+import com.yunxi.scm.framework.common.pojo.PageResult;
+import com.yunxi.scm.module.demo2.controller.admin.pmaterial.vo.PMaterialCreateReqVO;
+import com.yunxi.scm.module.demo2.controller.admin.pmaterial.vo.PMaterialExportReqVO;
+import com.yunxi.scm.module.demo2.controller.admin.pmaterial.vo.PMaterialPageReqVO;
+import com.yunxi.scm.module.demo2.controller.admin.pmaterial.vo.PMaterialUpdateReqVO;
+
+/**
+ * 物料管理 Service 接口
+ *
+ * @author ccongli
+ */
+public interface PMaterialService {
+
+ /**
+ * 创建物料管理
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ Long createMaterial(@Valid PMaterialCreateReqVO createReqVO);
+
+ /**
+ * 更新物料管理
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateMaterial(@Valid PMaterialUpdateReqVO updateReqVO);
+
+ /**
+ * 删除物料管理
+ *
+ * @param id 编号
+ */
+ void deleteMaterial(Long id);
+
+ /**
+ * 获得物料管理
+ *
+ * @param id 编号
+ * @return 物料管理
+ */
+ PMaterialDO getMaterial(Long id);
+
+ /**
+ * 获得物料管理列表
+ *
+ * @param ids 编号
+ * @return 物料管理列表
+ */
+ List getMaterialList(Collection ids);
+
+ /**
+ * 获得物料管理分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 物料管理分页
+ */
+ PageResult getMaterialPage(PMaterialPageReqVO pageReqVO);
+
+ /**
+ * 获得物料管理列表, 用于 Excel 导出
+ *
+ * @param exportReqVO 查询条件
+ * @return 物料管理列表
+ */
+ List getMaterialList(PMaterialExportReqVO exportReqVO);
+
+}
diff --git a/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/service/pmaterial/PMaterialServiceImpl.java b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/service/pmaterial/PMaterialServiceImpl.java
new file mode 100644
index 0000000..0ad6bac
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/java/com/yunxi/scm/module/demo2/service/pmaterial/PMaterialServiceImpl.java
@@ -0,0 +1,85 @@
+package com.yunxi.scm.module.demo2.service.pmaterial;
+
+import com.yunxi.scm.framework.common.pojo.PageResult;
+import com.yunxi.scm.module.demo2.controller.admin.pmaterial.vo.PMaterialCreateReqVO;
+import com.yunxi.scm.module.demo2.controller.admin.pmaterial.vo.PMaterialExportReqVO;
+import com.yunxi.scm.module.demo2.controller.admin.pmaterial.vo.PMaterialPageReqVO;
+import com.yunxi.scm.module.demo2.controller.admin.pmaterial.vo.PMaterialUpdateReqVO;
+import com.yunxi.scm.module.demo2.convert.pmaterial.PMaterialConvert;
+import com.yunxi.scm.module.demo2.dal.dataobject.pmaterial.PMaterialDO;
+import com.yunxi.scm.module.demo2.dal.mysql.pmaterial.PMaterialMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+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.demo2.enums.ErrorCodeConstants.MATERIAL_NOT_EXISTS;
+
+/**
+ * 物料管理 Service 实现类
+ *
+ * @author ccongli
+ */
+@Service("PMaterialServiceImpl2")
+@Validated
+public class PMaterialServiceImpl implements PMaterialService {
+
+ @Resource
+ private PMaterialMapper pMaterialMapper;
+
+ @Override
+ public Long createMaterial(PMaterialCreateReqVO createReqVO) {
+ // 插入
+ PMaterialDO material = PMaterialConvert.INSTANCE.convert(createReqVO);
+ pMaterialMapper.insert(material);
+ // 返回
+ return material.getId();
+ }
+
+ @Override
+ public void updateMaterial(PMaterialUpdateReqVO updateReqVO) {
+ // 校验存在
+ validateMaterialExists(updateReqVO.getId());
+ // 更新
+ PMaterialDO updateObj = PMaterialConvert.INSTANCE.convert(updateReqVO);
+ pMaterialMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteMaterial(Long id) {
+ // 校验存在
+ validateMaterialExists(id);
+ // 删除
+ pMaterialMapper.deleteById(id);
+ }
+
+ private void validateMaterialExists(Long id) {
+ if (pMaterialMapper.selectById(id) == null) {
+ throw exception(MATERIAL_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public PMaterialDO getMaterial(Long id) {
+ return pMaterialMapper.selectById(id);
+ }
+
+ @Override
+ public List getMaterialList(Collection ids) {
+ return pMaterialMapper.selectBatchIds(ids);
+ }
+
+ @Override
+ public PageResult getMaterialPage(PMaterialPageReqVO pageReqVO) {
+ return pMaterialMapper.selectPage(pageReqVO);
+ }
+
+ @Override
+ public List getMaterialList(PMaterialExportReqVO exportReqVO) {
+ return pMaterialMapper.selectList(exportReqVO);
+ }
+
+}
diff --git a/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/resources/mapper/pmaterial/PMaterialMapper.xml b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/resources/mapper/pmaterial/PMaterialMapper.xml
new file mode 100644
index 0000000..129b65b
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/main/resources/mapper/pmaterial/PMaterialMapper.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
diff --git a/yunxi-module-demo2/yunxi-module-demo2-biz/src/test/java/com/yunxi/scm/module/demo2/service/pmaterial/MaterialServiceImplTest.java b/yunxi-module-demo2/yunxi-module-demo2-biz/src/test/java/com/yunxi/scm/module/demo2/service/pmaterial/MaterialServiceImplTest.java
new file mode 100644
index 0000000..5af7102
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/test/java/com/yunxi/scm/module/demo2/service/pmaterial/MaterialServiceImplTest.java
@@ -0,0 +1,179 @@
+package com.yunxi.scm.module.demo2.service.pmaterial;
+
+import com.yunxi.scm.framework.common.pojo.PageResult;
+import com.yunxi.scm.framework.test.core.ut.BaseDbUnitTest;
+import com.yunxi.scm.module.demo2.controller.admin.pmaterial.vo.PMaterialCreateReqVO;
+import com.yunxi.scm.module.demo2.controller.admin.pmaterial.vo.PMaterialExportReqVO;
+import com.yunxi.scm.module.demo2.controller.admin.pmaterial.vo.PMaterialPageReqVO;
+import com.yunxi.scm.module.demo2.controller.admin.pmaterial.vo.PMaterialUpdateReqVO;
+import com.yunxi.scm.module.demo2.dal.dataobject.pmaterial.PMaterialDO;
+import com.yunxi.scm.module.demo2.dal.mysql.pmaterial.PMaterialMapper;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.springframework.context.annotation.Import;
+
+import javax.annotation.Resource;
+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.demo2.enums.ErrorCodeConstants.MATERIAL_NOT_EXISTS;
+import static org.junit.jupiter.api.Assertions.*;
+
+/**
+ * {@link PMaterialServiceImpl} 的单元测试类
+ *
+ * @author ccongli
+ */
+@Import(PMaterialServiceImpl.class)
+public class MaterialServiceImplTest extends BaseDbUnitTest {
+
+ @Resource
+ private PMaterialServiceImpl materialService;
+
+ @Resource
+ private PMaterialMapper materialMapper;
+
+ @Test
+ public void testCreateMaterial_success() {
+ // 准备参数
+ PMaterialCreateReqVO reqVO = randomPojo(PMaterialCreateReqVO.class);
+
+ // 调用
+ Long materialId = materialService.createMaterial(reqVO);
+ // 断言
+ assertNotNull(materialId);
+ // 校验记录的属性是否正确
+ PMaterialDO material = materialMapper.selectById(materialId);
+ assertPojoEquals(reqVO, material);
+ }
+
+ @Test
+ public void testUpdateMaterial_success() {
+ // mock 数据
+ PMaterialDO dbMaterial = randomPojo(PMaterialDO.class);
+ materialMapper.insert(dbMaterial);// @Sql: 先插入出一条存在的数据
+ // 准备参数
+ PMaterialUpdateReqVO reqVO = randomPojo(PMaterialUpdateReqVO.class, o -> {
+ o.setId(dbMaterial.getId()); // 设置更新的 ID
+ });
+
+ // 调用
+ materialService.updateMaterial(reqVO);
+ // 校验是否更新正确
+ PMaterialDO material = materialMapper.selectById(reqVO.getId()); // 获取最新的
+ assertPojoEquals(reqVO, material);
+ }
+
+ @Test
+ public void testUpdateMaterial_notExists() {
+ // 准备参数
+ PMaterialUpdateReqVO reqVO = randomPojo(PMaterialUpdateReqVO.class);
+
+ // 调用, 并断言异常
+ assertServiceException(() -> materialService.updateMaterial(reqVO), MATERIAL_NOT_EXISTS);
+ }
+
+ @Test
+ public void testDeleteMaterial_success() {
+ // mock 数据
+ PMaterialDO dbMaterial = randomPojo(PMaterialDO.class);
+ materialMapper.insert(dbMaterial);// @Sql: 先插入出一条存在的数据
+ // 准备参数
+ Long id = dbMaterial.getId();
+
+ // 调用
+ materialService.deleteMaterial(id);
+ // 校验数据不存在了
+ assertNull(materialMapper.selectById(id));
+ }
+
+ @Test
+ public void testDeleteMaterial_notExists() {
+ // 准备参数
+ Long id = randomLongId();
+
+ // 调用, 并断言异常
+ assertServiceException(() -> materialService.deleteMaterial(id), MATERIAL_NOT_EXISTS);
+ }
+
+ @Test
+ @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
+ public void testGetMaterialPage() {
+ // mock 数据
+ PMaterialDO dbMaterial = randomPojo(PMaterialDO.class, o -> { // 等会查询到
+ o.setName(null);
+ o.setStatus(null);
+ o.setType(null);
+ o.setCategories(null);
+ o.setCreateTime(null);
+ });
+ materialMapper.insert(dbMaterial);
+ // 测试 name 不匹配
+ materialMapper.insert(cloneIgnoreId(dbMaterial, o -> o.setName(null)));
+ // 测试 status 不匹配
+ materialMapper.insert(cloneIgnoreId(dbMaterial, o -> o.setStatus(null)));
+ // 测试 type 不匹配
+ materialMapper.insert(cloneIgnoreId(dbMaterial, o -> o.setType(null)));
+ // 测试 category 不匹配
+ materialMapper.insert(cloneIgnoreId(dbMaterial, o -> o.setCategories(null)));
+ // 测试 createTime 不匹配
+ materialMapper.insert(cloneIgnoreId(dbMaterial, o -> o.setCreateTime(null)));
+ // 准备参数
+ PMaterialPageReqVO reqVO = new PMaterialPageReqVO();
+ reqVO.setName(null);
+ reqVO.setStatus(null);
+ reqVO.setType(null);
+ reqVO.setCategory(null);
+ reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+
+ // 调用
+ PageResult pageResult = materialService.getMaterialPage(reqVO);
+ // 断言
+ assertEquals(1, pageResult.getTotal());
+ assertEquals(1, pageResult.getList().size());
+ assertPojoEquals(dbMaterial, pageResult.getList().get(0));
+ }
+
+ @Test
+ @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
+ public void testGetMaterialList() {
+ // mock 数据
+ PMaterialDO dbMaterial = randomPojo(PMaterialDO.class, o -> { // 等会查询到
+ o.setName(null);
+ o.setStatus(null);
+ o.setType(null);
+ o.setCategories(null);
+ o.setCreateTime(null);
+ });
+ materialMapper.insert(dbMaterial);
+ // 测试 name 不匹配
+ materialMapper.insert(cloneIgnoreId(dbMaterial, o -> o.setName(null)));
+ // 测试 status 不匹配
+ materialMapper.insert(cloneIgnoreId(dbMaterial, o -> o.setStatus(null)));
+ // 测试 type 不匹配
+ materialMapper.insert(cloneIgnoreId(dbMaterial, o -> o.setType(null)));
+ // 测试 category 不匹配
+ materialMapper.insert(cloneIgnoreId(dbMaterial, o -> o.setCategories(null)));
+ // 测试 createTime 不匹配
+ materialMapper.insert(cloneIgnoreId(dbMaterial, o -> o.setCreateTime(null)));
+ // 准备参数
+ PMaterialExportReqVO reqVO = new PMaterialExportReqVO();
+ reqVO.setName(null);
+ reqVO.setStatus(null);
+ reqVO.setType(null);
+ reqVO.setCategory(null);
+ reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
+
+ // 调用
+ List list = materialService.getMaterialList(reqVO);
+ // 断言
+ assertEquals(1, list.size());
+ assertPojoEquals(dbMaterial, list.get(0));
+ }
+
+}
diff --git a/yunxi-module-demo2/yunxi-module-demo2-biz/src/test/resources/sql/clean.sql b/yunxi-module-demo2/yunxi-module-demo2-biz/src/test/resources/sql/clean.sql
new file mode 100644
index 0000000..bdc8a99
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/test/resources/sql/clean.sql
@@ -0,0 +1,2 @@
+-- 将该删表 SQL 语句,添加到 yunxi-module-demo-biz 模块的 test/resources/sql/clean.sql 文件里
+DELETE FROM "demo_material";
\ No newline at end of file
diff --git a/yunxi-module-demo2/yunxi-module-demo2-biz/src/test/resources/sql/create_tables.sql b/yunxi-module-demo2/yunxi-module-demo2-biz/src/test/resources/sql/create_tables.sql
new file mode 100644
index 0000000..1b8d090
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/test/resources/sql/create_tables.sql
@@ -0,0 +1,19 @@
+-- 将该建表 SQL 语句,添加到 yunxi-module-demo-biz 模块的 test/resources/sql/create_tables.sql 文件里
+CREATE TABLE IF NOT EXISTS "demo_material" (
+ "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY,
+ "name" varchar NOT NULL,
+ "status" varchar NOT NULL,
+ "type" varchar NOT NULL,
+ "category" varchar NOT NULL,
+ "imgurl" varchar NOT NULL,
+ "stock" int NOT NULL,
+ "price" varchar NOT NULL,
+ "remark" varchar,
+ "creator" varchar DEFAULT '',
+ "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updater" varchar DEFAULT '',
+ "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ "deleted" bit NOT NULL DEFAULT FALSE,
+ "tenant_id" bigint NOT NULL,
+ PRIMARY KEY ("id")
+ ) COMMENT '物料表';
\ No newline at end of file
diff --git a/yunxi-module-demo2/yunxi-module-demo2-biz/src/test/resources/sql/menu.sql b/yunxi-module-demo2/yunxi-module-demo2-biz/src/test/resources/sql/menu.sql
new file mode 100644
index 0000000..6634071
--- /dev/null
+++ b/yunxi-module-demo2/yunxi-module-demo2-biz/src/test/resources/sql/menu.sql
@@ -0,0 +1,55 @@
+-- 菜单 SQL
+INSERT INTO system_menu(
+ name, permission, type, sort, parent_id,
+ path, icon, component, status, component_name
+)
+VALUES (
+ '物料管理管理', '', 2, 0, 1,
+ 'material', '', 'demo/material/index', 0, 'Material'
+ );
+
+-- 按钮父菜单ID
+-- 暂时只支持 MySQL。如果你是 Oracle、PostgreSQL、SQLServer 的话,需要手动修改 @parentId 的部分的代码
+SELECT @parentId := LAST_INSERT_ID();
+
+-- 按钮 SQL
+INSERT INTO system_menu(
+ name, permission, type, sort, parent_id,
+ path, icon, component, status
+)
+VALUES (
+ '物料管理查询', 'demo:material:query', 3, 1, @parentId,
+ '', '', '', 0
+ );
+INSERT INTO system_menu(
+ name, permission, type, sort, parent_id,
+ path, icon, component, status
+)
+VALUES (
+ '物料管理创建', 'demo:material:create', 3, 2, @parentId,
+ '', '', '', 0
+ );
+INSERT INTO system_menu(
+ name, permission, type, sort, parent_id,
+ path, icon, component, status
+)
+VALUES (
+ '物料管理更新', 'demo:material:update', 3, 3, @parentId,
+ '', '', '', 0
+ );
+INSERT INTO system_menu(
+ name, permission, type, sort, parent_id,
+ path, icon, component, status
+)
+VALUES (
+ '物料管理删除', 'demo:material:delete', 3, 4, @parentId,
+ '', '', '', 0
+ );
+INSERT INTO system_menu(
+ name, permission, type, sort, parent_id,
+ path, icon, component, status
+)
+VALUES (
+ '物料管理导出', 'demo:material:export', 3, 5, @parentId,
+ '', '', '', 0
+ );
diff --git a/yunxi-server/pom.xml b/yunxi-server/pom.xml
index 8d25465..105f1a8 100644
--- a/yunxi-server/pom.xml
+++ b/yunxi-server/pom.xml
@@ -48,6 +48,12 @@
${revision}
+
+ com.yunxi.scm
+ yunxi-module-demo2-biz
+ ${revision}
+
+
com.yunxi.scm
yunxi-module-xxjj-biz
diff --git a/yunxi-server/src/main/java/com/yunxi/scm/server/YunxiServerApplication.java b/yunxi-server/src/main/java/com/yunxi/scm/server/YunxiServerApplication.java
index 1ff2e5f..219e4d4 100644
--- a/yunxi-server/src/main/java/com/yunxi/scm/server/YunxiServerApplication.java
+++ b/yunxi-server/src/main/java/com/yunxi/scm/server/YunxiServerApplication.java
@@ -1,7 +1,13 @@
package com.yunxi.scm.server;
+import io.vavr.collection.List;
+import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.ComponentScan;
+
+import javax.annotation.PostConstruct;
/**
* 项目的启动类
@@ -14,21 +20,24 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
*/
@SuppressWarnings("SpringComponentScan") // 忽略 IDEA 无法识别 ${yunxi.info.base-package}
@SpringBootApplication(scanBasePackages = {"${yunxi.info.base-package}.server", "${yunxi.info.base-package}.module"})
+//@MapperScan(basePackages = {"${yunxi.info.base-package}.module.**.mysql.*"})
public class YunxiServerApplication {
+ private static ApplicationContext applicationContext;
+
public static void main(String[] args) {
// 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
- // 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
- // 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
-
- SpringApplication.run(YunxiServerApplication.class, args);
+ applicationContext = SpringApplication.run(YunxiServerApplication.class, args);
// new SpringApplicationBuilder(YunxiServerApplication.class)
// .applicationStartup(new BufferingApplicationStartup(20480))
// .run(args);
+ displayAllBeans();
+ }
- // 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
- // 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
- // 如果你碰到启动的问题,请认真阅读 https://doc.iocoder.cn/quick-start/ 文章
+ public static void displayAllBeans(){
+ System.out.println("=======print all beans=======");
+ String[] allBeanNames = applicationContext.getBeanDefinitionNames();
+ List.of(allBeanNames).forEach(System.out::println);
}
}