feat:新增文档模板管理功能

This commit is contained in:
hewencai
2025-10-29 10:57:45 +08:00
parent 3ef662e1ec
commit 66845dcfab
41 changed files with 2440 additions and 0 deletions

View File

@@ -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<Long> createTemplateCategory(@Valid @RequestBody DocTemplateCategorySaveReqVO createReqVO) {
return success(templateCategoryService.createTemplateCategory(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新模板分类")
@PreAuthorize("@ss.hasPermission('base:template-category:update')")
public CommonResult<Boolean> 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<Boolean> 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<DocTemplateCategoryRespVO> getTemplateCategory(@RequestParam("id") Long id) {
return success(templateCategoryService.getTemplateCategory(id));
}
@GetMapping("/page")
@Operation(summary = "获得模板分类分页")
@PreAuthorize("@ss.hasPermission('base:template-category:query')")
public CommonResult<PageResult<DocTemplateCategoryRespVO>> getTemplateCategoryPage(@Valid DocTemplateCategoryPageReqVO pageReqVO) {
return success(templateCategoryService.getTemplateCategoryPage(pageReqVO));
}
@GetMapping("/list")
@Operation(summary = "获得模板分类列表")
@PreAuthorize("@ss.hasPermission('base:template-category:query')")
public CommonResult<List<DocTemplateCategoryRespVO>> getTemplateCategoryList() {
return success(templateCategoryService.getTemplateCategoryList());
}
@GetMapping("/tree")
@Operation(summary = "获得模板分类树形结构")
@PreAuthorize("@ss.hasPermission('base:template-category:query')")
public CommonResult<List<DocTemplateCategoryRespVO>> getTemplateCategoryTree() {
return success(templateCategoryService.buildTree());
}
}

View File

@@ -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<Long> createTemplate(@Valid @RequestBody DocTemplateSaveReqVO createReqVO) {
return success(templateService.createTemplate(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新模板")
@PreAuthorize("@ss.hasPermission('base:template:update')")
public CommonResult<Boolean> 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<Boolean> 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<DocTemplateRespVO> getTemplate(@RequestParam("id") Long id) {
return success(templateService.getTemplate(id));
}
@GetMapping("/page")
@Operation(summary = "获得模板分页")
@PreAuthorize("@ss.hasPermission('base:template:query')")
public CommonResult<PageResult<DocTemplateRespVO>> getTemplatePage(@Valid DocTemplatePageReqVO pageReqVO) {
return success(templateService.getTemplatePage(pageReqVO));
}
@GetMapping("/list")
@Operation(summary = "获得模板列表")
@PreAuthorize("@ss.hasPermission('base:template:query')")
public CommonResult<List<DocTemplateRespVO>> getTemplateList() {
return success(templateService.getTemplateList());
}
}

View File

@@ -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<Long> createTemplateInstance(@Valid @RequestBody DocTemplateInstanceSaveReqVO createReqVO) {
return success(templateInstanceService.createTemplateInstance(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新模板实例")
@PreAuthorize("@ss.hasPermission('base:template-instance:update')")
public CommonResult<Boolean> 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<Boolean> 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<DocTemplateInstanceRespVO> getTemplateInstance(@RequestParam("id") Long id) {
return success(templateInstanceService.getTemplateInstance(id));
}
@GetMapping("/page")
@Operation(summary = "获得模板实例分页")
@PreAuthorize("@ss.hasPermission('base:template-instance:query')")
public CommonResult<PageResult<DocTemplateInstanceRespVO>> getTemplateInstancePage(@Valid DocTemplateInstancePageReqVO pageReqVO) {
return success(templateInstanceService.getTemplateInstancePage(pageReqVO));
}
@GetMapping("/list")
@Operation(summary = "获得模板实例列表")
@PreAuthorize("@ss.hasPermission('base:template-instance:query')")
public CommonResult<List<DocTemplateInstanceRespVO>> getTemplateInstanceList() {
return success(templateInstanceService.getTemplateInstanceList());
}
@PostMapping("/render")
@Operation(summary = "渲染模板实例")
@PreAuthorize("@ss.hasPermission('base:template-instance:query')")
public CommonResult<String> renderTemplateInstance(
@Parameter(name = "instanceId", description = "实例ID", required = true) @RequestParam("instanceId") Long instanceId,
@Parameter(name = "dataMap", description = "数据Map") @RequestBody(required = false) Map<String, Object> 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<Boolean> renderAndSaveTemplateInstance(
@Parameter(name = "instanceId", description = "实例ID", required = true) @RequestParam("instanceId") Long instanceId,
@Parameter(name = "dataMap", description = "数据Map", required = true) @RequestBody Map<String, Object> dataMap) {
renderService.renderAndSave(instanceId, dataMap);
return success(true);
}
}

View File

@@ -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<Long> createTemplateTag(@Valid @RequestBody DocTemplateTagSaveReqVO createReqVO) {
return success(templateTagService.createTemplateTag(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新标签")
@PreAuthorize("@ss.hasPermission('base:template-tag:update')")
public CommonResult<Boolean> 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<Boolean> 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<DocTemplateTagRespVO> getTemplateTag(@RequestParam("id") Long id) {
return success(templateTagService.getTemplateTag(id));
}
@GetMapping("/page")
@Operation(summary = "获得标签分页")
@PreAuthorize("@ss.hasPermission('base:template-tag:query')")
public CommonResult<PageResult<DocTemplateTagRespVO>> getTemplateTagPage(@Valid DocTemplateTagPageReqVO pageReqVO) {
return success(templateTagService.getTemplateTagPage(pageReqVO));
}
@GetMapping("/list")
@Operation(summary = "获得标签列表")
@PreAuthorize("@ss.hasPermission('base:template-tag:query')")
public CommonResult<List<DocTemplateTagRespVO>> getTemplateTagList() {
return success(templateTagService.getTemplateTagList());
}
}

View File

@@ -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;
}

View File

@@ -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<DocTemplateCategoryRespVO> children;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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<DocTemplateCategoryRespVO> convertList(List<DocTemplateCategoryDO> list);
PageResult<DocTemplateCategoryRespVO> convertPage(PageResult<DocTemplateCategoryDO> page);
}

View File

@@ -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<DocTemplateRespVO> convertList(List<DocTemplateDO> list);
PageResult<DocTemplateRespVO> convertPage(PageResult<DocTemplateDO> page);
}

View File

@@ -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<DocTemplateInstanceRespVO> convertList(List<DocTemplateInstanceDO> list);
PageResult<DocTemplateInstanceRespVO> convertPage(PageResult<DocTemplateInstanceDO> page);
}

View File

@@ -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<DocTemplateTagRespVO> convertList(List<DocTemplateTagDO> list);
PageResult<DocTemplateTagRespVO> convertPage(PageResult<DocTemplateTagDO> page);
}

View File

@@ -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<DocTemplateCategoryDO> {
default PageResult<DocTemplateCategoryDO> selectPage(DocTemplateCategoryPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<DocTemplateCategoryDO>()
.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));
}
}

View File

@@ -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<DocTemplateInstanceDO> {
default PageResult<DocTemplateInstanceDO> selectPage(DocTemplateInstancePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<DocTemplateInstanceDO>()
.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));
}
}

