diff --git a/base-server/pom.xml b/base-server/pom.xml
index 57b02722..2e6583c8 100644
--- a/base-server/pom.xml
+++ b/base-server/pom.xml
@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
cn.iocoder.cloud
- yudao
+ dsc-base
${revision}
4.0.0
@@ -35,6 +35,11 @@
yudao-module-contract-order-server
${revision}
+
+ cn.iocoder.cloud
+ yudao-module-erp-server
+ ${revision}
+
diff --git a/base-server/src/main/resources/application-dev.yml b/base-server/src/main/resources/application-dev.yml
index 30abeecd..210b907a 100644
--- a/base-server/src/main/resources/application-dev.yml
+++ b/base-server/src/main/resources/application-dev.yml
@@ -105,3 +105,7 @@ justauth:
prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE::
timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟
+erp:
+ address: hana-dev.yncic.com
+ sapsys: ZTDEV203
+
diff --git a/pom.xml b/pom.xml
index 24d62d42..a7260d61 100644
--- a/pom.xml
+++ b/pom.xml
@@ -239,7 +239,7 @@
Spring Snapshots
https://repo.spring.io/snapshot
- false
+ true
@@ -298,9 +298,9 @@
- chenbowen
+ liss
- chenbowen
+ liss
diff --git a/yudao-module-base/pom.xml b/yudao-module-base/pom.xml
index 4f19e9c1..cc4b2ae4 100644
--- a/yudao-module-base/pom.xml
+++ b/yudao-module-base/pom.xml
@@ -3,7 +3,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- yudao
+ dsc-base
cn.iocoder.cloud
${revision}
diff --git a/yudao-module-base/yudao-module-base-api/src/main/java/cn/iocoder/yudao/module/tmpltp/enums/ErrorCodeConstants.java b/yudao-module-base/yudao-module-base-api/src/main/java/cn/iocoder/yudao/module/tmpltp/enums/ErrorCodeConstants.java
new file mode 100644
index 00000000..0a35a797
--- /dev/null
+++ b/yudao-module-base/yudao-module-base-api/src/main/java/cn/iocoder/yudao/module/tmpltp/enums/ErrorCodeConstants.java
@@ -0,0 +1,24 @@
+package cn.iocoder.yudao.module.tmpltp.enums;
+
+import cn.iocoder.yudao.framework.common.exception.ErrorCode;
+
+public interface ErrorCodeConstants {
+
+ // ========== 示例模块 1-001-000-000 ==========
+ ErrorCode TMPL_TP_NOT_EXISTS = new ErrorCode(1_027_000_500, "模板分类不存在");
+ ErrorCode TMPL_FLD_NOT_EXISTS = new ErrorCode(1_027_000_501, "模板字段不存在");
+ ErrorCode TMPL_FLD_CODE_EXISTS = new ErrorCode(1_027_000_502, "字段编码已存在");
+ ErrorCode TMPL_ITM_NOT_EXISTS = new ErrorCode(1_027_000_503, "模板条款不存在");
+ ErrorCode TEMPLATE_INSTANCE_NOT_EXISTS = new ErrorCode(1_027_000_504, "模板实例不存在");
+ ErrorCode TMPL_TP_SATUS_ERROR = new ErrorCode(1_027_000_506, "状态变更失败");
+ ErrorCode TMPL_TP_DEl_ERROR = new ErrorCode(1_027_000_507, "模版分类删除失败");
+ ErrorCode TEMPLATE_INSTANCE_DATA_NOT_EXISTS = new ErrorCode(1_027_000_508, "实例字段值不存在");
+ ErrorCode TEMPLATE_INSTANCE_ITEM_NOT_EXISTS = new ErrorCode(1_027_000_509, "实例条款值不存在");
+ ErrorCode PARAMS_IS_NULL_OR_ERR = new ErrorCode(1_027_000_510, "参数为空");
+ ErrorCode DEPARTMENT_INSTANCE_RELATIVITY_NOT_EXISTS = new ErrorCode(1_027_000_511, "部门与实例关联不存在");
+ ErrorCode ILLEGAL_OPERATION_TYPE = new ErrorCode(1_027_000_511, "非法操作类型");
+ ErrorCode OPERATION_FAIL= new ErrorCode(1_027_000_512, "操作失败");
+
+ //Illegal operation type
+}
+
diff --git a/yudao-module-base/yudao-module-base-api/src/main/java/cn/iocoder/yudao/module/tmpltp/enums/StatusEnum.java b/yudao-module-base/yudao-module-base-api/src/main/java/cn/iocoder/yudao/module/tmpltp/enums/StatusEnum.java
new file mode 100644
index 00000000..b586a7fc
--- /dev/null
+++ b/yudao-module-base/yudao-module-base-api/src/main/java/cn/iocoder/yudao/module/tmpltp/enums/StatusEnum.java
@@ -0,0 +1,50 @@
+package cn.iocoder.yudao.module.tmpltp.enums;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * 状态枚举类,定义所有可能的状态及合法的状态转换
+ */
+public enum StatusEnum {
+ // 定义所有状态及对应的合法转换目标状态
+ STATUS_1("1", new HashSet() {{
+ add("2");
+ add("4");
+ }}),
+ STATUS_2("2", new HashSet() {{
+ add("3");
+ }}),
+ STATUS_3("3", new HashSet() {{
+ add("4");
+ add("2");
+ }}),
+ STATUS_4("4", new HashSet<>()); // 没有合法的转换目标
+
+ private final String code;
+ private final Set allowedTransitions;
+
+ StatusEnum(String code, Set allowedTransitions) {
+ this.code = code;
+ this.allowedTransitions = allowedTransitions;
+ }
+
+ /**
+ * 根据状态码获取对应的枚举实例
+ */
+ public static StatusEnum fromCode(String code) {
+ for (StatusEnum status : values()) {
+ if (status.code.equals(code)) {
+ return status;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * 校验状态转换是否合法
+ */
+ public boolean isTransitionAllowed(String targetStatus) {
+ return allowedTransitions.contains(targetStatus);
+ }
+}
diff --git a/yudao-module-base/yudao-module-base-server/src/main/java/cn/iocoder/yudao/module/base/BaseServerApplication.java b/yudao-module-base/yudao-module-base-server/src/main/java/cn/iocoder/yudao/module/base/BaseServerApplication.java
index ae3a3835..4a2f1314 100644
--- a/yudao-module-base/yudao-module-base-server/src/main/java/cn/iocoder/yudao/module/base/BaseServerApplication.java
+++ b/yudao-module-base/yudao-module-base-server/src/main/java/cn/iocoder/yudao/module/base/BaseServerApplication.java
@@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.base;
import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* Base 模块的启动类
diff --git a/yudao-module-base/yudao-module-base-server/src/main/java/cn/iocoder/yudao/module/base/controller/admin/base/BaseTestController.java b/yudao-module-base/yudao-module-base-server/src/main/java/cn/iocoder/yudao/module/base/controller/admin/base/BaseTestController.java
index 3de680cb..b8d13757 100644
--- a/yudao-module-base/yudao-module-base-server/src/main/java/cn/iocoder/yudao/module/base/controller/admin/base/BaseTestController.java
+++ b/yudao-module-base/yudao-module-base-server/src/main/java/cn/iocoder/yudao/module/base/controller/admin/base/BaseTestController.java
@@ -1,12 +1,13 @@
package cn.iocoder.yudao.module.base.controller.admin.base;
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
/**
diff --git a/yudao-module-base/yudao-module-base-server/src/main/java/cn/iocoder/yudao/module/base/controller/admin/templtp/DepartmentInstanceRelativityController.java b/yudao-module-base/yudao-module-base-server/src/main/java/cn/iocoder/yudao/module/base/controller/admin/templtp/DepartmentInstanceRelativityController.java
new file mode 100644
index 00000000..1a0ff72c
--- /dev/null
+++ b/yudao-module-base/yudao-module-base-server/src/main/java/cn/iocoder/yudao/module/base/controller/admin/templtp/DepartmentInstanceRelativityController.java
@@ -0,0 +1,120 @@
+package cn.iocoder.yudao.module.base.controller.admin.templtp;
+
+import cn.iocoder.yudao.module.base.controller.admin.templtp.vo.DepartmentInstanceRelativityPageReqVO;
+import cn.iocoder.yudao.module.base.controller.admin.templtp.vo.DepartmentInstanceRelativityRespVO;
+import cn.iocoder.yudao.module.base.controller.admin.templtp.vo.DepartmentInstanceRelativitySaveReqVO;
+import cn.iocoder.yudao.module.base.dal.dataobject.tmpltp.DepartmentInstanceRelativityDO;
+import cn.iocoder.yudao.module.base.service.tmpltp.DepartmentInstanceRelativityService;
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import cn.iocoder.yudao.framework.business.interceptor.BusinessControllerMarker;
+import cn.iocoder.yudao.framework.business.annotation.FileUploadController;
+import cn.iocoder.yudao.framework.business.controller.AbstractFileUploadController;
+
+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 cn.iocoder.yudao.framework.common.pojo.vo.BatchDeleteReqVO;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+
+
+@Tag(name = "管理后台 - 部门与实例关联")
+@RestController
+@RequestMapping("/bse/department-instance-relativity")
+@Validated
+@FileUploadController(source = "bse.departmentinstancerelativity")
+public class DepartmentInstanceRelativityController extends AbstractFileUploadController implements BusinessControllerMarker{
+
+ static {
+ FileUploadController annotation = DepartmentInstanceRelativityController.class.getAnnotation(FileUploadController.class);
+ if (annotation != null) {
+ setFileUploadInfo(annotation);
+ }
+ }
+
+ @Resource
+ private DepartmentInstanceRelativityService departmentInstanceRelativityService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建部门与实例关联")
+ @PreAuthorize("@ss.hasPermission('bse:department-instance-relativity:create')")
+ public CommonResult createDepartmentInstanceRelativity(@Valid @RequestBody DepartmentInstanceRelativitySaveReqVO createReqVO) {
+ return success(departmentInstanceRelativityService.createDepartmentInstanceRelativity(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新部门与实例关联")
+ @PreAuthorize("@ss.hasPermission('bse:department-instance-relativity:update')")
+ public CommonResult updateDepartmentInstanceRelativity(@Valid @RequestBody DepartmentInstanceRelativitySaveReqVO updateReqVO) {
+ departmentInstanceRelativityService.updateDepartmentInstanceRelativity(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除部门与实例关联")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('bse:department-instance-relativity:delete')")
+ public CommonResult deleteDepartmentInstanceRelativity(@RequestParam("id") String id) {
+ departmentInstanceRelativityService.deleteDepartmentInstanceRelativity(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除部门与实例关联")
+ @PreAuthorize("@ss.hasPermission('bse:department-instance-relativity:delete')")
+ public CommonResult deleteDepartmentInstanceRelativityList(@RequestBody BatchDeleteReqVO req) {
+ departmentInstanceRelativityService.deleteDepartmentInstanceRelativityListByIds(req.getIds());
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得部门与实例关联")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('bse:department-instance-relativity:query')")
+ public CommonResult getDepartmentInstanceRelativity(@RequestParam("id") String id) {
+ DepartmentInstanceRelativityDO departmentInstanceRelativity = departmentInstanceRelativityService.getDepartmentInstanceRelativity(id);
+ return success(BeanUtils.toBean(departmentInstanceRelativity, DepartmentInstanceRelativityRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得部门与实例关联分页")
+ @PreAuthorize("@ss.hasPermission('bse:department-instance-relativity:query')")
+ public CommonResult> getDepartmentInstanceRelativityPage(@Valid DepartmentInstanceRelativityPageReqVO pageReqVO) {
+ PageResult pageResult = departmentInstanceRelativityService.getDepartmentInstanceRelativityPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, DepartmentInstanceRelativityRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出部门与实例关联 Excel")
+ @PreAuthorize("@ss.hasPermission('bse:department-instance-relativity:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportDepartmentInstanceRelativityExcel(@Valid DepartmentInstanceRelativityPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = departmentInstanceRelativityService.getDepartmentInstanceRelativityPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "部门与实例关联.xls", "数据", DepartmentInstanceRelativityRespVO.class,
+ BeanUtils.toBean(list, DepartmentInstanceRelativityRespVO.class));
+ }
+
+}
diff --git a/yudao-module-base/yudao-module-base-server/src/main/java/cn/iocoder/yudao/module/base/controller/admin/templtp/TemplateInstanceController.java b/yudao-module-base/yudao-module-base-server/src/main/java/cn/iocoder/yudao/module/base/controller/admin/templtp/TemplateInstanceController.java
new file mode 100644
index 00000000..1de132fe
--- /dev/null
+++ b/yudao-module-base/yudao-module-base-server/src/main/java/cn/iocoder/yudao/module/base/controller/admin/templtp/TemplateInstanceController.java
@@ -0,0 +1,138 @@
+package cn.iocoder.yudao.module.base.controller.admin.templtp;
+
+import cn.hutool.core.io.IoUtil;
+import cn.iocoder.yudao.module.base.controller.admin.templtp.vo.TemplateInstancePageReqVO;
+import cn.iocoder.yudao.module.base.controller.admin.templtp.vo.TemplateInstanceRespVO;
+import cn.iocoder.yudao.module.base.controller.admin.templtp.vo.TemplateInstanceSaveReqVO;
+import cn.iocoder.yudao.module.base.dal.dataobject.tmpltp.TemplateInstanceDO;
+import cn.iocoder.yudao.module.base.service.tmpltp.TemplateInstanceService;
+import cn.iocoder.yudao.module.infra.api.file.FileApi;
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import cn.iocoder.yudao.framework.business.annotation.FileUploadController;
+import cn.iocoder.yudao.framework.business.controller.AbstractFileUploadController;
+
+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 cn.iocoder.yudao.framework.common.pojo.vo.BatchDeleteReqVO;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import org.springframework.web.multipart.MultipartFile;
+
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+
+
+@Tag(name = "管理后台 - 模板实例")
+@RestController
+@RequestMapping("/base/template-instance")
+@Validated
+@FileUploadController(source = "bse.templateinstance")
+public class TemplateInstanceController extends AbstractFileUploadController {
+
+ static {
+ FileUploadController annotation = TemplateInstanceController.class.getAnnotation(FileUploadController.class);
+ if (annotation != null) {
+ setFileUploadInfo(annotation);
+ }
+ }
+
+ @Resource
+ private TemplateInstanceService templateInstanceService;
+
+ @Resource
+ private FileApi fileApi;
+
+// @PostMapping("/upload-file")
+// @Operation(summary = "上传模板实例文件")
+// public CommonResult