diff --git a/pom.xml b/pom.xml
index 5d1fce6..74308ca 100644
--- a/pom.xml
+++ b/pom.xml
@@ -49,6 +49,7 @@
3.5.5
1.6.3
UTF-8
+ yyyyMMdd-HHmm
diff --git a/urbanops-dependencies/pom.xml b/urbanops-dependencies/pom.xml
index 5f0399f..79802ac 100644
--- a/urbanops-dependencies/pom.xml
+++ b/urbanops-dependencies/pom.xml
@@ -76,6 +76,7 @@
2.1.1
2.1.0
4.7.7-20250808.182223
+ yyyyMMdd-HHmm
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialname/MaterialNameController.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialname/MaterialNameController.java
new file mode 100644
index 0000000..48aa221
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialname/MaterialNameController.java
@@ -0,0 +1,104 @@
+package com.zteits.urbanops.module.garden.controller.admin.materialname;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import jakarta.validation.constraints.*;
+import jakarta.validation.*;
+import jakarta.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import com.zteits.urbanops.framework.common.pojo.PageParam;
+import com.zteits.urbanops.framework.common.pojo.PageResult;
+import com.zteits.urbanops.framework.common.pojo.CommonResult;
+import com.zteits.urbanops.framework.common.util.object.BeanUtils;
+import static com.zteits.urbanops.framework.common.pojo.CommonResult.success;
+
+import com.zteits.urbanops.framework.excel.core.util.ExcelUtils;
+
+import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog;
+import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import com.zteits.urbanops.module.garden.controller.admin.materialname.vo.*;
+import com.zteits.urbanops.module.garden.dal.dataobject.materialname.MaterialNameDO;
+import com.zteits.urbanops.module.garden.service.materialname.MaterialNameService;
+
+@Tag(name = "管理后台 - 物料名称")
+@RestController
+@RequestMapping("/garden/material-name")
+@Validated
+public class MaterialNameController {
+
+ @Resource
+ private MaterialNameService materialNameService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建物料名称")
+ @PreAuthorize("@ss.hasPermission('garden:material-name:create')")
+ public CommonResult createMaterialName(@Valid @RequestBody MaterialNameSaveReqVO createReqVO) {
+ return success(materialNameService.createMaterialName(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新物料名称")
+ @PreAuthorize("@ss.hasPermission('garden:material-name:update')")
+ public CommonResult updateMaterialName(@Valid @RequestBody MaterialNameSaveReqVO updateReqVO) {
+ materialNameService.updateMaterialName(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除物料名称")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('garden:material-name:delete')")
+ public CommonResult deleteMaterialName(@RequestParam("id") Long id) {
+ materialNameService.deleteMaterialName(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除物料名称")
+ @PreAuthorize("@ss.hasPermission('garden:material-name:delete')")
+ public CommonResult deleteMaterialNameList(@RequestParam("ids") List ids) {
+ materialNameService.deleteMaterialNameListByIds(ids);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得物料名称")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('garden:material-name:query')")
+ public CommonResult getMaterialName(@RequestParam("id") Long id) {
+ MaterialNameDO materialName = materialNameService.getMaterialName(id);
+ return success(BeanUtils.toBean(materialName, MaterialNameRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得物料名称分页")
+ @PreAuthorize("@ss.hasPermission('garden:material-name:query')")
+ public CommonResult> getMaterialNamePage(@Valid MaterialNamePageReqVO pageReqVO) {
+ PageResult pageResult = materialNameService.getMaterialNamePage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, MaterialNameRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出物料名称 Excel")
+ @PreAuthorize("@ss.hasPermission('garden:material-name:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportMaterialNameExcel(@Valid MaterialNamePageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = materialNameService.getMaterialNamePage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "物料名称.xls", "数据", MaterialNameRespVO.class,
+ BeanUtils.toBean(list, MaterialNameRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialname/vo/MaterialNamePageReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialname/vo/MaterialNamePageReqVO.java
new file mode 100644
index 0000000..48e0893
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialname/vo/MaterialNamePageReqVO.java
@@ -0,0 +1,32 @@
+package com.zteits.urbanops.module.garden.controller.admin.materialname.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.zteits.urbanops.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 物料名称分页 Request VO")
+@Data
+public class MaterialNamePageReqVO extends PageParam {
+
+ @Schema(description = "物料名称ID", example = "14631")
+ private Long materialId;
+
+ @Schema(description = "物料名称", example = "张三")
+ private String materialName;
+
+ @Schema(description = "备注", example = "你猜")
+ private String remark;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+ @Schema(description = "部门ID", example = "23084")
+ private Long deptId;
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialname/vo/MaterialNameRespVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialname/vo/MaterialNameRespVO.java
new file mode 100644
index 0000000..0a567c4
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialname/vo/MaterialNameRespVO.java
@@ -0,0 +1,39 @@
+package com.zteits.urbanops.module.garden.controller.admin.materialname.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import cn.idev.excel.annotation.*;
+
+@Schema(description = "管理后台 - 物料名称 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class MaterialNameRespVO {
+
+ @Schema(description = "自增主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "32592")
+ @ExcelProperty("自增主键")
+ private Long id;
+
+ @Schema(description = "物料名称ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14631")
+ @ExcelProperty("物料名称ID")
+ private Long materialId;
+
+ @Schema(description = "物料名称", example = "张三")
+ @ExcelProperty("物料名称")
+ private String materialName;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你猜")
+ @ExcelProperty("备注")
+ private String remark;
+
+ @Schema(description = "创建时间")
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+ @Schema(description = "部门ID", example = "23084")
+ @ExcelProperty("部门ID")
+ private Long deptId;
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialname/vo/MaterialNameSaveReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialname/vo/MaterialNameSaveReqVO.java
new file mode 100644
index 0000000..19d9d59
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialname/vo/MaterialNameSaveReqVO.java
@@ -0,0 +1,29 @@
+package com.zteits.urbanops.module.garden.controller.admin.materialname.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - 物料名称新增/修改 Request VO")
+@Data
+public class MaterialNameSaveReqVO {
+
+ @Schema(description = "自增主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "32592")
+ private Long id;
+
+ @Schema(description = "物料名称ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14631")
+ @NotNull(message = "物料名称ID不能为空")
+ private Long materialId;
+
+ @Schema(description = "物料名称", example = "张三")
+ private String materialName;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你猜")
+ @NotEmpty(message = "备注不能为空")
+ private String remark;
+
+ @Schema(description = "部门ID", example = "23084")
+ private Long deptId;
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialspecification/MaterialSpecificationController.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialspecification/MaterialSpecificationController.java
new file mode 100644
index 0000000..4be6de1
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialspecification/MaterialSpecificationController.java
@@ -0,0 +1,104 @@
+package com.zteits.urbanops.module.garden.controller.admin.materialspecification;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import jakarta.validation.constraints.*;
+import jakarta.validation.*;
+import jakarta.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import com.zteits.urbanops.framework.common.pojo.PageParam;
+import com.zteits.urbanops.framework.common.pojo.PageResult;
+import com.zteits.urbanops.framework.common.pojo.CommonResult;
+import com.zteits.urbanops.framework.common.util.object.BeanUtils;
+import static com.zteits.urbanops.framework.common.pojo.CommonResult.success;
+
+import com.zteits.urbanops.framework.excel.core.util.ExcelUtils;
+
+import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog;
+import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import com.zteits.urbanops.module.garden.controller.admin.materialspecification.vo.*;
+import com.zteits.urbanops.module.garden.dal.dataobject.materialspecification.MaterialSpecificationDO;
+import com.zteits.urbanops.module.garden.service.materialspecification.MaterialSpecificationService;
+
+@Tag(name = "管理后台 - 物料规格")
+@RestController
+@RequestMapping("/garden/material-specification")
+@Validated
+public class MaterialSpecificationController {
+
+ @Resource
+ private MaterialSpecificationService materialSpecificationService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建物料规格")
+ @PreAuthorize("@ss.hasPermission('garden:material-specification:create')")
+ public CommonResult createMaterialSpecification(@Valid @RequestBody MaterialSpecificationSaveReqVO createReqVO) {
+ return success(materialSpecificationService.createMaterialSpecification(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新物料规格")
+ @PreAuthorize("@ss.hasPermission('garden:material-specification:update')")
+ public CommonResult updateMaterialSpecification(@Valid @RequestBody MaterialSpecificationSaveReqVO updateReqVO) {
+ materialSpecificationService.updateMaterialSpecification(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除物料规格")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('garden:material-specification:delete')")
+ public CommonResult deleteMaterialSpecification(@RequestParam("id") Long id) {
+ materialSpecificationService.deleteMaterialSpecification(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除物料规格")
+ @PreAuthorize("@ss.hasPermission('garden:material-specification:delete')")
+ public CommonResult deleteMaterialSpecificationList(@RequestParam("ids") List ids) {
+ materialSpecificationService.deleteMaterialSpecificationListByIds(ids);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得物料规格")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('garden:material-specification:query')")
+ public CommonResult getMaterialSpecification(@RequestParam("id") Long id) {
+ MaterialSpecificationDO materialSpecification = materialSpecificationService.getMaterialSpecification(id);
+ return success(BeanUtils.toBean(materialSpecification, MaterialSpecificationRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得物料规格分页")
+ @PreAuthorize("@ss.hasPermission('garden:material-specification:query')")
+ public CommonResult> getMaterialSpecificationPage(@Valid MaterialSpecificationPageReqVO pageReqVO) {
+ PageResult pageResult = materialSpecificationService.getMaterialSpecificationPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, MaterialSpecificationRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出物料规格 Excel")
+ @PreAuthorize("@ss.hasPermission('garden:material-specification:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportMaterialSpecificationExcel(@Valid MaterialSpecificationPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = materialSpecificationService.getMaterialSpecificationPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "物料规格.xls", "数据", MaterialSpecificationRespVO.class,
+ BeanUtils.toBean(list, MaterialSpecificationRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialspecification/vo/MaterialSpecificationPageReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialspecification/vo/MaterialSpecificationPageReqVO.java
new file mode 100644
index 0000000..4fcf08f
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialspecification/vo/MaterialSpecificationPageReqVO.java
@@ -0,0 +1,32 @@
+package com.zteits.urbanops.module.garden.controller.admin.materialspecification.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.zteits.urbanops.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 物料规格分页 Request VO")
+@Data
+public class MaterialSpecificationPageReqVO extends PageParam {
+
+ @Schema(description = "规格编码")
+ private String specCode;
+
+ @Schema(description = "规格名称")
+ private String specifications;
+
+ @Schema(description = "备注", example = "你猜")
+ private String remark;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+ @Schema(description = "部门ID", example = "18158")
+ private Long deptId;
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialspecification/vo/MaterialSpecificationRespVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialspecification/vo/MaterialSpecificationRespVO.java
new file mode 100644
index 0000000..cd5bae5
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialspecification/vo/MaterialSpecificationRespVO.java
@@ -0,0 +1,39 @@
+package com.zteits.urbanops.module.garden.controller.admin.materialspecification.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import cn.idev.excel.annotation.*;
+
+@Schema(description = "管理后台 - 物料规格 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class MaterialSpecificationRespVO {
+
+ @Schema(description = "自增主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "15081")
+ @ExcelProperty("自增主键")
+ private Long id;
+
+ @Schema(description = "规格编码")
+ @ExcelProperty("规格编码")
+ private String specCode;
+
+ @Schema(description = "规格名称", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("规格名称")
+ private String specifications;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你猜")
+ @ExcelProperty("备注")
+ private String remark;
+
+ @Schema(description = "创建时间")
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+ @Schema(description = "部门ID", example = "18158")
+ @ExcelProperty("部门ID")
+ private Long deptId;
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialspecification/vo/MaterialSpecificationSaveReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialspecification/vo/MaterialSpecificationSaveReqVO.java
new file mode 100644
index 0000000..a6771fe
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialspecification/vo/MaterialSpecificationSaveReqVO.java
@@ -0,0 +1,29 @@
+package com.zteits.urbanops.module.garden.controller.admin.materialspecification.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - 物料规格新增/修改 Request VO")
+@Data
+public class MaterialSpecificationSaveReqVO {
+
+ @Schema(description = "自增主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "15081")
+ private Long id;
+
+ @Schema(description = "规格编码")
+ private String specCode;
+
+ @Schema(description = "规格名称", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "规格名称不能为空")
+ private String specifications;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你猜")
+ @NotEmpty(message = "备注不能为空")
+ private String remark;
+
+ @Schema(description = "部门ID", example = "18158")
+ private Long deptId;
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialunit/MaterialUnitController.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialunit/MaterialUnitController.java
new file mode 100644
index 0000000..7f3e4af
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialunit/MaterialUnitController.java
@@ -0,0 +1,104 @@
+package com.zteits.urbanops.module.garden.controller.admin.materialunit;
+
+import org.springframework.web.bind.annotation.*;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import jakarta.validation.constraints.*;
+import jakarta.validation.*;
+import jakarta.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import com.zteits.urbanops.framework.common.pojo.PageParam;
+import com.zteits.urbanops.framework.common.pojo.PageResult;
+import com.zteits.urbanops.framework.common.pojo.CommonResult;
+import com.zteits.urbanops.framework.common.util.object.BeanUtils;
+import static com.zteits.urbanops.framework.common.pojo.CommonResult.success;
+
+import com.zteits.urbanops.framework.excel.core.util.ExcelUtils;
+
+import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog;
+import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import com.zteits.urbanops.module.garden.controller.admin.materialunit.vo.*;
+import com.zteits.urbanops.module.garden.dal.dataobject.materialunit.MaterialUnitDO;
+import com.zteits.urbanops.module.garden.service.materialunit.MaterialUnitService;
+
+@Tag(name = "管理后台 - 物料单位")
+@RestController
+@RequestMapping("/garden/material-unit")
+@Validated
+public class MaterialUnitController {
+
+ @Resource
+ private MaterialUnitService materialUnitService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建物料单位")
+ @PreAuthorize("@ss.hasPermission('garden:material-unit:create')")
+ public CommonResult createMaterialUnit(@Valid @RequestBody MaterialUnitSaveReqVO createReqVO) {
+ return success(materialUnitService.createMaterialUnit(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新物料单位")
+ @PreAuthorize("@ss.hasPermission('garden:material-unit:update')")
+ public CommonResult updateMaterialUnit(@Valid @RequestBody MaterialUnitSaveReqVO updateReqVO) {
+ materialUnitService.updateMaterialUnit(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除物料单位")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('garden:material-unit:delete')")
+ public CommonResult deleteMaterialUnit(@RequestParam("id") Long id) {
+ materialUnitService.deleteMaterialUnit(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除物料单位")
+ @PreAuthorize("@ss.hasPermission('garden:material-unit:delete')")
+ public CommonResult deleteMaterialUnitList(@RequestParam("ids") List ids) {
+ materialUnitService.deleteMaterialUnitListByIds(ids);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得物料单位")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('garden:material-unit:query')")
+ public CommonResult getMaterialUnit(@RequestParam("id") Long id) {
+ MaterialUnitDO materialUnit = materialUnitService.getMaterialUnit(id);
+ return success(BeanUtils.toBean(materialUnit, MaterialUnitRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得物料单位分页")
+ @PreAuthorize("@ss.hasPermission('garden:material-unit:query')")
+ public CommonResult> getMaterialUnitPage(@Valid MaterialUnitPageReqVO pageReqVO) {
+ PageResult pageResult = materialUnitService.getMaterialUnitPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, MaterialUnitRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出物料单位 Excel")
+ @PreAuthorize("@ss.hasPermission('garden:material-unit:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportMaterialUnitExcel(@Valid MaterialUnitPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = materialUnitService.getMaterialUnitPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "物料单位.xls", "数据", MaterialUnitRespVO.class,
+ BeanUtils.toBean(list, MaterialUnitRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialunit/vo/MaterialUnitPageReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialunit/vo/MaterialUnitPageReqVO.java
new file mode 100644
index 0000000..8b846ce
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialunit/vo/MaterialUnitPageReqVO.java
@@ -0,0 +1,32 @@
+package com.zteits.urbanops.module.garden.controller.admin.materialunit.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.zteits.urbanops.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 物料单位分页 Request VO")
+@Data
+public class MaterialUnitPageReqVO extends PageParam {
+
+ @Schema(description = "单位ID", example = "22342")
+ private Long unitId;
+
+ @Schema(description = "单位名称", example = "张三")
+ private String unitName;
+
+ @Schema(description = "备注", example = "你说的对")
+ private String remark;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+ @Schema(description = "部门ID", example = "8809")
+ private Long deptId;
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialunit/vo/MaterialUnitRespVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialunit/vo/MaterialUnitRespVO.java
new file mode 100644
index 0000000..94e4452
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialunit/vo/MaterialUnitRespVO.java
@@ -0,0 +1,39 @@
+package com.zteits.urbanops.module.garden.controller.admin.materialunit.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import cn.idev.excel.annotation.*;
+
+@Schema(description = "管理后台 - 物料单位 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class MaterialUnitRespVO {
+
+ @Schema(description = "自增主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "8413")
+ @ExcelProperty("自增主键")
+ private Long id;
+
+ @Schema(description = "单位ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "22342")
+ @ExcelProperty("单位ID")
+ private Long unitId;
+
+ @Schema(description = "单位名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
+ @ExcelProperty("单位名称")
+ private String unitName;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对")
+ @ExcelProperty("备注")
+ private String remark;
+
+ @Schema(description = "创建时间")
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+ @Schema(description = "部门ID", example = "8809")
+ @ExcelProperty("部门ID")
+ private Long deptId;
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialunit/vo/MaterialUnitSaveReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialunit/vo/MaterialUnitSaveReqVO.java
new file mode 100644
index 0000000..7f3120a
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/materialunit/vo/MaterialUnitSaveReqVO.java
@@ -0,0 +1,30 @@
+package com.zteits.urbanops.module.garden.controller.admin.materialunit.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+
+@Schema(description = "管理后台 - 物料单位新增/修改 Request VO")
+@Data
+public class MaterialUnitSaveReqVO {
+
+ @Schema(description = "自增主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "8413")
+ private Long id;
+
+ @Schema(description = "单位ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "22342")
+ @NotNull(message = "单位ID不能为空")
+ private Long unitId;
+
+ @Schema(description = "单位名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
+ @NotEmpty(message = "单位名称不能为空")
+ private String unitName;
+
+ @Schema(description = "备注", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对")
+ @NotEmpty(message = "备注不能为空")
+ private String remark;
+
+ @Schema(description = "部门ID", example = "8809")
+ private Long deptId;
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/materialname/MaterialNameDO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/materialname/MaterialNameDO.java
new file mode 100644
index 0000000..c78f41e
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/materialname/MaterialNameDO.java
@@ -0,0 +1,48 @@
+package com.zteits.urbanops.module.garden.dal.dataobject.materialname;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import com.zteits.urbanops.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 物料名称 DO
+ *
+ * @author 超级管理员
+ */
+@TableName("garden_material_name")
+@KeySequence("garden_material_name_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class MaterialNameDO extends BaseDO {
+
+ /**
+ * 自增主键
+ */
+ @TableId
+ private Long id;
+ /**
+ * 物料名称ID
+ */
+ private Long materialId;
+ /**
+ * 物料名称
+ */
+ private String materialName;
+ /**
+ * 备注
+ */
+ private String remark;
+ /**
+ * 部门ID
+ */
+ private Long deptId;
+
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/materialspecification/MaterialSpecificationDO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/materialspecification/MaterialSpecificationDO.java
new file mode 100644
index 0000000..79160e7
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/materialspecification/MaterialSpecificationDO.java
@@ -0,0 +1,48 @@
+package com.zteits.urbanops.module.garden.dal.dataobject.materialspecification;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import com.zteits.urbanops.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 物料规格 DO
+ *
+ * @author 超级管理员
+ */
+@TableName("garden_material_specification")
+@KeySequence("garden_material_specification_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class MaterialSpecificationDO extends BaseDO {
+
+ /**
+ * 自增主键
+ */
+ @TableId
+ private Long id;
+ /**
+ * 规格编码
+ */
+ private String specCode;
+ /**
+ * 规格名称
+ */
+ private String specifications;
+ /**
+ * 备注
+ */
+ private String remark;
+ /**
+ * 部门ID
+ */
+ private Long deptId;
+
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/materialunit/MaterialUnitDO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/materialunit/MaterialUnitDO.java
new file mode 100644
index 0000000..00fd154
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/materialunit/MaterialUnitDO.java
@@ -0,0 +1,48 @@
+package com.zteits.urbanops.module.garden.dal.dataobject.materialunit;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import com.zteits.urbanops.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 物料单位 DO
+ *
+ * @author 超级管理员
+ */
+@TableName("garden_material_unit")
+@KeySequence("garden_material_unit_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class MaterialUnitDO extends BaseDO {
+
+ /**
+ * 自增主键
+ */
+ @TableId
+ private Long id;
+ /**
+ * 单位ID
+ */
+ private Long unitId;
+ /**
+ * 单位名称
+ */
+ private String unitName;
+ /**
+ * 备注
+ */
+ private String remark;
+ /**
+ * 部门ID
+ */
+ private Long deptId;
+
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/materialname/MaterialNameMapper.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/materialname/MaterialNameMapper.java
new file mode 100644
index 0000000..81083a2
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/materialname/MaterialNameMapper.java
@@ -0,0 +1,30 @@
+package com.zteits.urbanops.module.garden.dal.mysql.materialname;
+
+import java.util.*;
+
+import com.zteits.urbanops.framework.common.pojo.PageResult;
+import com.zteits.urbanops.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.zteits.urbanops.framework.mybatis.core.mapper.BaseMapperX;
+import com.zteits.urbanops.module.garden.dal.dataobject.materialname.MaterialNameDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.zteits.urbanops.module.garden.controller.admin.materialname.vo.*;
+
+/**
+ * 物料名称 Mapper
+ *
+ * @author 超级管理员
+ */
+@Mapper
+public interface MaterialNameMapper extends BaseMapperX {
+
+ default PageResult selectPage(MaterialNamePageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(MaterialNameDO::getMaterialId, reqVO.getMaterialId())
+ .likeIfPresent(MaterialNameDO::getMaterialName, reqVO.getMaterialName())
+ .eqIfPresent(MaterialNameDO::getRemark, reqVO.getRemark())
+ .betweenIfPresent(MaterialNameDO::getCreateTime, reqVO.getCreateTime())
+ .eqIfPresent(MaterialNameDO::getDeptId, reqVO.getDeptId())
+ .orderByDesc(MaterialNameDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/materialspecification/MaterialSpecificationMapper.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/materialspecification/MaterialSpecificationMapper.java
new file mode 100644
index 0000000..000dd23
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/materialspecification/MaterialSpecificationMapper.java
@@ -0,0 +1,30 @@
+package com.zteits.urbanops.module.garden.dal.mysql.materialspecification;
+
+import java.util.*;
+
+import com.zteits.urbanops.framework.common.pojo.PageResult;
+import com.zteits.urbanops.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.zteits.urbanops.framework.mybatis.core.mapper.BaseMapperX;
+import com.zteits.urbanops.module.garden.dal.dataobject.materialspecification.MaterialSpecificationDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.zteits.urbanops.module.garden.controller.admin.materialspecification.vo.*;
+
+/**
+ * 物料规格 Mapper
+ *
+ * @author 超级管理员
+ */
+@Mapper
+public interface MaterialSpecificationMapper extends BaseMapperX {
+
+ default PageResult selectPage(MaterialSpecificationPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(MaterialSpecificationDO::getSpecCode, reqVO.getSpecCode())
+ .eqIfPresent(MaterialSpecificationDO::getSpecifications, reqVO.getSpecifications())
+ .eqIfPresent(MaterialSpecificationDO::getRemark, reqVO.getRemark())
+ .betweenIfPresent(MaterialSpecificationDO::getCreateTime, reqVO.getCreateTime())
+ .eqIfPresent(MaterialSpecificationDO::getDeptId, reqVO.getDeptId())
+ .orderByDesc(MaterialSpecificationDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/materialunit/MaterialUnitMapper.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/materialunit/MaterialUnitMapper.java
new file mode 100644
index 0000000..286b54f
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/materialunit/MaterialUnitMapper.java
@@ -0,0 +1,30 @@
+package com.zteits.urbanops.module.garden.dal.mysql.materialunit;
+
+import java.util.*;
+
+import com.zteits.urbanops.framework.common.pojo.PageResult;
+import com.zteits.urbanops.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.zteits.urbanops.framework.mybatis.core.mapper.BaseMapperX;
+import com.zteits.urbanops.module.garden.dal.dataobject.materialunit.MaterialUnitDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.zteits.urbanops.module.garden.controller.admin.materialunit.vo.*;
+
+/**
+ * 物料单位 Mapper
+ *
+ * @author 超级管理员
+ */
+@Mapper
+public interface MaterialUnitMapper extends BaseMapperX {
+
+ default PageResult selectPage(MaterialUnitPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(MaterialUnitDO::getUnitId, reqVO.getUnitId())
+ .likeIfPresent(MaterialUnitDO::getUnitName, reqVO.getUnitName())
+ .eqIfPresent(MaterialUnitDO::getRemark, reqVO.getRemark())
+ .betweenIfPresent(MaterialUnitDO::getCreateTime, reqVO.getCreateTime())
+ .eqIfPresent(MaterialUnitDO::getDeptId, reqVO.getDeptId())
+ .orderByDesc(MaterialUnitDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/ErrorCodeConstants.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/ErrorCodeConstants.java
index 1d6e876..11190b3 100644
--- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/ErrorCodeConstants.java
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/enums/ErrorCodeConstants.java
@@ -114,6 +114,10 @@ public interface ErrorCodeConstants {
ErrorCode MATERIAL_INVENTORY_OUT_NOT_EXISTS = new ErrorCode(1-100-004-005, "物料出库不存在");
ErrorCode MATERIAL_INVENTORY_NOT_EXISTS = new ErrorCode(1-100-004-006, "物料库存不存在");
+ ErrorCode MATERIAL_NAME_NOT_EXISTS = new ErrorCode(1-100-004-007, "物料名称不存在");
+
+ ErrorCode MATERIAL_SPECIFICATION_NOT_EXISTS = new ErrorCode(1-100-004-010, "物料规格不存在");
+ ErrorCode MATERIAL_UNIT_NOT_EXISTS = new ErrorCode(1-100-004-011, "物料单位不存在");
ErrorCode OLDTREES_NOT_EXISTS = new ErrorCode(1-100-005-001, "古树名木不存在");
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/materialname/MaterialNameService.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/materialname/MaterialNameService.java
new file mode 100644
index 0000000..d231f07
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/materialname/MaterialNameService.java
@@ -0,0 +1,62 @@
+package com.zteits.urbanops.module.garden.service.materialname;
+
+import java.util.*;
+import jakarta.validation.*;
+import com.zteits.urbanops.module.garden.controller.admin.materialname.vo.*;
+import com.zteits.urbanops.module.garden.dal.dataobject.materialname.MaterialNameDO;
+import com.zteits.urbanops.framework.common.pojo.PageResult;
+import com.zteits.urbanops.framework.common.pojo.PageParam;
+
+/**
+ * 物料名称 Service 接口
+ *
+ * @author 超级管理员
+ */
+public interface MaterialNameService {
+
+ /**
+ * 创建物料名称
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ Long createMaterialName(@Valid MaterialNameSaveReqVO createReqVO);
+
+ /**
+ * 更新物料名称
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateMaterialName(@Valid MaterialNameSaveReqVO updateReqVO);
+
+ /**
+ * 删除物料名称
+ *
+ * @param id 编号
+ */
+ void deleteMaterialName(Long id);
+
+ /**
+ * 批量删除物料名称
+ *
+ * @param ids 编号
+ */
+ void deleteMaterialNameListByIds(List ids);
+
+ /**
+ * 获得物料名称
+ *
+ * @param id 编号
+ * @return 物料名称
+ */
+ MaterialNameDO getMaterialName(Long id);
+
+ /**
+ * 获得物料名称分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 物料名称分页
+ */
+ PageResult getMaterialNamePage(MaterialNamePageReqVO pageReqVO);
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/materialname/MaterialNameServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/materialname/MaterialNameServiceImpl.java
new file mode 100644
index 0000000..cc56f82
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/materialname/MaterialNameServiceImpl.java
@@ -0,0 +1,85 @@
+package com.zteits.urbanops.module.garden.service.materialname;
+
+import cn.hutool.core.collection.CollUtil;
+import org.springframework.stereotype.Service;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import com.zteits.urbanops.module.garden.controller.admin.materialname.vo.*;
+import com.zteits.urbanops.module.garden.dal.dataobject.materialname.MaterialNameDO;
+import com.zteits.urbanops.framework.common.pojo.PageResult;
+import com.zteits.urbanops.framework.common.pojo.PageParam;
+import com.zteits.urbanops.framework.common.util.object.BeanUtils;
+
+import com.zteits.urbanops.module.garden.dal.mysql.materialname.MaterialNameMapper;
+
+import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.convertList;
+import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.diffList;
+import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.*;
+
+/**
+ * 物料名称 Service 实现类
+ *
+ * @author 超级管理员
+ */
+@Service
+@Validated
+public class MaterialNameServiceImpl implements MaterialNameService {
+
+ @Resource
+ private MaterialNameMapper materialNameMapper;
+
+ @Override
+ public Long createMaterialName(MaterialNameSaveReqVO createReqVO) {
+ // 插入
+ MaterialNameDO materialName = BeanUtils.toBean(createReqVO, MaterialNameDO.class);
+ materialNameMapper.insert(materialName);
+
+ // 返回
+ return materialName.getId();
+ }
+
+ @Override
+ public void updateMaterialName(MaterialNameSaveReqVO updateReqVO) {
+ // 校验存在
+ validateMaterialNameExists(updateReqVO.getId());
+ // 更新
+ MaterialNameDO updateObj = BeanUtils.toBean(updateReqVO, MaterialNameDO.class);
+ materialNameMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteMaterialName(Long id) {
+ // 校验存在
+ validateMaterialNameExists(id);
+ // 删除
+ materialNameMapper.deleteById(id);
+ }
+
+ @Override
+ public void deleteMaterialNameListByIds(List ids) {
+ // 删除
+ materialNameMapper.deleteByIds(ids);
+ }
+
+
+ private void validateMaterialNameExists(Long id) {
+ if (materialNameMapper.selectById(id) == null) {
+ throw exception(MATERIAL_NAME_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public MaterialNameDO getMaterialName(Long id) {
+ return materialNameMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult getMaterialNamePage(MaterialNamePageReqVO pageReqVO) {
+ return materialNameMapper.selectPage(pageReqVO);
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/materialspecification/MaterialSpecificationService.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/materialspecification/MaterialSpecificationService.java
new file mode 100644
index 0000000..45a1852
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/materialspecification/MaterialSpecificationService.java
@@ -0,0 +1,62 @@
+package com.zteits.urbanops.module.garden.service.materialspecification;
+
+import java.util.*;
+import jakarta.validation.*;
+import com.zteits.urbanops.module.garden.controller.admin.materialspecification.vo.*;
+import com.zteits.urbanops.module.garden.dal.dataobject.materialspecification.MaterialSpecificationDO;
+import com.zteits.urbanops.framework.common.pojo.PageResult;
+import com.zteits.urbanops.framework.common.pojo.PageParam;
+
+/**
+ * 物料规格 Service 接口
+ *
+ * @author 超级管理员
+ */
+public interface MaterialSpecificationService {
+
+ /**
+ * 创建物料规格
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ Long createMaterialSpecification(@Valid MaterialSpecificationSaveReqVO createReqVO);
+
+ /**
+ * 更新物料规格
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateMaterialSpecification(@Valid MaterialSpecificationSaveReqVO updateReqVO);
+
+ /**
+ * 删除物料规格
+ *
+ * @param id 编号
+ */
+ void deleteMaterialSpecification(Long id);
+
+ /**
+ * 批量删除物料规格
+ *
+ * @param ids 编号
+ */
+ void deleteMaterialSpecificationListByIds(List ids);
+
+ /**
+ * 获得物料规格
+ *
+ * @param id 编号
+ * @return 物料规格
+ */
+ MaterialSpecificationDO getMaterialSpecification(Long id);
+
+ /**
+ * 获得物料规格分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 物料规格分页
+ */
+ PageResult getMaterialSpecificationPage(MaterialSpecificationPageReqVO pageReqVO);
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/materialspecification/MaterialSpecificationServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/materialspecification/MaterialSpecificationServiceImpl.java
new file mode 100644
index 0000000..d04dd6d
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/materialspecification/MaterialSpecificationServiceImpl.java
@@ -0,0 +1,85 @@
+package com.zteits.urbanops.module.garden.service.materialspecification;
+
+import cn.hutool.core.collection.CollUtil;
+import org.springframework.stereotype.Service;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import com.zteits.urbanops.module.garden.controller.admin.materialspecification.vo.*;
+import com.zteits.urbanops.module.garden.dal.dataobject.materialspecification.MaterialSpecificationDO;
+import com.zteits.urbanops.framework.common.pojo.PageResult;
+import com.zteits.urbanops.framework.common.pojo.PageParam;
+import com.zteits.urbanops.framework.common.util.object.BeanUtils;
+
+import com.zteits.urbanops.module.garden.dal.mysql.materialspecification.MaterialSpecificationMapper;
+
+import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.convertList;
+import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.diffList;
+import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.*;
+
+/**
+ * 物料规格 Service 实现类
+ *
+ * @author 超级管理员
+ */
+@Service
+@Validated
+public class MaterialSpecificationServiceImpl implements MaterialSpecificationService {
+
+ @Resource
+ private MaterialSpecificationMapper materialSpecificationMapper;
+
+ @Override
+ public Long createMaterialSpecification(MaterialSpecificationSaveReqVO createReqVO) {
+ // 插入
+ MaterialSpecificationDO materialSpecification = BeanUtils.toBean(createReqVO, MaterialSpecificationDO.class);
+ materialSpecificationMapper.insert(materialSpecification);
+
+ // 返回
+ return materialSpecification.getId();
+ }
+
+ @Override
+ public void updateMaterialSpecification(MaterialSpecificationSaveReqVO updateReqVO) {
+ // 校验存在
+ validateMaterialSpecificationExists(updateReqVO.getId());
+ // 更新
+ MaterialSpecificationDO updateObj = BeanUtils.toBean(updateReqVO, MaterialSpecificationDO.class);
+ materialSpecificationMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteMaterialSpecification(Long id) {
+ // 校验存在
+ validateMaterialSpecificationExists(id);
+ // 删除
+ materialSpecificationMapper.deleteById(id);
+ }
+
+ @Override
+ public void deleteMaterialSpecificationListByIds(List ids) {
+ // 删除
+ materialSpecificationMapper.deleteByIds(ids);
+ }
+
+
+ private void validateMaterialSpecificationExists(Long id) {
+ if (materialSpecificationMapper.selectById(id) == null) {
+ throw exception(MATERIAL_SPECIFICATION_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public MaterialSpecificationDO getMaterialSpecification(Long id) {
+ return materialSpecificationMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult getMaterialSpecificationPage(MaterialSpecificationPageReqVO pageReqVO) {
+ return materialSpecificationMapper.selectPage(pageReqVO);
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/materialunit/MaterialUnitService.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/materialunit/MaterialUnitService.java
new file mode 100644
index 0000000..9b814b3
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/materialunit/MaterialUnitService.java
@@ -0,0 +1,62 @@
+package com.zteits.urbanops.module.garden.service.materialunit;
+
+import java.util.*;
+import jakarta.validation.*;
+import com.zteits.urbanops.module.garden.controller.admin.materialunit.vo.*;
+import com.zteits.urbanops.module.garden.dal.dataobject.materialunit.MaterialUnitDO;
+import com.zteits.urbanops.framework.common.pojo.PageResult;
+import com.zteits.urbanops.framework.common.pojo.PageParam;
+
+/**
+ * 物料单位 Service 接口
+ *
+ * @author 超级管理员
+ */
+public interface MaterialUnitService {
+
+ /**
+ * 创建物料单位
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ Long createMaterialUnit(@Valid MaterialUnitSaveReqVO createReqVO);
+
+ /**
+ * 更新物料单位
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateMaterialUnit(@Valid MaterialUnitSaveReqVO updateReqVO);
+
+ /**
+ * 删除物料单位
+ *
+ * @param id 编号
+ */
+ void deleteMaterialUnit(Long id);
+
+ /**
+ * 批量删除物料单位
+ *
+ * @param ids 编号
+ */
+ void deleteMaterialUnitListByIds(List ids);
+
+ /**
+ * 获得物料单位
+ *
+ * @param id 编号
+ * @return 物料单位
+ */
+ MaterialUnitDO getMaterialUnit(Long id);
+
+ /**
+ * 获得物料单位分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 物料单位分页
+ */
+ PageResult getMaterialUnitPage(MaterialUnitPageReqVO pageReqVO);
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/materialunit/MaterialUnitServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/materialunit/MaterialUnitServiceImpl.java
new file mode 100644
index 0000000..a86ae66
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/materialunit/MaterialUnitServiceImpl.java
@@ -0,0 +1,85 @@
+package com.zteits.urbanops.module.garden.service.materialunit;
+
+import cn.hutool.core.collection.CollUtil;
+import org.springframework.stereotype.Service;
+import jakarta.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import com.zteits.urbanops.module.garden.controller.admin.materialunit.vo.*;
+import com.zteits.urbanops.module.garden.dal.dataobject.materialunit.MaterialUnitDO;
+import com.zteits.urbanops.framework.common.pojo.PageResult;
+import com.zteits.urbanops.framework.common.pojo.PageParam;
+import com.zteits.urbanops.framework.common.util.object.BeanUtils;
+
+import com.zteits.urbanops.module.garden.dal.mysql.materialunit.MaterialUnitMapper;
+
+import static com.zteits.urbanops.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.convertList;
+import static com.zteits.urbanops.framework.common.util.collection.CollectionUtils.diffList;
+import static com.zteits.urbanops.module.garden.enums.ErrorCodeConstants.*;
+
+/**
+ * 物料单位 Service 实现类
+ *
+ * @author 超级管理员
+ */
+@Service
+@Validated
+public class MaterialUnitServiceImpl implements MaterialUnitService {
+
+ @Resource
+ private MaterialUnitMapper materialUnitMapper;
+
+ @Override
+ public Long createMaterialUnit(MaterialUnitSaveReqVO createReqVO) {
+ // 插入
+ MaterialUnitDO materialUnit = BeanUtils.toBean(createReqVO, MaterialUnitDO.class);
+ materialUnitMapper.insert(materialUnit);
+
+ // 返回
+ return materialUnit.getId();
+ }
+
+ @Override
+ public void updateMaterialUnit(MaterialUnitSaveReqVO updateReqVO) {
+ // 校验存在
+ validateMaterialUnitExists(updateReqVO.getId());
+ // 更新
+ MaterialUnitDO updateObj = BeanUtils.toBean(updateReqVO, MaterialUnitDO.class);
+ materialUnitMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteMaterialUnit(Long id) {
+ // 校验存在
+ validateMaterialUnitExists(id);
+ // 删除
+ materialUnitMapper.deleteById(id);
+ }
+
+ @Override
+ public void deleteMaterialUnitListByIds(List ids) {
+ // 删除
+ materialUnitMapper.deleteByIds(ids);
+ }
+
+
+ private void validateMaterialUnitExists(Long id) {
+ if (materialUnitMapper.selectById(id) == null) {
+ throw exception(MATERIAL_UNIT_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public MaterialUnitDO getMaterialUnit(Long id) {
+ return materialUnitMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult getMaterialUnitPage(MaterialUnitPageReqVO pageReqVO) {
+ return materialUnitMapper.selectPage(pageReqVO);
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/resources/mapper/materialname/MaterialNameMapper.xml b/urbanops-module-garden/src/main/resources/mapper/materialname/MaterialNameMapper.xml
new file mode 100644
index 0000000..56077b0
--- /dev/null
+++ b/urbanops-module-garden/src/main/resources/mapper/materialname/MaterialNameMapper.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/resources/mapper/materialspecification/MaterialSpecificationMapper.xml b/urbanops-module-garden/src/main/resources/mapper/materialspecification/MaterialSpecificationMapper.xml
new file mode 100644
index 0000000..f22e79e
--- /dev/null
+++ b/urbanops-module-garden/src/main/resources/mapper/materialspecification/MaterialSpecificationMapper.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/resources/mapper/materialunit/MaterialUnitMapper.xml b/urbanops-module-garden/src/main/resources/mapper/materialunit/MaterialUnitMapper.xml
new file mode 100644
index 0000000..b3c221b
--- /dev/null
+++ b/urbanops-module-garden/src/main/resources/mapper/materialunit/MaterialUnitMapper.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/urbanops-server/pom.xml b/urbanops-server/pom.xml
index 206fb83..816a63b 100644
--- a/urbanops-server/pom.xml
+++ b/urbanops-server/pom.xml
@@ -150,7 +150,7 @@
- ${project.artifactId}
+ ${project.artifactId}-${maven.build.timestamp}