View File

@@ -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<DocTemplateDO> {
default PageResult<DocTemplateDO> selectPage(DocTemplatePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<DocTemplateDO>()
.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));
}
}

View File

@@ -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<DocTemplateTagDO> {
default PageResult<DocTemplateTagDO> selectPage(DocTemplateTagPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<DocTemplateTagDO>()
.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));
}
}

View File

@@ -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;
/**
* 父分类IDNULL=大类)
*/
@TableField("parent_id")
private Long parentId;
/**
* 层级1=大类2=小类)
*/
@TableField("level")
private Integer level;
/**
* 排序号
*/
@TableField("sort")
private Integer sort;
/**
* 备注
*/
@TableField("remark")
private String remark;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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<DocTemplateCategoryRespVO> getTemplateCategoryPage(DocTemplateCategoryPageReqVO pageReqVO);
/**
* 获得模板分类列表
*
* @return 模板分类列表
*/
List<DocTemplateCategoryRespVO> getTemplateCategoryList();
/**
* 获得模板分类树形结构
*
* @return 模板分类树
*/
List<DocTemplateCategoryRespVO> buildTree();
/**
* 获得分类完整路径(包含所有父级)
*
* @param categoryId 分类ID
* @return 分类路径,用"/"分隔,如"合同管理/销售合同"
*/
String getCategoryFullPath(Long categoryId);
}

View File

