diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-api/src/main/java/com/yunxi/scm/module/xxjj/enums/ErrorCodeConstants.java b/yunxi-module-xxjj/yunxi-module-xxjj-api/src/main/java/com/yunxi/scm/module/xxjj/enums/ErrorCodeConstants.java index c88e89c0..30fe6285 100644 --- a/yunxi-module-xxjj/yunxi-module-xxjj-api/src/main/java/com/yunxi/scm/module/xxjj/enums/ErrorCodeConstants.java +++ b/yunxi-module-xxjj/yunxi-module-xxjj-api/src/main/java/com/yunxi/scm/module/xxjj/enums/ErrorCodeConstants.java @@ -103,10 +103,17 @@ public interface ErrorCodeConstants { // ========== 合同信息 500100001 ========== ErrorCode CONTRACT_NOT_EXISTS = new ErrorCode(1005000001, "合同信息不存在"); - // ========== 合同详情信息 500100001 ========== ErrorCode CONTRACT_INFO_NOT_EXISTS = new ErrorCode(1005000002, "合同详情信息不存在"); + // ========== 合同条款 TODO 补充编号 ========== + ErrorCode CONTRACT_CLAUSE_NOT_EXISTS = new ErrorCode(1005000012, "合同条款不存在"); + + // ========== 合同模板 TODO 补充编号 ========== + ErrorCode CONTRACT_TEMPLATE_NOT_EXISTS = new ErrorCode(1005000013, "合同模板不存在"); + + + // ========== 主体负责人转移 TODO 补充编号 ========== ErrorCode SUBJECT_TRANSFER_NOT_EXISTS = new ErrorCode(1005000003, "主体负责人转移不存在"); diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contractclause/ContractClauseController.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contractclause/ContractClauseController.java new file mode 100644 index 00000000..1ae5d264 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contractclause/ContractClauseController.java @@ -0,0 +1,102 @@ +package com.yunxi.scm.module.xxjj.controller.admin.contractclause; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import com.yunxi.scm.framework.common.pojo.PageResult; +import com.yunxi.scm.framework.common.pojo.CommonResult; +import static com.yunxi.scm.framework.common.pojo.CommonResult.success; + +import com.yunxi.scm.framework.excel.core.util.ExcelUtils; + +import com.yunxi.scm.framework.operatelog.core.annotations.OperateLog; +import static com.yunxi.scm.framework.operatelog.core.enums.OperateTypeEnum.*; + +import com.yunxi.scm.module.xxjj.controller.admin.contractclause.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.contractclause.ContractClauseDO; +import com.yunxi.scm.module.xxjj.convert.contractclause.ContractClauseConvert; +import com.yunxi.scm.module.xxjj.service.contractclause.ContractClauseService; + +@Tag(name = "管理后台 - 合同条款") +@RestController +@RequestMapping("/xxjj/contract-clause") +@Validated +public class ContractClauseController { + + @Resource + private ContractClauseService contractClauseService; + + @PostMapping("/create") + @Operation(summary = "创建合同条款") + @PreAuthorize("@ss.hasPermission('xxjj:contract-clause:create')") + public CommonResult createContractClause(@Valid @RequestBody ContractClauseCreateReqVO createReqVO) { + return success(contractClauseService.createContractClause(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新合同条款") + @PreAuthorize("@ss.hasPermission('xxjj:contract-clause:update')") + public CommonResult updateContractClause(@Valid @RequestBody ContractClauseUpdateReqVO updateReqVO) { + contractClauseService.updateContractClause(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除合同条款") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('xxjj:contract-clause:delete')") + public CommonResult deleteContractClause(@RequestParam("id") Long id) { + contractClauseService.deleteContractClause(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得合同条款") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('xxjj:contract-clause:query')") + public CommonResult getContractClause(@RequestParam("id") Long id) { + ContractClauseDO contractClause = contractClauseService.getContractClause(id); + return success(ContractClauseConvert.INSTANCE.convert(contractClause)); + } + + @GetMapping("/list") + @Operation(summary = "获得合同条款列表") + @Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048") + @PreAuthorize("@ss.hasPermission('xxjj:contract-clause:query')") + public CommonResult> getContractClauseList(@RequestParam("ids") Collection ids) { + List list = contractClauseService.getContractClauseList(ids); + return success(ContractClauseConvert.INSTANCE.convertList(list)); + } + + @GetMapping("/page") + @Operation(summary = "获得合同条款分页") + @PreAuthorize("@ss.hasPermission('xxjj:contract-clause:query')") + public CommonResult> getContractClausePage(@Valid ContractClausePageReqVO pageVO) { + PageResult pageResult = contractClauseService.getContractClausePage(pageVO); + return success(ContractClauseConvert.INSTANCE.convertPage(pageResult)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出合同条款 Excel") + @PreAuthorize("@ss.hasPermission('xxjj:contract-clause:export')") + @OperateLog(type = EXPORT) + public void exportContractClauseExcel(@Valid ContractClauseExportReqVO exportReqVO, + HttpServletResponse response) throws IOException { + List list = contractClauseService.getContractClauseList(exportReqVO); + // 导出 Excel + List datas = ContractClauseConvert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "合同条款.xls", "数据", ContractClauseExcelVO.class, datas); + } + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contractclause/vo/ContractClauseBaseVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contractclause/vo/ContractClauseBaseVO.java new file mode 100644 index 00000000..914df047 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contractclause/vo/ContractClauseBaseVO.java @@ -0,0 +1,42 @@ +package com.yunxi.scm.module.xxjj.controller.admin.contractclause.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import javax.validation.constraints.*; + +/** + * 合同条款 Base VO,提供给添加、修改、详细的子 VO 使用 + * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 + */ +@Data +public class ContractClauseBaseVO { + + @Schema(description = "条款标题", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "条款标题不能为空") + private String title; + + @Schema(description = "条款类型 参考字典contract_clause_type", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "条款类型 参考字典contract_clause_type不能为空") + private String type; + + @Schema(description = "状态 参考字典contract_clause_status", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @NotNull(message = "状态 参考字典contract_clause_status不能为空") + private String status; + + @Schema(description = "条款内容", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "条款内容不能为空") + private String content; + + @Schema(description = "权重值") + private Short weight; + + @Schema(description = "备注", example = "随便") + private String remark; + + @Schema(description = "附件") + private String attachment; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contractclause/vo/ContractClauseCreateReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contractclause/vo/ContractClauseCreateReqVO.java new file mode 100644 index 00000000..8ba4b6cd --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contractclause/vo/ContractClauseCreateReqVO.java @@ -0,0 +1,14 @@ +package com.yunxi.scm.module.xxjj.controller.admin.contractclause.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 合同条款创建 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ContractClauseCreateReqVO extends ContractClauseBaseVO { + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contractclause/vo/ContractClauseExcelVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contractclause/vo/ContractClauseExcelVO.java new file mode 100644 index 00000000..a65e41d1 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contractclause/vo/ContractClauseExcelVO.java @@ -0,0 +1,51 @@ +package com.yunxi.scm.module.xxjj.controller.admin.contractclause.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.yunxi.scm.framework.excel.core.annotations.DictFormat; +import com.yunxi.scm.framework.excel.core.convert.DictConvert; + + +/** + * 合同条款 Excel VO + * + * @author 长江云息 + */ +@Data +public class ContractClauseExcelVO { + + @ExcelProperty("编号") + private Long id; + + @ExcelProperty("条款标题") + private String title; + + @ExcelProperty(value = "条款类型 参考字典contract_clause_type", converter = DictConvert.class) + @DictFormat("contract_clause_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + private String type; + + @ExcelProperty(value = "状态 参考字典contract_clause_status", converter = DictConvert.class) + @DictFormat("contract_clause_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + private String status; + + @ExcelProperty("条款内容") + private String content; + + @ExcelProperty("权重值") + private Short weight; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("附件") + private String attachment; + + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contractclause/vo/ContractClauseExportReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contractclause/vo/ContractClauseExportReqVO.java new file mode 100644 index 00000000..f137c134 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contractclause/vo/ContractClauseExportReqVO.java @@ -0,0 +1,29 @@ +package com.yunxi.scm.module.xxjj.controller.admin.contractclause.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.yunxi.scm.framework.common.pojo.PageParam; +import java.time.LocalDateTime; +import org.springframework.format.annotation.DateTimeFormat; + +import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 合同条款 Excel 导出 Request VO,参数和 ContractClausePageReqVO 是一致的") +@Data +public class ContractClauseExportReqVO { + + @Schema(description = "条款标题") + private String title; + + @Schema(description = "条款类型 参考字典contract_clause_type", example = "1") + private String type; + + @Schema(description = "状态 参考字典contract_clause_status", example = "2") + private String status; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contractclause/vo/ContractClausePageReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contractclause/vo/ContractClausePageReqVO.java new file mode 100644 index 00000000..7ced058f --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contractclause/vo/ContractClausePageReqVO.java @@ -0,0 +1,31 @@ +package com.yunxi.scm.module.xxjj.controller.admin.contractclause.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.yunxi.scm.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 合同条款分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ContractClausePageReqVO extends PageParam { + + @Schema(description = "条款标题") + private String title; + + @Schema(description = "条款类型 参考字典contract_clause_type", example = "1") + private String type; + + @Schema(description = "状态 参考字典contract_clause_status", example = "2") + private String status; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contractclause/vo/ContractClauseRespVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contractclause/vo/ContractClauseRespVO.java new file mode 100644 index 00000000..b2057f4d --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contractclause/vo/ContractClauseRespVO.java @@ -0,0 +1,19 @@ +package com.yunxi.scm.module.xxjj.controller.admin.contractclause.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 合同条款 Response VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ContractClauseRespVO extends ContractClauseBaseVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7146") + private Long id; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contractclause/vo/ContractClauseUpdateReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contractclause/vo/ContractClauseUpdateReqVO.java new file mode 100644 index 00000000..e82441c0 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contractclause/vo/ContractClauseUpdateReqVO.java @@ -0,0 +1,18 @@ +package com.yunxi.scm.module.xxjj.controller.admin.contractclause.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 合同条款更新 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ContractClauseUpdateReqVO extends ContractClauseBaseVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7146") + @NotNull(message = "编号不能为空") + private Long id; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contracttemplate/ContractTemplateController.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contracttemplate/ContractTemplateController.java new file mode 100644 index 00000000..43113a82 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contracttemplate/ContractTemplateController.java @@ -0,0 +1,102 @@ +package com.yunxi.scm.module.xxjj.controller.admin.contracttemplate; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import com.yunxi.scm.framework.common.pojo.PageResult; +import com.yunxi.scm.framework.common.pojo.CommonResult; +import static com.yunxi.scm.framework.common.pojo.CommonResult.success; + +import com.yunxi.scm.framework.excel.core.util.ExcelUtils; + +import com.yunxi.scm.framework.operatelog.core.annotations.OperateLog; +import static com.yunxi.scm.framework.operatelog.core.enums.OperateTypeEnum.*; + +import com.yunxi.scm.module.xxjj.controller.admin.contracttemplate.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.contracttemplate.ContractTemplateDO; +import com.yunxi.scm.module.xxjj.convert.contracttemplate.ContractTemplateConvert; +import com.yunxi.scm.module.xxjj.service.contracttemplate.ContractTemplateService; + +@Tag(name = "管理后台 - 合同模板") +@RestController +@RequestMapping("/xxjj/contract-template") +@Validated +public class ContractTemplateController { + + @Resource + private ContractTemplateService contractTemplateService; + + @PostMapping("/create") + @Operation(summary = "创建合同模板") + @PreAuthorize("@ss.hasPermission('xxjj:contract-template:create')") + public CommonResult createContractTemplate(@Valid @RequestBody ContractTemplateCreateReqVO createReqVO) { + return success(contractTemplateService.createContractTemplate(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新合同模板") + @PreAuthorize("@ss.hasPermission('xxjj:contract-template:update')") + public CommonResult updateContractTemplate(@Valid @RequestBody ContractTemplateUpdateReqVO updateReqVO) { + contractTemplateService.updateContractTemplate(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除合同模板") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('xxjj:contract-template:delete')") + public CommonResult deleteContractTemplate(@RequestParam("id") Long id) { + contractTemplateService.deleteContractTemplate(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得合同模板") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('xxjj:contract-template:query')") + public CommonResult getContractTemplate(@RequestParam("id") Long id) { + ContractTemplateDO contractTemplate = contractTemplateService.getContractTemplate(id); + return success(ContractTemplateConvert.INSTANCE.convert(contractTemplate)); + } + + @GetMapping("/list") + @Operation(summary = "获得合同模板列表") + @Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048") + @PreAuthorize("@ss.hasPermission('xxjj:contract-template:query')") + public CommonResult> getContractTemplateList(@RequestParam("ids") Collection ids) { + List list = contractTemplateService.getContractTemplateList(ids); + return success(ContractTemplateConvert.INSTANCE.convertList(list)); + } + + @GetMapping("/page") + @Operation(summary = "获得合同模板分页") + @PreAuthorize("@ss.hasPermission('xxjj:contract-template:query')") + public CommonResult> getContractTemplatePage(@Valid ContractTemplatePageReqVO pageVO) { + PageResult pageResult = contractTemplateService.getContractTemplatePage(pageVO); + return success(ContractTemplateConvert.INSTANCE.convertPage(pageResult)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出合同模板 Excel") + @PreAuthorize("@ss.hasPermission('xxjj:contract-template:export')") + @OperateLog(type = EXPORT) + public void exportContractTemplateExcel(@Valid ContractTemplateExportReqVO exportReqVO, + HttpServletResponse response) throws IOException { + List list = contractTemplateService.getContractTemplateList(exportReqVO); + // 导出 Excel + List datas = ContractTemplateConvert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "合同模板.xls", "数据", ContractTemplateExcelVO.class, datas); + } + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contracttemplate/vo/ContractTemplateBaseVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contracttemplate/vo/ContractTemplateBaseVO.java new file mode 100644 index 00000000..1d03c2d4 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contracttemplate/vo/ContractTemplateBaseVO.java @@ -0,0 +1,37 @@ +package com.yunxi.scm.module.xxjj.controller.admin.contracttemplate.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import javax.validation.constraints.*; + +/** + * 合同模板 Base VO,提供给添加、修改、详细的子 VO 使用 + * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 + */ +@Data +public class ContractTemplateBaseVO { + + @Schema(description = "模板名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四") + @NotNull(message = "模板名称不能为空") + private String name; + + @Schema(description = "合同模板类型 参考字典contract_template_type", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "合同模板类型 参考字典contract_template_type不能为空") + private String type; + + @Schema(description = "状态 参考字典contract_template_status", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "状态 参考字典contract_template_status不能为空") + private String status; + + @Schema(description = "模板描述", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "模板描述不能为空") + private String describe; + + @Schema(description = "配置项 json格式", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "配置项 json格式不能为空") + private String options; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contracttemplate/vo/ContractTemplateCreateReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contracttemplate/vo/ContractTemplateCreateReqVO.java new file mode 100644 index 00000000..4d78257e --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contracttemplate/vo/ContractTemplateCreateReqVO.java @@ -0,0 +1,14 @@ +package com.yunxi.scm.module.xxjj.controller.admin.contracttemplate.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 合同模板创建 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ContractTemplateCreateReqVO extends ContractTemplateBaseVO { + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contracttemplate/vo/ContractTemplateExcelVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contracttemplate/vo/ContractTemplateExcelVO.java new file mode 100644 index 00000000..ca1e1ae5 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contracttemplate/vo/ContractTemplateExcelVO.java @@ -0,0 +1,45 @@ +package com.yunxi.scm.module.xxjj.controller.admin.contracttemplate.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.yunxi.scm.framework.excel.core.annotations.DictFormat; +import com.yunxi.scm.framework.excel.core.convert.DictConvert; + + +/** + * 合同模板 Excel VO + * + * @author 长江云息 + */ +@Data +public class ContractTemplateExcelVO { + + @ExcelProperty("编号") + private Long id; + + @ExcelProperty("模板名称") + private String name; + + @ExcelProperty(value = "合同模板类型 参考字典contract_template_type", converter = DictConvert.class) + @DictFormat("contract_template_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + private String type; + + @ExcelProperty(value = "状态 参考字典contract_template_status", converter = DictConvert.class) + @DictFormat("contract_template_status") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中 + private String status; + + @ExcelProperty("模板描述") + private String describe; + + @ExcelProperty("配置项 json格式") + private String options; + + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contracttemplate/vo/ContractTemplateExportReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contracttemplate/vo/ContractTemplateExportReqVO.java new file mode 100644 index 00000000..0baf01dd --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contracttemplate/vo/ContractTemplateExportReqVO.java @@ -0,0 +1,29 @@ +package com.yunxi.scm.module.xxjj.controller.admin.contracttemplate.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.yunxi.scm.framework.common.pojo.PageParam; +import java.time.LocalDateTime; +import org.springframework.format.annotation.DateTimeFormat; + +import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 合同模板 Excel 导出 Request VO,参数和 ContractTemplatePageReqVO 是一致的") +@Data +public class ContractTemplateExportReqVO { + + @Schema(description = "模板名称", example = "李四") + private String name; + + @Schema(description = "合同模板类型 参考字典contract_template_type", example = "1") + private String type; + + @Schema(description = "状态 参考字典contract_template_status", example = "1") + private String status; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contracttemplate/vo/ContractTemplatePageReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contracttemplate/vo/ContractTemplatePageReqVO.java new file mode 100644 index 00000000..03126cd9 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contracttemplate/vo/ContractTemplatePageReqVO.java @@ -0,0 +1,31 @@ +package com.yunxi.scm.module.xxjj.controller.admin.contracttemplate.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.yunxi.scm.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 合同模板分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ContractTemplatePageReqVO extends PageParam { + + @Schema(description = "模板名称", example = "李四") + private String name; + + @Schema(description = "合同模板类型 参考字典contract_template_type", example = "1") + private String type; + + @Schema(description = "状态 参考字典contract_template_status", example = "1") + private String status; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contracttemplate/vo/ContractTemplateRespVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contracttemplate/vo/ContractTemplateRespVO.java new file mode 100644 index 00000000..d60d9003 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contracttemplate/vo/ContractTemplateRespVO.java @@ -0,0 +1,19 @@ +package com.yunxi.scm.module.xxjj.controller.admin.contracttemplate.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 合同模板 Response VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ContractTemplateRespVO extends ContractTemplateBaseVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21453") + private Long id; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contracttemplate/vo/ContractTemplateUpdateReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contracttemplate/vo/ContractTemplateUpdateReqVO.java new file mode 100644 index 00000000..ff6f8bba --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/contracttemplate/vo/ContractTemplateUpdateReqVO.java @@ -0,0 +1,18 @@ +package com.yunxi.scm.module.xxjj.controller.admin.contracttemplate.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 合同模板更新 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ContractTemplateUpdateReqVO extends ContractTemplateBaseVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21453") + @NotNull(message = "编号不能为空") + private Long id; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/convert/contractclause/ContractClauseConvert.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/convert/contractclause/ContractClauseConvert.java new file mode 100644 index 00000000..51e7099f --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/convert/contractclause/ContractClauseConvert.java @@ -0,0 +1,34 @@ +package com.yunxi.scm.module.xxjj.convert.contractclause; + +import java.util.*; + +import com.yunxi.scm.framework.common.pojo.PageResult; + +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import com.yunxi.scm.module.xxjj.controller.admin.contractclause.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.contractclause.ContractClauseDO; + +/** + * 合同条款 Convert + * + * @author 长江云息 + */ +@Mapper +public interface ContractClauseConvert { + + ContractClauseConvert INSTANCE = Mappers.getMapper(ContractClauseConvert.class); + + ContractClauseDO convert(ContractClauseCreateReqVO bean); + + ContractClauseDO convert(ContractClauseUpdateReqVO bean); + + ContractClauseRespVO convert(ContractClauseDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/convert/contracttemplate/ContractTemplateConvert.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/convert/contracttemplate/ContractTemplateConvert.java new file mode 100644 index 00000000..d6acaf68 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/convert/contracttemplate/ContractTemplateConvert.java @@ -0,0 +1,34 @@ +package com.yunxi.scm.module.xxjj.convert.contracttemplate; + +import java.util.*; + +import com.yunxi.scm.framework.common.pojo.PageResult; + +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import com.yunxi.scm.module.xxjj.controller.admin.contracttemplate.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.contracttemplate.ContractTemplateDO; + +/** + * 合同模板 Convert + * + * @author 长江云息 + */ +@Mapper +public interface ContractTemplateConvert { + + ContractTemplateConvert INSTANCE = Mappers.getMapper(ContractTemplateConvert.class); + + ContractTemplateDO convert(ContractTemplateCreateReqVO bean); + + ContractTemplateDO convert(ContractTemplateUpdateReqVO bean); + + ContractTemplateRespVO convert(ContractTemplateDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/contractclause/ContractClauseDO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/contractclause/ContractClauseDO.java new file mode 100644 index 00000000..cf74fbb9 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/contractclause/ContractClauseDO.java @@ -0,0 +1,63 @@ +package com.yunxi.scm.module.xxjj.dal.dataobject.contractclause; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.yunxi.scm.framework.mybatis.core.dataobject.BaseDO; + +/** + * 合同条款 DO + * + * @author 长江云息 + */ +@TableName("xxjj_contract_clause") +@KeySequence("xxjj_contract_clause_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ContractClauseDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 条款标题 + */ + private String title; + /** + * 条款类型 参考字典contract_clause_type + * + * 枚举 {@link TODO contract_clause_type 对应的类} + */ + private String type; + /** + * 状态 参考字典contract_clause_status + * + * 枚举 {@link TODO contract_clause_status 对应的类} + */ + private String status; + /** + * 条款内容 + */ + private String content; + /** + * 权重值 + */ + private Short weight; + /** + * 备注 + */ + private String remark; + /** + * 附件 + */ + private String attachment; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/contracttemplate/ContractTemplateDO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/contracttemplate/ContractTemplateDO.java new file mode 100644 index 00000000..859f054b --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/contracttemplate/ContractTemplateDO.java @@ -0,0 +1,55 @@ +package com.yunxi.scm.module.xxjj.dal.dataobject.contracttemplate; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.yunxi.scm.framework.mybatis.core.dataobject.BaseDO; + +/** + * 合同模板 DO + * + * @author 长江云息 + */ +@TableName("xxjj_contract_template") +@KeySequence("xxjj_contract_template_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ContractTemplateDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 模板名称 + */ + private String name; + /** + * 合同模板类型 参考字典contract_template_type + * + * 枚举 {@link TODO contract_template_type 对应的类} + */ + private String type; + /** + * 状态 参考字典contract_template_status + * + * 枚举 {@link TODO contract_template_status 对应的类} + */ + private String status; + /** + * 模板描述 + */ + private String describe; + /** + * 配置项 json格式 + */ + private String options; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/contractclause/ContractClauseMapper.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/contractclause/ContractClauseMapper.java new file mode 100644 index 00000000..5be9fe0c --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/contractclause/ContractClauseMapper.java @@ -0,0 +1,38 @@ +package com.yunxi.scm.module.xxjj.dal.mysql.contractclause; + +import java.util.*; + +import com.yunxi.scm.framework.common.pojo.PageResult; +import com.yunxi.scm.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.yunxi.scm.framework.mybatis.core.mapper.BaseMapperX; +import com.yunxi.scm.module.xxjj.dal.dataobject.contractclause.ContractClauseDO; +import org.apache.ibatis.annotations.Mapper; +import com.yunxi.scm.module.xxjj.controller.admin.contractclause.vo.*; + +/** + * 合同条款 Mapper + * + * @author 长江云息 + */ +@Mapper +public interface ContractClauseMapper extends BaseMapperX { + + default PageResult selectPage(ContractClausePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(ContractClauseDO::getTitle, reqVO.getTitle()) + .eqIfPresent(ContractClauseDO::getType, reqVO.getType()) + .eqIfPresent(ContractClauseDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(ContractClauseDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(ContractClauseDO::getId)); + } + + default List selectList(ContractClauseExportReqVO reqVO) { + return selectList(new LambdaQueryWrapperX() + .eqIfPresent(ContractClauseDO::getTitle, reqVO.getTitle()) + .eqIfPresent(ContractClauseDO::getType, reqVO.getType()) + .eqIfPresent(ContractClauseDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(ContractClauseDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(ContractClauseDO::getId)); + } + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/contracttemplate/ContractTemplateMapper.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/contracttemplate/ContractTemplateMapper.java new file mode 100644 index 00000000..efb9b3b9 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/contracttemplate/ContractTemplateMapper.java @@ -0,0 +1,38 @@ +package com.yunxi.scm.module.xxjj.dal.mysql.contracttemplate; + +import java.util.*; + +import com.yunxi.scm.framework.common.pojo.PageResult; +import com.yunxi.scm.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.yunxi.scm.framework.mybatis.core.mapper.BaseMapperX; +import com.yunxi.scm.module.xxjj.dal.dataobject.contracttemplate.ContractTemplateDO; +import org.apache.ibatis.annotations.Mapper; +import com.yunxi.scm.module.xxjj.controller.admin.contracttemplate.vo.*; + +/** + * 合同模板 Mapper + * + * @author 长江云息 + */ +@Mapper +public interface ContractTemplateMapper extends BaseMapperX { + + default PageResult selectPage(ContractTemplatePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(ContractTemplateDO::getName, reqVO.getName()) + .eqIfPresent(ContractTemplateDO::getType, reqVO.getType()) + .eqIfPresent(ContractTemplateDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(ContractTemplateDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(ContractTemplateDO::getId)); + } + + default List selectList(ContractTemplateExportReqVO reqVO) { + return selectList(new LambdaQueryWrapperX() + .likeIfPresent(ContractTemplateDO::getName, reqVO.getName()) + .eqIfPresent(ContractTemplateDO::getType, reqVO.getType()) + .eqIfPresent(ContractTemplateDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(ContractTemplateDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(ContractTemplateDO::getId)); + } + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/contractclause/ContractClauseService.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/contractclause/ContractClauseService.java new file mode 100644 index 00000000..c04fbef3 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/contractclause/ContractClauseService.java @@ -0,0 +1,70 @@ +package com.yunxi.scm.module.xxjj.service.contractclause; + +import java.util.*; +import javax.validation.*; +import com.yunxi.scm.module.xxjj.controller.admin.contractclause.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.contractclause.ContractClauseDO; +import com.yunxi.scm.framework.common.pojo.PageResult; + +/** + * 合同条款 Service 接口 + * + * @author 长江云息 + */ +public interface ContractClauseService { + + /** + * 创建合同条款 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createContractClause(@Valid ContractClauseCreateReqVO createReqVO); + + /** + * 更新合同条款 + * + * @param updateReqVO 更新信息 + */ + void updateContractClause(@Valid ContractClauseUpdateReqVO updateReqVO); + + /** + * 删除合同条款 + * + * @param id 编号 + */ + void deleteContractClause(Long id); + + /** + * 获得合同条款 + * + * @param id 编号 + * @return 合同条款 + */ + ContractClauseDO getContractClause(Long id); + + /** + * 获得合同条款列表 + * + * @param ids 编号 + * @return 合同条款列表 + */ + List getContractClauseList(Collection ids); + + /** + * 获得合同条款分页 + * + * @param pageReqVO 分页查询 + * @return 合同条款分页 + */ + PageResult getContractClausePage(ContractClausePageReqVO pageReqVO); + + /** + * 获得合同条款列表, 用于 Excel 导出 + * + * @param exportReqVO 查询条件 + * @return 合同条款列表 + */ + List getContractClauseList(ContractClauseExportReqVO exportReqVO); + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/contractclause/ContractClauseServiceImpl.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/contractclause/ContractClauseServiceImpl.java new file mode 100644 index 00000000..040b634c --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/contractclause/ContractClauseServiceImpl.java @@ -0,0 +1,82 @@ +package com.yunxi.scm.module.xxjj.service.contractclause; + +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; + +import java.util.*; +import com.yunxi.scm.module.xxjj.controller.admin.contractclause.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.contractclause.ContractClauseDO; +import com.yunxi.scm.framework.common.pojo.PageResult; + +import com.yunxi.scm.module.xxjj.convert.contractclause.ContractClauseConvert; +import com.yunxi.scm.module.xxjj.dal.mysql.contractclause.ContractClauseMapper; + +import static com.yunxi.scm.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*; + +/** + * 合同条款 Service 实现类 + * + * @author 长江云息 + */ +@Service +@Validated +public class ContractClauseServiceImpl implements ContractClauseService { + + @Resource + private ContractClauseMapper contractClauseMapper; + + @Override + public Long createContractClause(ContractClauseCreateReqVO createReqVO) { + // 插入 + ContractClauseDO contractClause = ContractClauseConvert.INSTANCE.convert(createReqVO); + contractClauseMapper.insert(contractClause); + // 返回 + return contractClause.getId(); + } + + @Override + public void updateContractClause(ContractClauseUpdateReqVO updateReqVO) { + // 校验存在 + validateContractClauseExists(updateReqVO.getId()); + // 更新 + ContractClauseDO updateObj = ContractClauseConvert.INSTANCE.convert(updateReqVO); + contractClauseMapper.updateById(updateObj); + } + + @Override + public void deleteContractClause(Long id) { + // 校验存在 + validateContractClauseExists(id); + // 删除 + contractClauseMapper.deleteById(id); + } + + private void validateContractClauseExists(Long id) { + if (contractClauseMapper.selectById(id) == null) { + throw exception(CONTRACT_CLAUSE_NOT_EXISTS); + } + } + + @Override + public ContractClauseDO getContractClause(Long id) { + return contractClauseMapper.selectById(id); + } + + @Override + public List getContractClauseList(Collection ids) { + return contractClauseMapper.selectBatchIds(ids); + } + + @Override + public PageResult getContractClausePage(ContractClausePageReqVO pageReqVO) { + return contractClauseMapper.selectPage(pageReqVO); + } + + @Override + public List getContractClauseList(ContractClauseExportReqVO exportReqVO) { + return contractClauseMapper.selectList(exportReqVO); + } + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/contracttemplate/ContractTemplateService.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/contracttemplate/ContractTemplateService.java new file mode 100644 index 00000000..698e85dd --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/contracttemplate/ContractTemplateService.java @@ -0,0 +1,70 @@ +package com.yunxi.scm.module.xxjj.service.contracttemplate; + +import java.util.*; +import javax.validation.*; +import com.yunxi.scm.module.xxjj.controller.admin.contracttemplate.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.contracttemplate.ContractTemplateDO; +import com.yunxi.scm.framework.common.pojo.PageResult; + +/** + * 合同模板 Service 接口 + * + * @author 长江云息 + */ +public interface ContractTemplateService { + + /** + * 创建合同模板 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createContractTemplate(@Valid ContractTemplateCreateReqVO createReqVO); + + /** + * 更新合同模板 + * + * @param updateReqVO 更新信息 + */ + void updateContractTemplate(@Valid ContractTemplateUpdateReqVO updateReqVO); + + /** + * 删除合同模板 + * + * @param id 编号 + */ + void deleteContractTemplate(Long id); + + /** + * 获得合同模板 + * + * @param id 编号 + * @return 合同模板 + */ + ContractTemplateDO getContractTemplate(Long id); + + /** + * 获得合同模板列表 + * + * @param ids 编号 + * @return 合同模板列表 + */ + List getContractTemplateList(Collection ids); + + /** + * 获得合同模板分页 + * + * @param pageReqVO 分页查询 + * @return 合同模板分页 + */ + PageResult getContractTemplatePage(ContractTemplatePageReqVO pageReqVO); + + /** + * 获得合同模板列表, 用于 Excel 导出 + * + * @param exportReqVO 查询条件 + * @return 合同模板列表 + */ + List getContractTemplateList(ContractTemplateExportReqVO exportReqVO); + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/contracttemplate/ContractTemplateServiceImpl.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/contracttemplate/ContractTemplateServiceImpl.java new file mode 100644 index 00000000..22f6d3c8 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/contracttemplate/ContractTemplateServiceImpl.java @@ -0,0 +1,82 @@ +package com.yunxi.scm.module.xxjj.service.contracttemplate; + +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; + +import java.util.*; +import com.yunxi.scm.module.xxjj.controller.admin.contracttemplate.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.contracttemplate.ContractTemplateDO; +import com.yunxi.scm.framework.common.pojo.PageResult; + +import com.yunxi.scm.module.xxjj.convert.contracttemplate.ContractTemplateConvert; +import com.yunxi.scm.module.xxjj.dal.mysql.contracttemplate.ContractTemplateMapper; + +import static com.yunxi.scm.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*; + +/** + * 合同模板 Service 实现类 + * + * @author 长江云息 + */ +@Service +@Validated +public class ContractTemplateServiceImpl implements ContractTemplateService { + + @Resource + private ContractTemplateMapper contractTemplateMapper; + + @Override + public Long createContractTemplate(ContractTemplateCreateReqVO createReqVO) { + // 插入 + ContractTemplateDO contractTemplate = ContractTemplateConvert.INSTANCE.convert(createReqVO); + contractTemplateMapper.insert(contractTemplate); + // 返回 + return contractTemplate.getId(); + } + + @Override + public void updateContractTemplate(ContractTemplateUpdateReqVO updateReqVO) { + // 校验存在 + validateContractTemplateExists(updateReqVO.getId()); + // 更新 + ContractTemplateDO updateObj = ContractTemplateConvert.INSTANCE.convert(updateReqVO); + contractTemplateMapper.updateById(updateObj); + } + + @Override + public void deleteContractTemplate(Long id) { + // 校验存在 + validateContractTemplateExists(id); + // 删除 + contractTemplateMapper.deleteById(id); + } + + private void validateContractTemplateExists(Long id) { + if (contractTemplateMapper.selectById(id) == null) { + throw exception(CONTRACT_TEMPLATE_NOT_EXISTS); + } + } + + @Override + public ContractTemplateDO getContractTemplate(Long id) { + return contractTemplateMapper.selectById(id); + } + + @Override + public List getContractTemplateList(Collection ids) { + return contractTemplateMapper.selectBatchIds(ids); + } + + @Override + public PageResult getContractTemplatePage(ContractTemplatePageReqVO pageReqVO) { + return contractTemplateMapper.selectPage(pageReqVO); + } + + @Override + public List getContractTemplateList(ContractTemplateExportReqVO exportReqVO) { + return contractTemplateMapper.selectList(exportReqVO); + } + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/contractclause/ContractClauseMapper.xml b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/contractclause/ContractClauseMapper.xml new file mode 100644 index 00000000..34fbac65 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/contractclause/ContractClauseMapper.xml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/contracttemplate/ContractTemplateMapper.xml b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/contracttemplate/ContractTemplateMapper.xml new file mode 100644 index 00000000..329b83e3 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/contracttemplate/ContractTemplateMapper.xml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/com/yunxi/scm/module/xxjj/service/contractclause/ContractClauseServiceImplTest.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/com/yunxi/scm/module/xxjj/service/contractclause/ContractClauseServiceImplTest.java new file mode 100644 index 00000000..e077ed2a --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/com/yunxi/scm/module/xxjj/service/contractclause/ContractClauseServiceImplTest.java @@ -0,0 +1,175 @@ +package com.yunxi.scm.module.xxjj.service.contractclause; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; + +import javax.annotation.Resource; + +import com.yunxi.scm.framework.test.core.ut.BaseDbUnitTest; + +import com.yunxi.scm.module.xxjj.controller.admin.contractclause.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.contractclause.ContractClauseDO; +import com.yunxi.scm.module.xxjj.dal.mysql.contractclause.ContractClauseMapper; +import com.yunxi.scm.framework.common.pojo.PageResult; + +import javax.annotation.Resource; +import org.springframework.context.annotation.Import; +import java.util.*; +import java.time.LocalDateTime; + +import static cn.hutool.core.util.RandomUtil.*; +import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*; +import static com.yunxi.scm.framework.test.core.util.AssertUtils.*; +import static com.yunxi.scm.framework.test.core.util.RandomUtils.*; +import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*; +import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*; +import static com.yunxi.scm.framework.common.util.date.DateUtils.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +/** + * {@link ContractClauseServiceImpl} 的单元测试类 + * + * @author 长江云息 + */ +@Import(ContractClauseServiceImpl.class) +public class ContractClauseServiceImplTest extends BaseDbUnitTest { + + @Resource + private ContractClauseServiceImpl contractClauseService; + + @Resource + private ContractClauseMapper contractClauseMapper; + + @Test + public void testCreateContractClause_success() { + // 准备参数 + ContractClauseCreateReqVO reqVO = randomPojo(ContractClauseCreateReqVO.class); + + // 调用 + Long contractClauseId = contractClauseService.createContractClause(reqVO); + // 断言 + assertNotNull(contractClauseId); + // 校验记录的属性是否正确 + ContractClauseDO contractClause = contractClauseMapper.selectById(contractClauseId); + assertPojoEquals(reqVO, contractClause); + } + + @Test + public void testUpdateContractClause_success() { + // mock 数据 + ContractClauseDO dbContractClause = randomPojo(ContractClauseDO.class); + contractClauseMapper.insert(dbContractClause);// @Sql: 先插入出一条存在的数据 + // 准备参数 + ContractClauseUpdateReqVO reqVO = randomPojo(ContractClauseUpdateReqVO.class, o -> { + o.setId(dbContractClause.getId()); // 设置更新的 ID + }); + + // 调用 + contractClauseService.updateContractClause(reqVO); + // 校验是否更新正确 + ContractClauseDO contractClause = contractClauseMapper.selectById(reqVO.getId()); // 获取最新的 + assertPojoEquals(reqVO, contractClause); + } + + @Test + public void testUpdateContractClause_notExists() { + // 准备参数 + ContractClauseUpdateReqVO reqVO = randomPojo(ContractClauseUpdateReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> contractClauseService.updateContractClause(reqVO), CONTRACT_CLAUSE_NOT_EXISTS); + } + + @Test + public void testDeleteContractClause_success() { + // mock 数据 + ContractClauseDO dbContractClause = randomPojo(ContractClauseDO.class); + contractClauseMapper.insert(dbContractClause);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbContractClause.getId(); + + // 调用 + contractClauseService.deleteContractClause(id); + // 校验数据不存在了 + assertNull(contractClauseMapper.selectById(id)); + } + + @Test + public void testDeleteContractClause_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> contractClauseService.deleteContractClause(id), CONTRACT_CLAUSE_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetContractClausePage() { + // mock 数据 + ContractClauseDO dbContractClause = randomPojo(ContractClauseDO.class, o -> { // 等会查询到 + o.setTitle(null); + o.setType(null); + o.setStatus(null); + o.setCreateTime(null); + }); + contractClauseMapper.insert(dbContractClause); + // 测试 title 不匹配 + contractClauseMapper.insert(cloneIgnoreId(dbContractClause, o -> o.setTitle(null))); + // 测试 type 不匹配 + contractClauseMapper.insert(cloneIgnoreId(dbContractClause, o -> o.setType(null))); + // 测试 status 不匹配 + contractClauseMapper.insert(cloneIgnoreId(dbContractClause, o -> o.setStatus(null))); + // 测试 createTime 不匹配 + contractClauseMapper.insert(cloneIgnoreId(dbContractClause, o -> o.setCreateTime(null))); + // 准备参数 + ContractClausePageReqVO reqVO = new ContractClausePageReqVO(); + reqVO.setTitle(null); + reqVO.setType(null); + reqVO.setStatus(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + PageResult pageResult = contractClauseService.getContractClausePage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbContractClause, pageResult.getList().get(0)); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetContractClauseList() { + // mock 数据 + ContractClauseDO dbContractClause = randomPojo(ContractClauseDO.class, o -> { // 等会查询到 + o.setTitle(null); + o.setType(null); + o.setStatus(null); + o.setCreateTime(null); + }); + contractClauseMapper.insert(dbContractClause); + // 测试 title 不匹配 + contractClauseMapper.insert(cloneIgnoreId(dbContractClause, o -> o.setTitle(null))); + // 测试 type 不匹配 + contractClauseMapper.insert(cloneIgnoreId(dbContractClause, o -> o.setType(null))); + // 测试 status 不匹配 + contractClauseMapper.insert(cloneIgnoreId(dbContractClause, o -> o.setStatus(null))); + // 测试 createTime 不匹配 + contractClauseMapper.insert(cloneIgnoreId(dbContractClause, o -> o.setCreateTime(null))); + // 准备参数 + ContractClauseExportReqVO reqVO = new ContractClauseExportReqVO(); + reqVO.setTitle(null); + reqVO.setType(null); + reqVO.setStatus(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + List list = contractClauseService.getContractClauseList(reqVO); + // 断言 + assertEquals(1, list.size()); + assertPojoEquals(dbContractClause, list.get(0)); + } + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/com/yunxi/scm/module/xxjj/service/contracttemplate/ContractTemplateServiceImplTest.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/com/yunxi/scm/module/xxjj/service/contracttemplate/ContractTemplateServiceImplTest.java new file mode 100644 index 00000000..294ac03a --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/com/yunxi/scm/module/xxjj/service/contracttemplate/ContractTemplateServiceImplTest.java @@ -0,0 +1,175 @@ +package com.yunxi.scm.module.xxjj.service.contracttemplate; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; + +import javax.annotation.Resource; + +import com.yunxi.scm.framework.test.core.ut.BaseDbUnitTest; + +import com.yunxi.scm.module.xxjj.controller.admin.contracttemplate.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.contracttemplate.ContractTemplateDO; +import com.yunxi.scm.module.xxjj.dal.mysql.contracttemplate.ContractTemplateMapper; +import com.yunxi.scm.framework.common.pojo.PageResult; + +import javax.annotation.Resource; +import org.springframework.context.annotation.Import; +import java.util.*; +import java.time.LocalDateTime; + +import static cn.hutool.core.util.RandomUtil.*; +import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*; +import static com.yunxi.scm.framework.test.core.util.AssertUtils.*; +import static com.yunxi.scm.framework.test.core.util.RandomUtils.*; +import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*; +import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*; +import static com.yunxi.scm.framework.common.util.date.DateUtils.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +/** + * {@link ContractTemplateServiceImpl} 的单元测试类 + * + * @author 长江云息 + */ +@Import(ContractTemplateServiceImpl.class) +public class ContractTemplateServiceImplTest extends BaseDbUnitTest { + + @Resource + private ContractTemplateServiceImpl contractTemplateService; + + @Resource + private ContractTemplateMapper contractTemplateMapper; + + @Test + public void testCreateContractTemplate_success() { + // 准备参数 + ContractTemplateCreateReqVO reqVO = randomPojo(ContractTemplateCreateReqVO.class); + + // 调用 + Long contractTemplateId = contractTemplateService.createContractTemplate(reqVO); + // 断言 + assertNotNull(contractTemplateId); + // 校验记录的属性是否正确 + ContractTemplateDO contractTemplate = contractTemplateMapper.selectById(contractTemplateId); + assertPojoEquals(reqVO, contractTemplate); + } + + @Test + public void testUpdateContractTemplate_success() { + // mock 数据 + ContractTemplateDO dbContractTemplate = randomPojo(ContractTemplateDO.class); + contractTemplateMapper.insert(dbContractTemplate);// @Sql: 先插入出一条存在的数据 + // 准备参数 + ContractTemplateUpdateReqVO reqVO = randomPojo(ContractTemplateUpdateReqVO.class, o -> { + o.setId(dbContractTemplate.getId()); // 设置更新的 ID + }); + + // 调用 + contractTemplateService.updateContractTemplate(reqVO); + // 校验是否更新正确 + ContractTemplateDO contractTemplate = contractTemplateMapper.selectById(reqVO.getId()); // 获取最新的 + assertPojoEquals(reqVO, contractTemplate); + } + + @Test + public void testUpdateContractTemplate_notExists() { + // 准备参数 + ContractTemplateUpdateReqVO reqVO = randomPojo(ContractTemplateUpdateReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> contractTemplateService.updateContractTemplate(reqVO), CONTRACT_TEMPLATE_NOT_EXISTS); + } + + @Test + public void testDeleteContractTemplate_success() { + // mock 数据 + ContractTemplateDO dbContractTemplate = randomPojo(ContractTemplateDO.class); + contractTemplateMapper.insert(dbContractTemplate);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbContractTemplate.getId(); + + // 调用 + contractTemplateService.deleteContractTemplate(id); + // 校验数据不存在了 + assertNull(contractTemplateMapper.selectById(id)); + } + + @Test + public void testDeleteContractTemplate_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> contractTemplateService.deleteContractTemplate(id), CONTRACT_TEMPLATE_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetContractTemplatePage() { + // mock 数据 + ContractTemplateDO dbContractTemplate = randomPojo(ContractTemplateDO.class, o -> { // 等会查询到 + o.setName(null); + o.setType(null); + o.setStatus(null); + o.setCreateTime(null); + }); + contractTemplateMapper.insert(dbContractTemplate); + // 测试 name 不匹配 + contractTemplateMapper.insert(cloneIgnoreId(dbContractTemplate, o -> o.setName(null))); + // 测试 type 不匹配 + contractTemplateMapper.insert(cloneIgnoreId(dbContractTemplate, o -> o.setType(null))); + // 测试 status 不匹配 + contractTemplateMapper.insert(cloneIgnoreId(dbContractTemplate, o -> o.setStatus(null))); + // 测试 createTime 不匹配 + contractTemplateMapper.insert(cloneIgnoreId(dbContractTemplate, o -> o.setCreateTime(null))); + // 准备参数 + ContractTemplatePageReqVO reqVO = new ContractTemplatePageReqVO(); + reqVO.setName(null); + reqVO.setType(null); + reqVO.setStatus(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + PageResult pageResult = contractTemplateService.getContractTemplatePage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbContractTemplate, pageResult.getList().get(0)); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetContractTemplateList() { + // mock 数据 + ContractTemplateDO dbContractTemplate = randomPojo(ContractTemplateDO.class, o -> { // 等会查询到 + o.setName(null); + o.setType(null); + o.setStatus(null); + o.setCreateTime(null); + }); + contractTemplateMapper.insert(dbContractTemplate); + // 测试 name 不匹配 + contractTemplateMapper.insert(cloneIgnoreId(dbContractTemplate, o -> o.setName(null))); + // 测试 type 不匹配 + contractTemplateMapper.insert(cloneIgnoreId(dbContractTemplate, o -> o.setType(null))); + // 测试 status 不匹配 + contractTemplateMapper.insert(cloneIgnoreId(dbContractTemplate, o -> o.setStatus(null))); + // 测试 createTime 不匹配 + contractTemplateMapper.insert(cloneIgnoreId(dbContractTemplate, o -> o.setCreateTime(null))); + // 准备参数 + ContractTemplateExportReqVO reqVO = new ContractTemplateExportReqVO(); + reqVO.setName(null); + reqVO.setType(null); + reqVO.setStatus(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + List list = contractTemplateService.getContractTemplateList(reqVO); + // 断言 + assertEquals(1, list.size()); + assertPojoEquals(dbContractTemplate, list.get(0)); + } + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/resources/sql/clean.sql b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/resources/sql/clean.sql index 7b901558..193337fd 100644 --- a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/resources/sql/clean.sql +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/resources/sql/clean.sql @@ -1,3 +1,5 @@ -- 将该删表 SQL 语句,添加到 yunxi-module-xxjj-biz 模块的 test/resources/sql/clean.sql 文件里 DELETE FROM "xxjj_contract"; -DELETE FROM "xxjj_contract_info"; \ No newline at end of file +DELETE FROM "xxjj_contract_info"; +DELETE FROM "xxjj_contract_clause"; +DELETE FROM "xxjj_contract_template"; \ No newline at end of file diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/resources/sql/create_tables.sql b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/resources/sql/create_tables.sql index ff2f9c72..a55c29c9 100644 --- a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/resources/sql/create_tables.sql +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/resources/sql/create_tables.sql @@ -56,4 +56,38 @@ CREATE TABLE IF NOT EXISTS "xxjj_contract_info" ( "deleted" bit NOT NULL DEFAULT FALSE, "tenant_id" bigint NOT NULL, PRIMARY KEY ("id") - ) COMMENT '合同详情表'; \ No newline at end of file + ) COMMENT '合同详情表'; + +CREATE TABLE IF NOT EXISTS "xxjj_contract_template" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "name" varchar NOT NULL, + "type" varchar NOT NULL, + "status" varchar NOT NULL, + "describe" varchar NOT NULL, + "options" varchar NOT NULL, + "creator" varchar DEFAULT '', + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar DEFAULT '', + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + "tenant_id" bigint NOT NULL, + PRIMARY KEY ("id") + ) COMMENT '合同模板表'; + +CREATE TABLE IF NOT EXISTS "xxjj_contract_clause" ( + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, + "title" varchar NOT NULL, + "type" varchar NOT NULL, + "status" varchar NOT NULL, + "content" varchar NOT NULL, + "weight" varchar, + "remark" varchar, + "attachment" varchar, + "creator" varchar DEFAULT '', + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updater" varchar DEFAULT '', + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + "deleted" bit NOT NULL DEFAULT FALSE, + "tenant_id" bigint NOT NULL, + PRIMARY KEY ("id") + ) COMMENT '合同条款表'; diff --git a/yunxi-ui-admin-vue3/src/api/xxjj/contractClause/index.ts b/yunxi-ui-admin-vue3/src/api/xxjj/contractClause/index.ts new file mode 100644 index 00000000..1fbcc892 --- /dev/null +++ b/yunxi-ui-admin-vue3/src/api/xxjj/contractClause/index.ts @@ -0,0 +1,42 @@ +import request from '@/config/axios' + +export interface ContractClauseVO { + id: number + title: string + type: string + status: string + content: string + weight: number + remark: string + attachment: string +} + +// 查询合同条款列表 +export const getContractClausePage = async (params) => { + return await request.get({ url: `/xxjj/contract-clause/page`, params }) +} + +// 查询合同条款详情 +export const getContractClause = async (id: number) => { + return await request.get({ url: `/xxjj/contract-clause/get?id=` + id }) +} + +// 新增合同条款 +export const createContractClause = async (data: ContractClauseVO) => { + return await request.post({ url: `/xxjj/contract-clause/create`, data }) +} + +// 修改合同条款 +export const updateContractClause = async (data: ContractClauseVO) => { + return await request.put({ url: `/xxjj/contract-clause/update`, data }) +} + +// 删除合同条款 +export const deleteContractClause = async (id: number) => { + return await request.delete({ url: `/xxjj/contract-clause/delete?id=` + id }) +} + +// 导出合同条款 Excel +export const exportContractClause = async (params) => { + return await request.download({ url: `/xxjj/contract-clause/export-excel`, params }) +} diff --git a/yunxi-ui-admin-vue3/src/api/xxjj/contractTemplate/index.ts b/yunxi-ui-admin-vue3/src/api/xxjj/contractTemplate/index.ts new file mode 100644 index 00000000..29e81b84 --- /dev/null +++ b/yunxi-ui-admin-vue3/src/api/xxjj/contractTemplate/index.ts @@ -0,0 +1,40 @@ +import request from '@/config/axios' + +export interface ContractTemplateVO { + id: number + name: string + type: string + status: string + describe: string + options: string +} + +// 查询合同模板列表 +export const getContractTemplatePage = async (params) => { + return await request.get({ url: `/xxjj/contract-template/page`, params }) +} + +// 查询合同模板详情 +export const getContractTemplate = async (id: number) => { + return await request.get({ url: `/xxjj/contract-template/get?id=` + id }) +} + +// 新增合同模板 +export const createContractTemplate = async (data: ContractTemplateVO) => { + return await request.post({ url: `/xxjj/contract-template/create`, data }) +} + +// 修改合同模板 +export const updateContractTemplate = async (data: ContractTemplateVO) => { + return await request.put({ url: `/xxjj/contract-template/update`, data }) +} + +// 删除合同模板 +export const deleteContractTemplate = async (id: number) => { + return await request.delete({ url: `/xxjj/contract-template/delete?id=` + id }) +} + +// 导出合同模板 Excel +export const exportContractTemplate = async (params) => { + return await request.download({ url: `/xxjj/contract-template/export-excel`, params }) +} diff --git a/yunxi-ui-admin-vue3/src/components/UploadFile/src/UploadFile.vue b/yunxi-ui-admin-vue3/src/components/UploadFile/src/UploadFile.vue index c8a3b972..dcd9d823 100644 --- a/yunxi-ui-admin-vue3/src/components/UploadFile/src/UploadFile.vue +++ b/yunxi-ui-admin-vue3/src/components/UploadFile/src/UploadFile.vue @@ -20,7 +20,7 @@ :on-preview="handlePreview" class="upload-file-uploader" > - 选取文件 + {{ title }}