From 66845dcfabebd58f2846af93c752f89c41781545 Mon Sep 17 00:00:00 2001
From: hewencai <2357300448@qq.com>
Date: Wed, 29 Oct 2025 10:57:45 +0800
Subject: [PATCH 01/12] =?UTF-8?q?feat:=E6=96=B0=E5=A2=9E=E6=96=87=E6=A1=A3?=
=?UTF-8?q?=E6=A8=A1=E6=9D=BF=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 2 +
.../module/base/enums/ErrorCodeConstants.java | 16 ++
zt-module-base/zt-module-base-server/pom.xml | 7 +
.../DocTemplateCategoryController.java | 89 ++++++++++
.../doctemplate/DocTemplateController.java | 82 +++++++++
.../DocTemplateInstanceController.java | 107 ++++++++++++
.../doctemplate/DocTemplateTagController.java | 82 +++++++++
.../vo/DocTemplateCategoryPageReqVO.java | 27 +++
.../vo/DocTemplateCategoryRespVO.java | 43 +++++
.../vo/DocTemplateCategorySaveReqVO.java | 37 ++++
.../vo/DocTemplateInstancePageReqVO.java | 36 ++++
.../vo/DocTemplateInstanceRespVO.java | 51 ++++++
.../vo/DocTemplateInstanceSaveReqVO.java | 49 ++++++
.../doctemplate/vo/DocTemplatePageReqVO.java | 39 +++++
.../doctemplate/vo/DocTemplateRespVO.java | 57 +++++++
.../doctemplate/vo/DocTemplateSaveReqVO.java | 53 ++++++
.../vo/DocTemplateTagPageReqVO.java | 27 +++
.../doctemplate/vo/DocTemplateTagRespVO.java | 63 +++++++
.../vo/DocTemplateTagSaveReqVO.java | 44 +++++
.../DocTemplateCategoryConvert.java | 30 ++++
.../doctemplate/DocTemplateConvert.java | 30 ++++
.../DocTemplateInstanceConvert.java | 30 ++++
.../doctemplate/DocTemplateTagConvert.java | 30 ++++
.../DocTemplateCategoryMapper.java | 28 ++++
.../DocTemplateInstanceMapper.java | 28 ++++
.../dao/doctemplate/DocTemplateMapper.java | 29 ++++
.../dao/doctemplate/DocTemplateTagMapper.java | 28 ++++
.../doctemplate/DocTemplateCategoryDO.java | 63 +++++++
.../dataobject/doctemplate/DocTemplateDO.java | 99 +++++++++++
.../doctemplate/DocTemplateInstanceDO.java | 87 ++++++++++
.../doctemplate/DocTemplateTagDO.java | 81 +++++++++
.../DocTemplateCategoryService.java | 78 +++++++++
.../DocTemplateCategoryServiceImpl.java | 158 ++++++++++++++++++
.../DocTemplateInstanceService.java | 63 +++++++
.../DocTemplateInstanceServiceImpl.java | 136 +++++++++++++++
.../doctemplate/DocTemplateRenderService.java | 31 ++++
.../DocTemplateRenderServiceImpl.java | 144 ++++++++++++++++
.../doctemplate/DocTemplateService.java | 63 +++++++
.../doctemplate/DocTemplateServiceImpl.java | 115 +++++++++++++
.../doctemplate/DocTemplateTagService.java | 63 +++++++
.../DocTemplateTagServiceImpl.java | 115 +++++++++++++
41 files changed, 2440 insertions(+)
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/DocTemplateCategoryController.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/DocTemplateController.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/DocTemplateInstanceController.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/DocTemplateTagController.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateCategoryPageReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateCategoryRespVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateCategorySaveReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateInstancePageReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateInstanceRespVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateInstanceSaveReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplatePageReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateRespVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateSaveReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateTagPageReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateTagRespVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateTagSaveReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/convert/doctemplate/DocTemplateCategoryConvert.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/convert/doctemplate/DocTemplateConvert.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/convert/doctemplate/DocTemplateInstanceConvert.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/convert/doctemplate/DocTemplateTagConvert.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/doctemplate/DocTemplateCategoryMapper.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/doctemplate/DocTemplateInstanceMapper.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/doctemplate/DocTemplateMapper.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/doctemplate/DocTemplateTagMapper.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/doctemplate/DocTemplateCategoryDO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/doctemplate/DocTemplateDO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/doctemplate/DocTemplateInstanceDO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/doctemplate/DocTemplateTagDO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateCategoryService.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateCategoryServiceImpl.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateInstanceService.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateInstanceServiceImpl.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateRenderService.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateRenderServiceImpl.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateService.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateServiceImpl.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateTagService.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateTagServiceImpl.java
diff --git a/.gitignore b/.gitignore
index e55eb64..c652c40 100644
--- a/.gitignore
+++ b/.gitignore
@@ -73,3 +73,5 @@ functions/mock
screenshot
.firebase
sessionStore
+/CLAUDE.md
+/nul
diff --git a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/enums/ErrorCodeConstants.java b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/enums/ErrorCodeConstants.java
index c36bd6e..954c17c 100644
--- a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/enums/ErrorCodeConstants.java
+++ b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/enums/ErrorCodeConstants.java
@@ -29,4 +29,20 @@ public interface ErrorCodeConstants {
ErrorCode BUSINESS_DICTIONARY_TYPE_NOT_EXISTS = new ErrorCode(1_027_200_003, "业务字典类型不存在");
ErrorCode BUSINESS_DEPARTMENT_INDICATOR_NOT_EXISTS = new ErrorCode(1_027_200_004, "部门持有指标不存在");
+ // ========== 模板文档管理系统 1-006-xxx-xxx ==========
+ // 模板分类 1-006-001-xxx
+ ErrorCode TEMPLATE_CATEGORY_NOT_EXISTS = new ErrorCode(1_006_001_001, "模板分类不存在");
+
+ // 标签库 1-006-002-xxx
+ ErrorCode TEMPLATE_TAG_NOT_EXISTS = new ErrorCode(1_006_002_001, "标签不存在");
+ ErrorCode TEMPLATE_TAG_CODE_DUPLICATE = new ErrorCode(1_006_002_002, "标签编码已存在");
+
+ // 模板 1-006-003-xxx
+ ErrorCode TEMPLATE_NOT_EXISTS = new ErrorCode(1_006_003_001, "模板不存在");
+ ErrorCode TEMPLATE_CODE_DUPLICATE = new ErrorCode(1_006_003_002, "模板编码已存在");
+
+ // 模板实例 1-006-004-xxx
+ ErrorCode TEMPLATE_INSTANCE_NOT_EXISTS = new ErrorCode(1_006_004_001, "模板实例不存在");
+ ErrorCode TEMPLATE_INSTANCE_CODE_DUPLICATE = new ErrorCode(1_006_004_002, "实例编码已存在");
+
}
diff --git a/zt-module-base/zt-module-base-server/pom.xml b/zt-module-base/zt-module-base-server/pom.xml
index acd97ea..431837b 100644
--- a/zt-module-base/zt-module-base-server/pom.xml
+++ b/zt-module-base/zt-module-base-server/pom.xml
@@ -122,6 +122,13 @@
zt-spring-boot-starter-excel
+
+
+ org.apache.velocity
+ velocity-engine-core
+ 2.3
+
+
com.zt.plat
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/DocTemplateCategoryController.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/DocTemplateCategoryController.java
new file mode 100644
index 0000000..d673d01
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/DocTemplateCategoryController.java
@@ -0,0 +1,89 @@
+package com.zt.plat.module.base.controller.admin.doctemplate;
+
+import com.zt.plat.framework.common.pojo.CommonResult;
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateCategoryPageReqVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateCategoryRespVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateCategorySaveReqVO;
+import com.zt.plat.module.base.service.doctemplate.DocTemplateCategoryService;
+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 jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import java.util.List;
+
+import static com.zt.plat.framework.common.pojo.CommonResult.success;
+
+/**
+ * 模板分类 Controller
+ *
+ * @author 系统生成
+ */
+@Tag(name = "管理后台 - 模板分类")
+@RestController
+@RequestMapping("/base/doc-template-category")
+@Validated
+public class DocTemplateCategoryController {
+
+ @Resource
+ private DocTemplateCategoryService templateCategoryService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建模板分类")
+ @PreAuthorize("@ss.hasPermission('base:template-category:create')")
+ public CommonResult createTemplateCategory(@Valid @RequestBody DocTemplateCategorySaveReqVO createReqVO) {
+ return success(templateCategoryService.createTemplateCategory(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新模板分类")
+ @PreAuthorize("@ss.hasPermission('base:template-category:update')")
+ public CommonResult updateTemplateCategory(@Valid @RequestBody DocTemplateCategorySaveReqVO updateReqVO) {
+ templateCategoryService.updateTemplateCategory(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除模板分类")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('base:template-category:delete')")
+ public CommonResult deleteTemplateCategory(@RequestParam("id") Long id) {
+ templateCategoryService.deleteTemplateCategory(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得模板分类")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('base:template-category:query')")
+ public CommonResult getTemplateCategory(@RequestParam("id") Long id) {
+ return success(templateCategoryService.getTemplateCategory(id));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得模板分类分页")
+ @PreAuthorize("@ss.hasPermission('base:template-category:query')")
+ public CommonResult> getTemplateCategoryPage(@Valid DocTemplateCategoryPageReqVO pageReqVO) {
+ return success(templateCategoryService.getTemplateCategoryPage(pageReqVO));
+ }
+
+ @GetMapping("/list")
+ @Operation(summary = "获得模板分类列表")
+ @PreAuthorize("@ss.hasPermission('base:template-category:query')")
+ public CommonResult> getTemplateCategoryList() {
+ return success(templateCategoryService.getTemplateCategoryList());
+ }
+
+ @GetMapping("/tree")
+ @Operation(summary = "获得模板分类树形结构")
+ @PreAuthorize("@ss.hasPermission('base:template-category:query')")
+ public CommonResult> getTemplateCategoryTree() {
+ return success(templateCategoryService.buildTree());
+ }
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/DocTemplateController.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/DocTemplateController.java
new file mode 100644
index 0000000..0b23670
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/DocTemplateController.java
@@ -0,0 +1,82 @@
+package com.zt.plat.module.base.controller.admin.doctemplate;
+
+import com.zt.plat.framework.common.pojo.CommonResult;
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplatePageReqVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateRespVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateSaveReqVO;
+import com.zt.plat.module.base.service.doctemplate.DocTemplateService;
+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 jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import java.util.List;
+
+import static com.zt.plat.framework.common.pojo.CommonResult.success;
+
+/**
+ * 模板 Controller
+ *
+ * @author 系统生成
+ */
+@Tag(name = "管理后台 - 模板")
+@RestController
+@RequestMapping("/base/doc-template")
+@Validated
+public class DocTemplateController {
+
+ @Resource
+ private DocTemplateService templateService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建模板")
+ @PreAuthorize("@ss.hasPermission('base:template:create')")
+ public CommonResult createTemplate(@Valid @RequestBody DocTemplateSaveReqVO createReqVO) {
+ return success(templateService.createTemplate(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新模板")
+ @PreAuthorize("@ss.hasPermission('base:template:update')")
+ public CommonResult updateTemplate(@Valid @RequestBody DocTemplateSaveReqVO updateReqVO) {
+ templateService.updateTemplate(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除模板")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('base:template:delete')")
+ public CommonResult deleteTemplate(@RequestParam("id") Long id) {
+ templateService.deleteTemplate(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得模板")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('base:template:query')")
+ public CommonResult getTemplate(@RequestParam("id") Long id) {
+ return success(templateService.getTemplate(id));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得模板分页")
+ @PreAuthorize("@ss.hasPermission('base:template:query')")
+ public CommonResult> getTemplatePage(@Valid DocTemplatePageReqVO pageReqVO) {
+ return success(templateService.getTemplatePage(pageReqVO));
+ }
+
+ @GetMapping("/list")
+ @Operation(summary = "获得模板列表")
+ @PreAuthorize("@ss.hasPermission('base:template:query')")
+ public CommonResult> getTemplateList() {
+ return success(templateService.getTemplateList());
+ }
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/DocTemplateInstanceController.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/DocTemplateInstanceController.java
new file mode 100644
index 0000000..4b3b513
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/DocTemplateInstanceController.java
@@ -0,0 +1,107 @@
+package com.zt.plat.module.base.controller.admin.doctemplate;
+
+import com.zt.plat.framework.common.pojo.CommonResult;
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateInstancePageReqVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateInstanceRespVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateInstanceSaveReqVO;
+import com.zt.plat.module.base.service.doctemplate.DocTemplateInstanceService;
+import com.zt.plat.module.base.service.doctemplate.DocTemplateRenderService;
+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 jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
+import static com.zt.plat.framework.common.pojo.CommonResult.success;
+
+/**
+ * 模板实例 Controller
+ *
+ * @author 系统生成
+ */
+@Tag(name = "管理后台 - 模板实例")
+@RestController
+@RequestMapping("/base/doc-template-instance")
+@Validated
+public class DocTemplateInstanceController {
+
+ @Resource
+ private DocTemplateInstanceService templateInstanceService;
+
+ @Resource
+ private DocTemplateRenderService renderService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建模板实例")
+ @PreAuthorize("@ss.hasPermission('base:template-instance:create')")
+ public CommonResult createTemplateInstance(@Valid @RequestBody DocTemplateInstanceSaveReqVO createReqVO) {
+ return success(templateInstanceService.createTemplateInstance(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新模板实例")
+ @PreAuthorize("@ss.hasPermission('base:template-instance:update')")
+ public CommonResult updateTemplateInstance(@Valid @RequestBody DocTemplateInstanceSaveReqVO updateReqVO) {
+ templateInstanceService.updateTemplateInstance(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除模板实例")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('base:template-instance:delete')")
+ public CommonResult deleteTemplateInstance(@RequestParam("id") Long id) {
+ templateInstanceService.deleteTemplateInstance(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得模板实例")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('base:template-instance:query')")
+ public CommonResult getTemplateInstance(@RequestParam("id") Long id) {
+ return success(templateInstanceService.getTemplateInstance(id));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得模板实例分页")
+ @PreAuthorize("@ss.hasPermission('base:template-instance:query')")
+ public CommonResult> getTemplateInstancePage(@Valid DocTemplateInstancePageReqVO pageReqVO) {
+ return success(templateInstanceService.getTemplateInstancePage(pageReqVO));
+ }
+
+ @GetMapping("/list")
+ @Operation(summary = "获得模板实例列表")
+ @PreAuthorize("@ss.hasPermission('base:template-instance:query')")
+ public CommonResult> getTemplateInstanceList() {
+ return success(templateInstanceService.getTemplateInstanceList());
+ }
+
+ @PostMapping("/render")
+ @Operation(summary = "渲染模板实例")
+ @PreAuthorize("@ss.hasPermission('base:template-instance:query')")
+ public CommonResult renderTemplateInstance(
+ @Parameter(name = "instanceId", description = "实例ID", required = true) @RequestParam("instanceId") Long instanceId,
+ @Parameter(name = "dataMap", description = "数据Map") @RequestBody(required = false) Map dataMap) {
+ String renderedContent = renderService.render(null, instanceId, null, dataMap);
+ return success(renderedContent);
+ }
+
+ @PostMapping("/render-and-save")
+ @Operation(summary = "渲染并保存模板实例")
+ @PreAuthorize("@ss.hasPermission('base:template-instance:update')")
+ public CommonResult renderAndSaveTemplateInstance(
+ @Parameter(name = "instanceId", description = "实例ID", required = true) @RequestParam("instanceId") Long instanceId,
+ @Parameter(name = "dataMap", description = "数据Map", required = true) @RequestBody Map dataMap) {
+ renderService.renderAndSave(instanceId, dataMap);
+ return success(true);
+ }
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/DocTemplateTagController.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/DocTemplateTagController.java
new file mode 100644
index 0000000..25e2ecf
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/DocTemplateTagController.java
@@ -0,0 +1,82 @@
+package com.zt.plat.module.base.controller.admin.doctemplate;
+
+import com.zt.plat.framework.common.pojo.CommonResult;
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateTagPageReqVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateTagRespVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateTagSaveReqVO;
+import com.zt.plat.module.base.service.doctemplate.DocTemplateTagService;
+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 jakarta.annotation.Resource;
+import jakarta.validation.Valid;
+import java.util.List;
+
+import static com.zt.plat.framework.common.pojo.CommonResult.success;
+
+/**
+ * 标签库 Controller
+ *
+ * @author 系统生成
+ */
+@Tag(name = "管理后台 - 标签库")
+@RestController
+@RequestMapping("/base/doc-template-tag")
+@Validated
+public class DocTemplateTagController {
+
+ @Resource
+ private DocTemplateTagService templateTagService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建标签")
+ @PreAuthorize("@ss.hasPermission('base:template-tag:create')")
+ public CommonResult createTemplateTag(@Valid @RequestBody DocTemplateTagSaveReqVO createReqVO) {
+ return success(templateTagService.createTemplateTag(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新标签")
+ @PreAuthorize("@ss.hasPermission('base:template-tag:update')")
+ public CommonResult updateTemplateTag(@Valid @RequestBody DocTemplateTagSaveReqVO updateReqVO) {
+ templateTagService.updateTemplateTag(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除标签")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('base:template-tag:delete')")
+ public CommonResult deleteTemplateTag(@RequestParam("id") Long id) {
+ templateTagService.deleteTemplateTag(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得标签")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('base:template-tag:query')")
+ public CommonResult getTemplateTag(@RequestParam("id") Long id) {
+ return success(templateTagService.getTemplateTag(id));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得标签分页")
+ @PreAuthorize("@ss.hasPermission('base:template-tag:query')")
+ public CommonResult> getTemplateTagPage(@Valid DocTemplateTagPageReqVO pageReqVO) {
+ return success(templateTagService.getTemplateTagPage(pageReqVO));
+ }
+
+ @GetMapping("/list")
+ @Operation(summary = "获得标签列表")
+ @PreAuthorize("@ss.hasPermission('base:template-tag:query')")
+ public CommonResult> getTemplateTagList() {
+ return success(templateTagService.getTemplateTagList());
+ }
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateCategoryPageReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateCategoryPageReqVO.java
new file mode 100644
index 0000000..da89763
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateCategoryPageReqVO.java
@@ -0,0 +1,27 @@
+package com.zt.plat.module.base.controller.admin.doctemplate.vo;
+
+import com.zt.plat.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+@Schema(description = "管理后台 - 模板分类分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class DocTemplateCategoryPageReqVO extends PageParam {
+
+ @Schema(description = "分类名称", example = "采购类")
+ private String categoryName;
+
+ @Schema(description = "分类编码", example = "PURCHASE")
+ private String categoryCode;
+
+ @Schema(description = "父分类ID", example = "1")
+ private Long parentId;
+
+ @Schema(description = "层级(1=大类,2=小类)", example = "1")
+ private Integer level;
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateCategoryRespVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateCategoryRespVO.java
new file mode 100644
index 0000000..fe74244
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateCategoryRespVO.java
@@ -0,0 +1,43 @@
+package com.zt.plat.module.base.controller.admin.doctemplate.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Schema(description = "管理后台 - 模板分类 Response VO")
+@Data
+public class DocTemplateCategoryRespVO {
+
+ @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ private Long id;
+
+ @Schema(description = "分类名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "采购类")
+ private String categoryName;
+
+ @Schema(description = "分类编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "PURCHASE")
+ private String categoryCode;
+
+ @Schema(description = "父分类ID", example = "1")
+ private Long parentId;
+
+ @Schema(description = "层级(1=大类,2=小类)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ private Integer level;
+
+ @Schema(description = "排序号", example = "1")
+ private Integer sort;
+
+ @Schema(description = "备注", example = "采购业务相关文档分类")
+ private String remark;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ private LocalDateTime createTime;
+
+ @Schema(description = "创建人", example = "admin")
+ private String creator;
+
+ @Schema(description = "子分类列表")
+ private List children;
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateCategorySaveReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateCategorySaveReqVO.java
new file mode 100644
index 0000000..21217ac
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateCategorySaveReqVO.java
@@ -0,0 +1,37 @@
+package com.zt.plat.module.base.controller.admin.doctemplate.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 模板分类新增/修改 Request VO")
+@Data
+public class DocTemplateCategorySaveReqVO {
+
+ @Schema(description = "主键", example = "1024")
+ private Long id;
+
+ @Schema(description = "分类名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "采购类")
+ @NotBlank(message = "分类名称不能为空")
+ private String categoryName;
+
+ @Schema(description = "分类编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "PURCHASE")
+ @NotBlank(message = "分类编码不能为空")
+ private String categoryCode;
+
+ @Schema(description = "父分类ID", example = "1")
+ private Long parentId;
+
+ @Schema(description = "层级(1=大类,2=小类)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @NotNull(message = "层级不能为空")
+ private Integer level;
+
+ @Schema(description = "排序号", example = "1")
+ private Integer sort;
+
+ @Schema(description = "备注", example = "采购业务相关文档分类")
+ private String remark;
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateInstancePageReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateInstancePageReqVO.java
new file mode 100644
index 0000000..ab6f3cb
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateInstancePageReqVO.java
@@ -0,0 +1,36 @@
+package com.zt.plat.module.base.controller.admin.doctemplate.vo;
+
+import com.zt.plat.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.zt.plat.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 DocTemplateInstancePageReqVO extends PageParam {
+
+ @Schema(description = "实例名称", example = "采购合同")
+ private String instanceName;
+
+ @Schema(description = "模板ID", example = "1")
+ private Long templateId;
+
+ @Schema(description = "业务关联类型", example = "contract")
+ private String businessType;
+
+ @Schema(description = "状态", example = "draft")
+ private String status;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateInstanceRespVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateInstanceRespVO.java
new file mode 100644
index 0000000..b27bab0
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateInstanceRespVO.java
@@ -0,0 +1,51 @@
+package com.zt.plat.module.base.controller.admin.doctemplate.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 模板实例 Response VO")
+@Data
+public class DocTemplateInstanceRespVO {
+
+ @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ private Long id;
+
+ @Schema(description = "实例名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "2025年上海XX供应商采购合同")
+ private String instanceName;
+
+ @Schema(description = "实例编码", example = "DOC-20250127-001")
+ private String instanceCode;
+
+ @Schema(description = "引用的模板ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ private Long templateId;
+
+ @Schema(description = "业务关联类型", example = "contract")
+ private String businessType;
+
+ @Schema(description = "业务关联ID", example = "100")
+ private Long businessId;
+
+ @Schema(description = "业务关联标签", example = "PC-2025-001")
+ private String businessLabel;
+
+ @Schema(description = "用户编辑后的内容")
+ private String editedContent;
+
+ @Schema(description = "渲染后的最终内容")
+ private String renderedContent;
+
+ @Schema(description = "备注", example = "采购合同文档")
+ private String remark;
+
+ @Schema(description = "状态", example = "draft")
+ private String status;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ private LocalDateTime createTime;
+
+ @Schema(description = "创建人", example = "admin")
+ private String creator;
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateInstanceSaveReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateInstanceSaveReqVO.java
new file mode 100644
index 0000000..49e0a13
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateInstanceSaveReqVO.java
@@ -0,0 +1,49 @@
+package com.zt.plat.module.base.controller.admin.doctemplate.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 模板实例新增/修改 Request VO")
+@Data
+public class DocTemplateInstanceSaveReqVO {
+
+ @Schema(description = "主键", example = "1024")
+ private Long id;
+
+ @Schema(description = "实例名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "2025年上海XX供应商采购合同")
+ @NotBlank(message = "实例名称不能为空")
+ private String instanceName;
+
+ @Schema(description = "实例编码", example = "DOC-20250127-001")
+ private String instanceCode;
+
+ @Schema(description = "引用的模板ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @NotNull(message = "模板ID不能为空")
+ private Long templateId;
+
+ @Schema(description = "业务关联类型", example = "contract")
+ private String businessType;
+
+ @Schema(description = "业务关联ID", example = "100")
+ private Long businessId;
+
+ @Schema(description = "业务关联标签", example = "PC-2025-001")
+ private String businessLabel;
+
+ @Schema(description = "用户编辑后的内容", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotBlank(message = "内容不能为空")
+ private String editedContent;
+
+ @Schema(description = "渲染后的最终内容")
+ private String renderedContent;
+
+ @Schema(description = "备注", example = "采购合同文档")
+ private String remark;
+
+ @Schema(description = "状态", example = "draft")
+ private String status;
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplatePageReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplatePageReqVO.java
new file mode 100644
index 0000000..ee8f37c
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplatePageReqVO.java
@@ -0,0 +1,39 @@
+package com.zt.plat.module.base.controller.admin.doctemplate.vo;
+
+import com.zt.plat.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.zt.plat.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 DocTemplatePageReqVO extends PageParam {
+
+ @Schema(description = "模板名称", example = "采购合同模板")
+ private String tmplName;
+
+ @Schema(description = "模板编码", example = "PO_CONTRACT_001")
+ private String tmplCode;
+
+ @Schema(description = "所属大类", example = "1")
+ private Long bigCategoryId;
+
+ @Schema(description = "所属小类", example = "11")
+ private Long smallCategoryId;
+
+ @Schema(description = "状态(1=启用,0=停用,2=草稿)", example = "1")
+ private String enabled;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateRespVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateRespVO.java
new file mode 100644
index 0000000..3a86c8e
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateRespVO.java
@@ -0,0 +1,57 @@
+package com.zt.plat.module.base.controller.admin.doctemplate.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 模板 Response VO")
+@Data
+public class DocTemplateRespVO {
+
+ @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ private Long id;
+
+ @Schema(description = "模板名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "采购合同模板")
+ private String tmplName;
+
+ @Schema(description = "模板编码(唯一)", requiredMode = Schema.RequiredMode.REQUIRED, example = "PO_CONTRACT_001")
+ private String tmplCode;
+
+ @Schema(description = "模板图标", example = "📄")
+ private String icon;
+
+ @Schema(description = "所属大类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ private Long bigCategoryId;
+
+ @Schema(description = "所属小类", example = "11")
+ private Long smallCategoryId;
+
+ @Schema(description = "版本号", example = "v1.2")
+ private String version;
+
+ @Schema(description = "模板描述", example = "标准采购合同范本")
+ private String description;
+
+ @Schema(description = "模板内容(HTML,含占位符)", requiredMode = Schema.RequiredMode.REQUIRED)
+ private String content;
+
+ @Schema(description = "SQL配置(JSON格式,可选)")
+ private String sqlConfig;
+
+ @Schema(description = "数据源标识", example = "default")
+ private String dataSource;
+
+ @Schema(description = "使用次数", example = "10")
+ private Integer useCount;
+
+ @Schema(description = "状态(1=启用,0=停用,2=草稿)", example = "1")
+ private String enabled;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ private LocalDateTime createTime;
+
+ @Schema(description = "创建人", example = "admin")
+ private String creator;
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateSaveReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateSaveReqVO.java
new file mode 100644
index 0000000..19003af
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateSaveReqVO.java
@@ -0,0 +1,53 @@
+package com.zt.plat.module.base.controller.admin.doctemplate.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 模板新增/修改 Request VO")
+@Data
+public class DocTemplateSaveReqVO {
+
+ @Schema(description = "主键", example = "1024")
+ private Long id;
+
+ @Schema(description = "模板名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "采购合同模板")
+ @NotBlank(message = "模板名称不能为空")
+ private String tmplName;
+
+ @Schema(description = "模板编码(唯一)", requiredMode = Schema.RequiredMode.REQUIRED, example = "PO_CONTRACT_001")
+ @NotBlank(message = "模板编码不能为空")
+ private String tmplCode;
+
+ @Schema(description = "模板图标", example = "📄")
+ private String icon;
+
+ @Schema(description = "所属大类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @NotNull(message = "所属大类不能为空")
+ private Long bigCategoryId;
+
+ @Schema(description = "所属小类", example = "11")
+ private Long smallCategoryId;
+
+ @Schema(description = "版本号", example = "v1.2")
+ private String version;
+
+ @Schema(description = "模板描述", example = "标准采购合同范本")
+ private String description;
+
+ @Schema(description = "模板内容(HTML,含占位符)", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotBlank(message = "模板内容不能为空")
+ private String content;
+
+ @Schema(description = "SQL配置(JSON格式,可选)")
+ private String sqlConfig;
+
+ @Schema(description = "数据源标识", example = "default")
+ private String dataSource;
+
+ @Schema(description = "状态(1=启用,0=停用,2=草稿)", example = "2")
+ private String enabled;
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateTagPageReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateTagPageReqVO.java
new file mode 100644
index 0000000..8d7f922
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateTagPageReqVO.java
@@ -0,0 +1,27 @@
+package com.zt.plat.module.base.controller.admin.doctemplate.vo;
+
+import com.zt.plat.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+@Schema(description = "管理后台 - 标签库分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class DocTemplateTagPageReqVO extends PageParam {
+
+ @Schema(description = "标签名称", example = "合同编号")
+ private String tagName;
+
+ @Schema(description = "标签编码", example = "contractNo")
+ private String tagCode;
+
+ @Schema(description = "所属分类ID", example = "1")
+ private Long categoryId;
+
+ @Schema(description = "是否启用(1=启用,0=停用)", example = "1")
+ private String enabled;
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateTagRespVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateTagRespVO.java
new file mode 100644
index 0000000..9c03138
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateTagRespVO.java
@@ -0,0 +1,63 @@
+package com.zt.plat.module.base.controller.admin.doctemplate.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 标签库 Response VO")
+@Data
+public class DocTemplateTagRespVO {
+
+ @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ private Long id;
+
+ @Schema(description = "标签名称(中文)", requiredMode = Schema.RequiredMode.REQUIRED, example = "合同编号")
+ private String tagName;
+
+ @Schema(description = "标签编码(Velocity变量名)", requiredMode = Schema.RequiredMode.REQUIRED, example = "contractNo")
+ private String tagCode;
+
+ @Schema(description = "所属分类ID", example = "1")
+ private Long categoryId;
+
+ @Schema(description = "所属分类名称", example = "合同管理")
+ private String categoryName;
+
+ @Schema(description = "数据类型", example = "String")
+ private String dataType;
+
+ @Schema(description = "默认值", example = "")
+ private String defaultValue;
+
+ @Schema(description = "SQL脚本(可选,仅保存参考)", example = "SELECT contract_no FROM contract_main WHERE id = #{businessId}")
+ private String sqlScript;
+
+ @Schema(description = "描述", example = "合同主表的合同编号字段")
+ private String description;
+
+ @Schema(description = "排序号", example = "1")
+ private Integer sort;
+
+ @Schema(description = "是否启用(1=启用,0=停用)", example = "1")
+ private String enabled;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ private LocalDateTime createTime;
+
+ @Schema(description = "创建人ID", example = "1")
+ private String creator;
+
+ @Schema(description = "创建人名称", example = "管理员")
+ private String creatorName;
+
+ @Schema(description = "更新时间")
+ private LocalDateTime updateTime;
+
+ @Schema(description = "更新人ID", example = "1")
+ private String updater;
+
+ @Schema(description = "更新人名称", example = "管理员")
+ private String updaterName;
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateTagSaveReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateTagSaveReqVO.java
new file mode 100644
index 0000000..4e06601
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/doctemplate/vo/DocTemplateTagSaveReqVO.java
@@ -0,0 +1,44 @@
+package com.zt.plat.module.base.controller.admin.doctemplate.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import jakarta.validation.constraints.NotBlank;
+
+@Schema(description = "管理后台 - 标签库新增/修改 Request VO")
+@Data
+public class DocTemplateTagSaveReqVO {
+
+ @Schema(description = "主键", example = "1024")
+ private Long id;
+
+ @Schema(description = "标签名称(中文)", requiredMode = Schema.RequiredMode.REQUIRED, example = "合同编号")
+ @NotBlank(message = "标签名称不能为空")
+ private String tagName;
+
+ @Schema(description = "标签编码(Velocity变量名)", requiredMode = Schema.RequiredMode.REQUIRED, example = "contractNo")
+ @NotBlank(message = "标签编码不能为空")
+ private String tagCode;
+
+ @Schema(description = "所属分类ID", example = "1")
+ private Long categoryId;
+
+ @Schema(description = "数据类型", example = "String")
+ private String dataType;
+
+ @Schema(description = "默认值", example = "")
+ private String defaultValue;
+
+ @Schema(description = "SQL脚本(可选,仅保存参考)", example = "SELECT contract_no FROM contract_main WHERE id = #{businessId}")
+ private String sqlScript;
+
+ @Schema(description = "描述", example = "合同主表的合同编号字段")
+ private String description;
+
+ @Schema(description = "排序号", example = "1")
+ private Integer sort;
+
+ @Schema(description = "是否启用(1=启用,0=停用)", example = "1")
+ private String enabled;
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/convert/doctemplate/DocTemplateCategoryConvert.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/convert/doctemplate/DocTemplateCategoryConvert.java
new file mode 100644
index 0000000..2ec2402
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/convert/doctemplate/DocTemplateCategoryConvert.java
@@ -0,0 +1,30 @@
+package com.zt.plat.module.base.convert.doctemplate;
+
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateCategoryRespVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateCategorySaveReqVO;
+import com.zt.plat.module.base.dal.dataobject.doctemplate.DocTemplateCategoryDO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 模板分类 Convert
+ *
+ * @author 系统生成
+ */
+@Mapper
+public interface DocTemplateCategoryConvert {
+
+ DocTemplateCategoryConvert INSTANCE = Mappers.getMapper(DocTemplateCategoryConvert.class);
+
+ DocTemplateCategoryDO convert(DocTemplateCategorySaveReqVO bean);
+
+ DocTemplateCategoryRespVO convert(DocTemplateCategoryDO bean);
+
+ List convertList(List list);
+
+ PageResult convertPage(PageResult page);
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/convert/doctemplate/DocTemplateConvert.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/convert/doctemplate/DocTemplateConvert.java
new file mode 100644
index 0000000..9559053
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/convert/doctemplate/DocTemplateConvert.java
@@ -0,0 +1,30 @@
+package com.zt.plat.module.base.convert.doctemplate;
+
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateRespVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateSaveReqVO;
+import com.zt.plat.module.base.dal.dataobject.doctemplate.DocTemplateDO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 模板 Convert
+ *
+ * @author 系统生成
+ */
+@Mapper
+public interface DocTemplateConvert {
+
+ DocTemplateConvert INSTANCE = Mappers.getMapper(DocTemplateConvert.class);
+
+ DocTemplateDO convert(DocTemplateSaveReqVO bean);
+
+ DocTemplateRespVO convert(DocTemplateDO bean);
+
+ List convertList(List list);
+
+ PageResult convertPage(PageResult page);
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/convert/doctemplate/DocTemplateInstanceConvert.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/convert/doctemplate/DocTemplateInstanceConvert.java
new file mode 100644
index 0000000..716cedc
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/convert/doctemplate/DocTemplateInstanceConvert.java
@@ -0,0 +1,30 @@
+package com.zt.plat.module.base.convert.doctemplate;
+
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateInstanceRespVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateInstanceSaveReqVO;
+import com.zt.plat.module.base.dal.dataobject.doctemplate.DocTemplateInstanceDO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 模板实例 Convert
+ *
+ * @author 系统生成
+ */
+@Mapper
+public interface DocTemplateInstanceConvert {
+
+ DocTemplateInstanceConvert INSTANCE = Mappers.getMapper(DocTemplateInstanceConvert.class);
+
+ DocTemplateInstanceDO convert(DocTemplateInstanceSaveReqVO bean);
+
+ DocTemplateInstanceRespVO convert(DocTemplateInstanceDO bean);
+
+ List convertList(List list);
+
+ PageResult convertPage(PageResult page);
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/convert/doctemplate/DocTemplateTagConvert.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/convert/doctemplate/DocTemplateTagConvert.java
new file mode 100644
index 0000000..1ef73be
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/convert/doctemplate/DocTemplateTagConvert.java
@@ -0,0 +1,30 @@
+package com.zt.plat.module.base.convert.doctemplate;
+
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateTagRespVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateTagSaveReqVO;
+import com.zt.plat.module.base.dal.dataobject.doctemplate.DocTemplateTagDO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 标签库 Convert
+ *
+ * @author 系统生成
+ */
+@Mapper
+public interface DocTemplateTagConvert {
+
+ DocTemplateTagConvert INSTANCE = Mappers.getMapper(DocTemplateTagConvert.class);
+
+ DocTemplateTagDO convert(DocTemplateTagSaveReqVO bean);
+
+ DocTemplateTagRespVO convert(DocTemplateTagDO bean);
+
+ List convertList(List list);
+
+ PageResult convertPage(PageResult page);
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/doctemplate/DocTemplateCategoryMapper.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/doctemplate/DocTemplateCategoryMapper.java
new file mode 100644
index 0000000..b6310e0
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/doctemplate/DocTemplateCategoryMapper.java
@@ -0,0 +1,28 @@
+package com.zt.plat.module.base.dal.dao.doctemplate;
+
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
+import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateCategoryPageReqVO;
+import com.zt.plat.module.base.dal.dataobject.doctemplate.DocTemplateCategoryDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 模板分类 Mapper
+ *
+ * @author 系统生成
+ */
+@Mapper
+public interface DocTemplateCategoryMapper extends BaseMapperX {
+
+ default PageResult selectPage(DocTemplateCategoryPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .likeIfPresent(DocTemplateCategoryDO::getCategoryName, reqVO.getCategoryName())
+ .eqIfPresent(DocTemplateCategoryDO::getCategoryCode, reqVO.getCategoryCode())
+ .eqIfPresent(DocTemplateCategoryDO::getParentId, reqVO.getParentId())
+ .eqIfPresent(DocTemplateCategoryDO::getLevel, reqVO.getLevel())
+ .orderByAsc(DocTemplateCategoryDO::getSort)
+ .orderByDesc(DocTemplateCategoryDO::getId));
+ }
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/doctemplate/DocTemplateInstanceMapper.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/doctemplate/DocTemplateInstanceMapper.java
new file mode 100644
index 0000000..8063083
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/doctemplate/DocTemplateInstanceMapper.java
@@ -0,0 +1,28 @@
+package com.zt.plat.module.base.dal.dao.doctemplate;
+
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
+import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateInstancePageReqVO;
+import com.zt.plat.module.base.dal.dataobject.doctemplate.DocTemplateInstanceDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 模板实例 Mapper
+ *
+ * @author 系统生成
+ */
+@Mapper
+public interface DocTemplateInstanceMapper extends BaseMapperX {
+
+ default PageResult selectPage(DocTemplateInstancePageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .likeIfPresent(DocTemplateInstanceDO::getInstanceName, reqVO.getInstanceName())
+ .eqIfPresent(DocTemplateInstanceDO::getTemplateId, reqVO.getTemplateId())
+ .eqIfPresent(DocTemplateInstanceDO::getBusinessType, reqVO.getBusinessType())
+ .eqIfPresent(DocTemplateInstanceDO::getStatus, reqVO.getStatus())
+ .betweenIfPresent(DocTemplateInstanceDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(DocTemplateInstanceDO::getId));
+ }
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/doctemplate/DocTemplateMapper.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/doctemplate/DocTemplateMapper.java
new file mode 100644
index 0000000..8de6f6b
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/doctemplate/DocTemplateMapper.java
@@ -0,0 +1,29 @@
+package com.zt.plat.module.base.dal.dao.doctemplate;
+
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
+import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplatePageReqVO;
+import com.zt.plat.module.base.dal.dataobject.doctemplate.DocTemplateDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 模板 Mapper
+ *
+ * @author 系统生成
+ */
+@Mapper
+public interface DocTemplateMapper extends BaseMapperX {
+
+ default PageResult selectPage(DocTemplatePageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .likeIfPresent(DocTemplateDO::getTmplName, reqVO.getTmplName())
+ .likeIfPresent(DocTemplateDO::getTmplCode, reqVO.getTmplCode())
+ .eqIfPresent(DocTemplateDO::getBigCategoryId, reqVO.getBigCategoryId())
+ .eqIfPresent(DocTemplateDO::getSmallCategoryId, reqVO.getSmallCategoryId())
+ .eqIfPresent(DocTemplateDO::getEnabled, reqVO.getEnabled())
+ .betweenIfPresent(DocTemplateDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(DocTemplateDO::getId));
+ }
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/doctemplate/DocTemplateTagMapper.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/doctemplate/DocTemplateTagMapper.java
new file mode 100644
index 0000000..d791d60
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/doctemplate/DocTemplateTagMapper.java
@@ -0,0 +1,28 @@
+package com.zt.plat.module.base.dal.dao.doctemplate;
+
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
+import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateTagPageReqVO;
+import com.zt.plat.module.base.dal.dataobject.doctemplate.DocTemplateTagDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 标签库 Mapper
+ *
+ * @author 系统生成
+ */
+@Mapper
+public interface DocTemplateTagMapper extends BaseMapperX {
+
+ default PageResult selectPage(DocTemplateTagPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .likeIfPresent(DocTemplateTagDO::getTagName, reqVO.getTagName())
+ .likeIfPresent(DocTemplateTagDO::getTagCode, reqVO.getTagCode())
+ .eqIfPresent(DocTemplateTagDO::getCategoryId, reqVO.getCategoryId())
+ .eqIfPresent(DocTemplateTagDO::getEnabled, reqVO.getEnabled())
+ .orderByAsc(DocTemplateTagDO::getSort)
+ .orderByDesc(DocTemplateTagDO::getId));
+ }
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/doctemplate/DocTemplateCategoryDO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/doctemplate/DocTemplateCategoryDO.java
new file mode 100644
index 0000000..390706f
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/doctemplate/DocTemplateCategoryDO.java
@@ -0,0 +1,63 @@
+package com.zt.plat.module.base.dal.dataobject.doctemplate;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO;
+import lombok.*;
+
+/**
+ * 模板分类 DO
+ *
+ * @author 系统生成
+ */
+@TableName(value = "bse_doc_category")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DocTemplateCategoryDO extends BusinessBaseDO {
+
+ /**
+ * 主键
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 分类名称
+ */
+ @TableField("category_name")
+ private String categoryName;
+
+ /**
+ * 分类编码
+ */
+ @TableField("category_code")
+ private String categoryCode;
+
+ /**
+ * 父分类ID(NULL=大类)
+ */
+ @TableField("parent_id")
+ private Long parentId;
+
+ /**
+ * 层级(1=大类,2=小类)
+ */
+ @TableField("level")
+ private Integer level;
+
+ /**
+ * 排序号
+ */
+ @TableField("sort")
+ private Integer sort;
+
+ /**
+ * 备注
+ */
+ @TableField("remark")
+ private String remark;
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/doctemplate/DocTemplateDO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/doctemplate/DocTemplateDO.java
new file mode 100644
index 0000000..344835a
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/doctemplate/DocTemplateDO.java
@@ -0,0 +1,99 @@
+package com.zt.plat.module.base.dal.dataobject.doctemplate;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO;
+import lombok.*;
+
+/**
+ * 模板 DO
+ *
+ * @author 系统生成
+ */
+@TableName(value = "bse_doc_tmpl")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DocTemplateDO extends BusinessBaseDO {
+
+ /**
+ * 主键
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 模板名称
+ */
+ @TableField("tmpl_name")
+ private String tmplName;
+
+ /**
+ * 模板编码(唯一)
+ */
+ @TableField("tmpl_code")
+ private String tmplCode;
+
+ /**
+ * 模板图标
+ */
+ @TableField("icon")
+ private String icon;
+
+ /**
+ * 所属大类
+ */
+ @TableField("big_category_id")
+ private Long bigCategoryId;
+
+ /**
+ * 所属小类
+ */
+ @TableField("small_category_id")
+ private Long smallCategoryId;
+
+ /**
+ * 版本号
+ */
+ @TableField("version")
+ private String version;
+
+ /**
+ * 模板描述
+ */
+ @TableField("description")
+ private String description;
+
+ /**
+ * 模板内容(HTML,含占位符)
+ */
+ @TableField("content")
+ private String content;
+
+ /**
+ * SQL配置(JSON格式,可选)
+ */
+ @TableField("sql_config")
+ private String sqlConfig;
+
+ /**
+ * 数据源标识
+ */
+ @TableField("data_source")
+ private String dataSource;
+
+ /**
+ * 使用次数(引用创建实例的次数)
+ */
+ @TableField("use_count")
+ private Integer useCount;
+
+ /**
+ * 状态(1=启用,0=停用,2=草稿)
+ */
+ @TableField("enabled")
+ private String enabled;
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/doctemplate/DocTemplateInstanceDO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/doctemplate/DocTemplateInstanceDO.java
new file mode 100644
index 0000000..88621fd
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/doctemplate/DocTemplateInstanceDO.java
@@ -0,0 +1,87 @@
+package com.zt.plat.module.base.dal.dataobject.doctemplate;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO;
+import lombok.*;
+
+/**
+ * 模板实例 DO
+ *
+ * @author 系统生成
+ */
+@TableName(value = "bse_doc_instance")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DocTemplateInstanceDO extends BusinessBaseDO {
+
+ /**
+ * 主键
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 实例名称
+ */
+ @TableField("instance_name")
+ private String instanceName;
+
+ /**
+ * 实例编码(唯一)
+ */
+ @TableField("instance_code")
+ private String instanceCode;
+
+ /**
+ * 引用的模板ID
+ */
+ @TableField("template_id")
+ private Long templateId;
+
+ /**
+ * 业务关联类型
+ */
+ @TableField("business_type")
+ private String businessType;
+
+ /**
+ * 业务关联ID
+ */
+ @TableField("business_id")
+ private Long businessId;
+
+ /**
+ * 业务关联标签(如 PC-2025-001)
+ */
+ @TableField("business_label")
+ private String businessLabel;
+
+ /**
+ * 用户编辑后的内容(含占位符)
+ */
+ @TableField("edited_content")
+ private String editedContent;
+
+ /**
+ * 渲染后的最终内容(占位符已替换)
+ */
+ @TableField("rendered_content")
+ private String renderedContent;
+
+ /**
+ * 备注
+ */
+ @TableField("remark")
+ private String remark;
+
+ /**
+ * 状态(draft=草稿,published=已发布)
+ */
+ @TableField("status")
+ private String status;
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/doctemplate/DocTemplateTagDO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/doctemplate/DocTemplateTagDO.java
new file mode 100644
index 0000000..564561f
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/doctemplate/DocTemplateTagDO.java
@@ -0,0 +1,81 @@
+package com.zt.plat.module.base.dal.dataobject.doctemplate;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.zt.plat.framework.mybatis.core.dataobject.BusinessBaseDO;
+import lombok.*;
+
+/**
+ * 标签库 DO
+ *
+ * @author 系统生成
+ */
+@TableName(value = "bse_doc_tag")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DocTemplateTagDO extends BusinessBaseDO {
+
+ /**
+ * 主键
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ private Long id;
+
+ /**
+ * 标签名称(中文)
+ */
+ @TableField("tag_name")
+ private String tagName;
+
+ /**
+ * 标签编码(Velocity变量名)
+ */
+ @TableField("tag_code")
+ private String tagCode;
+
+ /**
+ * 所属分类ID
+ */
+ @TableField("category_id")
+ private Long categoryId;
+
+ /**
+ * 数据类型(String/Number/Date/Boolean)
+ */
+ @TableField("data_type")
+ private String dataType;
+
+ /**
+ * 默认值
+ */
+ @TableField("default_value")
+ private String defaultValue;
+
+ /**
+ * SQL脚本(可选,仅保存参考)
+ */
+ @TableField("sql_script")
+ private String sqlScript;
+
+ /**
+ * 描述
+ */
+ @TableField("description")
+ private String description;
+
+ /**
+ * 排序号
+ */
+ @TableField("sort")
+ private Integer sort;
+
+ /**
+ * 是否启用(1=启用,0=停用)
+ */
+ @TableField("enabled")
+ private String enabled;
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateCategoryService.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateCategoryService.java
new file mode 100644
index 0000000..6b1d7eb
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateCategoryService.java
@@ -0,0 +1,78 @@
+package com.zt.plat.module.base.service.doctemplate;
+
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateCategoryPageReqVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateCategoryRespVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateCategorySaveReqVO;
+
+import jakarta.validation.Valid;
+import java.util.List;
+
+/**
+ * 模板分类 Service 接口
+ *
+ * @author 系统生成
+ */
+public interface DocTemplateCategoryService {
+
+ /**
+ * 创建模板分类
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ Long createTemplateCategory(@Valid DocTemplateCategorySaveReqVO createReqVO);
+
+ /**
+ * 更新模板分类
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateTemplateCategory(@Valid DocTemplateCategorySaveReqVO updateReqVO);
+
+ /**
+ * 删除模板分类
+ *
+ * @param id 编号
+ */
+ void deleteTemplateCategory(Long id);
+
+ /**
+ * 获得模板分类
+ *
+ * @param id 编号
+ * @return 模板分类
+ */
+ DocTemplateCategoryRespVO getTemplateCategory(Long id);
+
+ /**
+ * 获得模板分类分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 模板分类分页
+ */
+ PageResult getTemplateCategoryPage(DocTemplateCategoryPageReqVO pageReqVO);
+
+ /**
+ * 获得模板分类列表
+ *
+ * @return 模板分类列表
+ */
+ List getTemplateCategoryList();
+
+ /**
+ * 获得模板分类树形结构
+ *
+ * @return 模板分类树
+ */
+ List buildTree();
+
+ /**
+ * 获得分类完整路径(包含所有父级)
+ *
+ * @param categoryId 分类ID
+ * @return 分类路径,用"/"分隔,如"合同管理/销售合同"
+ */
+ String getCategoryFullPath(Long categoryId);
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateCategoryServiceImpl.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateCategoryServiceImpl.java
new file mode 100644
index 0000000..326d8a2
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateCategoryServiceImpl.java
@@ -0,0 +1,158 @@
+package com.zt.plat.module.base.service.doctemplate;
+
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateCategoryPageReqVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateCategoryRespVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateCategorySaveReqVO;
+import com.zt.plat.module.base.convert.doctemplate.DocTemplateCategoryConvert;
+import com.zt.plat.module.base.dal.dataobject.doctemplate.DocTemplateCategoryDO;
+import com.zt.plat.module.base.dal.dao.doctemplate.DocTemplateCategoryMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import jakarta.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.zt.plat.module.base.enums.ErrorCodeConstants.TEMPLATE_CATEGORY_NOT_EXISTS;
+
+/**
+ * 模板分类 Service 实现类
+ *
+ * @author 系统生成
+ */
+@Service
+@Validated
+public class DocTemplateCategoryServiceImpl implements DocTemplateCategoryService {
+
+ @Resource
+ private DocTemplateCategoryMapper templateCategoryMapper;
+
+ @Override
+ public Long createTemplateCategory(DocTemplateCategorySaveReqVO createReqVO) {
+ // 插入
+ DocTemplateCategoryDO templateCategory = DocTemplateCategoryConvert.INSTANCE.convert(createReqVO);
+ // 设置默认值
+ if (templateCategory.getSort() == null) {
+ templateCategory.setSort(0);
+ }
+ templateCategoryMapper.insert(templateCategory);
+ // 返回
+ return templateCategory.getId();
+ }
+
+ @Override
+ public void updateTemplateCategory(DocTemplateCategorySaveReqVO updateReqVO) {
+ // 校验存在
+ validateTemplateCategoryExists(updateReqVO.getId());
+ // 更新
+ DocTemplateCategoryDO updateObj = DocTemplateCategoryConvert.INSTANCE.convert(updateReqVO);
+ templateCategoryMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteTemplateCategory(Long id) {
+ // 校验存在
+ validateTemplateCategoryExists(id);
+ // 删除
+ templateCategoryMapper.deleteById(id);
+ }
+
+ private void validateTemplateCategoryExists(Long id) {
+ if (templateCategoryMapper.selectById(id) == null) {
+ throw exception(TEMPLATE_CATEGORY_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public DocTemplateCategoryRespVO getTemplateCategory(Long id) {
+ DocTemplateCategoryDO templateCategory = templateCategoryMapper.selectById(id);
+ return DocTemplateCategoryConvert.INSTANCE.convert(templateCategory);
+ }
+
+ @Override
+ public PageResult getTemplateCategoryPage(DocTemplateCategoryPageReqVO pageReqVO) {
+ PageResult pageResult = templateCategoryMapper.selectPage(pageReqVO);
+ return DocTemplateCategoryConvert.INSTANCE.convertPage(pageResult);
+ }
+
+ @Override
+ public List getTemplateCategoryList() {
+ List list = templateCategoryMapper.selectList();
+ return DocTemplateCategoryConvert.INSTANCE.convertList(list);
+ }
+
+ @Override
+ public List buildTree() {
+ // 1. 查询所有分类数据
+ List allCategories = templateCategoryMapper.selectList();
+
+ // 2. 转换为 VO
+ List categoryVOs = DocTemplateCategoryConvert.INSTANCE.convertList(allCategories);
+
+ // 3. 构建树形结构
+ return buildTreeStructure(categoryVOs);
+ }
+
+ /**
+ * 构建树形结构
+ */
+ private List buildTreeStructure(List categories) {
+ // 1. 按 parentId 分组
+ Map> groupByParentId = categories.stream()
+ .collect(Collectors.groupingBy(node ->
+ node.getParentId() != null ? node.getParentId().toString() : "null"));
+
+ // 2. 设置子节点并排序
+ categories.forEach(node -> {
+ List children = groupByParentId.get(node.getId().toString());
+ if (children != null && !children.isEmpty()) {
+ // 按排序号升序排列
+ children.sort(Comparator.comparing(DocTemplateCategoryRespVO::getSort,
+ Comparator.nullsLast(Comparator.naturalOrder())));
+ node.setChildren(children);
+ }
+ });
+
+ // 3. 返回根节点(parentId 为 null 的节点)
+ List rootNodes = groupByParentId.get("null");
+ if (rootNodes != null) {
+ // 根节点也要排序
+ rootNodes.sort(Comparator.comparing(DocTemplateCategoryRespVO::getSort,
+ Comparator.nullsLast(Comparator.naturalOrder())));
+ return rootNodes;
+ }
+ return List.of();
+ }
+
+ @Override
+ public String getCategoryFullPath(Long categoryId) {
+ if (categoryId == null) {
+ return "";
+ }
+
+ // 构建分类路径
+ List pathNames = new ArrayList<>();
+ Long currentId = categoryId;
+
+ // 递归查找父级分类
+ while (currentId != null) {
+ DocTemplateCategoryDO category = templateCategoryMapper.selectById(currentId);
+ if (category == null) {
+ break;
+ }
+ // 将当前分类名称添加到列表开头
+ pathNames.add(0, category.getCategoryName());
+ // 继续查找父级
+ currentId = category.getParentId();
+ }
+
+ // 用"/"拼接分类路径
+ return String.join("/", pathNames);
+ }
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateInstanceService.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateInstanceService.java
new file mode 100644
index 0000000..4c9acf2
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateInstanceService.java
@@ -0,0 +1,63 @@
+package com.zt.plat.module.base.service.doctemplate;
+
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateInstancePageReqVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateInstanceRespVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateInstanceSaveReqVO;
+
+import jakarta.validation.Valid;
+import java.util.List;
+
+/**
+ * 模板实例 Service 接口
+ *
+ * @author 系统生成
+ */
+public interface DocTemplateInstanceService {
+
+ /**
+ * 创建模板实例
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ Long createTemplateInstance(@Valid DocTemplateInstanceSaveReqVO createReqVO);
+
+ /**
+ * 更新模板实例
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateTemplateInstance(@Valid DocTemplateInstanceSaveReqVO updateReqVO);
+
+ /**
+ * 删除模板实例
+ *
+ * @param id 编号
+ */
+ void deleteTemplateInstance(Long id);
+
+ /**
+ * 获得模板实例
+ *
+ * @param id 编号
+ * @return 模板实例
+ */
+ DocTemplateInstanceRespVO getTemplateInstance(Long id);
+
+ /**
+ * 获得模板实例分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 模板实例分页
+ */
+ PageResult getTemplateInstancePage(DocTemplateInstancePageReqVO pageReqVO);
+
+ /**
+ * 获得模板实例列表
+ *
+ * @return 模板实例列表
+ */
+ List getTemplateInstanceList();
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateInstanceServiceImpl.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateInstanceServiceImpl.java
new file mode 100644
index 0000000..17100c4
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateInstanceServiceImpl.java
@@ -0,0 +1,136 @@
+package com.zt.plat.module.base.service.doctemplate;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateInstancePageReqVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateInstanceRespVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateInstanceSaveReqVO;
+import com.zt.plat.module.base.convert.doctemplate.DocTemplateInstanceConvert;
+import com.zt.plat.module.base.dal.dataobject.doctemplate.DocTemplateInstanceDO;
+import com.zt.plat.module.base.dal.dataobject.doctemplate.DocTemplateDO;
+import com.zt.plat.module.base.dal.dao.doctemplate.DocTemplateInstanceMapper;
+import com.zt.plat.module.base.dal.dao.doctemplate.DocTemplateMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import jakarta.annotation.Resource;
+import java.util.List;
+
+import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.zt.plat.module.base.enums.ErrorCodeConstants.*;
+
+/**
+ * 模板实例 Service 实现类
+ *
+ * @author 系统生成
+ */
+@Service
+@Validated
+public class DocTemplateInstanceServiceImpl implements DocTemplateInstanceService {
+
+ @Resource
+ private DocTemplateInstanceMapper docTemplateInstanceMapper;
+
+ @Resource
+ private DocTemplateMapper docTemplateMapper;
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Long createTemplateInstance(DocTemplateInstanceSaveReqVO createReqVO) {
+ // 校验模板存在
+ DocTemplateDO template = docTemplateMapper.selectById(createReqVO.getTemplateId());
+ if (template == null) {
+ throw exception(TEMPLATE_NOT_EXISTS);
+ }
+ // 校验实例编码唯一性
+ validateInstanceCodeUnique(null, createReqVO.getInstanceCode());
+
+ // 插入实例
+ DocTemplateInstanceDO templateInstance = DocTemplateInstanceConvert.INSTANCE.convert(createReqVO);
+ docTemplateInstanceMapper.insert(templateInstance);
+
+ // 更新模板使用次数
+ incrementTemplateUseCount(createReqVO.getTemplateId());
+
+ // 返回
+ return templateInstance.getId();
+ }
+
+ @Override
+ public void updateTemplateInstance(DocTemplateInstanceSaveReqVO updateReqVO) {
+ // 校验存在
+ validateTemplateInstanceExists(updateReqVO.getId());
+ // 校验实例编码唯一性
+ validateInstanceCodeUnique(updateReqVO.getId(), updateReqVO.getInstanceCode());
+ // 更新
+ DocTemplateInstanceDO updateObj = DocTemplateInstanceConvert.INSTANCE.convert(updateReqVO);
+ docTemplateInstanceMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteTemplateInstance(Long id) {
+ // 校验存在
+ validateTemplateInstanceExists(id);
+ // 删除
+ docTemplateInstanceMapper.deleteById(id);
+ }
+
+ private void validateTemplateInstanceExists(Long id) {
+ if (docTemplateInstanceMapper.selectById(id) == null) {
+ throw exception(TEMPLATE_INSTANCE_NOT_EXISTS);
+ }
+ }
+
+ /**
+ * 校验实例编码唯一性
+ */
+ private void validateInstanceCodeUnique(Long id, String instanceCode) {
+ if (StrUtil.isBlank(instanceCode)) {
+ return;
+ }
+ DocTemplateInstanceDO instance = docTemplateInstanceMapper.selectOne(new LambdaQueryWrapper()
+ .eq(DocTemplateInstanceDO::getInstanceCode, instanceCode));
+ if (instance == null) {
+ return;
+ }
+ // 如果是更新操作,排除自己
+ if (id != null && id.equals(instance.getId())) {
+ return;
+ }
+ throw exception(TEMPLATE_INSTANCE_CODE_DUPLICATE);
+ }
+
+ /**
+ * 增加模板使用次数
+ */
+ private void incrementTemplateUseCount(Long templateId) {
+ DocTemplateDO template = docTemplateMapper.selectById(templateId);
+ if (template != null) {
+ DocTemplateDO updateObj = new DocTemplateDO();
+ updateObj.setId(templateId);
+ updateObj.setUseCount(template.getUseCount() == null ? 1 : template.getUseCount() + 1);
+ docTemplateMapper.updateById(updateObj);
+ }
+ }
+
+ @Override
+ public DocTemplateInstanceRespVO getTemplateInstance(Long id) {
+ DocTemplateInstanceDO templateInstance = docTemplateInstanceMapper.selectById(id);
+ return DocTemplateInstanceConvert.INSTANCE.convert(templateInstance);
+ }
+
+ @Override
+ public PageResult getTemplateInstancePage(DocTemplateInstancePageReqVO pageReqVO) {
+ PageResult pageResult = docTemplateInstanceMapper.selectPage(pageReqVO);
+ return DocTemplateInstanceConvert.INSTANCE.convertPage(pageResult);
+ }
+
+ @Override
+ public List getTemplateInstanceList() {
+ List list = docTemplateInstanceMapper.selectList();
+ return DocTemplateInstanceConvert.INSTANCE.convertList(list);
+ }
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateRenderService.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateRenderService.java
new file mode 100644
index 0000000..277d3e0
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateRenderService.java
@@ -0,0 +1,31 @@
+package com.zt.plat.module.base.service.doctemplate;
+
+import java.util.Map;
+
+/**
+ * 文档模板渲染 Service 接口
+ *
+ * @author 系统生成
+ */
+public interface DocTemplateRenderService {
+
+ /**
+ * 渲染模板内容
+ *
+ * @param templateId 模板ID(可选,与instanceId二选一)
+ * @param instanceId 实例ID(可选,与templateId二选一)
+ * @param content 直接传入内容(可选,优先级最高)
+ * @param dataMap 数据Map(必填)
+ * @return 渲染后的内容
+ */
+ String render(Long templateId, Long instanceId, String content, Map dataMap);
+
+ /**
+ * 渲染模板并保存到实例
+ *
+ * @param instanceId 实例ID
+ * @param dataMap 数据Map
+ */
+ void renderAndSave(Long instanceId, Map dataMap);
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateRenderServiceImpl.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateRenderServiceImpl.java
new file mode 100644
index 0000000..18374ae
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateRenderServiceImpl.java
@@ -0,0 +1,144 @@
+package com.zt.plat.module.base.service.doctemplate;
+
+import cn.hutool.core.util.StrUtil;
+import com.zt.plat.module.base.dal.dataobject.doctemplate.DocTemplateDO;
+import com.zt.plat.module.base.dal.dataobject.doctemplate.DocTemplateInstanceDO;
+import com.zt.plat.module.base.dal.dao.doctemplate.DocTemplateMapper;
+import com.zt.plat.module.base.dal.dao.doctemplate.DocTemplateInstanceMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.Velocity;
+import org.springframework.stereotype.Service;
+
+import jakarta.annotation.PostConstruct;
+import jakarta.annotation.Resource;
+import java.io.StringWriter;
+import java.util.Map;
+import java.util.Properties;
+
+import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.zt.plat.module.base.enums.ErrorCodeConstants.*;
+
+/**
+ * 文档模板渲染 Service 实现类
+ * 使用 Apache Velocity 模板引擎进行渲染
+ *
+ * @author 系统生成
+ */
+@Service
+@Slf4j
+public class DocTemplateRenderServiceImpl implements DocTemplateRenderService {
+
+ @Resource
+ private DocTemplateMapper templateMapper;
+
+ @Resource
+ private DocTemplateInstanceMapper instanceMapper;
+
+ /**
+ * 初始化 Velocity 引擎
+ */
+ @PostConstruct
+ public void initVelocity() {
+ try {
+ Properties props = new Properties();
+ // 设置编码
+ props.setProperty("input.encoding", "UTF-8");
+ props.setProperty("output.encoding", "UTF-8");
+ // 设置资源加载器为字符串
+ props.setProperty("resource.loader", "string");
+ props.setProperty("string.resource.loader.class",
+ "org.apache.velocity.runtime.resource.loader.StringResourceLoader");
+ // 关闭日志(可选)
+ props.setProperty("runtime.log.logsystem.class",
+ "org.apache.velocity.runtime.log.NullLogChute");
+
+ Velocity.init(props);
+ log.info("Velocity 模板引擎初始化成功");
+ } catch (Exception e) {
+ log.error("Velocity 模板引擎初始化失败", e);
+ throw new RuntimeException("Velocity 模板引擎初始化失败", e);
+ }
+ }
+
+ @Override
+ public String render(Long templateId, Long instanceId, String content, Map dataMap) {
+ // 1. 获取模板内容
+ String templateContent = getTemplateContent(templateId, instanceId, content);
+
+ if (StrUtil.isBlank(templateContent)) {
+ throw exception(TEMPLATE_NOT_EXISTS);
+ }
+
+ // 2. 创建 Velocity 上下文
+ VelocityContext context = new VelocityContext();
+ if (dataMap != null && !dataMap.isEmpty()) {
+ dataMap.forEach(context::put);
+ }
+
+ // 3. 渲染模板
+ try {
+ StringWriter writer = new StringWriter();
+ Velocity.evaluate(context, writer, "DocTemplateRender", templateContent);
+ String result = writer.toString();
+
+ log.debug("模板渲染成功,数据量: {}, 内容长度: {}",
+ dataMap != null ? dataMap.size() : 0, result.length());
+
+ return result;
+ } catch (Exception e) {
+ log.error("模板渲染失败,templateId: {}, instanceId: {}", templateId, instanceId, e);
+ throw new RuntimeException("模板渲染失败: " + e.getMessage(), e);
+ }
+ }
+
+ @Override
+ public void renderAndSave(Long instanceId, Map dataMap) {
+ // 1. 校验实例存在
+ DocTemplateInstanceDO instance = instanceMapper.selectById(instanceId);
+ if (instance == null) {
+ throw exception(TEMPLATE_INSTANCE_NOT_EXISTS);
+ }
+
+ // 2. 渲染内容
+ String renderedContent = render(null, instanceId, null, dataMap);
+
+ // 3. 更新实例的渲染内容
+ DocTemplateInstanceDO updateObj = new DocTemplateInstanceDO();
+ updateObj.setId(instanceId);
+ updateObj.setRenderedContent(renderedContent);
+ instanceMapper.updateById(updateObj);
+
+ log.info("模板实例渲染并保存成功,instanceId: {}", instanceId);
+ }
+
+ /**
+ * 获取模板内容
+ * 优先级:content > instanceId > templateId
+ */
+ private String getTemplateContent(Long templateId, Long instanceId, String content) {
+ // 优先使用直接传入的内容
+ if (StrUtil.isNotBlank(content)) {
+ return content;
+ }
+
+ // 其次使用实例的编辑内容
+ if (instanceId != null) {
+ DocTemplateInstanceDO instance = instanceMapper.selectById(instanceId);
+ if (instance != null && StrUtil.isNotBlank(instance.getEditedContent())) {
+ return instance.getEditedContent();
+ }
+ }
+
+ // 最后使用模板内容
+ if (templateId != null) {
+ DocTemplateDO template = templateMapper.selectById(templateId);
+ if (template != null && StrUtil.isNotBlank(template.getContent())) {
+ return template.getContent();
+ }
+ }
+
+ return null;
+ }
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateService.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateService.java
new file mode 100644
index 0000000..4bc15f7
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateService.java
@@ -0,0 +1,63 @@
+package com.zt.plat.module.base.service.doctemplate;
+
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplatePageReqVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateRespVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateSaveReqVO;
+
+import jakarta.validation.Valid;
+import java.util.List;
+
+/**
+ * 模板 Service 接口
+ *
+ * @author 系统生成
+ */
+public interface DocTemplateService {
+
+ /**
+ * 创建模板
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ Long createTemplate(@Valid DocTemplateSaveReqVO createReqVO);
+
+ /**
+ * 更新模板
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateTemplate(@Valid DocTemplateSaveReqVO updateReqVO);
+
+ /**
+ * 删除模板
+ *
+ * @param id 编号
+ */
+ void deleteTemplate(Long id);
+
+ /**
+ * 获得模板
+ *
+ * @param id 编号
+ * @return 模板
+ */
+ DocTemplateRespVO getTemplate(Long id);
+
+ /**
+ * 获得模板分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 模板分页
+ */
+ PageResult getTemplatePage(DocTemplatePageReqVO pageReqVO);
+
+ /**
+ * 获得模板列表
+ *
+ * @return 模板列表
+ */
+ List getTemplateList();
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateServiceImpl.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateServiceImpl.java
new file mode 100644
index 0000000..b5e353b
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateServiceImpl.java
@@ -0,0 +1,115 @@
+package com.zt.plat.module.base.service.doctemplate;
+
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplatePageReqVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateRespVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateSaveReqVO;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.zt.plat.module.base.convert.doctemplate.DocTemplateConvert;
+import com.zt.plat.module.base.dal.dataobject.doctemplate.DocTemplateDO;
+import com.zt.plat.module.base.dal.dao.doctemplate.DocTemplateMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import jakarta.annotation.Resource;
+import java.util.List;
+
+import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.zt.plat.module.base.enums.ErrorCodeConstants.*;
+
+/**
+ * 模板 Service 实现类
+ *
+ * @author 系统生成
+ */
+@Service
+@Validated
+public class DocTemplateServiceImpl implements DocTemplateService {
+
+ @Resource
+ private DocTemplateMapper templateMapper;
+
+ @Override
+ public Long createTemplate(DocTemplateSaveReqVO createReqVO) {
+ // 校验模板编码唯一性
+ validateTemplateCodeUnique(null, createReqVO.getTmplCode());
+
+ // 插入
+ DocTemplateDO template = DocTemplateConvert.INSTANCE.convert(createReqVO);
+ // 设置默认值
+ if (template.getUseCount() == null) {
+ template.setUseCount(0);
+ }
+ if (template.getEnabled() == null) {
+ template.setEnabled("2"); // 默认为草稿状态
+ }
+ templateMapper.insert(template);
+ // 返回
+ return template.getId();
+ }
+
+ @Override
+ public void updateTemplate(DocTemplateSaveReqVO updateReqVO) {
+ // 校验存在
+ validateTemplateExists(updateReqVO.getId());
+ // 校验模板编码唯一性
+ validateTemplateCodeUnique(updateReqVO.getId(), updateReqVO.getTmplCode());
+
+ // 更新
+ DocTemplateDO updateObj = DocTemplateConvert.INSTANCE.convert(updateReqVO);
+ templateMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteTemplate(Long id) {
+ // 校验存在
+ validateTemplateExists(id);
+ // 删除
+ templateMapper.deleteById(id);
+ }
+
+ private void validateTemplateExists(Long id) {
+ if (templateMapper.selectById(id) == null) {
+ throw exception(TEMPLATE_NOT_EXISTS);
+ }
+ }
+
+ /**
+ * 校验模板编码唯一性
+ */
+ private void validateTemplateCodeUnique(Long id, String tmplCode) {
+ if (StrUtil.isBlank(tmplCode)) {
+ return;
+ }
+ DocTemplateDO template = templateMapper.selectOne(new LambdaQueryWrapper()
+ .eq(DocTemplateDO::getTmplCode, tmplCode));
+ if (template == null) {
+ return;
+ }
+ // 如果是更新操作,排除自己
+ if (id != null && id.equals(template.getId())) {
+ return;
+ }
+ throw exception(TEMPLATE_CODE_DUPLICATE);
+ }
+
+ @Override
+ public DocTemplateRespVO getTemplate(Long id) {
+ DocTemplateDO template = templateMapper.selectById(id);
+ return DocTemplateConvert.INSTANCE.convert(template);
+ }
+
+ @Override
+ public PageResult getTemplatePage(DocTemplatePageReqVO pageReqVO) {
+ PageResult pageResult = templateMapper.selectPage(pageReqVO);
+ return DocTemplateConvert.INSTANCE.convertPage(pageResult);
+ }
+
+ @Override
+ public List getTemplateList() {
+ List list = templateMapper.selectList();
+ return DocTemplateConvert.INSTANCE.convertList(list);
+ }
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateTagService.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateTagService.java
new file mode 100644
index 0000000..15954ed
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateTagService.java
@@ -0,0 +1,63 @@
+package com.zt.plat.module.base.service.doctemplate;
+
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateTagPageReqVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateTagRespVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateTagSaveReqVO;
+
+import jakarta.validation.Valid;
+import java.util.List;
+
+/**
+ * 标签库 Service 接口
+ *
+ * @author 系统生成
+ */
+public interface DocTemplateTagService {
+
+ /**
+ * 创建标签
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ Long createTemplateTag(@Valid DocTemplateTagSaveReqVO createReqVO);
+
+ /**
+ * 更新标签
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateTemplateTag(@Valid DocTemplateTagSaveReqVO updateReqVO);
+
+ /**
+ * 删除标签
+ *
+ * @param id 编号
+ */
+ void deleteTemplateTag(Long id);
+
+ /**
+ * 获得标签
+ *
+ * @param id 编号
+ * @return 标签
+ */
+ DocTemplateTagRespVO getTemplateTag(Long id);
+
+ /**
+ * 获得标签分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 标签分页
+ */
+ PageResult getTemplateTagPage(DocTemplateTagPageReqVO pageReqVO);
+
+ /**
+ * 获得标签列表
+ *
+ * @return 标签列表
+ */
+ List getTemplateTagList();
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateTagServiceImpl.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateTagServiceImpl.java
new file mode 100644
index 0000000..194c6e9
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/doctemplate/DocTemplateTagServiceImpl.java
@@ -0,0 +1,115 @@
+package com.zt.plat.module.base.service.doctemplate;
+
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateTagPageReqVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateTagRespVO;
+import com.zt.plat.module.base.controller.admin.doctemplate.vo.DocTemplateTagSaveReqVO;
+import com.zt.plat.module.base.convert.doctemplate.DocTemplateTagConvert;
+import com.zt.plat.module.base.dal.dataobject.doctemplate.DocTemplateTagDO;
+import com.zt.plat.module.base.dal.dao.doctemplate.DocTemplateTagMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import jakarta.annotation.Resource;
+import java.util.List;
+
+import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.zt.plat.module.base.enums.ErrorCodeConstants.TEMPLATE_TAG_NOT_EXISTS;
+
+/**
+ * 标签库 Service 实现类
+ *
+ * @author 系统生成
+ */
+@Service
+@Validated
+public class DocTemplateTagServiceImpl implements DocTemplateTagService {
+
+ @Resource
+ private DocTemplateTagMapper templateTagMapper;
+
+ @Resource
+ private DocTemplateCategoryService templateCategoryService;
+
+ @Override
+ public Long createTemplateTag(DocTemplateTagSaveReqVO createReqVO) {
+ // 插入
+ DocTemplateTagDO templateTag = DocTemplateTagConvert.INSTANCE.convert(createReqVO);
+ // 设置默认值
+ if (templateTag.getSort() == null) {
+ templateTag.setSort(0);
+ }
+ if (templateTag.getEnabled() == null) {
+ templateTag.setEnabled("1");
+ }
+ templateTagMapper.insert(templateTag);
+ // 返回
+ return templateTag.getId();
+ }
+
+ @Override
+ public void updateTemplateTag(DocTemplateTagSaveReqVO updateReqVO) {
+ // 校验存在
+ validateTemplateTagExists(updateReqVO.getId());
+ // 更新
+ DocTemplateTagDO updateObj = DocTemplateTagConvert.INSTANCE.convert(updateReqVO);
+ templateTagMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteTemplateTag(Long id) {
+ // 校验存在
+ validateTemplateTagExists(id);
+ // 删除
+ templateTagMapper.deleteById(id);
+ }
+
+ private void validateTemplateTagExists(Long id) {
+ if (templateTagMapper.selectById(id) == null) {
+ throw exception(TEMPLATE_TAG_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public DocTemplateTagRespVO getTemplateTag(Long id) {
+ DocTemplateTagDO templateTag = templateTagMapper.selectById(id);
+ DocTemplateTagRespVO respVO = DocTemplateTagConvert.INSTANCE.convert(templateTag);
+ // 填充分类名称
+ fillCategoryName(respVO);
+ return respVO;
+ }
+
+ @Override
+ public PageResult getTemplateTagPage(DocTemplateTagPageReqVO pageReqVO) {
+ PageResult pageResult = templateTagMapper.selectPage(pageReqVO);
+ PageResult result = DocTemplateTagConvert.INSTANCE.convertPage(pageResult);
+ // 填充分类名称
+ result.getList().forEach(this::fillCategoryName);
+ return result;
+ }
+
+ @Override
+ public List getTemplateTagList() {
+ List list = templateTagMapper.selectList();
+ List result = DocTemplateTagConvert.INSTANCE.convertList(list);
+ // 填充分类名称
+ result.forEach(this::fillCategoryName);
+ return result;
+ }
+
+ /**
+ * 填充分类名称(包含父级路径)
+ *
+ * @param respVO 标签响应VO
+ */
+ private void fillCategoryName(DocTemplateTagRespVO respVO) {
+ if (respVO == null || respVO.getCategoryId() == null) {
+ return;
+ }
+
+ // 调用分类Service获取完整路径
+ String categoryPath = templateCategoryService.getCategoryFullPath(respVO.getCategoryId());
+ respVO.setCategoryName(categoryPath);
+ }
+
+}
From d00aebb49d6efe11295dff3ab9780f9f9e2a633a Mon Sep 17 00:00:00 2001
From: hewencai <2357300448@qq.com>
Date: Wed, 29 Oct 2025 13:18:23 +0800
Subject: [PATCH 02/12] =?UTF-8?q?feat:=E5=AE=8C=E5=96=84=E8=AE=A1=E9=87=8F?=
=?UTF-8?q?=E5=8D=95=E4=BD=8D=E7=AE=A1=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../QuantityUnitRelationController.java | 15 ++++++++
.../vo/CreateUnitWithRelationReqVO.java | 27 +++++++++++++++
.../vo/DeleteUnitWithRelationReqVO.java | 19 +++++++++++
.../vo/UnitConversionPageReqVO.java | 3 ++
.../vo/UnitConversionSaveReqVO.java | 4 +++
.../UnitConversion/UnitConversionMapper.java | 1 +
.../UnitConversion/UnitConversionDO.java | 5 +++
.../QuantityUnitRelationService.java | 19 +++++++++++
.../QuantityUnitRelationServiceImpl.java | 34 +++++++++++++++++++
9 files changed, 127 insertions(+)
create mode 100644 zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/controller/admin/QuantityUnitRelation/vo/CreateUnitWithRelationReqVO.java
create mode 100644 zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/controller/admin/QuantityUnitRelation/vo/DeleteUnitWithRelationReqVO.java
diff --git a/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/controller/admin/QuantityUnitRelation/QuantityUnitRelationController.java b/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/controller/admin/QuantityUnitRelation/QuantityUnitRelationController.java
index 6a48f14..f6eef72 100644
--- a/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/controller/admin/QuantityUnitRelation/QuantityUnitRelationController.java
+++ b/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/controller/admin/QuantityUnitRelation/QuantityUnitRelationController.java
@@ -113,4 +113,19 @@ public class QuantityUnitRelationController implements BusinessControllerMarker
return success(true);
}
+ @PostMapping("/create-unit-with-relation")
+ @Operation(summary = "创建单位并关联到量纲(组合接口)")
+ @PreAuthorize("@ss.hasPermission('unitmanagement:quantity-unit-relation:create')")
+ public CommonResult createUnitWithRelation(@Valid @RequestBody CreateUnitWithRelationReqVO createReqVO) {
+ return success(quantityUnitRelationService.createUnitWithRelation(createReqVO));
+ }
+
+ @PostMapping("/delete-unit-with-relation")
+ @Operation(summary = "删除单位及关联关系(组合接口)")
+ @PreAuthorize("@ss.hasPermission('unitmanagement:quantity-unit-relation:delete')")
+ public CommonResult deleteUnitWithRelation(@Valid @RequestBody DeleteUnitWithRelationReqVO deleteReqVO) {
+ quantityUnitRelationService.deleteUnitWithRelation(deleteReqVO);
+ return success(true);
+ }
+
}
\ No newline at end of file
diff --git a/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/controller/admin/QuantityUnitRelation/vo/CreateUnitWithRelationReqVO.java b/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/controller/admin/QuantityUnitRelation/vo/CreateUnitWithRelationReqVO.java
new file mode 100644
index 0000000..9dee92f
--- /dev/null
+++ b/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/controller/admin/QuantityUnitRelation/vo/CreateUnitWithRelationReqVO.java
@@ -0,0 +1,27 @@
+package com.zt.plat.module.unitmanagement.controller.admin.QuantityUnitRelation.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - 创建单位并关联到量纲 Request VO")
+@Data
+public class CreateUnitWithRelationReqVO {
+
+ @Schema(description = "量纲ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @NotNull(message = "量纲ID不能为空")
+ private Long untQtyId;
+
+ @Schema(description = "单位名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "米")
+ @NotEmpty(message = "单位名称不能为空")
+ private String name;
+
+ @Schema(description = "单位符号", requiredMode = Schema.RequiredMode.REQUIRED, example = "m")
+ @NotEmpty(message = "单位符号不能为空")
+ private String smb;
+
+ @Schema(description = "是否基准单位:0=否,1=是", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @NotNull(message = "是否基准单位不能为空")
+ private Integer isBse;
+
+}
diff --git a/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/controller/admin/QuantityUnitRelation/vo/DeleteUnitWithRelationReqVO.java b/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/controller/admin/QuantityUnitRelation/vo/DeleteUnitWithRelationReqVO.java
new file mode 100644
index 0000000..4d604e3
--- /dev/null
+++ b/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/controller/admin/QuantityUnitRelation/vo/DeleteUnitWithRelationReqVO.java
@@ -0,0 +1,19 @@
+package com.zt.plat.module.unitmanagement.controller.admin.QuantityUnitRelation.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - 删除单位及关联关系 Request VO")
+@Data
+public class DeleteUnitWithRelationReqVO {
+
+ @Schema(description = "关联关系ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @NotNull(message = "关联关系ID不能为空")
+ private Long relationId;
+
+ @Schema(description = "单位ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @NotNull(message = "单位ID不能为空")
+ private Long untId;
+
+}
diff --git a/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/controller/admin/UnitConversion/vo/UnitConversionPageReqVO.java b/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/controller/admin/UnitConversion/vo/UnitConversionPageReqVO.java
index 77fb339..0763d9b 100644
--- a/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/controller/admin/UnitConversion/vo/UnitConversionPageReqVO.java
+++ b/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/controller/admin/UnitConversion/vo/UnitConversionPageReqVO.java
@@ -14,6 +14,9 @@ import static com.zt.plat.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH
@Data
public class UnitConversionPageReqVO extends PageParam {
+ @Schema(description = "计量单位量ID(量纲ID)", example = "1")
+ private Long untQtyId;
+
@Schema(description = "源单位ID", example = "26239")
private Long srcUntId;
diff --git a/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/controller/admin/UnitConversion/vo/UnitConversionSaveReqVO.java b/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/controller/admin/UnitConversion/vo/UnitConversionSaveReqVO.java
index b8da368..19fcaaf 100644
--- a/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/controller/admin/UnitConversion/vo/UnitConversionSaveReqVO.java
+++ b/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/controller/admin/UnitConversion/vo/UnitConversionSaveReqVO.java
@@ -13,6 +13,10 @@ public class UnitConversionSaveReqVO {
@Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "339")
private Long id;
+ @Schema(description = "计量单位量ID(量纲ID)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @NotNull(message = "量纲ID不能为空")
+ private Long untQtyId;
+
@Schema(description = "源单位ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26239")
@NotNull(message = "源单位ID不能为空")
private Long srcUntId;
diff --git a/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/dal/dao/UnitConversion/UnitConversionMapper.java b/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/dal/dao/UnitConversion/UnitConversionMapper.java
index a667ad7..53a4bb7 100644
--- a/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/dal/dao/UnitConversion/UnitConversionMapper.java
+++ b/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/dal/dao/UnitConversion/UnitConversionMapper.java
@@ -19,6 +19,7 @@ public interface UnitConversionMapper extends BaseMapperX {
default PageResult selectPage(UnitConversionPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(UnitConversionDO::getUntQtyId, reqVO.getUntQtyId())
.eqIfPresent(UnitConversionDO::getSrcUntId, reqVO.getSrcUntId())
.eqIfPresent(UnitConversionDO::getTgtUntId, reqVO.getTgtUntId())
.eqIfPresent(UnitConversionDO::getFctr, reqVO.getFctr())
diff --git a/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/dal/dataobject/UnitConversion/UnitConversionDO.java b/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/dal/dataobject/UnitConversion/UnitConversionDO.java
index 05431d2..82679d4 100644
--- a/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/dal/dataobject/UnitConversion/UnitConversionDO.java
+++ b/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/dal/dataobject/UnitConversion/UnitConversionDO.java
@@ -33,6 +33,11 @@ public class UnitConversionDO extends BaseDO {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
/**
+ * 计量单位量ID(量纲ID)
+ */
+ @TableField("UNT_QTY_ID")
+ private Long untQtyId;
+ /**
* 源单位ID
*/
@TableField("SRC_UNT_ID")
diff --git a/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/service/QuantityUnitRelation/QuantityUnitRelationService.java b/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/service/QuantityUnitRelation/QuantityUnitRelationService.java
index cd2e715..61e42e9 100644
--- a/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/service/QuantityUnitRelation/QuantityUnitRelationService.java
+++ b/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/service/QuantityUnitRelation/QuantityUnitRelationService.java
@@ -67,4 +67,23 @@ public interface QuantityUnitRelationService {
*/
void batchSaveQuantityUnitRelations(@Valid QuantityUnitRelationBatchSaveReqVO batchSaveReqVO);
+ /**
+ * 创建单位并关联到量纲(组合接口)
+ * 1. 创建计量单位
+ * 2. 创建量纲-单位关联关系
+ *
+ * @param createReqVO 创建信息
+ * @return 关联关系响应VO
+ */
+ QuantityUnitRelationRespVO createUnitWithRelation(@Valid CreateUnitWithRelationReqVO createReqVO);
+
+ /**
+ * 删除单位及关联关系(组合接口)
+ * 1. 删除量纲-单位关联关系
+ * 2. 删除计量单位
+ *
+ * @param deleteReqVO 删除信息
+ */
+ void deleteUnitWithRelation(@Valid DeleteUnitWithRelationReqVO deleteReqVO);
+
}
\ No newline at end of file
diff --git a/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/service/QuantityUnitRelation/QuantityUnitRelationServiceImpl.java b/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/service/QuantityUnitRelation/QuantityUnitRelationServiceImpl.java
index 3848e1c..1a1be0d 100644
--- a/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/service/QuantityUnitRelation/QuantityUnitRelationServiceImpl.java
+++ b/zt-module-unit-management/zt-module-unit-management-server/src/main/java/com/zt/plat/module/unitmanagement/service/QuantityUnitRelation/QuantityUnitRelationServiceImpl.java
@@ -14,6 +14,9 @@ import com.zt.plat.framework.common.pojo.PageParam;
import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.module.unitmanagement.dal.dao.QuantityUnitRelation.QuantityUnitRelationMapper;
+import com.zt.plat.module.unitmanagement.service.UntInfo.UntInfoService;
+import com.zt.plat.module.unitmanagement.controller.admin.UntInfo.vo.UntInfoSaveReqVO;
+import com.zt.plat.module.unitmanagement.controller.admin.UntInfo.vo.UntInfoRespVO;
import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.zt.plat.framework.common.util.collection.CollectionUtils.convertList;
@@ -32,6 +35,9 @@ public class QuantityUnitRelationServiceImpl implements QuantityUnitRelationServ
@Resource
private QuantityUnitRelationMapper quantityUnitRelationMapper;
+ @Resource
+ private UntInfoService untInfoService;
+
@Override
public QuantityUnitRelationRespVO createQuantityUnitRelation(QuantityUnitRelationSaveReqVO createReqVO) {
// 插入
@@ -138,4 +144,32 @@ public class QuantityUnitRelationServiceImpl implements QuantityUnitRelationServ
}
}
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public QuantityUnitRelationRespVO createUnitWithRelation(CreateUnitWithRelationReqVO createReqVO) {
+ // 1. 创建计量单位
+ UntInfoSaveReqVO untInfoReqVO = new UntInfoSaveReqVO();
+ untInfoReqVO.setName(createReqVO.getName());
+ untInfoReqVO.setSmb(createReqVO.getSmb());
+ UntInfoRespVO untInfoResp = untInfoService.createUntInfo(untInfoReqVO);
+
+ // 2. 创建量纲-单位关联关系
+ QuantityUnitRelationSaveReqVO relationReqVO = new QuantityUnitRelationSaveReqVO();
+ relationReqVO.setUntQtyId(createReqVO.getUntQtyId());
+ relationReqVO.setUntId(untInfoResp.getId());
+ relationReqVO.setIsBse(createReqVO.getIsBse());
+
+ return createQuantityUnitRelation(relationReqVO);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void deleteUnitWithRelation(DeleteUnitWithRelationReqVO deleteReqVO) {
+ // 1. 先删除关联关系(外键约束,必须先删除)
+ deleteQuantityUnitRelation(deleteReqVO.getRelationId());
+
+ // 2. 再删除计量单位
+ untInfoService.deleteUntInfo(deleteReqVO.getUntId());
+ }
+
}
\ No newline at end of file
From 7a23d9ba3ef4d2b0ade30ff53899743b05072d71 Mon Sep 17 00:00:00 2001
From: guojunyun
Date: Wed, 29 Oct 2025 15:59:58 +0800
Subject: [PATCH 03/12] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=9B=BD=E8=B4=B82.0?=
=?UTF-8?q?=E7=B3=BB=E7=BB=9F=E5=90=88=E5=90=8C=E5=88=86=E9=A1=B5=E6=9F=A5?=
=?UTF-8?q?=E8=AF=A2=E6=8E=A5=E5=8F=A3=20=E4=BF=AE=E6=94=B9=E5=9B=BD?=
=?UTF-8?q?=E8=B4=B82.0=E7=B3=BB=E7=BB=9F=E5=90=88=E5=90=8C=E5=88=9B?=
=?UTF-8?q?=E5=BB=BA=E6=8E=A5=E5=8F=A3=EF=BC=9A=E5=90=88=E5=90=8C=E7=B1=BB?=
=?UTF-8?q?=E5=9E=8B=E4=BF=AE=E6=94=B9=20=E5=90=88=E5=90=8C=E4=B8=BB?=
=?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=B7=BB=E5=8A=A0=E4=BB=A3=E7=90=86=E6=96=B9?=
=?UTF-8?q?=E5=90=8D=E7=A7=B0=E5=AD=97=E6=AE=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../module/contractorder/api/ContractApi.java | 12 +-
.../api/dto/contract/ContractRespDTO.java | 3 +
.../api/vo/contract/ContractRespVO.java | 3 +
.../api/vo/contract/ContractSaveReqVO.java | 3 +
...{ContractRequest.java => IntContract.java} | 2 +-
.../international/IntContractPageReq.java | 13 ++
.../enums/contract/DictEnum.java | 9 ++
.../contractorder/api/ContractApiImpl.java | 134 +++++++++++++++++-
.../dataobject/contract/ContractMainDO.java | 5 +
9 files changed, 176 insertions(+), 8 deletions(-)
rename zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/international/{ContractRequest.java => IntContract.java} (99%)
create mode 100644 zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/international/IntContractPageReq.java
diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/ContractApi.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/ContractApi.java
index 66a3d5f..051c0fb 100644
--- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/ContractApi.java
+++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/ContractApi.java
@@ -2,9 +2,11 @@ package com.zt.plat.module.contractorder.api;
import com.zt.plat.framework.common.pojo.CommonResult;
+import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.module.contractorder.api.dto.contract.ContractRespDTO;
import com.zt.plat.module.contractorder.api.dto.order.PurchaseOrderWithDetailsDTO;
-import com.zt.plat.module.contractorder.api.vo.contract.international.ContractRequest;
+import com.zt.plat.module.contractorder.api.vo.contract.international.IntContract;
+import com.zt.plat.module.contractorder.api.vo.contract.international.IntContractPageReq;
import com.zt.plat.module.contractorder.enums.ApiConstants;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -39,6 +41,10 @@ public interface ContractApi {
CommonResult> getOrderByOrderIds(@RequestBody List ids);
@PostMapping(PREFIX + "/push")
- @Operation(summary = "国贸2.0系统创建合同调用")
- CommonResult push(@Valid @RequestBody ContractRequest reqVO) throws Exception;
+ @Operation(summary = "国贸2.0系统创建合同")
+ CommonResult push(@Valid @RequestBody IntContract reqVO) throws Exception;
+
+ @GetMapping(PREFIX + "/logistics/list/page")
+ @Operation(summary = "国贸2.0系统合同分页查询")
+ CommonResult> logisticsListPage(IntContractPageReq pageReq);
}
diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/contract/ContractRespDTO.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/contract/ContractRespDTO.java
index 3e10aa4..4def12c 100644
--- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/contract/ContractRespDTO.java
+++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/contract/ContractRespDTO.java
@@ -233,6 +233,9 @@ public class ContractRespDTO {
@Schema(description = "合同分类(字典:SPLY_BSN_TP)")
private String businessType;
+ @Schema(description = "代理方名称")
+ private String agentName;
+
// 物料信息
private List detail;
diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/ContractRespVO.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/ContractRespVO.java
index cf1c8cc..a112ce0 100644
--- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/ContractRespVO.java
+++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/ContractRespVO.java
@@ -236,6 +236,9 @@ public class ContractRespVO {
@Schema(description = "合同分类(字典:SPLY_BSN_TP)")
private String businessType;
+ @Schema(description = "代理方名称")
+ private String agentName;
+
// 物料信息
private List detail;
diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/ContractSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/ContractSaveReqVO.java
index eeb6bc9..6b0bd4c 100644
--- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/ContractSaveReqVO.java
+++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/ContractSaveReqVO.java
@@ -208,6 +208,9 @@ public class ContractSaveReqVO {
@Schema(description = "合同分类(字典:SPLY_BSN_TP)")
private String businessType;
+ @Schema(description = "代理方名称")
+ private String agentName;
+
// 物料信息
private List detail;
diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/international/ContractRequest.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/international/IntContract.java
similarity index 99%
rename from zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/international/ContractRequest.java
rename to zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/international/IntContract.java
index b6b4507..238351c 100644
--- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/international/ContractRequest.java
+++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/international/IntContract.java
@@ -10,7 +10,7 @@ import java.util.List;
* 合同请求主实体
*/
@Data
-public class ContractRequest {
+public class IntContract {
// 基础信息
@Schema(description = "操作标志")
diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/international/IntContractPageReq.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/international/IntContractPageReq.java
new file mode 100644
index 0000000..abddeca
--- /dev/null
+++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/international/IntContractPageReq.java
@@ -0,0 +1,13 @@
+package com.zt.plat.module.contractorder.api.vo.contract.international;
+
+import com.zt.plat.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class IntContractPageReq extends PageParam {
+ @Schema(description = "合同编号")
+ private String contractCode;
+ @Schema(description = "合同名称")
+ private String contractName;
+}
diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/contract/DictEnum.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/contract/DictEnum.java
index 8df642d..4bf0faf 100644
--- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/contract/DictEnum.java
+++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/contract/DictEnum.java
@@ -8,6 +8,15 @@ import lombok.Getter;
@Getter
public enum DictEnum {
+ /** 供应链业务大类 */
+ SPLY_BSN_TP_03BX("货物保险","03BX",null),
+ SPLY_BSN_TP_11CC("货物保管仓储","11CC",null),
+ SPLY_BSN_TP_10YS("货物运输","10YS",null),
+ SPLY_BSN_TP_13HD("货运代理","13HD",null),
+ SPLY_BSN_TP_ENTED("来料加工","ENTED",null),
+ SPLY_BSN_TP_ENT("委托加工","ENT",null),
+ SPLY_BSN_TP_PUR("采购","PUR",null),
+ SPLY_BSN_TP_SALE("销售","SALE",null),
/** 业务类型 */
BSN_TP_3("物流合同","3",null),
/** ERP合同类型编码 */
diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java
index 5395f2d..95bbc35 100644
--- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java
+++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/api/ContractApiImpl.java
@@ -1,9 +1,12 @@
package com.zt.plat.module.contractorder.api;
import cn.hutool.extra.spring.SpringUtil;
+import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.zt.plat.framework.common.pojo.CommonResult;
+import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.common.util.object.BeanUtils;
+import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.zt.plat.module.contractorder.api.dto.contract.ContractRespDTO;
import com.zt.plat.module.contractorder.api.dto.order.PrchOrdDtlDTO;
import com.zt.plat.module.contractorder.api.dto.order.PurchaseOrderWithDetailsDTO;
@@ -39,6 +42,7 @@ import java.lang.reflect.Field;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -147,7 +151,7 @@ public class ContractApiImpl implements ContractApi {
@Transactional
@Override
- public CommonResult push(@RequestBody ContractRequest reqVO) throws Exception {
+ public CommonResult push(@RequestBody IntContract reqVO) throws Exception {
// 合同主信息表映射
ContractMainDO contractMainDO = getcontractMainDO(reqVO);
@@ -339,6 +343,128 @@ public class ContractApiImpl implements ContractApi {
return success(true);
}
+ @Override
+ public CommonResult> logisticsListPage(IntContractPageReq pageReq) {
+
+ // 查询条件
+ LambdaQueryWrapperX queryWrapperX = new LambdaQueryWrapperX<>();
+ // 合同类型
+ queryWrapperX.in(
+ ContractMainDO::getBusinessType,
+ Arrays.asList(
+ DictEnum.SPLY_BSN_TP_13HD.getCode(),
+ DictEnum.SPLY_BSN_TP_10YS.getCode(),
+ DictEnum.SPLY_BSN_TP_11CC.getCode(),
+ DictEnum.SPLY_BSN_TP_03BX.getCode()
+ )
+ );
+ // 合同编号
+ queryWrapperX.likeIfPresent(ContractMainDO::getContractPaperNumber, pageReq.getContractCode());
+ // 合同名称
+ queryWrapperX.likeIfPresent(ContractMainDO::getContractName, pageReq.getContractName());
+
+ // 查询
+ PageResult pageResult = contractMainMapper.selectPage(pageReq, queryWrapperX);
+
+ // 返回数据
+ PageResult result = new PageResult<>();
+ List resultList = new ArrayList<>();
+ // 设置返回数据
+ result.setTotal(pageResult.getTotal());
+ result.setList(resultList);
+
+ // 遍历查询结果,设置返回数据列表
+ if (pageResult.getTotal() > 0) {
+ pageResult.getList().forEach(contractMainDO -> {
+
+ // 合同ID
+ Long mainDOId = contractMainDO.getId();
+
+ // 合同主信息
+ List mainFields = contractOtherFieldMapper.selectList(
+ new LambdaQueryWrapperX()
+ .eq(ContractOtherFieldDO::getContractMainId, mainDOId)
+ .isNull(ContractOtherFieldDO::getRelativityId)
+ );
+ JSONObject resultJson = new JSONObject();
+ mainFields.forEach(field
+ -> resultJson.putOnce(field.getFieldNumber(), field.getFieldValue()));
+
+ // 附件清单列表
+ List attachForms = contractOtherFormMapper.selectList(
+ new LambdaQueryWrapperX()
+ .eq(ContractOtherFormDO::getContractMainId, mainDOId)
+ .eq(ContractOtherFormDO::getFormNumber, "attachList")
+ );
+ if (attachForms != null && !attachForms.isEmpty()) {
+ JSONArray jsonArray = new JSONArray();
+ attachForms.forEach(form -> {
+ ContractOtherFieldDO fieldDO = contractOtherFieldMapper.selectOne(
+ new LambdaQueryWrapperX()
+ .eq(ContractOtherFieldDO::getContractMainId, mainDOId)
+ .eq(ContractOtherFieldDO::getRelativityId, form.getId())
+ );
+ if (fieldDO != null) {
+ jsonArray.add(fieldDO.getFieldValue());
+ }
+ });
+ if (!jsonArray.isEmpty()) {
+ resultJson.putOnce("attachList", jsonArray);
+ }
+ }
+
+ // 客商信息
+ resultJson.putOnce("partnerList", getQueryFieldJsonArray(mainDOId, "partnerList"));
+ // 收发港/站点
+ resultJson.putOnce("goodsSiteList", getQueryFieldJsonArray(mainDOId, "goodsSiteList"));
+ // 货物装卸要求
+ resultJson.putOnce("loadingRequirementsList", getQueryFieldJsonArray(mainDOId, "loadingRequirementsList"));
+ // 收付款账号
+ resultJson.putOnce("accountList", getQueryFieldJsonArray(mainDOId, "accountList"));
+ // 费用明细
+ resultJson.putOnce("freightList", getQueryFieldJsonArray(mainDOId, "freightList"));
+ // 服务费用项目
+ resultJson.putOnce("serviceFeeList", getQueryFieldJsonArray(mainDOId, "serviceFeeList"));
+ // 仓库明细
+ resultJson.putOnce("storgeList", getQueryFieldJsonArray(mainDOId, "storgeList"));
+ // 接货地址
+ resultJson.putOnce("receivingAddrList", getQueryFieldJsonArray(mainDOId, "receivingAddrList"));
+
+ // 添加到结果集
+ resultList.add(resultJson.toBean(IntContract.class));
+ });
+ }
+
+ return success(result);
+ }
+
+ private JSONArray getQueryFieldJsonArray(Long mainDOId, String fieldName) {
+
+ JSONArray jsonArray = new JSONArray();
+ List forms = contractOtherFormMapper.selectList(
+ new LambdaQueryWrapperX()
+ .eq(ContractOtherFormDO::getContractMainId, mainDOId)
+ .eq(ContractOtherFormDO::getFormNumber, fieldName)
+ );
+ if (forms != null && !forms.isEmpty()) {
+ forms.forEach(form -> {
+ List fieldDOs = contractOtherFieldMapper.selectList(
+ new LambdaQueryWrapperX()
+ .eq(ContractOtherFieldDO::getContractMainId, mainDOId)
+ .eq(ContractOtherFieldDO::getRelativityId, form.getId())
+ );
+ if (fieldDOs != null && !fieldDOs.isEmpty()) {
+ JSONObject jsonObject = new JSONObject();
+ fieldDOs.forEach(field
+ -> jsonObject.putOnce(field.getFieldNumber(), field.getFieldValue()));
+ jsonArray.add(jsonObject);
+ }
+ });
+ }
+
+ return jsonArray.isEmpty() ? null : jsonArray;
+ }
+
@Override
public CommonResult> getOrderByOrderIds(List ids) {
if (ids == null || ids.isEmpty()) {
@@ -370,7 +496,7 @@ public class ContractApiImpl implements ContractApi {
return CommonResult.success(purchaseOrderDetails);
}
- private ContractMainDO getcontractMainDO(ContractRequest reqVO) {
+ private ContractMainDO getcontractMainDO(IntContract reqVO) {
// 合同主信息表映射
ContractMainDO contractMainDO = new ContractMainDO();
@@ -430,8 +556,8 @@ public class ContractApiImpl implements ContractApi {
// 本币履约保证金 默认值:NULL
// 交易方式 默认值:先款后货
contractMainDO.setHasPayable(DictEnum.HS_PYBL_TP_PRE_PAY.getCode());
- // 合同类型 默认值:物流合同
- contractMainDO.setContractType(DictEnum.BSN_TP_3.getCode());
+ // 合同类型
+ contractMainDO.setBusinessType(reqVO.getContractType());
// 签署地 -> 签约地 (40-签约必填)
contractMainDO.setSignPlace(reqVO.getSignSite());
// 甲方公司编号(采购方) -> 账套代码
diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractMainDO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractMainDO.java
index ea05762..f5d9681 100644
--- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractMainDO.java
+++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractMainDO.java
@@ -394,4 +394,9 @@ public class ContractMainDO extends BusinessBaseDO {
*/
@TableField("BSN_TP")
private String businessType;
+ /**
+ * 代理方名称
+ */
+ @TableField("AGT_NAME")
+ private String agentName;
}
\ No newline at end of file
From 21ac7f982823cd486ae73349992d6501de3b6485 Mon Sep 17 00:00:00 2001
From: chenbowen
Date: Wed, 29 Oct 2025 16:05:51 +0800
Subject: [PATCH 04/12] =?UTF-8?q?=E7=89=A9=E6=96=99=E3=80=81=E5=B7=A5?=
=?UTF-8?q?=E8=89=BA=E5=9F=BA=E6=9C=AC=E5=A2=9E=E5=88=A0=E6=94=B9=E6=9F=A5?=
=?UTF-8?q?=E9=80=BB=E8=BE=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../module/base/enums/ErrorCodeConstants.java | 12 +
.../base/vo/MaterialInfomationPageReqVO.java | 3 +
.../base/vo/MaterialInfomationRespVO.java | 4 +
.../base/vo/MaterialInfomationSaveReqVO.java | 5 +
.../DepartmentMaterialController.java | 107 ++++++++
.../vo/DepartmentMaterialPageReqVO.java | 47 ++++
.../vo/DepartmentMaterialRespVO.java | 83 ++++++
.../vo/DepartmentMaterialSaveReqVO.java | 30 +++
.../MaterialClassesController.java | 138 ++++++++++
.../vo/MaterialClassesPageReqVO.java | 35 +++
.../vo/MaterialClassesRespVO.java | 43 +++
.../vo/MaterialClassesSaveReqVO.java | 33 +++
.../vo/MaterialClassesTreeRespVO.java | 33 +++
.../MaterialHasClassesController.java | 107 ++++++++
.../vo/MaterialHasClassesPageReqVO.java | 26 ++
.../vo/MaterialHasClassesRespVO.java | 31 +++
.../vo/MaterialHasClassesSaveReqVO.java | 23 ++
.../MaterialHasPropertiesController.java | 107 ++++++++
.../vo/MaterialHasPropertiesPageReqVO.java | 41 +++
.../vo/MaterialHasPropertiesRespVO.java | 51 ++++
.../vo/MaterialHasPropertiesSaveReqVO.java | 39 +++
.../MaterialPropertiesController.java | 107 ++++++++
.../vo/MaterialPropertiesPageReqVO.java | 38 +++
.../vo/MaterialPropertiesRespVO.java | 47 ++++
.../vo/MaterialPropertiesSaveReqVO.java | 38 +++
.../ProcessingInfomationController.java | 138 ++++++++++
.../vo/ProcessingInfomationPageReqVO.java | 42 +++
.../vo/ProcessingInfomationRespVO.java | 51 ++++
.../vo/ProcessingInfomationSaveReqVO.java | 42 +++
.../vo/ProcessingInfomationTreeRespVO.java | 34 +++
...ocessingInfomationOperationController.java | 107 ++++++++
...rocessingInfomationOperationPageReqVO.java | 41 +++
.../ProcessingInfomationOperationRespVO.java | 59 +++++
...rocessingInfomationOperationSaveReqVO.java | 31 +++
.../ProcessingOperationController.java | 115 ++++++++
.../vo/ProcessingOperationPageReqVO.java | 35 +++
.../vo/ProcessingOperationRespVO.java | 43 +++
.../vo/ProcessingOperationSaveReqVO.java | 34 +++
.../vo/ProcessingOperationSimpleRespVO.java | 19 ++
...ProcessingOperationMaterialController.java | 107 ++++++++
.../ProcessingOperationMaterialPageReqVO.java | 29 +++
.../vo/ProcessingOperationMaterialRespVO.java | 43 +++
.../ProcessingOperationMaterialSaveReqVO.java | 32 +++
.../DepartmentMaterialMapper.java | 32 +++
.../MaterialClassesMapper.java | 31 +++
.../MaterialHasClassesMapper.java | 28 ++
.../MaterialHasPropertiesMapper.java | 33 +++
.../MaterialPropertiesMapper.java | 32 +++
.../ProcessingInfomationMapper.java | 33 +++
.../ProcessingInfomationOperationMapper.java | 42 +++
.../ProcessingOperationMapper.java | 31 +++
.../ProcessingOperationMaterialMapper.java | 29 +++
.../dataobject/base/MaterialInfomationDO.java | 5 +
.../DepartmentMaterialDO.java | 60 +++++
.../materialclasses/MaterialClassesDO.java | 60 +++++
.../MaterialHasClassesDO.java | 45 ++++
.../MaterialHasPropertiesDO.java | 70 +++++
.../MaterialPropertiesDO.java | 65 +++++
.../ProcessingInfomationDO.java | 76 ++++++
.../ProcessingInfomationOperationDO.java | 60 +++++
.../ProcessingOperationDO.java | 60 +++++
.../ProcessingOperationMaterialDO.java | 58 +++++
.../mysql/base/MaterialInfomationMapper.java | 9 +-
.../base/MaterialInfomationServiceImpl.java | 77 +++++-
.../DepartmentMaterialService.java | 62 +++++
.../DepartmentMaterialServiceImpl.java | 246 ++++++++++++++++++
.../MaterialClassesService.java | 69 +++++
.../MaterialClassesServiceImpl.java | 97 +++++++
.../MaterialHasClassesService.java | 62 +++++
.../MaterialHasClassesServiceImpl.java | 92 +++++++
.../MaterialHasPropertiesService.java | 62 +++++
.../MaterialHasPropertiesServiceImpl.java | 92 +++++++
.../MaterialPropertiesService.java | 62 +++++
.../MaterialPropertiesServiceImpl.java | 92 +++++++
.../ProcessingInfomationService.java | 69 +++++
.../ProcessingInfomationServiceImpl.java | 97 +++++++
.../ProcessingInfomationOperationService.java | 78 ++++++
...cessingInfomationOperationServiceImpl.java | 182 +++++++++++++
.../ProcessingOperationService.java | 69 +++++
.../ProcessingOperationServiceImpl.java | 97 +++++++
.../ProcessingOperationMaterialService.java | 62 +++++
...rocessingOperationMaterialServiceImpl.java | 92 +++++++
.../DepartmentMaterialMapper.xml | 12 +
.../materialclasses/MaterialClassesMapper.xml | 12 +
.../MaterialHasClassesMapper.xml | 12 +
.../MaterialHasPropertiesMapper.xml | 12 +
.../MaterialPropertiesMapper.xml | 12 +
.../ProcessingInfomationMapper.xml | 12 +
.../ProcessingInfomationOperationMapper.xml | 12 +
.../ProcessingOperationMapper.xml | 12 +
.../ProcessingOperationMaterialMapper.xml | 12 +
91 files changed, 4953 insertions(+), 3 deletions(-)
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/departmentmaterial/DepartmentMaterialController.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/departmentmaterial/vo/DepartmentMaterialPageReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/departmentmaterial/vo/DepartmentMaterialRespVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/departmentmaterial/vo/DepartmentMaterialSaveReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialclasses/MaterialClassesController.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialclasses/vo/MaterialClassesPageReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialclasses/vo/MaterialClassesRespVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialclasses/vo/MaterialClassesSaveReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialclasses/vo/MaterialClassesTreeRespVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasclasses/MaterialHasClassesController.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasclasses/vo/MaterialHasClassesPageReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasclasses/vo/MaterialHasClassesRespVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasclasses/vo/MaterialHasClassesSaveReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasproperties/MaterialHasPropertiesController.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasproperties/vo/MaterialHasPropertiesPageReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasproperties/vo/MaterialHasPropertiesRespVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasproperties/vo/MaterialHasPropertiesSaveReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialproperties/MaterialPropertiesController.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialproperties/vo/MaterialPropertiesPageReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialproperties/vo/MaterialPropertiesRespVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialproperties/vo/MaterialPropertiesSaveReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomation/ProcessingInfomationController.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomation/vo/ProcessingInfomationPageReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomation/vo/ProcessingInfomationRespVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomation/vo/ProcessingInfomationSaveReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomation/vo/ProcessingInfomationTreeRespVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomationoperation/ProcessingInfomationOperationController.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomationoperation/vo/ProcessingInfomationOperationPageReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomationoperation/vo/ProcessingInfomationOperationRespVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomationoperation/vo/ProcessingInfomationOperationSaveReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperation/ProcessingOperationController.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperation/vo/ProcessingOperationPageReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperation/vo/ProcessingOperationRespVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperation/vo/ProcessingOperationSaveReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperation/vo/ProcessingOperationSimpleRespVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperationmaterial/ProcessingOperationMaterialController.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperationmaterial/vo/ProcessingOperationMaterialPageReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperationmaterial/vo/ProcessingOperationMaterialRespVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperationmaterial/vo/ProcessingOperationMaterialSaveReqVO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/departmentmaterial/DepartmentMaterialMapper.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/materialclasses/MaterialClassesMapper.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/materialhasclasses/MaterialHasClassesMapper.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/materialhasproperties/MaterialHasPropertiesMapper.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/materialproperties/MaterialPropertiesMapper.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/processinginfomation/ProcessingInfomationMapper.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/processinginfomationoperation/ProcessingInfomationOperationMapper.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/processingoperation/ProcessingOperationMapper.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/processingoperationmaterial/ProcessingOperationMaterialMapper.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/departmentmaterial/DepartmentMaterialDO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/materialclasses/MaterialClassesDO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/materialhasclasses/MaterialHasClassesDO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/materialhasproperties/MaterialHasPropertiesDO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/materialproperties/MaterialPropertiesDO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/processinginfomation/ProcessingInfomationDO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/processinginfomationoperation/ProcessingInfomationOperationDO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/processingoperation/ProcessingOperationDO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/processingoperationmaterial/ProcessingOperationMaterialDO.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/departmentmaterial/DepartmentMaterialService.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/departmentmaterial/DepartmentMaterialServiceImpl.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/materialclasses/MaterialClassesService.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/materialclasses/MaterialClassesServiceImpl.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/materialhasclasses/MaterialHasClassesService.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/materialhasclasses/MaterialHasClassesServiceImpl.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/materialhasproperties/MaterialHasPropertiesService.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/materialhasproperties/MaterialHasPropertiesServiceImpl.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/materialproperties/MaterialPropertiesService.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/materialproperties/MaterialPropertiesServiceImpl.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/processinginfomation/ProcessingInfomationService.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/processinginfomation/ProcessingInfomationServiceImpl.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/processinginfomationoperation/ProcessingInfomationOperationService.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/processinginfomationoperation/ProcessingInfomationOperationServiceImpl.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/processingoperation/ProcessingOperationService.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/processingoperation/ProcessingOperationServiceImpl.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/processingoperationmaterial/ProcessingOperationMaterialService.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/processingoperationmaterial/ProcessingOperationMaterialServiceImpl.java
create mode 100644 zt-module-base/zt-module-base-server/src/main/resources/mapper/departmentmaterial/DepartmentMaterialMapper.xml
create mode 100644 zt-module-base/zt-module-base-server/src/main/resources/mapper/materialclasses/MaterialClassesMapper.xml
create mode 100644 zt-module-base/zt-module-base-server/src/main/resources/mapper/materialhasclasses/MaterialHasClassesMapper.xml
create mode 100644 zt-module-base/zt-module-base-server/src/main/resources/mapper/materialhasproperties/MaterialHasPropertiesMapper.xml
create mode 100644 zt-module-base/zt-module-base-server/src/main/resources/mapper/materialproperties/MaterialPropertiesMapper.xml
create mode 100644 zt-module-base/zt-module-base-server/src/main/resources/mapper/processinginfomation/ProcessingInfomationMapper.xml
create mode 100644 zt-module-base/zt-module-base-server/src/main/resources/mapper/processinginfomationoperation/ProcessingInfomationOperationMapper.xml
create mode 100644 zt-module-base/zt-module-base-server/src/main/resources/mapper/processingoperation/ProcessingOperationMapper.xml
create mode 100644 zt-module-base/zt-module-base-server/src/main/resources/mapper/processingoperationmaterial/ProcessingOperationMaterialMapper.xml
diff --git a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/enums/ErrorCodeConstants.java b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/enums/ErrorCodeConstants.java
index 954c17c..a15b0ee 100644
--- a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/enums/ErrorCodeConstants.java
+++ b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/enums/ErrorCodeConstants.java
@@ -45,4 +45,16 @@ public interface ErrorCodeConstants {
ErrorCode TEMPLATE_INSTANCE_NOT_EXISTS = new ErrorCode(1_006_004_001, "模板实例不存在");
ErrorCode TEMPLATE_INSTANCE_CODE_DUPLICATE = new ErrorCode(1_006_004_002, "实例编码已存在");
+ // ========== 物料属性 ==========
+ ErrorCode MATERIAL_PROPERTIES_NOT_EXISTS = new ErrorCode(1_027_101_001, "物料属性不存在");
+ ErrorCode MATERIAL_HAS_PROPERTIES_NOT_EXISTS = new ErrorCode(1_027_101_002, "物料持有属性不存在");
+ ErrorCode MATERIAL_CLASSES_NOT_EXISTS = new ErrorCode(1_027_101_003, "物料分类不存在");
+ ErrorCode DEPARTMENT_MATERIAL_NOT_EXISTS = new ErrorCode(1_027_101_004, "组织物料不存在");
+ ErrorCode MATERIAL_HAS_CLASSES_NOT_EXISTS = new ErrorCode(1_027_101_004, "物料持有属性不存在");
+
+ // ========== 工艺信息属性 ==========
+ ErrorCode PROCESSING_INFOMATION_NOT_EXISTS = new ErrorCode(1_027_101_005, "工艺信息不存在");
+ ErrorCode PROCESSING_INFOMATION_OPERATION_NOT_EXISTS = new ErrorCode(1_027_101_006, "工艺工序不存在");
+ ErrorCode PROCESSING_OPERATION_NOT_EXISTS = new ErrorCode(1_027_101_007, "工序不存在");
+ ErrorCode PROCESSING_OPERATION_MATERIAL_NOT_EXISTS = new ErrorCode(1_027_101_008, "工艺工序物料不存在");
}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/vo/MaterialInfomationPageReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/vo/MaterialInfomationPageReqVO.java
index 5e1fe2b..d81d1ca 100644
--- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/vo/MaterialInfomationPageReqVO.java
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/vo/MaterialInfomationPageReqVO.java
@@ -19,6 +19,9 @@ public class MaterialInfomationPageReqVO extends PageParam {
@Schema(description = "物料名称", example = "张三")
private String name;
+ @Schema(description = "分类ID", example = "1024")
+ private Long classesId;
+
@Schema(description = "备注")
private String remark;
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/vo/MaterialInfomationRespVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/vo/MaterialInfomationRespVO.java
index 47237be..7fc8b56 100644
--- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/vo/MaterialInfomationRespVO.java
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/vo/MaterialInfomationRespVO.java
@@ -24,6 +24,10 @@ public class MaterialInfomationRespVO {
@ExcelProperty("物料名称")
private String name;
+ @Schema(description = "分类ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ @ExcelProperty("分类ID")
+ private Long classesId;
+
@Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("备注")
private String remark;
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/vo/MaterialInfomationSaveReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/vo/MaterialInfomationSaveReqVO.java
index 80d5cbe..687c587 100644
--- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/vo/MaterialInfomationSaveReqVO.java
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/vo/MaterialInfomationSaveReqVO.java
@@ -2,6 +2,7 @@ package com.zt.plat.module.base.controller.admin.base.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
import lombok.Data;
@Schema(description = "管理后台 - 物料信息新增/修改 Request VO")
@@ -19,6 +20,10 @@ public class MaterialInfomationSaveReqVO {
@NotEmpty(message = "物料名称不能为空")
private String name;
+ @Schema(description = "分类ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+ @NotNull(message = "所属分类不能为空")
+ private Long classesId;
+
@Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "备注不能为空")
private String remark;
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/departmentmaterial/DepartmentMaterialController.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/departmentmaterial/DepartmentMaterialController.java
new file mode 100644
index 0000000..bbde845
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/departmentmaterial/DepartmentMaterialController.java
@@ -0,0 +1,107 @@
+package com.zt.plat.module.base.controller.admin.departmentmaterial;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.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 jakarta.validation.constraints.*;
+import jakarta.validation.*;
+import jakarta.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import com.zt.plat.framework.common.pojo.vo.BatchDeleteReqVO;
+import com.zt.plat.framework.common.pojo.PageParam;
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.framework.common.pojo.CommonResult;
+import com.zt.plat.framework.common.util.object.BeanUtils;
+import static com.zt.plat.framework.common.pojo.CommonResult.success;
+
+import com.zt.plat.framework.excel.core.util.ExcelUtils;
+
+import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog;
+import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import com.zt.plat.module.base.controller.admin.departmentmaterial.vo.*;
+import com.zt.plat.module.base.dal.dataobject.departmentmaterial.DepartmentMaterialDO;
+import com.zt.plat.module.base.service.departmentmaterial.DepartmentMaterialService;
+
+@Tag(name = "管理后台 - 组织架构物料")
+@RestController
+@RequestMapping("/base/department-material")
+@Validated
+public class DepartmentMaterialController {
+
+
+ @Resource
+ private DepartmentMaterialService departmentMaterialService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建组织架构物料")
+ @PreAuthorize("@ss.hasPermission('base:department-material:create')")
+ public CommonResult createDepartmentMaterial(@Valid @RequestBody DepartmentMaterialSaveReqVO createReqVO) {
+ return success(departmentMaterialService.createDepartmentMaterial(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新组织架构物料")
+ @PreAuthorize("@ss.hasPermission('base:department-material:update')")
+ public CommonResult updateDepartmentMaterial(@Valid @RequestBody DepartmentMaterialSaveReqVO updateReqVO) {
+ departmentMaterialService.updateDepartmentMaterial(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除组织架构物料")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('base:department-material:delete')")
+ public CommonResult deleteDepartmentMaterial(@RequestParam("id") Long id) {
+ departmentMaterialService.deleteDepartmentMaterial(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除组织架构物料")
+ @PreAuthorize("@ss.hasPermission('base:department-material:delete')")
+ public CommonResult deleteDepartmentMaterialList(@RequestBody BatchDeleteReqVO req) {
+ departmentMaterialService.deleteDepartmentMaterialListByIds(req.getIds());
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得组织架构物料")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('base:department-material:query')")
+ public CommonResult getDepartmentMaterial(@RequestParam("id") Long id) {
+ DepartmentMaterialDO departmentMaterial = departmentMaterialService.getDepartmentMaterial(id);
+ return success(BeanUtils.toBean(departmentMaterial, DepartmentMaterialRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得组织架构物料分页")
+ @PreAuthorize("@ss.hasPermission('base:department-material:query')")
+ public CommonResult> getDepartmentMaterialPage(@Valid DepartmentMaterialPageReqVO pageReqVO) {
+ PageResult pageResult = departmentMaterialService.getDepartmentMaterialPage(pageReqVO);
+ return success(pageResult);
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出组织架构物料 Excel")
+ @PreAuthorize("@ss.hasPermission('base:department-material:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportDepartmentMaterialExcel(@Valid DepartmentMaterialPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = departmentMaterialService.getDepartmentMaterialPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "组织架构物料.xls", "数据", DepartmentMaterialRespVO.class,
+ list);
+ }
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/departmentmaterial/vo/DepartmentMaterialPageReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/departmentmaterial/vo/DepartmentMaterialPageReqVO.java
new file mode 100644
index 0000000..0ae288f
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/departmentmaterial/vo/DepartmentMaterialPageReqVO.java
@@ -0,0 +1,47 @@
+package com.zt.plat.module.base.controller.admin.departmentmaterial.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.zt.plat.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static com.zt.plat.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 组织架构物料分页 Request VO")
+@Data
+public class DepartmentMaterialPageReqVO extends PageParam {
+
+ @Schema(description = "物料信息ID", example = "3923")
+ private Long infomationId;
+
+ @Schema(description = "物料信息ID集合(内部使用)")
+ private List infomationIds;
+
+ @Schema(description = "物料分类ID", example = "30114")
+ private Long classesId;
+
+ @Schema(description = "部门ID", example = "1001")
+ private Long deptId;
+
+ @Schema(description = "字典数据值-物料类型")
+ private String dictionaryDataValue;
+
+ @Schema(description = "状态编码", example = "1")
+ private String isEnable;
+
+ @Schema(description = "物料编码")
+ private String materialNumber;
+
+ @Schema(description = "物料名称")
+ private String materialName;
+
+ @Schema(description = "备注")
+ private String remark;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/departmentmaterial/vo/DepartmentMaterialRespVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/departmentmaterial/vo/DepartmentMaterialRespVO.java
new file mode 100644
index 0000000..4d694bd
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/departmentmaterial/vo/DepartmentMaterialRespVO.java
@@ -0,0 +1,83 @@
+package com.zt.plat.module.base.controller.admin.departmentmaterial.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 组织架构物料 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class DepartmentMaterialRespVO {
+
+ @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "5674")
+ @ExcelProperty("主键ID")
+ private Long id;
+
+ @Schema(description = "物料信息ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "3923")
+ @ExcelProperty("物料信息ID")
+ private Long infomationId;
+
+ @Schema(description = "物料分类ID", example = "30114")
+ @ExcelProperty("物料分类ID")
+ private Long classesId;
+
+ @Schema(description = "字典数据值-物料类型", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("字典数据值-物料类型")
+ private String dictionaryDataValue;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("备注")
+ private String remark;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+ @Schema(description = "部门ID")
+ @ExcelIgnore
+ private Long deptId;
+
+ @Schema(description = "部门名称")
+ @ExcelProperty("部门名称")
+ private String deptName;
+
+ @Schema(description = "物料编码")
+ @ExcelProperty("物料编码")
+ private String materialNumber;
+
+ @Schema(description = "物料名称")
+ @ExcelProperty("物料名称")
+ private String materialName;
+
+ @Schema(description = "物料大类名称")
+ @ExcelProperty("物料大类")
+ private String categoryLargeName;
+
+ @Schema(description = "物料中类名称")
+ @ExcelProperty("物料中类")
+ private String categoryMediumName;
+
+ @Schema(description = "物料小类名称")
+ @ExcelProperty("物料小类")
+ private String categorySmallName;
+
+ @Schema(description = "物料分类路径")
+ @ExcelProperty("物料分类路径")
+ private String categoryPath;
+
+ @Schema(description = "组织物料类型名称")
+ @ExcelProperty("组织物料类型")
+ private String dictionaryDataLabel;
+
+ @Schema(description = "状态编码")
+ @ExcelProperty("状态编码")
+ private String isEnable;
+
+ @Schema(description = "状态名称")
+ @ExcelProperty("状态")
+ private String statusLabel;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/departmentmaterial/vo/DepartmentMaterialSaveReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/departmentmaterial/vo/DepartmentMaterialSaveReqVO.java
new file mode 100644
index 0000000..375428a
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/departmentmaterial/vo/DepartmentMaterialSaveReqVO.java
@@ -0,0 +1,30 @@
+package com.zt.plat.module.base.controller.admin.departmentmaterial.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - 组织架构物料新增/修改 Request VO")
+@Data
+public class DepartmentMaterialSaveReqVO {
+
+ @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "5674")
+ private Long id;
+
+ @Schema(description = "物料信息ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "3923")
+ @NotNull(message = "物料信息ID不能为空")
+ private Long infomationId;
+
+ @Schema(description = "物料分类ID", example = "30114")
+ private Long classesId;
+
+ @Schema(description = "字典数据值-物料类型", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "字典数据值-物料类型不能为空")
+ private String dictionaryDataValue;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "备注不能为空")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialclasses/MaterialClassesController.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialclasses/MaterialClassesController.java
new file mode 100644
index 0000000..acb855e
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialclasses/MaterialClassesController.java
@@ -0,0 +1,138 @@
+package com.zt.plat.module.base.controller.admin.materialclasses;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.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 jakarta.validation.constraints.*;
+import jakarta.validation.*;
+import jakarta.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import com.zt.plat.framework.common.pojo.vo.BatchDeleteReqVO;
+import com.zt.plat.framework.common.pojo.PageParam;
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.framework.common.pojo.CommonResult;
+import com.zt.plat.framework.common.util.object.BeanUtils;
+import static com.zt.plat.framework.common.pojo.CommonResult.success;
+
+import com.zt.plat.framework.excel.core.util.ExcelUtils;
+
+import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog;
+import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import com.zt.plat.module.base.controller.admin.materialclasses.vo.*;
+import com.zt.plat.module.base.dal.dataobject.materialclasses.MaterialClassesDO;
+import com.zt.plat.module.base.service.materialclasses.MaterialClassesService;
+
+@Tag(name = "管理后台 - 物料分类")
+@RestController
+@RequestMapping("/base/material-classes")
+@Validated
+public class MaterialClassesController {
+
+
+ @Resource
+ private MaterialClassesService materialClassesService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建物料分类")
+ @PreAuthorize("@ss.hasPermission('base:material-classes:create')")
+ public CommonResult createMaterialClasses(@Valid @RequestBody MaterialClassesSaveReqVO createReqVO) {
+ return success(materialClassesService.createMaterialClasses(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新物料分类")
+ @PreAuthorize("@ss.hasPermission('base:material-classes:update')")
+ public CommonResult updateMaterialClasses(@Valid @RequestBody MaterialClassesSaveReqVO updateReqVO) {
+ materialClassesService.updateMaterialClasses(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除物料分类")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('base:material-classes:delete')")
+ public CommonResult deleteMaterialClasses(@RequestParam("id") Long id) {
+ materialClassesService.deleteMaterialClasses(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除物料分类")
+ @PreAuthorize("@ss.hasPermission('base:material-classes:delete')")
+ public CommonResult deleteMaterialClassesList(@RequestBody BatchDeleteReqVO req) {
+ materialClassesService.deleteMaterialClassesListByIds(req.getIds());
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得物料分类")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('base:material-classes:query')")
+ public CommonResult getMaterialClasses(@RequestParam("id") Long id) {
+ MaterialClassesDO materialClasses = materialClassesService.getMaterialClasses(id);
+ return success(BeanUtils.toBean(materialClasses, MaterialClassesRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得物料分类分页")
+ @PreAuthorize("@ss.hasPermission('base:material-classes:query')")
+ public CommonResult> getMaterialClassesPage(@Valid MaterialClassesPageReqVO pageReqVO) {
+ PageResult pageResult = materialClassesService.getMaterialClassesPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, MaterialClassesRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出物料分类 Excel")
+ @PreAuthorize("@ss.hasPermission('base:material-classes:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportMaterialClassesExcel(@Valid MaterialClassesPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = materialClassesService.getMaterialClassesPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "物料分类.xls", "数据", MaterialClassesRespVO.class,
+ BeanUtils.toBean(list, MaterialClassesRespVO.class));
+ }
+
+ @GetMapping("/tree")
+ @Operation(summary = "获得物料分类树")
+ @PreAuthorize("@ss.hasPermission('base:material-classes:query')")
+ public CommonResult> getMaterialClassesTree() {
+ List list = materialClassesService.getMaterialClassesList();
+ return success(buildTree(list));
+ }
+
+ private List buildTree(List list) {
+ if (list == null || list.isEmpty()) {
+ return Collections.emptyList();
+ }
+ Map nodeMap = new LinkedHashMap<>();
+ list.stream()
+ .sorted(Comparator.comparing(MaterialClassesDO::getId))
+ .forEach(item -> {
+ MaterialClassesTreeRespVO node = BeanUtils.toBean(item, MaterialClassesTreeRespVO.class);
+ nodeMap.put(node.getId(), node);
+ });
+ List roots = new ArrayList<>();
+ nodeMap.values().forEach(node -> {
+ Long parentId = node.getParentId();
+ if (parentId == null || parentId == 0 || !nodeMap.containsKey(parentId)) {
+ roots.add(node);
+ } else {
+ nodeMap.get(parentId).getChildren().add(node);
+ }
+ });
+ return roots;
+ }
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialclasses/vo/MaterialClassesPageReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialclasses/vo/MaterialClassesPageReqVO.java
new file mode 100644
index 0000000..6068302
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialclasses/vo/MaterialClassesPageReqVO.java
@@ -0,0 +1,35 @@
+package com.zt.plat.module.base.controller.admin.materialclasses.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.zt.plat.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static com.zt.plat.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 物料分类分页 Request VO")
+@Data
+public class MaterialClassesPageReqVO extends PageParam {
+
+ @Schema(description = "父级ID", example = "20706")
+ private Long parentId;
+
+ @Schema(description = "分类编码")
+ private String code;
+
+ @Schema(description = "分类名称", example = "赵六")
+ private String name;
+
+ @Schema(description = "分类级别-用于类别层级(大/中/小类)")
+ private Long level;
+
+ @Schema(description = "备注")
+ private String remark;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialclasses/vo/MaterialClassesRespVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialclasses/vo/MaterialClassesRespVO.java
new file mode 100644
index 0000000..a4825a7
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialclasses/vo/MaterialClassesRespVO.java
@@ -0,0 +1,43 @@
+package com.zt.plat.module.base.controller.admin.materialclasses.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 物料分类 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class MaterialClassesRespVO {
+
+ @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "4051")
+ @ExcelProperty("主键ID")
+ private Long id;
+
+ @Schema(description = "父级ID", example = "20706")
+ @ExcelProperty("父级ID")
+ private Long parentId;
+
+ @Schema(description = "分类编码", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("分类编码")
+ private String code;
+
+ @Schema(description = "分类名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
+ @ExcelProperty("分类名称")
+ private String name;
+
+ @Schema(description = "分类级别-用于类别层级(大/中/小类)")
+ @ExcelProperty("分类级别-用于类别层级(大/中/小类)")
+ private Long level;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("备注")
+ private String remark;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialclasses/vo/MaterialClassesSaveReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialclasses/vo/MaterialClassesSaveReqVO.java
new file mode 100644
index 0000000..92ffea0
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialclasses/vo/MaterialClassesSaveReqVO.java
@@ -0,0 +1,33 @@
+package com.zt.plat.module.base.controller.admin.materialclasses.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - 物料分类新增/修改 Request VO")
+@Data
+public class MaterialClassesSaveReqVO {
+
+ @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "4051")
+ private Long id;
+
+ @Schema(description = "父级ID", example = "20706")
+ private Long parentId;
+
+ @Schema(description = "分类编码", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "分类编码不能为空")
+ private String code;
+
+ @Schema(description = "分类名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
+ @NotEmpty(message = "分类名称不能为空")
+ private String name;
+
+ @Schema(description = "分类级别-用于类别层级(大/中/小类)")
+ private Long level;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "备注不能为空")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialclasses/vo/MaterialClassesTreeRespVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialclasses/vo/MaterialClassesTreeRespVO.java
new file mode 100644
index 0000000..f47d215
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialclasses/vo/MaterialClassesTreeRespVO.java
@@ -0,0 +1,33 @@
+package com.zt.plat.module.base.controller.admin.materialclasses.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Schema(description = "管理后台 - 物料分类树节点 Response VO")
+@Data
+public class MaterialClassesTreeRespVO {
+
+ @Schema(description = "主键ID", example = "1001")
+ private Long id;
+
+ @Schema(description = "父级ID", example = "0")
+ private Long parentId;
+
+ @Schema(description = "分类编码", example = "CL-001")
+ private String code;
+
+ @Schema(description = "分类名称", example = "原材料")
+ private String name;
+
+ @Schema(description = "分类级别")
+ private Long level;
+
+ @Schema(description = "备注")
+ private String remark;
+
+ @Schema(description = "子节点")
+ private List children = new ArrayList<>();
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasclasses/MaterialHasClassesController.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasclasses/MaterialHasClassesController.java
new file mode 100644
index 0000000..2dcc841
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasclasses/MaterialHasClassesController.java
@@ -0,0 +1,107 @@
+package com.zt.plat.module.base.controller.admin.materialhasclasses;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.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 jakarta.validation.constraints.*;
+import jakarta.validation.*;
+import jakarta.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import com.zt.plat.framework.common.pojo.vo.BatchDeleteReqVO;
+import com.zt.plat.framework.common.pojo.PageParam;
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.framework.common.pojo.CommonResult;
+import com.zt.plat.framework.common.util.object.BeanUtils;
+import static com.zt.plat.framework.common.pojo.CommonResult.success;
+
+import com.zt.plat.framework.excel.core.util.ExcelUtils;
+
+import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog;
+import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import com.zt.plat.module.base.controller.admin.materialhasclasses.vo.*;
+import com.zt.plat.module.base.dal.dataobject.materialhasclasses.MaterialHasClassesDO;
+import com.zt.plat.module.base.service.materialhasclasses.MaterialHasClassesService;
+
+@Tag(name = "管理后台 - 物料持有分类")
+@RestController
+@RequestMapping("/base/material-has-classes")
+@Validated
+public class MaterialHasClassesController {
+
+
+ @Resource
+ private MaterialHasClassesService materialHasClassesService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建物料持有分类")
+ @PreAuthorize("@ss.hasPermission('base:material-has-classes:create')")
+ public CommonResult createMaterialHasClasses(@Valid @RequestBody MaterialHasClassesSaveReqVO createReqVO) {
+ return success(materialHasClassesService.createMaterialHasClasses(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新物料持有分类")
+ @PreAuthorize("@ss.hasPermission('base:material-has-classes:update')")
+ public CommonResult updateMaterialHasClasses(@Valid @RequestBody MaterialHasClassesSaveReqVO updateReqVO) {
+ materialHasClassesService.updateMaterialHasClasses(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除物料持有分类")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('base:material-has-classes:delete')")
+ public CommonResult deleteMaterialHasClasses(@RequestParam("id") Long id) {
+ materialHasClassesService.deleteMaterialHasClasses(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除物料持有分类")
+ @PreAuthorize("@ss.hasPermission('base:material-has-classes:delete')")
+ public CommonResult deleteMaterialHasClassesList(@RequestBody BatchDeleteReqVO req) {
+ materialHasClassesService.deleteMaterialHasClassesListByIds(req.getIds());
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得物料持有分类")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('base:material-has-classes:query')")
+ public CommonResult getMaterialHasClasses(@RequestParam("id") Long id) {
+ MaterialHasClassesDO materialHasClasses = materialHasClassesService.getMaterialHasClasses(id);
+ return success(BeanUtils.toBean(materialHasClasses, MaterialHasClassesRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得物料持有分类分页")
+ @PreAuthorize("@ss.hasPermission('base:material-has-classes:query')")
+ public CommonResult> getMaterialHasClassesPage(@Valid MaterialHasClassesPageReqVO pageReqVO) {
+ PageResult pageResult = materialHasClassesService.getMaterialHasClassesPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, MaterialHasClassesRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出物料持有分类 Excel")
+ @PreAuthorize("@ss.hasPermission('base:material-has-classes:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportMaterialHasClassesExcel(@Valid MaterialHasClassesPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = materialHasClassesService.getMaterialHasClassesPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "物料持有分类.xls", "数据", MaterialHasClassesRespVO.class,
+ BeanUtils.toBean(list, MaterialHasClassesRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasclasses/vo/MaterialHasClassesPageReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasclasses/vo/MaterialHasClassesPageReqVO.java
new file mode 100644
index 0000000..3f5efd1
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasclasses/vo/MaterialHasClassesPageReqVO.java
@@ -0,0 +1,26 @@
+package com.zt.plat.module.base.controller.admin.materialhasclasses.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.zt.plat.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static com.zt.plat.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 物料持有分类分页 Request VO")
+@Data
+public class MaterialHasClassesPageReqVO extends PageParam {
+
+ @Schema(description = "物料信息ID", example = "31031")
+ private Long infomationId;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+ @Schema(description = "分类ID", example = "5914")
+ private Long classesId;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasclasses/vo/MaterialHasClassesRespVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasclasses/vo/MaterialHasClassesRespVO.java
new file mode 100644
index 0000000..b5d6bdc
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasclasses/vo/MaterialHasClassesRespVO.java
@@ -0,0 +1,31 @@
+package com.zt.plat.module.base.controller.admin.materialhasclasses.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 物料持有分类 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class MaterialHasClassesRespVO {
+
+ @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "16228")
+ @ExcelProperty("主键ID")
+ private Long id;
+
+ @Schema(description = "物料信息ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "31031")
+ @ExcelProperty("物料信息ID")
+ private Long infomationId;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+ @Schema(description = "分类ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "5914")
+ @ExcelProperty("分类ID")
+ private Long classesId;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasclasses/vo/MaterialHasClassesSaveReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasclasses/vo/MaterialHasClassesSaveReqVO.java
new file mode 100644
index 0000000..1c0dbbc
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasclasses/vo/MaterialHasClassesSaveReqVO.java
@@ -0,0 +1,23 @@
+package com.zt.plat.module.base.controller.admin.materialhasclasses.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - 物料持有分类新增/修改 Request VO")
+@Data
+public class MaterialHasClassesSaveReqVO {
+
+ @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "16228")
+ private Long id;
+
+ @Schema(description = "物料信息ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "31031")
+ @NotNull(message = "物料信息ID不能为空")
+ private Long infomationId;
+
+ @Schema(description = "分类ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "5914")
+ @NotNull(message = "分类ID不能为空")
+ private Long classesId;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasproperties/MaterialHasPropertiesController.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasproperties/MaterialHasPropertiesController.java
new file mode 100644
index 0000000..74cd336
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasproperties/MaterialHasPropertiesController.java
@@ -0,0 +1,107 @@
+package com.zt.plat.module.base.controller.admin.materialhasproperties;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.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 jakarta.validation.constraints.*;
+import jakarta.validation.*;
+import jakarta.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import com.zt.plat.framework.common.pojo.vo.BatchDeleteReqVO;
+import com.zt.plat.framework.common.pojo.PageParam;
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.framework.common.pojo.CommonResult;
+import com.zt.plat.framework.common.util.object.BeanUtils;
+import static com.zt.plat.framework.common.pojo.CommonResult.success;
+
+import com.zt.plat.framework.excel.core.util.ExcelUtils;
+
+import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog;
+import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import com.zt.plat.module.base.controller.admin.materialhasproperties.vo.*;
+import com.zt.plat.module.base.dal.dataobject.materialhasproperties.MaterialHasPropertiesDO;
+import com.zt.plat.module.base.service.materialhasproperties.MaterialHasPropertiesService;
+
+@Tag(name = "管理后台 - 物料持有属性")
+@RestController
+@RequestMapping("/base/material-has-properties")
+@Validated
+public class MaterialHasPropertiesController {
+
+
+ @Resource
+ private MaterialHasPropertiesService materialHasPropertiesService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建物料持有属性")
+ @PreAuthorize("@ss.hasPermission('base:material-has-properties:create')")
+ public CommonResult createMaterialHasProperties(@Valid @RequestBody MaterialHasPropertiesSaveReqVO createReqVO) {
+ return success(materialHasPropertiesService.createMaterialHasProperties(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新物料持有属性")
+ @PreAuthorize("@ss.hasPermission('base:material-has-properties:update')")
+ public CommonResult updateMaterialHasProperties(@Valid @RequestBody MaterialHasPropertiesSaveReqVO updateReqVO) {
+ materialHasPropertiesService.updateMaterialHasProperties(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除物料持有属性")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('base:material-has-properties:delete')")
+ public CommonResult deleteMaterialHasProperties(@RequestParam("id") Long id) {
+ materialHasPropertiesService.deleteMaterialHasProperties(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除物料持有属性")
+ @PreAuthorize("@ss.hasPermission('base:material-has-properties:delete')")
+ public CommonResult deleteMaterialHasPropertiesList(@RequestBody BatchDeleteReqVO req) {
+ materialHasPropertiesService.deleteMaterialHasPropertiesListByIds(req.getIds());
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得物料持有属性")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('base:material-has-properties:query')")
+ public CommonResult getMaterialHasProperties(@RequestParam("id") Long id) {
+ MaterialHasPropertiesDO materialHasProperties = materialHasPropertiesService.getMaterialHasProperties(id);
+ return success(BeanUtils.toBean(materialHasProperties, MaterialHasPropertiesRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得物料持有属性分页")
+ @PreAuthorize("@ss.hasPermission('base:material-has-properties:query')")
+ public CommonResult> getMaterialHasPropertiesPage(@Valid MaterialHasPropertiesPageReqVO pageReqVO) {
+ PageResult pageResult = materialHasPropertiesService.getMaterialHasPropertiesPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, MaterialHasPropertiesRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出物料持有属性 Excel")
+ @PreAuthorize("@ss.hasPermission('base:material-has-properties:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportMaterialHasPropertiesExcel(@Valid MaterialHasPropertiesPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = materialHasPropertiesService.getMaterialHasPropertiesPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "物料持有属性.xls", "数据", MaterialHasPropertiesRespVO.class,
+ BeanUtils.toBean(list, MaterialHasPropertiesRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasproperties/vo/MaterialHasPropertiesPageReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasproperties/vo/MaterialHasPropertiesPageReqVO.java
new file mode 100644
index 0000000..f1a3349
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasproperties/vo/MaterialHasPropertiesPageReqVO.java
@@ -0,0 +1,41 @@
+package com.zt.plat.module.base.controller.admin.materialhasproperties.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.zt.plat.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static com.zt.plat.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 物料持有属性分页 Request VO")
+@Data
+public class MaterialHasPropertiesPageReqVO extends PageParam {
+
+ @Schema(description = "物料信息ID", example = "2614")
+ private Long infomationId;
+
+ @Schema(description = "属性ID", example = "8607")
+ private Long propertiesId;
+
+ @Schema(description = "计量单位ID-默认计量单位", example = "23731")
+ private Long unitId;
+
+ @Schema(description = "属性值")
+ private String value;
+
+ @Schema(description = "是否关键属性-关键属性表示物料唯一性")
+ private Integer isKey;
+
+ @Schema(description = "是否计量定价")
+ private Integer isMetering;
+
+ @Schema(description = "排序号")
+ private Long sort;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasproperties/vo/MaterialHasPropertiesRespVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasproperties/vo/MaterialHasPropertiesRespVO.java
new file mode 100644
index 0000000..79cdc7a
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasproperties/vo/MaterialHasPropertiesRespVO.java
@@ -0,0 +1,51 @@
+package com.zt.plat.module.base.controller.admin.materialhasproperties.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 物料持有属性 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class MaterialHasPropertiesRespVO {
+
+ @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6800")
+ @ExcelProperty("主键ID")
+ private Long id;
+
+ @Schema(description = "物料信息ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "2614")
+ @ExcelProperty("物料信息ID")
+ private Long infomationId;
+
+ @Schema(description = "属性ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "8607")
+ @ExcelProperty("属性ID")
+ private Long propertiesId;
+
+ @Schema(description = "计量单位ID-默认计量单位", example = "23731")
+ @ExcelProperty("计量单位ID-默认计量单位")
+ private Long unitId;
+
+ @Schema(description = "属性值", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("属性值")
+ private String value;
+
+ @Schema(description = "是否关键属性-关键属性表示物料唯一性")
+ @ExcelProperty("是否关键属性-关键属性表示物料唯一性")
+ private Integer isKey;
+
+ @Schema(description = "是否计量定价")
+ @ExcelProperty("是否计量定价")
+ private Integer isMetering;
+
+ @Schema(description = "排序号")
+ @ExcelProperty("排序号")
+ private Long sort;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasproperties/vo/MaterialHasPropertiesSaveReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasproperties/vo/MaterialHasPropertiesSaveReqVO.java
new file mode 100644
index 0000000..e3092ab
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialhasproperties/vo/MaterialHasPropertiesSaveReqVO.java
@@ -0,0 +1,39 @@
+package com.zt.plat.module.base.controller.admin.materialhasproperties.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - 物料持有属性新增/修改 Request VO")
+@Data
+public class MaterialHasPropertiesSaveReqVO {
+
+ @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "6800")
+ private Long id;
+
+ @Schema(description = "物料信息ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "2614")
+ @NotNull(message = "物料信息ID不能为空")
+ private Long infomationId;
+
+ @Schema(description = "属性ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "8607")
+ @NotNull(message = "属性ID不能为空")
+ private Long propertiesId;
+
+ @Schema(description = "计量单位ID-默认计量单位", example = "23731")
+ private Long unitId;
+
+ @Schema(description = "属性值", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "属性值不能为空")
+ private String value;
+
+ @Schema(description = "是否关键属性-关键属性表示物料唯一性")
+ private Integer isKey;
+
+ @Schema(description = "是否计量定价")
+ private Integer isMetering;
+
+ @Schema(description = "排序号")
+ private Long sort;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialproperties/MaterialPropertiesController.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialproperties/MaterialPropertiesController.java
new file mode 100644
index 0000000..0929073
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialproperties/MaterialPropertiesController.java
@@ -0,0 +1,107 @@
+package com.zt.plat.module.base.controller.admin.materialproperties;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.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 jakarta.validation.constraints.*;
+import jakarta.validation.*;
+import jakarta.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import com.zt.plat.framework.common.pojo.vo.BatchDeleteReqVO;
+import com.zt.plat.framework.common.pojo.PageParam;
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.framework.common.pojo.CommonResult;
+import com.zt.plat.framework.common.util.object.BeanUtils;
+import static com.zt.plat.framework.common.pojo.CommonResult.success;
+
+import com.zt.plat.framework.excel.core.util.ExcelUtils;
+
+import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog;
+import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import com.zt.plat.module.base.controller.admin.materialproperties.vo.*;
+import com.zt.plat.module.base.dal.dataobject.materialproperties.MaterialPropertiesDO;
+import com.zt.plat.module.base.service.materialproperties.MaterialPropertiesService;
+
+@Tag(name = "管理后台 - 物料属性")
+@RestController
+@RequestMapping("/base/material-properties")
+@Validated
+public class MaterialPropertiesController {
+
+
+ @Resource
+ private MaterialPropertiesService materialPropertiesService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建物料属性")
+ @PreAuthorize("@ss.hasPermission('base:material-properties:create')")
+ public CommonResult createMaterialProperties(@Valid @RequestBody MaterialPropertiesSaveReqVO createReqVO) {
+ return success(materialPropertiesService.createMaterialProperties(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新物料属性")
+ @PreAuthorize("@ss.hasPermission('base:material-properties:update')")
+ public CommonResult updateMaterialProperties(@Valid @RequestBody MaterialPropertiesSaveReqVO updateReqVO) {
+ materialPropertiesService.updateMaterialProperties(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除物料属性")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('base:material-properties:delete')")
+ public CommonResult deleteMaterialProperties(@RequestParam("id") Long id) {
+ materialPropertiesService.deleteMaterialProperties(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除物料属性")
+ @PreAuthorize("@ss.hasPermission('base:material-properties:delete')")
+ public CommonResult deleteMaterialPropertiesList(@RequestBody BatchDeleteReqVO req) {
+ materialPropertiesService.deleteMaterialPropertiesListByIds(req.getIds());
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得物料属性")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('base:material-properties:query')")
+ public CommonResult getMaterialProperties(@RequestParam("id") Long id) {
+ MaterialPropertiesDO materialProperties = materialPropertiesService.getMaterialProperties(id);
+ return success(BeanUtils.toBean(materialProperties, MaterialPropertiesRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得物料属性分页")
+ @PreAuthorize("@ss.hasPermission('base:material-properties:query')")
+ public CommonResult> getMaterialPropertiesPage(@Valid MaterialPropertiesPageReqVO pageReqVO) {
+ PageResult pageResult = materialPropertiesService.getMaterialPropertiesPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, MaterialPropertiesRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出物料属性 Excel")
+ @PreAuthorize("@ss.hasPermission('base:material-properties:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportMaterialPropertiesExcel(@Valid MaterialPropertiesPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = materialPropertiesService.getMaterialPropertiesPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "物料属性.xls", "数据", MaterialPropertiesRespVO.class,
+ BeanUtils.toBean(list, MaterialPropertiesRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialproperties/vo/MaterialPropertiesPageReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialproperties/vo/MaterialPropertiesPageReqVO.java
new file mode 100644
index 0000000..6621b95
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialproperties/vo/MaterialPropertiesPageReqVO.java
@@ -0,0 +1,38 @@
+package com.zt.plat.module.base.controller.admin.materialproperties.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.zt.plat.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static com.zt.plat.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 物料属性分页 Request VO")
+@Data
+public class MaterialPropertiesPageReqVO extends PageParam {
+
+ @Schema(description = "属性编码")
+ private String code;
+
+ @Schema(description = "属性名称", example = "芋艿")
+ private String name;
+
+ @Schema(description = "计量单位量ID", example = "30468")
+ private Long unitQuantityId;
+
+ @Schema(description = "业务字典数据值")
+ private String dictionaryDataValue;
+
+ @Schema(description = "数据类型", example = "1")
+ private String dataType;
+
+ @Schema(description = "备注")
+ private String remark;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialproperties/vo/MaterialPropertiesRespVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialproperties/vo/MaterialPropertiesRespVO.java
new file mode 100644
index 0000000..c2ac468
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialproperties/vo/MaterialPropertiesRespVO.java
@@ -0,0 +1,47 @@
+package com.zt.plat.module.base.controller.admin.materialproperties.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 物料属性 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class MaterialPropertiesRespVO {
+
+ @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10591")
+ @ExcelProperty("主键ID")
+ private Long id;
+
+ @Schema(description = "属性编码", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("属性编码")
+ private String code;
+
+ @Schema(description = "属性名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
+ @ExcelProperty("属性名称")
+ private String name;
+
+ @Schema(description = "计量单位量ID", example = "30468")
+ @ExcelProperty("计量单位量ID")
+ private Long unitQuantityId;
+
+ @Schema(description = "业务字典数据值", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("业务字典数据值")
+ private String dictionaryDataValue;
+
+ @Schema(description = "数据类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @ExcelProperty("数据类型")
+ private String dataType;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("备注")
+ private String remark;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialproperties/vo/MaterialPropertiesSaveReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialproperties/vo/MaterialPropertiesSaveReqVO.java
new file mode 100644
index 0000000..e296bbe
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/materialproperties/vo/MaterialPropertiesSaveReqVO.java
@@ -0,0 +1,38 @@
+package com.zt.plat.module.base.controller.admin.materialproperties.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - 物料属性新增/修改 Request VO")
+@Data
+public class MaterialPropertiesSaveReqVO {
+
+ @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10591")
+ private Long id;
+
+ @Schema(description = "属性编码", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "属性编码不能为空")
+ private String code;
+
+ @Schema(description = "属性名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
+ @NotEmpty(message = "属性名称不能为空")
+ private String name;
+
+ @Schema(description = "计量单位量ID", example = "30468")
+ private Long unitQuantityId;
+
+ @Schema(description = "业务字典数据值", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "业务字典数据值不能为空")
+ private String dictionaryDataValue;
+
+ @Schema(description = "数据类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @NotEmpty(message = "数据类型不能为空")
+ private String dataType;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "备注不能为空")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomation/ProcessingInfomationController.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomation/ProcessingInfomationController.java
new file mode 100644
index 0000000..2cb57b5
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomation/ProcessingInfomationController.java
@@ -0,0 +1,138 @@
+package com.zt.plat.module.base.controller.admin.processinginfomation;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.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 jakarta.validation.constraints.*;
+import jakarta.validation.*;
+import jakarta.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import com.zt.plat.framework.common.pojo.vo.BatchDeleteReqVO;
+import com.zt.plat.framework.common.pojo.PageParam;
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.framework.common.pojo.CommonResult;
+import com.zt.plat.framework.common.util.object.BeanUtils;
+import static com.zt.plat.framework.common.pojo.CommonResult.success;
+
+import com.zt.plat.framework.excel.core.util.ExcelUtils;
+
+import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog;
+import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import com.zt.plat.module.base.controller.admin.processinginfomation.vo.*;
+import com.zt.plat.module.base.dal.dataobject.processinginfomation.ProcessingInfomationDO;
+import com.zt.plat.module.base.service.processinginfomation.ProcessingInfomationService;
+
+@Tag(name = "管理后台 - 工艺信息")
+@RestController
+@RequestMapping("/base/processing-infomation")
+@Validated
+public class ProcessingInfomationController {
+
+
+ @Resource
+ private ProcessingInfomationService processingInfomationService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建工艺信息")
+ @PreAuthorize("@ss.hasPermission('base:processing-infomation:create')")
+ public CommonResult createProcessingInfomation(@Valid @RequestBody ProcessingInfomationSaveReqVO createReqVO) {
+ return success(processingInfomationService.createProcessingInfomation(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新工艺信息")
+ @PreAuthorize("@ss.hasPermission('base:processing-infomation:update')")
+ public CommonResult updateProcessingInfomation(@Valid @RequestBody ProcessingInfomationSaveReqVO updateReqVO) {
+ processingInfomationService.updateProcessingInfomation(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除工艺信息")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('base:processing-infomation:delete')")
+ public CommonResult deleteProcessingInfomation(@RequestParam("id") Long id) {
+ processingInfomationService.deleteProcessingInfomation(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除工艺信息")
+ @PreAuthorize("@ss.hasPermission('base:processing-infomation:delete')")
+ public CommonResult deleteProcessingInfomationList(@RequestBody BatchDeleteReqVO req) {
+ processingInfomationService.deleteProcessingInfomationListByIds(req.getIds());
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得工艺信息")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('base:processing-infomation:query')")
+ public CommonResult getProcessingInfomation(@RequestParam("id") Long id) {
+ ProcessingInfomationDO processingInfomation = processingInfomationService.getProcessingInfomation(id);
+ return success(BeanUtils.toBean(processingInfomation, ProcessingInfomationRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得工艺信息分页")
+ @PreAuthorize("@ss.hasPermission('base:processing-infomation:query')")
+ public CommonResult> getProcessingInfomationPage(@Valid ProcessingInfomationPageReqVO pageReqVO) {
+ PageResult pageResult = processingInfomationService.getProcessingInfomationPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, ProcessingInfomationRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出工艺信息 Excel")
+ @PreAuthorize("@ss.hasPermission('base:processing-infomation:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportProcessingInfomationExcel(@Valid ProcessingInfomationPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = processingInfomationService.getProcessingInfomationPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "工艺信息.xls", "数据", ProcessingInfomationRespVO.class,
+ BeanUtils.toBean(list, ProcessingInfomationRespVO.class));
+ }
+
+ @GetMapping("/tree")
+ @Operation(summary = "获得工艺信息树")
+ @PreAuthorize("@ss.hasPermission('base:processing-infomation:query')")
+ public CommonResult> getProcessingInfomationTree() {
+ List list = processingInfomationService.getProcessingInfomationList();
+ return success(buildTree(list));
+ }
+
+ private List buildTree(List list) {
+ if (list == null || list.isEmpty()) {
+ return Collections.emptyList();
+ }
+ Map nodeMap = new LinkedHashMap<>();
+ list.stream()
+ .sorted(Comparator.comparing(ProcessingInfomationDO::getId))
+ .forEach(item -> {
+ ProcessingInfomationTreeRespVO node = BeanUtils.toBean(item, ProcessingInfomationTreeRespVO.class);
+ nodeMap.put(node.getId(), node);
+ });
+ List roots = new ArrayList<>();
+ nodeMap.values().forEach(node -> {
+ Long parentId = node.getParentId();
+ if (parentId == null || parentId == 0 || !nodeMap.containsKey(parentId)) {
+ roots.add(node);
+ } else {
+ nodeMap.get(parentId).getChildren().add(node);
+ }
+ });
+ return roots;
+ }
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomation/vo/ProcessingInfomationPageReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomation/vo/ProcessingInfomationPageReqVO.java
new file mode 100644
index 0000000..35efbf8
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomation/vo/ProcessingInfomationPageReqVO.java
@@ -0,0 +1,42 @@
+package com.zt.plat.module.base.controller.admin.processinginfomation.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.zt.plat.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static com.zt.plat.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 工艺信息分页 Request VO")
+@Data
+public class ProcessingInfomationPageReqVO extends PageParam {
+
+ @Schema(description = "父级ID", example = "16823")
+ private Long parentId;
+
+ @Schema(description = "工艺编码-唯一业务键")
+ private String code;
+
+ @Schema(description = "工艺名称", example = "赵六")
+ private String name;
+
+ @Schema(description = "工艺类型值")
+ private Long typeValue;
+
+ @Schema(description = "状态值-工艺状态")
+ private String statusValue;
+
+ @Schema(description = "工艺描述")
+ private String description;
+
+ @Schema(description = "生效日期")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] effectiveDate;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomation/vo/ProcessingInfomationRespVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomation/vo/ProcessingInfomationRespVO.java
new file mode 100644
index 0000000..c22e4e9
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomation/vo/ProcessingInfomationRespVO.java
@@ -0,0 +1,51 @@
+package com.zt.plat.module.base.controller.admin.processinginfomation.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 工艺信息 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ProcessingInfomationRespVO {
+
+ @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "16240")
+ @ExcelProperty("主键ID")
+ private Long id;
+
+ @Schema(description = "父级ID", example = "16823")
+ @ExcelProperty("父级ID")
+ private Long parentId;
+
+ @Schema(description = "工艺编码-唯一业务键", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("工艺编码-唯一业务键")
+ private String code;
+
+ @Schema(description = "工艺名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
+ @ExcelProperty("工艺名称")
+ private String name;
+
+ @Schema(description = "工艺类型值")
+ @ExcelProperty("工艺类型值")
+ private Long typeValue;
+
+ @Schema(description = "状态值-工艺状态", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("状态值-工艺状态")
+ private String statusValue;
+
+ @Schema(description = "工艺描述", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("工艺描述")
+ private String description;
+
+ @Schema(description = "生效日期")
+ @ExcelProperty("生效日期")
+ private LocalDateTime effectiveDate;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomation/vo/ProcessingInfomationSaveReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomation/vo/ProcessingInfomationSaveReqVO.java
new file mode 100644
index 0000000..bcf17ca
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomation/vo/ProcessingInfomationSaveReqVO.java
@@ -0,0 +1,42 @@
+package com.zt.plat.module.base.controller.admin.processinginfomation.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 工艺信息新增/修改 Request VO")
+@Data
+public class ProcessingInfomationSaveReqVO {
+
+ @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "16240")
+ private Long id;
+
+ @Schema(description = "父级ID", example = "16823")
+ private Long parentId;
+
+ @Schema(description = "工艺编码-唯一业务键", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "工艺编码-唯一业务键不能为空")
+ private String code;
+
+ @Schema(description = "工艺名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
+ @NotEmpty(message = "工艺名称不能为空")
+ private String name;
+
+ @Schema(description = "工艺类型值")
+ private Long typeValue;
+
+ @Schema(description = "状态值-工艺状态", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "状态值-工艺状态不能为空")
+ private String statusValue;
+
+ @Schema(description = "工艺描述", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "工艺描述不能为空")
+ private String description;
+
+ @Schema(description = "生效日期")
+ private LocalDateTime effectiveDate;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomation/vo/ProcessingInfomationTreeRespVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomation/vo/ProcessingInfomationTreeRespVO.java
new file mode 100644
index 0000000..87b276a
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomation/vo/ProcessingInfomationTreeRespVO.java
@@ -0,0 +1,34 @@
+package com.zt.plat.module.base.controller.admin.processinginfomation.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Schema(description = "管理后台 - 工艺信息树节点 Response VO")
+@Data
+public class ProcessingInfomationTreeRespVO {
+
+ @Schema(description = "主键ID", example = "1001")
+ private Long id;
+
+ @Schema(description = "父级ID", example = "0")
+ private Long parentId;
+
+ @Schema(description = "工艺编码", example = "PRC-001")
+ private String code;
+
+ @Schema(description = "工艺名称", example = "熔铸")
+ private String name;
+
+ @Schema(description = "工艺类型值")
+ private Long typeValue;
+
+ @Schema(description = "状态值-工艺状态")
+ private String statusValue;
+
+ @Schema(description = "子节点")
+ private List children = new ArrayList<>();
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomationoperation/ProcessingInfomationOperationController.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomationoperation/ProcessingInfomationOperationController.java
new file mode 100644
index 0000000..16b2509
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomationoperation/ProcessingInfomationOperationController.java
@@ -0,0 +1,107 @@
+package com.zt.plat.module.base.controller.admin.processinginfomationoperation;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.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 jakarta.validation.constraints.*;
+import jakarta.validation.*;
+import jakarta.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import com.zt.plat.framework.common.pojo.vo.BatchDeleteReqVO;
+import com.zt.plat.framework.common.pojo.PageParam;
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.framework.common.pojo.CommonResult;
+import com.zt.plat.framework.common.util.object.BeanUtils;
+import static com.zt.plat.framework.common.pojo.CommonResult.success;
+
+import com.zt.plat.framework.excel.core.util.ExcelUtils;
+
+import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog;
+import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import com.zt.plat.module.base.controller.admin.processinginfomationoperation.vo.*;
+import com.zt.plat.module.base.dal.dataobject.processinginfomationoperation.ProcessingInfomationOperationDO;
+import com.zt.plat.module.base.service.processinginfomationoperation.ProcessingInfomationOperationService;
+
+@Tag(name = "管理后台 - 工艺工序")
+@RestController
+@RequestMapping("/base/processing-infomation-operation")
+@Validated
+public class ProcessingInfomationOperationController {
+
+
+ @Resource
+ private ProcessingInfomationOperationService processingInfomationOperationService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建工艺工序")
+ @PreAuthorize("@ss.hasPermission('base:processing-infomation-operation:create')")
+ public CommonResult createProcessingInfomationOperation(@Valid @RequestBody ProcessingInfomationOperationSaveReqVO createReqVO) {
+ return success(processingInfomationOperationService.createProcessingInfomationOperation(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新工艺工序")
+ @PreAuthorize("@ss.hasPermission('base:processing-infomation-operation:update')")
+ public CommonResult updateProcessingInfomationOperation(@Valid @RequestBody ProcessingInfomationOperationSaveReqVO updateReqVO) {
+ processingInfomationOperationService.updateProcessingInfomationOperation(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除工艺工序")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('base:processing-infomation-operation:delete')")
+ public CommonResult deleteProcessingInfomationOperation(@RequestParam("id") Long id) {
+ processingInfomationOperationService.deleteProcessingInfomationOperation(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除工艺工序")
+ @PreAuthorize("@ss.hasPermission('base:processing-infomation-operation:delete')")
+ public CommonResult deleteProcessingInfomationOperationList(@RequestBody BatchDeleteReqVO req) {
+ processingInfomationOperationService.deleteProcessingInfomationOperationListByIds(req.getIds());
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得工艺工序")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('base:processing-infomation-operation:query')")
+ public CommonResult getProcessingInfomationOperation(@RequestParam("id") Long id) {
+ ProcessingInfomationOperationDO processingInfomationOperation = processingInfomationOperationService.getProcessingInfomationOperation(id);
+ return success(BeanUtils.toBean(processingInfomationOperation, ProcessingInfomationOperationRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得工艺工序分页")
+ @PreAuthorize("@ss.hasPermission('base:processing-infomation-operation:query')")
+ public CommonResult> getProcessingInfomationOperationPage(@Valid ProcessingInfomationOperationPageReqVO pageReqVO) {
+ PageResult pageResult = processingInfomationOperationService.getProcessingInfomationOperationDetailPage(pageReqVO);
+ return success(pageResult);
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出工艺工序 Excel")
+ @PreAuthorize("@ss.hasPermission('base:processing-infomation-operation:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportProcessingInfomationOperationExcel(@Valid ProcessingInfomationOperationPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = processingInfomationOperationService.getProcessingInfomationOperationDetailList(pageReqVO);
+ // 导出 Excel
+ ExcelUtils.write(response, "工艺工序.xls", "数据", ProcessingInfomationOperationRespVO.class,
+ list);
+ }
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomationoperation/vo/ProcessingInfomationOperationPageReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomationoperation/vo/ProcessingInfomationOperationPageReqVO.java
new file mode 100644
index 0000000..96590e1
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomationoperation/vo/ProcessingInfomationOperationPageReqVO.java
@@ -0,0 +1,41 @@
+package com.zt.plat.module.base.controller.admin.processinginfomationoperation.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.zt.plat.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static com.zt.plat.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 工艺工序分页 Request VO")
+@Data
+public class ProcessingInfomationOperationPageReqVO extends PageParam {
+
+ @Schema(description = "前序工序ID", example = "14658")
+ private Long previousOperationId;
+
+ @Schema(description = "后续工序ID", example = "22110")
+ private Long nextOperationId;
+
+ @Schema(description = "工艺ID", example = "5773")
+ private Long processingId;
+
+ @Schema(description = "是否关键工序")
+ private Integer isKey;
+
+ @Schema(description = "备注")
+ private String remark;
+
+ @Schema(description = "后续工序编码")
+ private String nextOperationCode;
+
+ @Schema(description = "后续工序名称")
+ private String nextOperationName;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomationoperation/vo/ProcessingInfomationOperationRespVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomationoperation/vo/ProcessingInfomationOperationRespVO.java
new file mode 100644
index 0000000..78b09db
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomationoperation/vo/ProcessingInfomationOperationRespVO.java
@@ -0,0 +1,59 @@
+package com.zt.plat.module.base.controller.admin.processinginfomationoperation.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 工艺工序 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ProcessingInfomationOperationRespVO {
+
+ @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "29694")
+ @ExcelProperty("主键ID")
+ private Long id;
+
+ @Schema(description = "前序工序ID", example = "14658")
+ @ExcelProperty("前序工序ID")
+ private Long previousOperationId;
+
+ @Schema(description = "前序工序编码")
+ @ExcelProperty("前序工序编码")
+ private String previousOperationCode;
+
+ @Schema(description = "前序工序名称")
+ @ExcelProperty("前序工序名称")
+ private String previousOperationName;
+
+ @Schema(description = "后续工序ID", example = "22110")
+ @ExcelProperty("后续工序ID")
+ private Long nextOperationId;
+
+ @Schema(description = "后续工序编码")
+ @ExcelProperty("后续工序编码")
+ private String nextOperationCode;
+
+ @Schema(description = "后续工序名称")
+ @ExcelProperty("后续工序名称")
+ private String nextOperationName;
+
+ @Schema(description = "工艺ID", example = "5773")
+ @ExcelProperty("工艺ID")
+ private Long processingId;
+
+ @Schema(description = "是否关键工序")
+ @ExcelProperty("是否关键工序")
+ private Integer isKey;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("备注")
+ private String remark;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomationoperation/vo/ProcessingInfomationOperationSaveReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomationoperation/vo/ProcessingInfomationOperationSaveReqVO.java
new file mode 100644
index 0000000..eb396ca
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processinginfomationoperation/vo/ProcessingInfomationOperationSaveReqVO.java
@@ -0,0 +1,31 @@
+package com.zt.plat.module.base.controller.admin.processinginfomationoperation.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - 工艺工序新增/修改 Request VO")
+@Data
+public class ProcessingInfomationOperationSaveReqVO {
+
+ @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "29694")
+ private Long id;
+
+ @Schema(description = "前序工序ID", example = "14658")
+ private Long previousOperationId;
+
+ @Schema(description = "后续工序ID", example = "22110")
+ private Long nextOperationId;
+
+ @Schema(description = "工艺ID", example = "5773")
+ private Long processingId;
+
+ @Schema(description = "是否关键工序")
+ private Integer isKey;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "备注不能为空")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperation/ProcessingOperationController.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperation/ProcessingOperationController.java
new file mode 100644
index 0000000..4dd1339
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperation/ProcessingOperationController.java
@@ -0,0 +1,115 @@
+package com.zt.plat.module.base.controller.admin.processingoperation;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.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 jakarta.validation.constraints.*;
+import jakarta.validation.*;
+import jakarta.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import com.zt.plat.framework.common.pojo.vo.BatchDeleteReqVO;
+import com.zt.plat.framework.common.pojo.PageParam;
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.framework.common.pojo.CommonResult;
+import com.zt.plat.framework.common.util.object.BeanUtils;
+import static com.zt.plat.framework.common.pojo.CommonResult.success;
+
+import com.zt.plat.framework.excel.core.util.ExcelUtils;
+
+import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog;
+import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import com.zt.plat.module.base.controller.admin.processingoperation.vo.*;
+import com.zt.plat.module.base.dal.dataobject.processingoperation.ProcessingOperationDO;
+import com.zt.plat.module.base.service.processingoperation.ProcessingOperationService;
+
+@Tag(name = "管理后台 - 工序")
+@RestController
+@RequestMapping("/base/processing-operation")
+@Validated
+public class ProcessingOperationController {
+
+
+ @Resource
+ private ProcessingOperationService processingOperationService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建工序")
+ @PreAuthorize("@ss.hasPermission('base:processing-operation:create')")
+ public CommonResult createProcessingOperation(@Valid @RequestBody ProcessingOperationSaveReqVO createReqVO) {
+ return success(processingOperationService.createProcessingOperation(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新工序")
+ @PreAuthorize("@ss.hasPermission('base:processing-operation:update')")
+ public CommonResult updateProcessingOperation(@Valid @RequestBody ProcessingOperationSaveReqVO updateReqVO) {
+ processingOperationService.updateProcessingOperation(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除工序")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('base:processing-operation:delete')")
+ public CommonResult deleteProcessingOperation(@RequestParam("id") Long id) {
+ processingOperationService.deleteProcessingOperation(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除工序")
+ @PreAuthorize("@ss.hasPermission('base:processing-operation:delete')")
+ public CommonResult deleteProcessingOperationList(@RequestBody BatchDeleteReqVO req) {
+ processingOperationService.deleteProcessingOperationListByIds(req.getIds());
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得工序")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('base:processing-operation:query')")
+ public CommonResult getProcessingOperation(@RequestParam("id") Long id) {
+ ProcessingOperationDO processingOperation = processingOperationService.getProcessingOperation(id);
+ return success(BeanUtils.toBean(processingOperation, ProcessingOperationRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得工序分页")
+ @PreAuthorize("@ss.hasPermission('base:processing-operation:query')")
+ public CommonResult> getProcessingOperationPage(@Valid ProcessingOperationPageReqVO pageReqVO) {
+ PageResult pageResult = processingOperationService.getProcessingOperationPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, ProcessingOperationRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出工序 Excel")
+ @PreAuthorize("@ss.hasPermission('base:processing-operation:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportProcessingOperationExcel(@Valid ProcessingOperationPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = processingOperationService.getProcessingOperationPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "工序.xls", "数据", ProcessingOperationRespVO.class,
+ BeanUtils.toBean(list, ProcessingOperationRespVO.class));
+ }
+
+ @GetMapping("/simple-list")
+ @Operation(summary = "获得工序简单列表")
+ @PreAuthorize("@ss.hasPermission('base:processing-operation:query')")
+ public CommonResult> getProcessingOperationSimpleList() {
+ List list = processingOperationService.getProcessingOperationList();
+ return success(BeanUtils.toBean(list, ProcessingOperationSimpleRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperation/vo/ProcessingOperationPageReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperation/vo/ProcessingOperationPageReqVO.java
new file mode 100644
index 0000000..30eb3b9
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperation/vo/ProcessingOperationPageReqVO.java
@@ -0,0 +1,35 @@
+package com.zt.plat.module.base.controller.admin.processingoperation.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.zt.plat.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static com.zt.plat.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 工序分页 Request VO")
+@Data
+public class ProcessingOperationPageReqVO extends PageParam {
+
+ @Schema(description = "工序编码")
+ private String code;
+
+ @Schema(description = "工序名称", example = "王五")
+ private String name;
+
+ @Schema(description = "排序号")
+ private Long sort;
+
+ @Schema(description = "类型值-工序类型")
+ private String typeValue;
+
+ @Schema(description = "备注")
+ private String remark;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperation/vo/ProcessingOperationRespVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperation/vo/ProcessingOperationRespVO.java
new file mode 100644
index 0000000..a011073
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperation/vo/ProcessingOperationRespVO.java
@@ -0,0 +1,43 @@
+package com.zt.plat.module.base.controller.admin.processingoperation.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 工序 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ProcessingOperationRespVO {
+
+ @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14097")
+ @ExcelProperty("主键ID")
+ private Long id;
+
+ @Schema(description = "工序编码", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("工序编码")
+ private String code;
+
+ @Schema(description = "工序名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
+ @ExcelProperty("工序名称")
+ private String name;
+
+ @Schema(description = "排序号")
+ @ExcelProperty("排序号")
+ private Long sort;
+
+ @Schema(description = "类型值-工序类型", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("类型值-工序类型")
+ private String typeValue;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("备注")
+ private String remark;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperation/vo/ProcessingOperationSaveReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperation/vo/ProcessingOperationSaveReqVO.java
new file mode 100644
index 0000000..33ef116
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperation/vo/ProcessingOperationSaveReqVO.java
@@ -0,0 +1,34 @@
+package com.zt.plat.module.base.controller.admin.processingoperation.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - 工序新增/修改 Request VO")
+@Data
+public class ProcessingOperationSaveReqVO {
+
+ @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14097")
+ private Long id;
+
+ @Schema(description = "工序编码", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "工序编码不能为空")
+ private String code;
+
+ @Schema(description = "工序名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
+ @NotEmpty(message = "工序名称不能为空")
+ private String name;
+
+ @Schema(description = "排序号")
+ private Long sort;
+
+ @Schema(description = "类型值-工序类型", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "类型值-工序类型不能为空")
+ private String typeValue;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "备注不能为空")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperation/vo/ProcessingOperationSimpleRespVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperation/vo/ProcessingOperationSimpleRespVO.java
new file mode 100644
index 0000000..7580848
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperation/vo/ProcessingOperationSimpleRespVO.java
@@ -0,0 +1,19 @@
+package com.zt.plat.module.base.controller.admin.processingoperation.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 工序简单信息 Response VO")
+@Data
+public class ProcessingOperationSimpleRespVO {
+
+ @Schema(description = "工序ID", example = "1001")
+ private Long id;
+
+ @Schema(description = "工序编码", example = "OP-001")
+ private String code;
+
+ @Schema(description = "工序名称", example = "熔铸")
+ private String name;
+
+}
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperationmaterial/ProcessingOperationMaterialController.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperationmaterial/ProcessingOperationMaterialController.java
new file mode 100644
index 0000000..dfa6bcb
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperationmaterial/ProcessingOperationMaterialController.java
@@ -0,0 +1,107 @@
+package com.zt.plat.module.base.controller.admin.processingoperationmaterial;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.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 jakarta.validation.constraints.*;
+import jakarta.validation.*;
+import jakarta.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import com.zt.plat.framework.common.pojo.vo.BatchDeleteReqVO;
+import com.zt.plat.framework.common.pojo.PageParam;
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.framework.common.pojo.CommonResult;
+import com.zt.plat.framework.common.util.object.BeanUtils;
+import static com.zt.plat.framework.common.pojo.CommonResult.success;
+
+import com.zt.plat.framework.excel.core.util.ExcelUtils;
+
+import com.zt.plat.framework.apilog.core.annotation.ApiAccessLog;
+import static com.zt.plat.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import com.zt.plat.module.base.controller.admin.processingoperationmaterial.vo.*;
+import com.zt.plat.module.base.dal.dataobject.processingoperationmaterial.ProcessingOperationMaterialDO;
+import com.zt.plat.module.base.service.processingoperationmaterial.ProcessingOperationMaterialService;
+
+@Tag(name = "管理后台 - 工艺工序物料")
+@RestController
+@RequestMapping("/base/processing-operation-material")
+@Validated
+public class ProcessingOperationMaterialController {
+
+
+ @Resource
+ private ProcessingOperationMaterialService processingOperationMaterialService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建工艺工序物料")
+ @PreAuthorize("@ss.hasPermission('base:processing-operation-material:create')")
+ public CommonResult createProcessingOperationMaterial(@Valid @RequestBody ProcessingOperationMaterialSaveReqVO createReqVO) {
+ return success(processingOperationMaterialService.createProcessingOperationMaterial(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新工艺工序物料")
+ @PreAuthorize("@ss.hasPermission('base:processing-operation-material:update')")
+ public CommonResult updateProcessingOperationMaterial(@Valid @RequestBody ProcessingOperationMaterialSaveReqVO updateReqVO) {
+ processingOperationMaterialService.updateProcessingOperationMaterial(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除工艺工序物料")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('base:processing-operation-material:delete')")
+ public CommonResult deleteProcessingOperationMaterial(@RequestParam("id") Long id) {
+ processingOperationMaterialService.deleteProcessingOperationMaterial(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除工艺工序物料")
+ @PreAuthorize("@ss.hasPermission('base:processing-operation-material:delete')")
+ public CommonResult deleteProcessingOperationMaterialList(@RequestBody BatchDeleteReqVO req) {
+ processingOperationMaterialService.deleteProcessingOperationMaterialListByIds(req.getIds());
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得工艺工序物料")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('base:processing-operation-material:query')")
+ public CommonResult getProcessingOperationMaterial(@RequestParam("id") Long id) {
+ ProcessingOperationMaterialDO processingOperationMaterial = processingOperationMaterialService.getProcessingOperationMaterial(id);
+ return success(BeanUtils.toBean(processingOperationMaterial, ProcessingOperationMaterialRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得工艺工序物料分页")
+ @PreAuthorize("@ss.hasPermission('base:processing-operation-material:query')")
+ public CommonResult> getProcessingOperationMaterialPage(@Valid ProcessingOperationMaterialPageReqVO pageReqVO) {
+ PageResult pageResult = processingOperationMaterialService.getProcessingOperationMaterialPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, ProcessingOperationMaterialRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出工艺工序物料 Excel")
+ @PreAuthorize("@ss.hasPermission('base:processing-operation-material:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportProcessingOperationMaterialExcel(@Valid ProcessingOperationMaterialPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = processingOperationMaterialService.getProcessingOperationMaterialPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "工艺工序物料.xls", "数据", ProcessingOperationMaterialRespVO.class,
+ BeanUtils.toBean(list, ProcessingOperationMaterialRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperationmaterial/vo/ProcessingOperationMaterialPageReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperationmaterial/vo/ProcessingOperationMaterialPageReqVO.java
new file mode 100644
index 0000000..8e8853c
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperationmaterial/vo/ProcessingOperationMaterialPageReqVO.java
@@ -0,0 +1,29 @@
+package com.zt.plat.module.base.controller.admin.processingoperationmaterial.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.zt.plat.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static com.zt.plat.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 工艺工序物料分页 Request VO")
+@Data
+public class ProcessingOperationMaterialPageReqVO extends PageParam {
+
+ @Schema(description = "类型值-物料类型(产出/投入)")
+ private String typeValue;
+
+ @Schema(description = "备注")
+ private String remark;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+ @Schema(description = "组织机构")
+ private String departmentIds;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperationmaterial/vo/ProcessingOperationMaterialRespVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperationmaterial/vo/ProcessingOperationMaterialRespVO.java
new file mode 100644
index 0000000..a0e3b0a
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperationmaterial/vo/ProcessingOperationMaterialRespVO.java
@@ -0,0 +1,43 @@
+package com.zt.plat.module.base.controller.admin.processingoperationmaterial.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 工艺工序物料 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ProcessingOperationMaterialRespVO {
+
+ @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "27200")
+ @ExcelProperty("主键ID")
+ private Long id;
+
+ @Schema(description = "工艺工序ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18575")
+ @ExcelProperty("工艺工序ID")
+ private Long processingOperationId;
+
+ @Schema(description = "物料ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15117")
+ @ExcelProperty("物料ID")
+ private Long materialId;
+
+ @Schema(description = "类型值-物料类型(产出/投入)", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("类型值-物料类型(产出/投入)")
+ private String typeValue;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("备注")
+ private String remark;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+ @Schema(description = "组织机构")
+ @ExcelProperty("组织机构")
+ private String departmentIds;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperationmaterial/vo/ProcessingOperationMaterialSaveReqVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperationmaterial/vo/ProcessingOperationMaterialSaveReqVO.java
new file mode 100644
index 0000000..18bd082
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/processingoperationmaterial/vo/ProcessingOperationMaterialSaveReqVO.java
@@ -0,0 +1,32 @@
+package com.zt.plat.module.base.controller.admin.processingoperationmaterial.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - 工艺工序物料新增/修改 Request VO")
+@Data
+public class ProcessingOperationMaterialSaveReqVO {
+
+ @Schema(description = "主键ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "27200")
+ private Long id;
+
+ @Schema(description = "工艺工序ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18575")
+ private Long processingOperationId;
+
+ @Schema(description = "物料ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15117")
+ private Long materialId;
+
+ @Schema(description = "类型值-物料类型(产出/投入)", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "类型值-物料类型(产出/投入)不能为空")
+ private String typeValue;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "备注不能为空")
+ private String remark;
+
+ @Schema(description = "组织机构")
+ private String departmentIds;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/departmentmaterial/DepartmentMaterialMapper.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/departmentmaterial/DepartmentMaterialMapper.java
new file mode 100644
index 0000000..d7dbd2d
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/departmentmaterial/DepartmentMaterialMapper.java
@@ -0,0 +1,32 @@
+package com.zt.plat.module.base.dal.dao.departmentmaterial;
+
+import java.util.*;
+
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
+import com.zt.plat.module.base.dal.dataobject.departmentmaterial.DepartmentMaterialDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.zt.plat.module.base.controller.admin.departmentmaterial.vo.*;
+
+/**
+ * 组织架构物料 Mapper
+ *
+ * @author 后台管理-1
+ */
+@Mapper
+public interface DepartmentMaterialMapper extends BaseMapperX {
+
+ default PageResult selectPage(DepartmentMaterialPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(DepartmentMaterialDO::getInfomationId, reqVO.getInfomationId())
+ .inIfPresent(DepartmentMaterialDO::getInfomationId, reqVO.getInfomationIds())
+ .eqIfPresent(DepartmentMaterialDO::getClassesId, reqVO.getClassesId())
+ .eqIfPresent(DepartmentMaterialDO::getDeptId, reqVO.getDeptId())
+ .eqIfPresent(DepartmentMaterialDO::getDictionaryDataValue, reqVO.getDictionaryDataValue())
+ .eqIfPresent(DepartmentMaterialDO::getRemark, reqVO.getRemark())
+ .betweenIfPresent(DepartmentMaterialDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(DepartmentMaterialDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/materialclasses/MaterialClassesMapper.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/materialclasses/MaterialClassesMapper.java
new file mode 100644
index 0000000..c486195
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/materialclasses/MaterialClassesMapper.java
@@ -0,0 +1,31 @@
+package com.zt.plat.module.base.dal.dao.materialclasses;
+
+import java.util.*;
+
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
+import com.zt.plat.module.base.dal.dataobject.materialclasses.MaterialClassesDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.zt.plat.module.base.controller.admin.materialclasses.vo.*;
+
+/**
+ * 物料分类 Mapper
+ *
+ * @author 后台管理-1
+ */
+@Mapper
+public interface MaterialClassesMapper extends BaseMapperX {
+
+ default PageResult selectPage(MaterialClassesPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(MaterialClassesDO::getParentId, reqVO.getParentId())
+ .eqIfPresent(MaterialClassesDO::getCode, reqVO.getCode())
+ .likeIfPresent(MaterialClassesDO::getName, reqVO.getName())
+ .eqIfPresent(MaterialClassesDO::getLevel, reqVO.getLevel())
+ .eqIfPresent(MaterialClassesDO::getRemark, reqVO.getRemark())
+ .betweenIfPresent(MaterialClassesDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(MaterialClassesDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/materialhasclasses/MaterialHasClassesMapper.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/materialhasclasses/MaterialHasClassesMapper.java
new file mode 100644
index 0000000..8bbde0f
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/materialhasclasses/MaterialHasClassesMapper.java
@@ -0,0 +1,28 @@
+package com.zt.plat.module.base.dal.dao.materialhasclasses;
+
+import java.util.*;
+
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
+import com.zt.plat.module.base.dal.dataobject.materialhasclasses.MaterialHasClassesDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.zt.plat.module.base.controller.admin.materialhasclasses.vo.*;
+
+/**
+ * 物料持有分类 Mapper
+ *
+ * @author 后台管理-1
+ */
+@Mapper
+public interface MaterialHasClassesMapper extends BaseMapperX {
+
+ default PageResult selectPage(MaterialHasClassesPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(MaterialHasClassesDO::getInfomationId, reqVO.getInfomationId())
+ .betweenIfPresent(MaterialHasClassesDO::getCreateTime, reqVO.getCreateTime())
+ .eqIfPresent(MaterialHasClassesDO::getClassesId, reqVO.getClassesId())
+ .orderByDesc(MaterialHasClassesDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/materialhasproperties/MaterialHasPropertiesMapper.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/materialhasproperties/MaterialHasPropertiesMapper.java
new file mode 100644
index 0000000..824da81
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/materialhasproperties/MaterialHasPropertiesMapper.java
@@ -0,0 +1,33 @@
+package com.zt.plat.module.base.dal.dao.materialhasproperties;
+
+import java.util.*;
+
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
+import com.zt.plat.module.base.dal.dataobject.materialhasproperties.MaterialHasPropertiesDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.zt.plat.module.base.controller.admin.materialhasproperties.vo.*;
+
+/**
+ * 物料持有属性 Mapper
+ *
+ * @author 后台管理-1
+ */
+@Mapper
+public interface MaterialHasPropertiesMapper extends BaseMapperX {
+
+ default PageResult selectPage(MaterialHasPropertiesPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(MaterialHasPropertiesDO::getInfomationId, reqVO.getInfomationId())
+ .eqIfPresent(MaterialHasPropertiesDO::getPropertiesId, reqVO.getPropertiesId())
+ .eqIfPresent(MaterialHasPropertiesDO::getUnitId, reqVO.getUnitId())
+ .eqIfPresent(MaterialHasPropertiesDO::getValue, reqVO.getValue())
+ .eqIfPresent(MaterialHasPropertiesDO::getIsKey, reqVO.getIsKey())
+ .eqIfPresent(MaterialHasPropertiesDO::getIsMetering, reqVO.getIsMetering())
+ .eqIfPresent(MaterialHasPropertiesDO::getSort, reqVO.getSort())
+ .betweenIfPresent(MaterialHasPropertiesDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(MaterialHasPropertiesDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/materialproperties/MaterialPropertiesMapper.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/materialproperties/MaterialPropertiesMapper.java
new file mode 100644
index 0000000..9bb4334
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/materialproperties/MaterialPropertiesMapper.java
@@ -0,0 +1,32 @@
+package com.zt.plat.module.base.dal.dao.materialproperties;
+
+import java.util.*;
+
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
+import com.zt.plat.module.base.dal.dataobject.materialproperties.MaterialPropertiesDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.zt.plat.module.base.controller.admin.materialproperties.vo.*;
+
+/**
+ * 物料属性 Mapper
+ *
+ * @author 后台管理-1
+ */
+@Mapper
+public interface MaterialPropertiesMapper extends BaseMapperX {
+
+ default PageResult selectPage(MaterialPropertiesPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(MaterialPropertiesDO::getCode, reqVO.getCode())
+ .likeIfPresent(MaterialPropertiesDO::getName, reqVO.getName())
+ .eqIfPresent(MaterialPropertiesDO::getUnitQuantityId, reqVO.getUnitQuantityId())
+ .eqIfPresent(MaterialPropertiesDO::getDictionaryDataValue, reqVO.getDictionaryDataValue())
+ .eqIfPresent(MaterialPropertiesDO::getDataType, reqVO.getDataType())
+ .eqIfPresent(MaterialPropertiesDO::getRemark, reqVO.getRemark())
+ .betweenIfPresent(MaterialPropertiesDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(MaterialPropertiesDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/processinginfomation/ProcessingInfomationMapper.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/processinginfomation/ProcessingInfomationMapper.java
new file mode 100644
index 0000000..4468ec8
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/processinginfomation/ProcessingInfomationMapper.java
@@ -0,0 +1,33 @@
+package com.zt.plat.module.base.dal.dao.processinginfomation;
+
+import java.util.*;
+
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
+import com.zt.plat.module.base.dal.dataobject.processinginfomation.ProcessingInfomationDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.zt.plat.module.base.controller.admin.processinginfomation.vo.*;
+
+/**
+ * 工艺信息 Mapper
+ *
+ * @author 后台管理-1
+ */
+@Mapper
+public interface ProcessingInfomationMapper extends BaseMapperX {
+
+ default PageResult selectPage(ProcessingInfomationPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(ProcessingInfomationDO::getParentId, reqVO.getParentId())
+ .eqIfPresent(ProcessingInfomationDO::getCode, reqVO.getCode())
+ .likeIfPresent(ProcessingInfomationDO::getName, reqVO.getName())
+ .eqIfPresent(ProcessingInfomationDO::getTypeValue, reqVO.getTypeValue())
+ .eqIfPresent(ProcessingInfomationDO::getStatusValue, reqVO.getStatusValue())
+ .eqIfPresent(ProcessingInfomationDO::getDescription, reqVO.getDescription())
+ .betweenIfPresent(ProcessingInfomationDO::getEffectiveDate, reqVO.getEffectiveDate())
+ .betweenIfPresent(ProcessingInfomationDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(ProcessingInfomationDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/processinginfomationoperation/ProcessingInfomationOperationMapper.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/processinginfomationoperation/ProcessingInfomationOperationMapper.java
new file mode 100644
index 0000000..e8748cc
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/processinginfomationoperation/ProcessingInfomationOperationMapper.java
@@ -0,0 +1,42 @@
+package com.zt.plat.module.base.dal.dao.processinginfomationoperation;
+
+import java.util.*;
+
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
+import com.zt.plat.module.base.dal.dataobject.processinginfomationoperation.ProcessingInfomationOperationDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.zt.plat.module.base.controller.admin.processinginfomationoperation.vo.*;
+
+/**
+ * 工艺工序 Mapper
+ *
+ * @author 后台管理-1
+ */
+@Mapper
+public interface ProcessingInfomationOperationMapper extends BaseMapperX {
+
+ default PageResult selectPage(ProcessingInfomationOperationPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(ProcessingInfomationOperationDO::getPreviousOperationId, reqVO.getPreviousOperationId())
+ .eqIfPresent(ProcessingInfomationOperationDO::getNextOperationId, reqVO.getNextOperationId())
+ .eqIfPresent(ProcessingInfomationOperationDO::getProcessingId, reqVO.getProcessingId())
+ .eqIfPresent(ProcessingInfomationOperationDO::getIsKey, reqVO.getIsKey())
+ .eqIfPresent(ProcessingInfomationOperationDO::getRemark, reqVO.getRemark())
+ .betweenIfPresent(ProcessingInfomationOperationDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(ProcessingInfomationOperationDO::getId));
+ }
+
+ default List selectList(ProcessingInfomationOperationPageReqVO reqVO) {
+ return selectList(new LambdaQueryWrapperX()
+ .eqIfPresent(ProcessingInfomationOperationDO::getPreviousOperationId, reqVO.getPreviousOperationId())
+ .eqIfPresent(ProcessingInfomationOperationDO::getNextOperationId, reqVO.getNextOperationId())
+ .eqIfPresent(ProcessingInfomationOperationDO::getProcessingId, reqVO.getProcessingId())
+ .eqIfPresent(ProcessingInfomationOperationDO::getIsKey, reqVO.getIsKey())
+ .eqIfPresent(ProcessingInfomationOperationDO::getRemark, reqVO.getRemark())
+ .betweenIfPresent(ProcessingInfomationOperationDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(ProcessingInfomationOperationDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/processingoperation/ProcessingOperationMapper.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/processingoperation/ProcessingOperationMapper.java
new file mode 100644
index 0000000..b611f7a
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/processingoperation/ProcessingOperationMapper.java
@@ -0,0 +1,31 @@
+package com.zt.plat.module.base.dal.dao.processingoperation;
+
+import java.util.*;
+
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
+import com.zt.plat.module.base.dal.dataobject.processingoperation.ProcessingOperationDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.zt.plat.module.base.controller.admin.processingoperation.vo.*;
+
+/**
+ * 工序 Mapper
+ *
+ * @author 后台管理-1
+ */
+@Mapper
+public interface ProcessingOperationMapper extends BaseMapperX {
+
+ default PageResult selectPage(ProcessingOperationPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(ProcessingOperationDO::getCode, reqVO.getCode())
+ .likeIfPresent(ProcessingOperationDO::getName, reqVO.getName())
+ .eqIfPresent(ProcessingOperationDO::getSort, reqVO.getSort())
+ .eqIfPresent(ProcessingOperationDO::getTypeValue, reqVO.getTypeValue())
+ .eqIfPresent(ProcessingOperationDO::getRemark, reqVO.getRemark())
+ .betweenIfPresent(ProcessingOperationDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(ProcessingOperationDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/processingoperationmaterial/ProcessingOperationMaterialMapper.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/processingoperationmaterial/ProcessingOperationMaterialMapper.java
new file mode 100644
index 0000000..81a4b50
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dao/processingoperationmaterial/ProcessingOperationMaterialMapper.java
@@ -0,0 +1,29 @@
+package com.zt.plat.module.base.dal.dao.processingoperationmaterial;
+
+import java.util.*;
+
+import com.zt.plat.framework.common.pojo.PageResult;
+import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
+import com.zt.plat.module.base.dal.dataobject.processingoperationmaterial.ProcessingOperationMaterialDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.zt.plat.module.base.controller.admin.processingoperationmaterial.vo.*;
+
+/**
+ * 工艺工序物料 Mapper
+ *
+ * @author 后台管理-1
+ */
+@Mapper
+public interface ProcessingOperationMaterialMapper extends BaseMapperX {
+
+ default PageResult selectPage(ProcessingOperationMaterialPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(ProcessingOperationMaterialDO::getTypeValue, reqVO.getTypeValue())
+ .eqIfPresent(ProcessingOperationMaterialDO::getRemark, reqVO.getRemark())
+ .betweenIfPresent(ProcessingOperationMaterialDO::getCreateTime, reqVO.getCreateTime())
+ .eqIfPresent(ProcessingOperationMaterialDO::getDepartmentIds, reqVO.getDepartmentIds())
+ .orderByDesc(ProcessingOperationMaterialDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/base/MaterialInfomationDO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/base/MaterialInfomationDO.java
index 1515714..8b5f73e 100644
--- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/base/MaterialInfomationDO.java
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/base/MaterialInfomationDO.java
@@ -39,6 +39,11 @@ public class MaterialInfomationDO extends BaseDO {
@TableField("NAME")
private String name;
/**
+ * 分类ID(中间表关联)
+ */
+ @TableField(exist = false)
+ private Long classesId;
+ /**
* 备注
*/
@TableField("RMK")
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/departmentmaterial/DepartmentMaterialDO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/departmentmaterial/DepartmentMaterialDO.java
new file mode 100644
index 0000000..a759e7b
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/departmentmaterial/DepartmentMaterialDO.java
@@ -0,0 +1,60 @@
+package com.zt.plat.module.base.dal.dataobject.departmentmaterial;
+
+import lombok.*;
+import java.util.*;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import com.zt.plat.framework.mybatis.core.dataobject.BaseDO;
+/**
+* 组织架构物料 DO
+*
+* @author 后台管理-1
+*/
+@TableName("bse_dept_mtrl")
+@KeySequence("bse_dept_mtrl_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+/**
+* 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO
+*/
+public class DepartmentMaterialDO extends BaseDO {
+
+
+
+ /**
+ * 主键ID
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ private Long id;
+ /**
+ * 部门ID
+ */
+ @TableField("DEPT_ID")
+ private Long deptId;
+ /**
+ * 物料信息ID
+ */
+ @TableField("INF_ID")
+ private Long infomationId;
+ /**
+ * 物料分类ID
+ */
+ @TableField("CLS_ID")
+ private Long classesId;
+ /**
+ * 字典数据值-物料类型
+ */
+ @TableField("DIC_DAT_VAL")
+ private String dictionaryDataValue;
+ /**
+ * 备注
+ */
+ @TableField("RMK")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/materialclasses/MaterialClassesDO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/materialclasses/MaterialClassesDO.java
new file mode 100644
index 0000000..fbf13b7
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/materialclasses/MaterialClassesDO.java
@@ -0,0 +1,60 @@
+package com.zt.plat.module.base.dal.dataobject.materialclasses;
+
+import lombok.*;
+import java.util.*;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import com.zt.plat.framework.mybatis.core.dataobject.BaseDO;
+/**
+* 物料分类 DO
+*
+* @author 后台管理-1
+*/
+@TableName("bse_mtrl_cls")
+@KeySequence("bse_mtrl_cls_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+/**
+* 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO
+*/
+public class MaterialClassesDO extends BaseDO {
+
+
+
+ /**
+ * 主键ID
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ private Long id;
+ /**
+ * 父级ID
+ */
+ @TableField("PRN_ID")
+ private Long parentId;
+ /**
+ * 分类编码
+ */
+ @TableField("CD")
+ private String code;
+ /**
+ * 分类名称
+ */
+ @TableField("NAME")
+ private String name;
+ /**
+ * 分类级别-用于类别层级(大/中/小类)
+ */
+ @TableField("LVL")
+ private Long level;
+ /**
+ * 备注
+ */
+ @TableField("RMK")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/materialhasclasses/MaterialHasClassesDO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/materialhasclasses/MaterialHasClassesDO.java
new file mode 100644
index 0000000..8bd7cee
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/materialhasclasses/MaterialHasClassesDO.java
@@ -0,0 +1,45 @@
+package com.zt.plat.module.base.dal.dataobject.materialhasclasses;
+
+import lombok.*;
+import java.util.*;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import com.zt.plat.framework.mybatis.core.dataobject.BaseDO;
+/**
+* 物料持有分类 DO
+*
+* @author 后台管理-1
+*/
+@TableName("bse_mtrl_hs_cls")
+@KeySequence("bse_mtrl_hs_cls_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+/**
+* 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO
+*/
+public class MaterialHasClassesDO extends BaseDO {
+
+
+
+ /**
+ * 主键ID
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ private Long id;
+ /**
+ * 物料信息ID
+ */
+ @TableField("INF_ID")
+ private Long infomationId;
+ /**
+ * 分类ID
+ */
+ @TableField("CLS_ID")
+ private Long classesId;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/materialhasproperties/MaterialHasPropertiesDO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/materialhasproperties/MaterialHasPropertiesDO.java
new file mode 100644
index 0000000..8eccb9a
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/materialhasproperties/MaterialHasPropertiesDO.java
@@ -0,0 +1,70 @@
+package com.zt.plat.module.base.dal.dataobject.materialhasproperties;
+
+import lombok.*;
+import java.util.*;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import com.zt.plat.framework.mybatis.core.dataobject.BaseDO;
+/**
+* 物料持有属性 DO
+*
+* @author 后台管理-1
+*/
+@TableName("bse_mtrl_hs_prps")
+@KeySequence("bse_mtrl_hs_prps_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+/**
+* 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO
+*/
+public class MaterialHasPropertiesDO extends BaseDO {
+
+
+
+ /**
+ * 主键ID
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ private Long id;
+ /**
+ * 物料信息ID
+ */
+ @TableField("INF_ID")
+ private Long infomationId;
+ /**
+ * 属性ID
+ */
+ @TableField("PRPS_ID")
+ private Long propertiesId;
+ /**
+ * 计量单位ID-默认计量单位
+ */
+ @TableField("UNT_ID")
+ private Long unitId;
+ /**
+ * 属性值
+ */
+ @TableField("VAL")
+ private String value;
+ /**
+ * 是否关键属性-关键属性表示物料唯一性
+ */
+ @TableField("IS_KY")
+ private Integer isKey;
+ /**
+ * 是否计量定价
+ */
+ @TableField("IS_MTNG")
+ private Integer isMetering;
+ /**
+ * 排序号
+ */
+ @TableField("SRT")
+ private Long sort;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/materialproperties/MaterialPropertiesDO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/materialproperties/MaterialPropertiesDO.java
new file mode 100644
index 0000000..a075eeb
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/materialproperties/MaterialPropertiesDO.java
@@ -0,0 +1,65 @@
+package com.zt.plat.module.base.dal.dataobject.materialproperties;
+
+import lombok.*;
+import java.util.*;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import com.zt.plat.framework.mybatis.core.dataobject.BaseDO;
+/**
+* 物料属性 DO
+*
+* @author 后台管理-1
+*/
+@TableName("bse_mtrl_prps")
+@KeySequence("bse_mtrl_prps_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+/**
+* 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO
+*/
+public class MaterialPropertiesDO extends BaseDO {
+
+
+
+ /**
+ * 主键ID
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ private Long id;
+ /**
+ * 属性编码
+ */
+ @TableField("CD")
+ private String code;
+ /**
+ * 属性名称
+ */
+ @TableField("NAME")
+ private String name;
+ /**
+ * 计量单位量ID
+ */
+ @TableField("UNT_QTY_ID")
+ private Long unitQuantityId;
+ /**
+ * 业务字典数据值
+ */
+ @TableField("DIC_DAT_VAL")
+ private String dictionaryDataValue;
+ /**
+ * 数据类型
+ */
+ @TableField("DAT_TP")
+ private String dataType;
+ /**
+ * 备注
+ */
+ @TableField("RMK")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/processinginfomation/ProcessingInfomationDO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/processinginfomation/ProcessingInfomationDO.java
new file mode 100644
index 0000000..45c196a
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/processinginfomation/ProcessingInfomationDO.java
@@ -0,0 +1,76 @@
+package com.zt.plat.module.base.dal.dataobject.processinginfomation;
+
+import lombok.*;
+import java.util.*;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import com.zt.plat.framework.mybatis.core.dataobject.BaseDO;
+/**
+* 工艺信息 DO
+*
+* @author 后台管理-1
+*/
+@TableName("bse_proc_inf")
+@KeySequence("bse_proc_inf_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+/**
+* 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO
+*/
+public class ProcessingInfomationDO extends BaseDO {
+
+
+
+ /**
+ * 主键ID
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ private Long id;
+ /**
+ * 父级ID
+ */
+ @TableField("PRN_ID")
+ private Long parentId;
+ /**
+ * 工艺编码-唯一业务键
+ */
+ @TableField("CD")
+ private String code;
+ /**
+ * 工艺名称
+ */
+ @TableField("NAME")
+ private String name;
+ /**
+ * 工艺类型值
+ */
+ @TableField("TP_VAL")
+ private Long typeValue;
+ /**
+ * 状态值-工艺状态
+ */
+ @TableField("STS_VAL")
+ private String statusValue;
+ /**
+ * 工艺描述
+ */
+ @TableField("DSP")
+ private String description;
+ /**
+ * 部门ID
+ */
+ @TableField("DEPT_ID")
+ private Long deptId;
+ /**
+ * 生效日期
+ */
+ @TableField("EFCT_DT")
+ private LocalDateTime effectiveDate;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/processinginfomationoperation/ProcessingInfomationOperationDO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/processinginfomationoperation/ProcessingInfomationOperationDO.java
new file mode 100644
index 0000000..1710df1
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/processinginfomationoperation/ProcessingInfomationOperationDO.java
@@ -0,0 +1,60 @@
+package com.zt.plat.module.base.dal.dataobject.processinginfomationoperation;
+
+import lombok.*;
+import java.util.*;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import com.zt.plat.framework.mybatis.core.dataobject.BaseDO;
+/**
+* 工艺工序 DO
+*
+* @author 后台管理-1
+*/
+@TableName("bse_proc_inf_optn")
+@KeySequence("bse_proc_inf_optn_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+/**
+* 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO
+*/
+public class ProcessingInfomationOperationDO extends BaseDO {
+
+
+
+ /**
+ * 主键ID
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ private Long id;
+ /**
+ * 前序工序ID
+ */
+ @TableField("PRE_OPTN_ID")
+ private Long previousOperationId;
+ /**
+ * 后续工序ID
+ */
+ @TableField("NXT_OPTN_ID")
+ private Long nextOperationId;
+ /**
+ * 工艺ID
+ */
+ @TableField("PROC_ID")
+ private Long processingId;
+ /**
+ * 是否关键工序
+ */
+ @TableField("IS_KY")
+ private Integer isKey;
+ /**
+ * 备注
+ */
+ @TableField("RMK")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/processingoperation/ProcessingOperationDO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/processingoperation/ProcessingOperationDO.java
new file mode 100644
index 0000000..be78b17
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/processingoperation/ProcessingOperationDO.java
@@ -0,0 +1,60 @@
+package com.zt.plat.module.base.dal.dataobject.processingoperation;
+
+import lombok.*;
+import java.util.*;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import com.zt.plat.framework.mybatis.core.dataobject.BaseDO;
+/**
+* 工序 DO
+*
+* @author 后台管理-1
+*/
+@TableName("bse_proc_optn")
+@KeySequence("bse_proc_optn_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+/**
+* 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO
+*/
+public class ProcessingOperationDO extends BaseDO {
+
+
+
+ /**
+ * 主键ID
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ private Long id;
+ /**
+ * 工序编码
+ */
+ @TableField("CD")
+ private String code;
+ /**
+ * 工序名称
+ */
+ @TableField("NAME")
+ private String name;
+ /**
+ * 排序号
+ */
+ @TableField("SRT")
+ private Long sort;
+ /**
+ * 类型值-工序类型
+ */
+ @TableField("TP_VAL")
+ private String typeValue;
+ /**
+ * 备注
+ */
+ @TableField("RMK")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/processingoperationmaterial/ProcessingOperationMaterialDO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/processingoperationmaterial/ProcessingOperationMaterialDO.java
new file mode 100644
index 0000000..e1447cd
--- /dev/null
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/dataobject/processingoperationmaterial/ProcessingOperationMaterialDO.java
@@ -0,0 +1,58 @@
+package com.zt.plat.module.base.dal.dataobject.processingoperationmaterial;
+
+import lombok.*;
+import java.util.*;
+ import java.time.LocalDateTime;
+ import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import com.zt.plat.framework.mybatis.core.dataobject.BaseDO;
+/**
+* 工艺工序物料 DO
+*
+* @author 后台管理-1
+*/
+@TableName("bse_proc_optn_mtrl")
+@KeySequence("bse_proc_optn_mtrl_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+/**
+* 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO
+*/
+public class ProcessingOperationMaterialDO extends BaseDO {
+
+
+
+ /**
+ * 主键ID
+ */
+ @TableId(type = IdType.ASSIGN_ID)
+ private Long id;
+ /**
+ * 工艺工序ID
+ */
+ private Long processingOperationId;
+ /**
+ * 物料ID
+ */
+ private Long materialId;
+ /**
+ * 类型值-物料类型(产出/投入)
+ */
+ @TableField("TP_VAL")
+ private String typeValue;
+ /**
+ * 备注
+ */
+ @TableField("RMK")
+ private String remark;
+ /**
+ * 组织机构
+ */
+ @TableField("DEPT_IDS")
+ private String departmentIds;
+
+}
\ No newline at end of file
diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/base/MaterialInfomationMapper.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/base/MaterialInfomationMapper.java
index 2e353cb..e0c41fd 100644
--- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/base/MaterialInfomationMapper.java
+++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/base/MaterialInfomationMapper.java
@@ -7,6 +7,8 @@ import com.zt.plat.module.base.controller.admin.base.vo.MaterialInfomationPageRe
import com.zt.plat.module.base.dal.dataobject.base.MaterialInfomationDO;
import org.apache.ibatis.annotations.Mapper;
+import java.util.Collection;
+
/**
* 物料信息 Mapper
*
@@ -16,11 +18,16 @@ import org.apache.ibatis.annotations.Mapper;
public interface MaterialInfomationMapper extends BaseMapperX {
default PageResult selectPage(MaterialInfomationPageReqVO reqVO) {
- return selectPage(reqVO, new LambdaQueryWrapperX