@@ -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<DocTemplateCategoryRespVO> getTemplateCategoryPage(DocTemplateCategoryPageReqVO pageReqVO) {
PageResult<DocTemplateCategoryDO> pageResult = templateCategoryMapper.selectPage(pageReqVO);
return DocTemplateCategoryConvert.INSTANCE.convertPage(pageResult);
}
@Override
public List<DocTemplateCategoryRespVO> getTemplateCategoryList() {
List<DocTemplateCategoryDO> list = templateCategoryMapper.selectList();
return DocTemplateCategoryConvert.INSTANCE.convertList(list);
}
@Override
public List<DocTemplateCategoryRespVO> buildTree() {
// 1. 查询所有分类数据
List<DocTemplateCategoryDO> allCategories = templateCategoryMapper.selectList();
// 2. 转换为 VO
List<DocTemplateCategoryRespVO> categoryVOs = DocTemplateCategoryConvert.INSTANCE.convertList(allCategories);
// 3. 构建树形结构
return buildTreeStructure(categoryVOs);
}
/**
* 构建树形结构
*/
private List<DocTemplateCategoryRespVO> buildTreeStructure(List<DocTemplateCategoryRespVO> categories) {
// 1. 按 parentId 分组
Map<String, List<DocTemplateCategoryRespVO>> groupByParentId = categories.stream()
.collect(Collectors.groupingBy(node ->
node.getParentId() != null ? node.getParentId().toString() : "null"));
// 2. 设置子节点并排序
categories.forEach(node -> {
List<DocTemplateCategoryRespVO> 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<DocTemplateCategoryRespVO> 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<String> 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);
}
}

View File

@@ -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<DocTemplateInstanceRespVO> getTemplateInstancePage(DocTemplateInstancePageReqVO pageReqVO);
/**
* 获得模板实例列表
*
* @return 模板实例列表
*/
List<DocTemplateInstanceRespVO> getTemplateInstanceList();
}

View File

@@ -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<DocTemplateInstanceDO>()
.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<DocTemplateInstanceRespVO> getTemplateInstancePage(DocTemplateInstancePageReqVO pageReqVO) {
PageResult<DocTemplateInstanceDO> pageResult = docTemplateInstanceMapper.selectPage(pageReqVO);
return DocTemplateInstanceConvert.INSTANCE.convertPage(pageResult);
}
@Override
public List<DocTemplateInstanceRespVO> getTemplateInstanceList() {
List<DocTemplateInstanceDO> list = docTemplateInstanceMapper.selectList();
return DocTemplateInstanceConvert.INSTANCE.convertList(list);
}
}

View File

@@ -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<String, Object> dataMap);
/**
* 渲染模板并保存到实例
*
* @param instanceId 实例ID
* @param dataMap 数据Map
*/
void renderAndSave(Long instanceId, Map<String, Object> dataMap);
}

View File

@@ -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<String, Object> 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<String, Object> 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;
}
}

View File

@@ -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<DocTemplateRespVO> getTemplatePage(DocTemplatePageReqVO pageReqVO);
/**
* 获得模板列表
*
* @return 模板列表
*/
List<DocTemplateRespVO> getTemplateList();
}

View File

@@ -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<DocTemplateDO>()
.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<DocTemplateRespVO> getTemplatePage(DocTemplatePageReqVO pageReqVO) {
PageResult<DocTemplateDO> pageResult = templateMapper.selectPage(pageReqVO);
return DocTemplateConvert.INSTANCE.convertPage(pageResult);
}
@Override
public List<DocTemplateRespVO> getTemplateList() {
List<DocTemplateDO> list = templateMapper.selectList();
return DocTemplateConvert.INSTANCE.convertList(list);
}
}

View File

@@ -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<DocTemplateTagRespVO> getTemplateTagPage(DocTemplateTagPageReqVO pageReqVO);
/**
* 获得标签列表
*
* @return 标签列表
*/
List<DocTemplateTagRespVO> getTemplateTagList();
}

View File

@@ -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<DocTemplateTagRespVO> getTemplateTagPage(DocTemplateTagPageReqVO pageReqVO) {
PageResult<DocTemplateTagDO> pageResult = templateTagMapper.selectPage(pageReqVO);
PageResult<DocTemplateTagRespVO> result = DocTemplateTagConvert.INSTANCE.convertPage(pageResult);
// 填充分类名称
result.getList().forEach(this::fillCategoryName);
return result;
}
@Override
public List<DocTemplateTagRespVO> getTemplateTagList() {
List<DocTemplateTagDO> list = templateTagMapper.selectList();
List<DocTemplateTagRespVO> 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);
}
}