list) {
+ for (TreeDO gardenTree : list) {
+ String maintainUnit = DictFrameworkUtils.parseDictDataValue("maintain_unit", gardenTree.getMaintainunit());
+ gardenTree.setMaintainunit(maintainUnit);
+
+ String street = DictFrameworkUtils.parseDictDataValue("street_belong", gardenTree.getStreet());
+ gardenTree.setStreet(street);
+
+ String ownership = DictFrameworkUtils.parseDictDataValue("tree_ownership", gardenTree.getOldtreeownership());
+ gardenTree.setOldtreeownership(ownership);
+
+ String growthVigor = DictFrameworkUtils.parseDictDataValue("growth_vigor", gardenTree.getGrowthvigor());
+ gardenTree.setGrowthvigor(growthVigor);
+ String treeLevel = DictFrameworkUtils.parseDictDataValue("tree_level", gardenTree.getTreelevel());
+ gardenTree.setTreelevel(treeLevel);
+ String dataState = DictFrameworkUtils.parseDictDataValue("data_state", gardenTree.getDatastate());
+ gardenTree.setDatastate(dataState);
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/treerecord/vo/CompanyDeptRoadVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/tree/vo/CompanyDeptRoadVO.java
index 913d51b..0417e5d 100644
--- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/treerecord/vo/CompanyDeptRoadVO.java
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/tree/vo/CompanyDeptRoadVO.java
@@ -1,13 +1,20 @@
-package com.zteits.urbanops.module.garden.controller.admin.treerecord.vo;
+package com.zteits.urbanops.module.garden.controller.admin.tree.vo;
import lombok.Data;
import java.util.List;
+/**
+ * Description:
+ *
+ * Author: gelinghu
+ * Date: 2025年8月23 16:07
+ */
@Data
public class CompanyDeptRoadVO {
- private String companyId;
+ private Long companyId;
private String companyName;
+
private List depts;
@Data
@@ -21,9 +28,11 @@ public class CompanyDeptRoadVO {
public static class RoadVO {
private Long roadId;
private String roadName;
- private Long treeCount;
- private Long recordedCount;
- private String startRemark;
- private String endRemark;
+ private Integer treeCount; // 总树木数
+ private Integer recordedCount; // 已录入行道树数
+ private String startRemark; // 起点
+ private String endRemark; // 终点
}
-}
\ No newline at end of file
+}
+
+
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/tree/vo/RoadTreeVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/tree/vo/RoadTreeVO.java
new file mode 100644
index 0000000..176e736
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/tree/vo/RoadTreeVO.java
@@ -0,0 +1,24 @@
+package com.zteits.urbanops.module.garden.controller.admin.tree.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * Description:
+ *
+ * Author: gelinghu
+ * Date: 2025年8月23 16:07
+ */
+@Data
+public class RoadTreeVO {
+ private Long id;
+ private String treetype; // 树种
+ private String treeheight; // 高度
+ private String dbh; // 胸径
+ private String treenumber; // 编号
+ private Date updatetime; // 最后修改时间
+ private String treephoto; // 图片
+}
+
+
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/treerecord/GardenTreeDO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/tree/vo/TreePageReqVO.java
index 96ead8a..c10ec81 100644
--- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/treerecord/GardenTreeDO.java
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/tree/vo/TreePageReqVO.java
@@ -1,49 +1,120 @@
-package com.zteits.urbanops.module.garden.dal.dataobject.treerecord;
+package com.zteits.urbanops.module.garden.controller.admin.tree.vo;
-import com.baomidou.mybatisplus.annotation.KeySequence;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.zteits.urbanops.framework.mybatis.core.dataobject.BaseDO;
-import lombok.Data;
-import lombok.experimental.Accessors;
+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;
-@TableName("garden_tree")
-@KeySequence("garden_tree_seq")
+import static com.zteits.urbanops.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 一树一档案分页 Request VO")
@Data
-@Accessors(chain = false)
-public class GardenTreeDO extends BaseDO {
- @TableId
- private Long id;
+public class TreePageReqVO extends PageParam {
+
+ @Schema(description = "编号")
private String treenumber;
+
+ @Schema(description = "拉丁名", example = "李四")
private String latinname;
+
+ @Schema(description = "树种", example = "2")
private String treetype;
+
+ @Schema(description = "树高")
private String treeheight;
+
+ @Schema(description = "冠幅")
private String canopy;
+
+ @Schema(description = "胸径")
private String dbh;
+
+ @Schema(description = "生长势--数据字典:正常,衰弱,濒危,死亡")
private String growthvigor;
+
+ @Schema(description = "级别--数据字典:一级、两级")
private String treelevel;
+
+ @Schema(description = "经度")
private String longitude;
+
+ @Schema(description = "纬度")
private String latitude;
+
+ @Schema(description = "所在地")
private String location;
+
+ @Schema(description = "养护单位")
private String maintainunit;
+
+ @Schema(description = "管护单位")
private String managedutyunit;
+
+ @Schema(description = "道路id")
private Long road;
+
+ @Schema(description = "所属街道")
private String street;
+
+ @Schema(description = "权属分类--数据字典:专业绿地和单位(居住区)")
private String oldtreeownership;
+
+ @Schema(description = "数据状态(已更新、未更新)")
private String datastate;
+
+ @Schema(description = "估测树龄")
private String estimationtreeage;
+
+ @Schema(description = "冠幅东西")
private String canopyeastwest;
+
+ @Schema(description = "冠幅南北")
private String canopysouthnorth;
+
+ @Schema(description = "干周")
private String weekday;
+
+ @Schema(description = "生长地点")
private String growlocation;
+
+ @Schema(description = "生长环境")
private String growthenvironment;
+
+ @Schema(description = "树木照片一")
private String treephotoone;
+
+ @Schema(description = "古树照片二")
private String treephototwo;
+
+ @Schema(description = "古树照片三")
private String treephotothree;
+
+ @Schema(description = "古树照片四")
private String treephotofour;
+
+ @Schema(description = "古树照片五")
private String treephotofive;
+
+ @Schema(description = "创建者")
private String createby;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createtime;
+
+ @Schema(description = "更新者")
private String updateby;
- private Long deptId;
+
+ @Schema(description = "更新时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] updatetime;
+
+ @Schema(description = "备注", example = "你说的对")
private String remark;
+
+ @Schema(description = "部门id", example = "17101")
+ 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/tree/vo/TreeRespVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/tree/vo/TreeRespVO.java
new file mode 100644
index 0000000..3df77ec
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/tree/vo/TreeRespVO.java
@@ -0,0 +1,155 @@
+package com.zteits.urbanops.module.garden.controller.admin.tree.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 TreeRespVO {
+
+ @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "28236")
+ @ExcelProperty("id")
+ private Long id;
+
+ @Schema(description = "编号")
+ @ExcelProperty("编号")
+ private String treenumber;
+
+ @Schema(description = "拉丁名", example = "李四")
+ @ExcelProperty("拉丁名")
+ private String latinname;
+
+ @Schema(description = "树种", example = "2")
+ @ExcelProperty("树种")
+ private String treetype;
+
+ @Schema(description = "树高")
+ @ExcelProperty("树高")
+ private String treeheight;
+
+ @Schema(description = "冠幅")
+ @ExcelProperty("冠幅")
+ private String canopy;
+
+ @Schema(description = "胸径")
+ @ExcelProperty("胸径")
+ private String dbh;
+
+ @Schema(description = "生长势--数据字典:正常,衰弱,濒危,死亡")
+ @ExcelProperty("生长势--数据字典:正常,衰弱,濒危,死亡")
+ private String growthvigor;
+
+ @Schema(description = "级别--数据字典:一级、两级")
+ @ExcelProperty("级别--数据字典:一级、两级")
+ private String treelevel;
+
+ @Schema(description = "经度")
+ @ExcelProperty("经度")
+ private String longitude;
+
+ @Schema(description = "纬度")
+ @ExcelProperty("纬度")
+ private String latitude;
+
+ @Schema(description = "所在地")
+ @ExcelProperty("所在地")
+ private String location;
+
+ @Schema(description = "养护单位")
+ @ExcelProperty("养护单位")
+ private String maintainunit;
+
+ @Schema(description = "管护单位")
+ @ExcelProperty("管护单位")
+ private String managedutyunit;
+
+ @Schema(description = "道路id")
+ @ExcelProperty("道路id")
+ private Long road;
+
+ @Schema(description = "所属街道")
+ @ExcelProperty("所属街道")
+ private String street;
+
+ @Schema(description = "权属分类--数据字典:专业绿地和单位(居住区)")
+ @ExcelProperty("权属分类--数据字典:专业绿地和单位(居住区)")
+ private String oldtreeownership;
+
+ @Schema(description = "数据状态(已更新、未更新)")
+ @ExcelProperty("数据状态(已更新、未更新)")
+ private String datastate;
+
+ @Schema(description = "估测树龄")
+ @ExcelProperty("估测树龄")
+ private String estimationtreeage;
+
+ @Schema(description = "冠幅东西")
+ @ExcelProperty("冠幅东西")
+ private String canopyeastwest;
+
+ @Schema(description = "冠幅南北")
+ @ExcelProperty("冠幅南北")
+ private String canopysouthnorth;
+
+ @Schema(description = "干周")
+ @ExcelProperty("干周")
+ private String weekday;
+
+ @Schema(description = "生长地点")
+ @ExcelProperty("生长地点")
+ private String growlocation;
+
+ @Schema(description = "生长环境")
+ @ExcelProperty("生长环境")
+ private String growthenvironment;
+
+ @Schema(description = "树木照片一")
+ @ExcelProperty("树木照片一")
+ private String treephotoone;
+
+ @Schema(description = "古树照片二")
+ @ExcelProperty("古树照片二")
+ private String treephototwo;
+
+ @Schema(description = "古树照片三")
+ @ExcelProperty("古树照片三")
+ private String treephotothree;
+
+ @Schema(description = "古树照片四")
+ @ExcelProperty("古树照片四")
+ private String treephotofour;
+
+ @Schema(description = "古树照片五")
+ @ExcelProperty("古树照片五")
+ private String treephotofive;
+
+ @Schema(description = "创建者")
+ @ExcelProperty("创建者")
+ private String createby;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createtime;
+
+ @Schema(description = "更新者")
+ @ExcelProperty("更新者")
+ private String updateby;
+
+ @Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("更新时间")
+ private LocalDateTime updatetime;
+
+ @Schema(description = "备注", example = "你说的对")
+ @ExcelProperty("备注")
+ private String remark;
+
+ @Schema(description = "部门id", requiredMode = Schema.RequiredMode.REQUIRED, example = "17101")
+ @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/tree/vo/TreeSaveReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/tree/vo/TreeSaveReqVO.java
new file mode 100644
index 0000000..dc8c351
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/tree/vo/TreeSaveReqVO.java
@@ -0,0 +1,125 @@
+package com.zteits.urbanops.module.garden.controller.admin.tree.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 一树一档案新增/修改 Request VO")
+@Data
+public class TreeSaveReqVO {
+
+ @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "28236")
+ private Long id;
+
+ @Schema(description = "编号")
+ private String treenumber;
+
+ @Schema(description = "拉丁名", example = "李四")
+ private String latinname;
+
+ @Schema(description = "树种", example = "2")
+ private String treetype;
+
+ @Schema(description = "树高")
+ private String treeheight;
+
+ @Schema(description = "冠幅")
+ private String canopy;
+
+ @Schema(description = "胸径")
+ private String dbh;
+
+ @Schema(description = "生长势--数据字典:正常,衰弱,濒危,死亡")
+ private String growthvigor;
+
+ @Schema(description = "级别--数据字典:一级、两级")
+ private String treelevel;
+
+ @Schema(description = "经度")
+ private String longitude;
+
+ @Schema(description = "纬度")
+ private String latitude;
+
+ @Schema(description = "所在地")
+ private String location;
+
+ @Schema(description = "养护单位")
+ private String maintainunit;
+
+ @Schema(description = "管护单位")
+ private String managedutyunit;
+
+ @Schema(description = "道路id")
+ private Long road;
+
+ @Schema(description = "所属街道")
+ private String street;
+
+ @Schema(description = "权属分类--数据字典:专业绿地和单位(居住区)")
+ private String oldtreeownership;
+
+ @Schema(description = "数据状态(已更新、未更新)")
+ private String datastate;
+
+ @Schema(description = "估测树龄")
+ private String estimationtreeage;
+
+ @Schema(description = "冠幅东西")
+ private String canopyeastwest;
+
+ @Schema(description = "冠幅南北")
+ private String canopysouthnorth;
+
+ @Schema(description = "干周")
+ private String weekday;
+
+ @Schema(description = "生长地点")
+ private String growlocation;
+
+ @Schema(description = "生长环境")
+ private String growthenvironment;
+
+ @Schema(description = "树木照片一")
+ private String treephotoone;
+
+ @Schema(description = "古树照片二")
+ private String treephototwo;
+
+ @Schema(description = "古树照片三")
+ private String treephotothree;
+
+ @Schema(description = "古树照片四")
+ private String treephotofour;
+
+ @Schema(description = "古树照片五")
+ private String treephotofive;
+
+ @Schema(description = "创建者")
+ private String createby;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "创建时间不能为空")
+ private LocalDateTime createtime;
+
+ @Schema(description = "更新者")
+ private String updateby;
+
+ @Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "更新时间不能为空")
+ private LocalDateTime updatetime;
+
+ @Schema(description = "备注", example = "你说的对")
+ private String remark;
+
+ @Schema(description = "部门id", requiredMode = Schema.RequiredMode.REQUIRED, example = "17101")
+ @NotNull(message = "部门id不能为空")
+ private Long deptId;
+
+ private List treeImgList;
+
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/tree/vo/TreeVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/tree/vo/TreeVO.java
new file mode 100644
index 0000000..8341f82
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/tree/vo/TreeVO.java
@@ -0,0 +1,24 @@
+package com.zteits.urbanops.module.garden.controller.admin.tree.vo;
+
+import lombok.Data;
+
+/**
+ * Description:
+ *
+ * Author: gelinghu
+ * Date: 2025年8月23 16:07
+ */
+@Data
+public class TreeVO {
+
+ /** 部门ID */
+ private Long deptId;
+
+ /** 归属单位ID */
+ private Long belongCompanyId;
+
+ private String roadName;
+
+}
+
+
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/treechangelog/TreeChangeLogController.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/treechangelog/TreeChangeLogController.java
new file mode 100644
index 0000000..12f7f9a
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/treechangelog/TreeChangeLogController.java
@@ -0,0 +1,104 @@
+package com.zteits.urbanops.module.garden.controller.admin.treechangelog;
+
+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.treechangelog.vo.*;
+import com.zteits.urbanops.module.garden.dal.dataobject.treechangelog.TreeChangeLogDO;
+import com.zteits.urbanops.module.garden.service.treechangelog.TreeChangeLogService;
+
+@Tag(name = "管理后台 - 一树一档案修改记录")
+@RestController
+@RequestMapping({"/garden/tree-change-log","/gardentree/logs"})
+@Validated
+public class TreeChangeLogController {
+
+ @Resource
+ private TreeChangeLogService treeChangeLogService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建一树一档案修改记录")
+ @PreAuthorize("@ss.hasPermission('garden:tree-change-log:create')")
+ public CommonResult createTreeChangeLog(@Valid @RequestBody TreeChangeLogSaveReqVO createReqVO) {
+ return success(treeChangeLogService.createTreeChangeLog(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新一树一档案修改记录")
+ @PreAuthorize("@ss.hasPermission('garden:tree-change-log:update')")
+ public CommonResult updateTreeChangeLog(@Valid @RequestBody TreeChangeLogSaveReqVO updateReqVO) {
+ treeChangeLogService.updateTreeChangeLog(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除一树一档案修改记录")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('garden:tree-change-log:delete')")
+ public CommonResult deleteTreeChangeLog(@RequestParam("id") Long id) {
+ treeChangeLogService.deleteTreeChangeLog(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除一树一档案修改记录")
+ @PreAuthorize("@ss.hasPermission('garden:tree-change-log:delete')")
+ public CommonResult deleteTreeChangeLogList(@RequestParam("ids") List ids) {
+ treeChangeLogService.deleteTreeChangeLogListByIds(ids);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得一树一档案修改记录")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('garden:tree-change-log:query')")
+ public CommonResult getTreeChangeLog(@RequestParam("id") Long id) {
+ TreeChangeLogDO treeChangeLog = treeChangeLogService.getTreeChangeLog(id);
+ return success(BeanUtils.toBean(treeChangeLog, TreeChangeLogRespVO.class));
+ }
+
+ @GetMapping({"/page","/list"})
+ @Operation(summary = "查询一树一档案修改记录列表")
+ @PreAuthorize("@ss.hasPermission('garden:tree-change-log:query')")
+ public CommonResult> getTreeChangeLogPage(@Valid TreeChangeLogPageReqVO pageReqVO) {
+ PageResult pageResult = treeChangeLogService.getTreeChangeLogPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, TreeChangeLogRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出一树一档案修改记录 Excel")
+ @PreAuthorize("@ss.hasPermission('garden:tree-change-log:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportTreeChangeLogExcel(@Valid TreeChangeLogPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = treeChangeLogService.getTreeChangeLogPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "一树一档案修改记录.xls", "数据", TreeChangeLogRespVO.class,
+ BeanUtils.toBean(list, TreeChangeLogRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/treechangelog/vo/TreeChangeLogPageReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/treechangelog/vo/TreeChangeLogPageReqVO.java
new file mode 100644
index 0000000..ac61a04
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/treechangelog/vo/TreeChangeLogPageReqVO.java
@@ -0,0 +1,120 @@
+package com.zteits.urbanops.module.garden.controller.admin.treechangelog.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 TreeChangeLogPageReqVO extends PageParam {
+
+ @Schema(description = "garden_tree 的主键", example = "26527")
+ private Long treeid;
+
+ @Schema(description = "编号")
+ private String treenumber;
+
+ @Schema(description = "拉丁名", example = "赵六")
+ private String latinname;
+
+ @Schema(description = "树种", example = "1")
+ private String treetype;
+
+ @Schema(description = "树高")
+ private String treeheight;
+
+ @Schema(description = "冠幅")
+ private String canopy;
+
+ @Schema(description = "胸径")
+ private String dbh;
+
+ @Schema(description = "生长势--数据字典:正常,衰弱,濒危,死亡")
+ private String growthvigor;
+
+ @Schema(description = "级别--数据字典:一级、两级")
+ private String treelevel;
+
+ @Schema(description = "经度")
+ private String longitude;
+
+ @Schema(description = "纬度")
+ private String latitude;
+
+ @Schema(description = "所在地")
+ private String location;
+
+ @Schema(description = "养护单位")
+ private String maintainunit;
+
+ @Schema(description = "管护单位")
+ private String managedutyunit;
+
+ @Schema(description = "道路id")
+ private Long road;
+
+ @Schema(description = "所属街道")
+ private String street;
+
+ @Schema(description = "权属分类--数据字典:专业绿地和单位(居住区)")
+ private String oldtreeownership;
+
+ @Schema(description = "数据状态(已更新、未更新)")
+ private String datastate;
+
+ @Schema(description = "估测树龄")
+ private String estimationtreeage;
+
+ @Schema(description = "冠幅东西")
+ private String canopyeastwest;
+
+ @Schema(description = "冠幅南北")
+ private String canopysouthnorth;
+
+ @Schema(description = "干周")
+ private String weekday;
+
+ @Schema(description = "生长地点")
+ private String growlocation;
+
+ @Schema(description = "生长环境")
+ private String growthenvironment;
+
+ @Schema(description = "树木照片一")
+ private String treephotoone;
+
+ @Schema(description = "古树照片二")
+ private String treephototwo;
+
+ @Schema(description = "古树照片三")
+ private String treephotothree;
+
+ @Schema(description = "古树照片四")
+ private String treephotofour;
+
+ @Schema(description = "古树照片五")
+ private String treephotofive;
+
+ @Schema(description = "创建者")
+ private String createby;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createtime;
+
+ @Schema(description = "更新者")
+ private String updateby;
+
+ @Schema(description = "更新时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] updatetime;
+
+ @Schema(description = "备注", example = "你猜")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/treechangelog/vo/TreeChangeLogRespVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/treechangelog/vo/TreeChangeLogRespVO.java
new file mode 100644
index 0000000..d23eb0a
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/treechangelog/vo/TreeChangeLogRespVO.java
@@ -0,0 +1,155 @@
+package com.zteits.urbanops.module.garden.controller.admin.treechangelog.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 TreeChangeLogRespVO {
+
+ @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3528")
+ @ExcelProperty("id")
+ private Long id;
+
+ @Schema(description = "garden_tree 的主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "26527")
+ @ExcelProperty("garden_tree 的主键")
+ private Long treeid;
+
+ @Schema(description = "编号")
+ @ExcelProperty("编号")
+ private String treenumber;
+
+ @Schema(description = "拉丁名", example = "赵六")
+ @ExcelProperty("拉丁名")
+ private String latinname;
+
+ @Schema(description = "树种", example = "1")
+ @ExcelProperty("树种")
+ private String treetype;
+
+ @Schema(description = "树高")
+ @ExcelProperty("树高")
+ private String treeheight;
+
+ @Schema(description = "冠幅")
+ @ExcelProperty("冠幅")
+ private String canopy;
+
+ @Schema(description = "胸径")
+ @ExcelProperty("胸径")
+ private String dbh;
+
+ @Schema(description = "生长势--数据字典:正常,衰弱,濒危,死亡")
+ @ExcelProperty("生长势--数据字典:正常,衰弱,濒危,死亡")
+ private String growthvigor;
+
+ @Schema(description = "级别--数据字典:一级、两级")
+ @ExcelProperty("级别--数据字典:一级、两级")
+ private String treelevel;
+
+ @Schema(description = "经度")
+ @ExcelProperty("经度")
+ private String longitude;
+
+ @Schema(description = "纬度")
+ @ExcelProperty("纬度")
+ private String latitude;
+
+ @Schema(description = "所在地")
+ @ExcelProperty("所在地")
+ private String location;
+
+ @Schema(description = "养护单位")
+ @ExcelProperty("养护单位")
+ private String maintainunit;
+
+ @Schema(description = "管护单位")
+ @ExcelProperty("管护单位")
+ private String managedutyunit;
+
+ @Schema(description = "道路id")
+ @ExcelProperty("道路id")
+ private Long road;
+
+ @Schema(description = "所属街道")
+ @ExcelProperty("所属街道")
+ private String street;
+
+ @Schema(description = "权属分类--数据字典:专业绿地和单位(居住区)")
+ @ExcelProperty("权属分类--数据字典:专业绿地和单位(居住区)")
+ private String oldtreeownership;
+
+ @Schema(description = "数据状态(已更新、未更新)")
+ @ExcelProperty("数据状态(已更新、未更新)")
+ private String datastate;
+
+ @Schema(description = "估测树龄")
+ @ExcelProperty("估测树龄")
+ private String estimationtreeage;
+
+ @Schema(description = "冠幅东西")
+ @ExcelProperty("冠幅东西")
+ private String canopyeastwest;
+
+ @Schema(description = "冠幅南北")
+ @ExcelProperty("冠幅南北")
+ private String canopysouthnorth;
+
+ @Schema(description = "干周")
+ @ExcelProperty("干周")
+ private String weekday;
+
+ @Schema(description = "生长地点")
+ @ExcelProperty("生长地点")
+ private String growlocation;
+
+ @Schema(description = "生长环境")
+ @ExcelProperty("生长环境")
+ private String growthenvironment;
+
+ @Schema(description = "树木照片一")
+ @ExcelProperty("树木照片一")
+ private String treephotoone;
+
+ @Schema(description = "古树照片二")
+ @ExcelProperty("古树照片二")
+ private String treephototwo;
+
+ @Schema(description = "古树照片三")
+ @ExcelProperty("古树照片三")
+ private String treephotothree;
+
+ @Schema(description = "古树照片四")
+ @ExcelProperty("古树照片四")
+ private String treephotofour;
+
+ @Schema(description = "古树照片五")
+ @ExcelProperty("古树照片五")
+ private String treephotofive;
+
+ @Schema(description = "创建者")
+ @ExcelProperty("创建者")
+ private String createby;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createtime;
+
+ @Schema(description = "更新者")
+ @ExcelProperty("更新者")
+ private String updateby;
+
+ @Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("更新时间")
+ private LocalDateTime updatetime;
+
+ @Schema(description = "备注", example = "你猜")
+ @ExcelProperty("备注")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/treechangelog/vo/TreeChangeLogSaveReqVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/treechangelog/vo/TreeChangeLogSaveReqVO.java
new file mode 100644
index 0000000..5f659ef
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/treechangelog/vo/TreeChangeLogSaveReqVO.java
@@ -0,0 +1,122 @@
+package com.zteits.urbanops.module.garden.controller.admin.treechangelog.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 一树一档案修改记录新增/修改 Request VO")
+@Data
+public class TreeChangeLogSaveReqVO {
+
+ @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3528")
+ private Long id;
+
+ @Schema(description = "garden_tree 的主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "26527")
+ @NotNull(message = "garden_tree 的主键不能为空")
+ private Long treeid;
+
+ @Schema(description = "编号")
+ private String treenumber;
+
+ @Schema(description = "拉丁名", example = "赵六")
+ private String latinname;
+
+ @Schema(description = "树种", example = "1")
+ private String treetype;
+
+ @Schema(description = "树高")
+ private String treeheight;
+
+ @Schema(description = "冠幅")
+ private String canopy;
+
+ @Schema(description = "胸径")
+ private String dbh;
+
+ @Schema(description = "生长势--数据字典:正常,衰弱,濒危,死亡")
+ private String growthvigor;
+
+ @Schema(description = "级别--数据字典:一级、两级")
+ private String treelevel;
+
+ @Schema(description = "经度")
+ private String longitude;
+
+ @Schema(description = "纬度")
+ private String latitude;
+
+ @Schema(description = "所在地")
+ private String location;
+
+ @Schema(description = "养护单位")
+ private String maintainunit;
+
+ @Schema(description = "管护单位")
+ private String managedutyunit;
+
+ @Schema(description = "道路id")
+ private Long road;
+
+ @Schema(description = "所属街道")
+ private String street;
+
+ @Schema(description = "权属分类--数据字典:专业绿地和单位(居住区)")
+ private String oldtreeownership;
+
+ @Schema(description = "数据状态(已更新、未更新)")
+ private String datastate;
+
+ @Schema(description = "估测树龄")
+ private String estimationtreeage;
+
+ @Schema(description = "冠幅东西")
+ private String canopyeastwest;
+
+ @Schema(description = "冠幅南北")
+ private String canopysouthnorth;
+
+ @Schema(description = "干周")
+ private String weekday;
+
+ @Schema(description = "生长地点")
+ private String growlocation;
+
+ @Schema(description = "生长环境")
+ private String growthenvironment;
+
+ @Schema(description = "树木照片一")
+ private String treephotoone;
+
+ @Schema(description = "古树照片二")
+ private String treephototwo;
+
+ @Schema(description = "古树照片三")
+ private String treephotothree;
+
+ @Schema(description = "古树照片四")
+ private String treephotofour;
+
+ @Schema(description = "古树照片五")
+ private String treephotofive;
+
+ @Schema(description = "创建者")
+ private String createby;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "创建时间不能为空")
+ private LocalDateTime createtime;
+
+ @Schema(description = "更新者")
+ private String updateby;
+
+ @Schema(description = "更新时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "更新时间不能为空")
+ private LocalDateTime updatetime;
+
+ @Schema(description = "备注", example = "你猜")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/treerecord/GardenTreeController.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/treerecord/GardenTreeController.java
deleted file mode 100644
index ac3839a..0000000
--- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/treerecord/GardenTreeController.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package com.zteits.urbanops.module.garden.controller.admin.treerecord;
-
-import com.zteits.urbanops.framework.common.pojo.CommonResult;
-import com.zteits.urbanops.framework.common.pojo.PageResult;
-import com.zteits.urbanops.framework.excel.core.util.ExcelUtils;
-import com.zteits.urbanops.module.garden.dal.dataobject.treerecord.GardenTreeDO;
-import com.zteits.urbanops.module.garden.service.treerecord.GardenTreeService;
-import com.zteits.urbanops.module.garden.controller.admin.treerecord.vo.CompanyDeptRoadVO;
-import com.zteits.urbanops.module.garden.controller.admin.treerecord.vo.RoadTreeVO;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.annotation.Resource;
-import jakarta.servlet.http.HttpServletResponse;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
-import java.io.IOException;
-import java.util.List;
-
-import static com.zteits.urbanops.framework.common.pojo.CommonResult.success;
-import static com.zteits.urbanops.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
-import com.zteits.urbanops.framework.apilog.core.annotation.ApiAccessLog;
-
-@Tag(name = "管理后台 - 一树一档案")
-@RestController
-@RequestMapping("/business/tree")
-public class GardenTreeController {
-
- @Resource
- private GardenTreeService gardenTreeService;
-
- @GetMapping("/list")
- @Operation(summary = "一树一档案-列表")
- @PreAuthorize("@ss.hasPermission('business:tree:list')")
- public CommonResult> list(@RequestParam(required = false) Integer pageNum,
- @RequestParam(required = false) Integer pageSize,
- GardenTreeDO where) {
- int pn = pageNum == null ? 1 : pageNum;
- int ps = pageSize == null ? 10 : pageSize;
- return success(gardenTreeService.selectPage(where, pn, ps));
- }
-
- @GetMapping("/export")
- @Operation(summary = "一树一档案-导出")
- @PreAuthorize("@ss.hasPermission('business:tree:export')")
- @ApiAccessLog(operateType = EXPORT)
- public void export(GardenTreeDO where, HttpServletResponse response) throws IOException {
- List list = gardenTreeService.selectPage(where, 1, Integer.MAX_VALUE).getList();
- ExcelUtils.write(response, "树木信息.xls", "数据", GardenTreeDO.class, list);
- }
-
- @GetMapping("/{id}")
- @Operation(summary = "一树一档案-详情")
- @PreAuthorize("@ss.hasPermission('business:tree:query')")
- public CommonResult getInfo(@PathVariable("id") Long id) {
- return success(gardenTreeService.selectById(id));
- }
-
- @PostMapping
- @Operation(summary = "一树一档案-新增")
- @PreAuthorize("@ss.hasPermission('business:tree:add')")
- public CommonResult add(@RequestBody GardenTreeDO entity) {
- entity.setDeleted(false);
- return success(gardenTreeService.insert(entity));
- }
-
- @PutMapping
- @Operation(summary = "一树一档案-修改")
- @PreAuthorize("@ss.hasPermission('business:tree:edit')")
- public CommonResult edit(@RequestBody GardenTreeDO entity) {
- return success(gardenTreeService.update(entity));
- }
-
- @DeleteMapping("/{ids}")
- @Operation(summary = "一树一档案-删除")
- @PreAuthorize("@ss.hasPermission('business:tree:remove')")
- public CommonResult remove(@PathVariable List ids) {
- return success(gardenTreeService.deleteByIds(ids));
- }
-
- @GetMapping("/dept/list")
- @Operation(summary = "一树一档案-公司部门道路树结构")
- @PreAuthorize("@ss.hasPermission('business:tree:list')")
- public CommonResult> deptList(@RequestParam Long companyId,
- @RequestParam(required = false) String roadName,
- @RequestParam(required = false) Long deptId) {
- return success(gardenTreeService.getCompanyDeptRoadTreeData(companyId, roadName, deptId));
- }
-
- @GetMapping("/road/list")
- @Operation(summary = "一树一档案-按道路查询树列表")
- @PreAuthorize("@ss.hasPermission('business:tree:list')")
- public CommonResult> listTreesByRoad(@RequestParam Long road) {
- return success(gardenTreeService.getTreesByRoadId(road));
- }
-}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/treerecord/OldTreesController.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/treerecord/OldTreesController.java
deleted file mode 100644
index 7215964..0000000
--- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/treerecord/OldTreesController.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package com.zteits.urbanops.module.garden.controller.admin.treerecord;
-
-import com.zteits.urbanops.framework.common.pojo.CommonResult;
-import com.zteits.urbanops.framework.common.pojo.PageParam;
-import com.zteits.urbanops.framework.common.pojo.PageResult;
-import com.zteits.urbanops.framework.excel.core.util.ExcelUtils;
-import com.zteits.urbanops.framework.security.core.util.SecurityFrameworkUtils;
-import com.zteits.urbanops.module.garden.dal.dataobject.treerecord.GardenOldtreesDO;
-import com.zteits.urbanops.module.garden.service.treerecord.GardenOldtreesService;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.annotation.Resource;
-import jakarta.servlet.http.HttpServletResponse;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
-import java.io.IOException;
-import java.util.List;
-
-import static com.zteits.urbanops.framework.common.pojo.CommonResult.success;
-
-@Tag(name = "管理后台 - 古树名木")
-@RestController
-@RequestMapping("/treerecord/oldtrees")
-public class OldTreesController {
-
- @Resource
- private GardenOldtreesService service;
-
- @GetMapping("/list")
- @Operation(summary = "古树台账-列表")
- @PreAuthorize("@ss.hasPermission('treerecord:oldtrees:list')")
- public CommonResult> list(GardenOldtreesDO where,
- @RequestParam(value = "pageNum", required = false) Integer pageNum,
- @RequestParam(value = "pageSize", required = false) Integer pageSize) {
- where.setDeptId(SecurityFrameworkUtils.getLoginUserDeptId());
- PageParam page = new PageParam();
- page.setPageNo(pageNum == null ? 1 : pageNum);
- page.setPageSize(pageSize == null ? 10 : pageSize);
- return success(service.selectPage(page, where));
- }
-
- @GetMapping("/export")
- @Operation(summary = "古树台账-导出")
- @PreAuthorize("@ss.hasPermission('treerecord:oldtrees:export')")
- public void export(GardenOldtreesDO where, HttpServletResponse response) throws IOException {
- where.setDeptId(SecurityFrameworkUtils.getLoginUserDeptId());
- List list = service.selectList(where);
- ExcelUtils.write(response, "古树信息.xls", "数据", GardenOldtreesDO.class, list);
- }
-
- @GetMapping("/{id}")
- @Operation(summary = "古树台账-详情")
- @PreAuthorize("@ss.hasPermission('treerecord:oldtrees:query')")
- public CommonResult getInfo(@PathVariable("id") String id) {
- return success(service.selectById(id));
- }
-
- @PostMapping
- @Operation(summary = "古树台账-新增")
- @PreAuthorize("@ss.hasPermission('treerecord:oldtrees:add')")
- public CommonResult add(@RequestBody GardenOldtreesDO entity) {
- entity.setCreator(String.valueOf(SecurityFrameworkUtils.getLoginUserId()));
- entity.setUpdater(String.valueOf(SecurityFrameworkUtils.getLoginUserId()));
- entity.setDeptId(SecurityFrameworkUtils.getLoginUserDeptId());
- return success(service.insert(entity));
- }
-
- @PutMapping
- @Operation(summary = "古树台账-修改")
- @PreAuthorize("@ss.hasPermission('treerecord:oldtrees:edit')")
- public CommonResult edit(@RequestBody GardenOldtreesDO entity) {
- entity.setUpdater(String.valueOf(SecurityFrameworkUtils.getLoginUserId()));
- return success(service.update(entity));
- }
-
- @DeleteMapping("/{ids}")
- @Operation(summary = "古树台账-删除")
- @PreAuthorize("@ss.hasPermission('treerecord:oldtrees:remove')")
- public CommonResult remove(@PathVariable List ids) {
- return success(service.deleteByIds(ids));
- }
-}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/treerecord/vo/RoadTreeVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/treerecord/vo/RoadTreeVO.java
deleted file mode 100644
index dff50ce..0000000
--- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/treerecord/vo/RoadTreeVO.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.zteits.urbanops.module.garden.controller.admin.treerecord.vo;
-
-import lombok.Data;
-
-@Data
-public class RoadTreeVO {
- private Long id;
- private String treetype;
- private String treeheight;
- private String dbh;
- private String treenumber;
- private String treephoto;
-}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/oldtrees/OldtreesDO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/oldtrees/OldtreesDO.java
new file mode 100644
index 0000000..467693b
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/oldtrees/OldtreesDO.java
@@ -0,0 +1,242 @@
+package com.zteits.urbanops.module.garden.dal.dataobject.oldtrees;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import com.zteits.urbanops.framework.mybatis.core.dataobject.BaseDO;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+/**
+ * 古树名木 DO
+ *
+ * @author 超级管理员
+ */
+@TableName("garden_oldtrees")
+@KeySequence("garden_oldtrees_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class OldtreesDO {
+
+ /**
+ * id
+ */
+ @TableId(type = IdType.INPUT)
+ private String id;
+ /**
+ * 编号
+ */
+ private String famoustreenumber;
+ /**
+ * 级别--数据字典:一级、两级
+ */
+ private String treelevel;
+ /**
+ * 树种
+ */
+ private String treetype;
+ /**
+ * 所在地
+ */
+ private String location;
+ /**
+ * 养护单位
+ */
+ private String maintainunit;
+ /**
+ * 权属分类--数据字典:专业绿地和单位(居住区)
+ */
+ private String oldtreeownership;
+ /**
+ * 生长地点
+ */
+ private String growlocation;
+ /**
+ * 拉丁名
+ */
+ private String latinname;
+ /**
+ * 树高
+ */
+ private String treeheight;
+ /**
+ * 估测树龄
+ */
+ private String estimationtreeage;
+ /**
+ * 胸径
+ */
+ private String dbh;
+ /**
+ * 经度
+ */
+ private String longitude;
+ /**
+ * 纬度
+ */
+ private String latitude;
+ /**
+ * 冠幅东西
+ */
+ private String canopyeastwest;
+ /**
+ * 冠幅南北
+ */
+ private String canopysouthnorth;
+ /**
+ * 管护责任单位
+ */
+ private String managedutyunit;
+ /**
+ * 干周
+ */
+ private String weekday;
+ /**
+ * 生长势--数据字典:正常,衰弱,濒危,死亡
+ */
+ private String growthvigor;
+ /**
+ * 生长环境
+ */
+ private String growthenvironment;
+ /**
+ * 古树照片一
+ */
+ private String treephotoone;
+ /**
+ * 春季养护管理措施
+ */
+ private String springmaintenance;
+ /**
+ * 夏季养护管理措施
+ */
+ private String summermaintenance;
+ /**
+ * 秋季养护管理措施
+ */
+ private String autumnmaintenance;
+ /**
+ * 冬季养护管理措施
+ */
+ private String wintermaintenance;
+ /**
+ * 年度
+ */
+ private String annual;
+ /**
+ * 养护记录备注
+ */
+ private String curingremark;
+ /**
+ * 古树照片二
+ */
+ private String treephototwo;
+ /**
+ * 古树照片三
+ */
+ private String treephotothree;
+ /**
+ * 古树铭牌照片
+ */
+ private String nameplatephoto;
+ /**
+ * 数据状态(已更新、未更新)
+ */
+ private String datastate;
+ /**
+ * 养护员工--作业队下派古树时选择的派发员工
+ */
+ private String curingstaff;
+ /**
+ * 状态(驳回/确认)
+ */
+ private String state;
+ /**
+ * 平台驳回状态(平台驳回)
+ */
+ private String platformstate;
+ /**
+ * 所属街道
+ */
+ private String street;
+ /**
+ * 责任人姓名
+ */
+ private String responsibleusername;
+ /**
+ * 责任人电话
+ */
+ private String responsibleuserphone;
+ /**
+ * 创建者
+ */
+ private String createby;
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createtime;
+ /**
+ * 更新者
+ */
+ private String updateby;
+ /**
+ * 更新时间
+ */
+ private String updatetime;
+ /**
+ * 部门id
+ */
+ private Long deptId;
+
+ @TableField(exist = false)
+ private List treeImgList;
+
+ @TableField(exist = false)
+ private List nameplatephotoList;
+
+ public OldtreesDO imgToDomain(){
+ if (!CollectionUtils.isEmpty(treeImgList)) {
+ if (treeImgList.size() > 0) {
+ this.treephotoone = treeImgList.get(0);
+ }
+ if (treeImgList.size() > 1) {
+ this.treephototwo = treeImgList.get(1);
+ }
+ if (treeImgList.size() > 2) {
+ this.treephotothree = treeImgList.get(2);
+ }
+ }
+ if (!CollectionUtils.isEmpty(nameplatephotoList)) {
+ if (nameplatephotoList.size() > 0) {
+ this.nameplatephoto = nameplatephotoList.get(0);
+ }
+ }
+ return this;
+ }
+ public OldtreesDO domainToImg(){
+ if (CollectionUtils.isEmpty(treeImgList)) {
+ treeImgList = new ArrayList<>();
+ }
+ if (CollectionUtils.isEmpty(nameplatephotoList)) {
+ nameplatephotoList = new ArrayList<>();
+ }
+ if (!StringUtils.isEmpty(treephotoone)) {
+ treeImgList.add(treephotoone);
+ }
+ if (!StringUtils.isEmpty(treephototwo)) {
+ treeImgList.add(treephototwo);
+ }
+ if (!StringUtils.isEmpty(treephotothree)) {
+ treeImgList.add(treephotothree);
+ }
+ if (!StringUtils.isEmpty(nameplatephoto)) {
+ nameplatephotoList.add(nameplatephoto);
+ }
+ return this;
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/oldtreeschangelog/OldtreesChangeLogDO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/oldtreeschangelog/OldtreesChangeLogDO.java
new file mode 100644
index 0000000..1e2564b
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/oldtreeschangelog/OldtreesChangeLogDO.java
@@ -0,0 +1,243 @@
+package com.zteits.urbanops.module.garden.dal.dataobject.oldtreeschangelog;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import com.zteits.urbanops.framework.mybatis.core.dataobject.BaseDO;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+/**
+ * 古树名木修改记录 DO
+ *
+ * @author 超级管理员
+ */
+@TableName("garden_oldtrees_change_log")
+@KeySequence("garden_oldtrees_change_log_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class OldtreesChangeLogDO extends BaseDO {
+
+ /**
+ * id
+ */
+ @TableId(type = IdType.INPUT)
+ private String id;
+ /**
+ * garden_oldtrees 的主键
+ */
+ private String oldtreeid;
+ /**
+ * 编号
+ */
+ private String famoustreenumber;
+ /**
+ * 级别--数据字典:一级、两级
+ */
+ private String treelevel;
+ /**
+ * 树种
+ */
+ private String treetype;
+ /**
+ * 所在地
+ */
+ private String location;
+ /**
+ * 养护单位
+ */
+ private String maintainunit;
+ /**
+ * 权属分类--数据字典:专业绿地和单位(居住区)
+ */
+ private String oldtreeownership;
+ /**
+ * 生长地点
+ */
+ private String growlocation;
+ /**
+ * 拉丁名
+ */
+ private String latinname;
+ /**
+ * 树高
+ */
+ private String treeheight;
+ /**
+ * 估测树龄
+ */
+ private String estimationtreeage;
+ /**
+ * 胸径
+ */
+ private String dbh;
+ /**
+ * 经度
+ */
+ private String longitude;
+ /**
+ * 纬度
+ */
+ private String latitude;
+ /**
+ * 冠幅东西
+ */
+ private String canopyeastwest;
+ /**
+ * 冠幅南北
+ */
+ private String canopysouthnorth;
+ /**
+ * 管护责任单位
+ */
+ private String managedutyunit;
+ /**
+ * 干周
+ */
+ private String weekday;
+ /**
+ * 生长势--数据字典:正常,衰弱,濒危,死亡
+ */
+ private String growthvigor;
+ /**
+ * 生长环境
+ */
+ private String growthenvironment;
+ /**
+ * 古树照片一
+ */
+ private String treephotoone;
+ /**
+ * 春季养护管理措施
+ */
+ private String springmaintenance;
+ /**
+ * 夏季养护管理措施
+ */
+ private String summermaintenance;
+ /**
+ * 秋季养护管理措施
+ */
+ private String autumnmaintenance;
+ /**
+ * 冬季养护管理措施
+ */
+ private String wintermaintenance;
+ /**
+ * 年度
+ */
+ private String annual;
+ /**
+ * 养护记录备注
+ */
+ private String curingremark;
+ /**
+ * 古树照片二
+ */
+ private String treephototwo;
+ /**
+ * 古树照片三
+ */
+ private String treephotothree;
+ /**
+ * 古树铭牌照片
+ */
+ private String nameplatephoto;
+ /**
+ * 数据状态(已更新、未更新)
+ */
+ private String datastate;
+ /**
+ * 养护员工--作业队下派古树时选择的派发员工
+ */
+ private String curingstaff;
+ /**
+ * 状态(驳回/确认)
+ */
+ private String state;
+ /**
+ * 平台驳回状态(平台驳回)
+ */
+ private String platformstate;
+ /**
+ * 所属街道
+ */
+ private String street;
+ /**
+ * 负责人姓名
+ */
+ private String responsibleusername;
+ /**
+ * 负责人电话
+ */
+ private String responsibleuserphone;
+ /**
+ * 创建者
+ */
+ private String createby;
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createtime;
+ /**
+ * 更新者
+ */
+ private String updateby;
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updatetime;
+
+ @TableField(exist = false)
+ private List treeImgList;
+
+ @TableField(exist = false)
+ private List nameplatephotoList;
+
+ public OldtreesChangeLogDO imgToDomain(){
+ if (!CollectionUtils.isEmpty(treeImgList)) {
+ if (treeImgList.size() > 0) {
+ this.treephotoone = treeImgList.get(0);
+ }
+ if (treeImgList.size() > 1) {
+ this.treephototwo = treeImgList.get(1);
+ }
+ if (treeImgList.size() > 2) {
+ this.treephotothree = treeImgList.get(2);
+ }
+ }
+ if (!CollectionUtils.isEmpty(nameplatephotoList)) {
+ if (nameplatephotoList.size() > 0) {
+ this.nameplatephoto = nameplatephotoList.get(0);
+ }
+ }
+ return this;
+ }
+ public OldtreesChangeLogDO domainToImg(){
+ if (CollectionUtils.isEmpty(treeImgList)) {
+ treeImgList = new ArrayList<>();
+ }
+ if (CollectionUtils.isEmpty(nameplatephotoList)) {
+ nameplatephotoList = new ArrayList<>();
+ }
+ if (!StringUtils.isEmpty(treephotoone)) {
+ treeImgList.add(treephotoone);
+ }
+ if (!StringUtils.isEmpty(treephototwo)) {
+ treeImgList.add(treephototwo);
+ }
+ if (!StringUtils.isEmpty(treephotothree)) {
+ treeImgList.add(treephotothree);
+ }
+ if (!StringUtils.isEmpty(nameplatephoto)) {
+ nameplatephotoList.add(nameplatephoto);
+ }
+ return this;
+ }
+
+}
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/road/RoadDO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/road/RoadDO.java
index e052cb6..b06df63 100644
--- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/road/RoadDO.java
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/road/RoadDO.java
@@ -104,5 +104,8 @@ public class RoadDO extends BaseDO {
*/
private String updaterName;
-
+ /**
+ * 方向
+ */
+ private String direction;
}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/tree/TreeDO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/tree/TreeDO.java
new file mode 100644
index 0000000..19cffe8
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/tree/TreeDO.java
@@ -0,0 +1,222 @@
+package com.zteits.urbanops.module.garden.dal.dataobject.tree;
+
+import cn.hutool.core.lang.tree.Tree;
+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;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+/**
+ * 一树一档案 DO
+ *
+ * @author 超级管理员
+ */
+@TableName("garden_tree")
+@KeySequence("garden_tree_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TreeDO {
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * 编号
+ */
+ private String treenumber;
+ /**
+ * 拉丁名
+ */
+ private String latinname;
+ /**
+ * 树种
+ */
+ private String treetype;
+ /**
+ * 树高
+ */
+ private String treeheight;
+ /**
+ * 冠幅
+ */
+ private String canopy;
+ /**
+ * 胸径
+ */
+ private String dbh;
+ /**
+ * 生长势--数据字典:正常,衰弱,濒危,死亡
+ */
+ private String growthvigor;
+ /**
+ * 级别--数据字典:一级、两级
+ */
+ private String treelevel;
+ /**
+ * 经度
+ */
+ private String longitude;
+ /**
+ * 纬度
+ */
+ private String latitude;
+ /**
+ * 所在地
+ */
+ private String location;
+ /**
+ * 养护单位
+ */
+ private String maintainunit;
+ /**
+ * 管护单位
+ */
+ private String managedutyunit;
+ /**
+ * 道路id
+ */
+ private Long road;
+ /**
+ * 所属街道
+ */
+ private String street;
+ /**
+ * 权属分类--数据字典:专业绿地和单位(居住区)
+ */
+ private String oldtreeownership;
+ /**
+ * 数据状态(已更新、未更新)
+ */
+ private String datastate;
+ /**
+ * 估测树龄
+ */
+ private String estimationtreeage;
+ /**
+ * 冠幅东西
+ */
+ private String canopyeastwest;
+ /**
+ * 冠幅南北
+ */
+ private String canopysouthnorth;
+ /**
+ * 干周
+ */
+ private String weekday;
+ /**
+ * 生长地点
+ */
+ private String growlocation;
+ /**
+ * 生长环境
+ */
+ private String growthenvironment;
+ /**
+ * 树木照片一
+ */
+ private String treephotoone;
+ /**
+ * 古树照片二
+ */
+ private String treephototwo;
+ /**
+ * 古树照片三
+ */
+ private String treephotothree;
+ /**
+ * 古树照片四
+ */
+ private String treephotofour;
+ /**
+ * 古树照片五
+ */
+ private String treephotofive;
+ /**
+ * 创建者
+ */
+ private String createby;
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createtime;
+ /**
+ * 更新者
+ */
+ private String updateby;
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updatetime;
+ /**
+ * 备注
+ */
+ private String remark;
+ /**
+ * 部门id
+ */
+ private Long deptId;
+
+ /**
+ * 公司id
+ */
+ private Long companyId;
+
+ @TableField(exist = false)
+ private List treeImgList;
+
+ @TableField(exist = false)
+ private List treeImgListFile;
+
+ public TreeDO imgToDomain(){
+ if (!CollectionUtils.isEmpty(treeImgList)) {
+ if (treeImgList.size() > 0) {
+ this.treephotoone = treeImgList.get(0);
+ }
+ if (treeImgList.size() > 1) {
+ this.treephototwo = treeImgList.get(1);
+ }
+ if (treeImgList.size() > 2) {
+ this.treephotothree = treeImgList.get(2);
+ }
+ if (treeImgList.size() > 3) {
+ this.treephotofour = treeImgList.get(3);
+ }
+ if (treeImgList.size() > 4) {
+ this.treephotofive = treeImgList.get(4);
+ }
+ }
+ return this;
+ }
+ public TreeDO domainToImg(){
+ if (CollectionUtils.isEmpty(treeImgList)) {
+ treeImgList = new ArrayList<>();
+ }
+ if (!StringUtils.isEmpty(treephotoone)) {
+ treeImgList.add(treephotoone);
+ }
+ if (!StringUtils.isEmpty(treephototwo)) {
+ treeImgList.add(treephototwo);
+ }
+ if (!StringUtils.isEmpty(treephotothree)) {
+ treeImgList.add(treephotothree);
+ }
+ if (!StringUtils.isEmpty(treephotofour)) {
+ treeImgList.add(treephotofour);
+ }
+ if (!StringUtils.isEmpty(treephotofive)) {
+ treeImgList.add(treephotofive);
+ }
+ return this;
+ }
+
+}
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/treechangelog/TreeChangeLogDO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/treechangelog/TreeChangeLogDO.java
new file mode 100644
index 0000000..6f98794
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/treechangelog/TreeChangeLogDO.java
@@ -0,0 +1,215 @@
+package com.zteits.urbanops.module.garden.dal.dataobject.treechangelog;
+
+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;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+/**
+ * 一树一档案修改记录 DO
+ *
+ * @author 超级管理员
+ */
+@TableName("garden_tree_change_log")
+@KeySequence("garden_tree_change_log_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class TreeChangeLogDO extends BaseDO {
+
+ /**
+ * id
+ */
+ @TableId
+ private Long id;
+ /**
+ * garden_tree 的主键
+ */
+ private Long treeid;
+ /**
+ * 编号
+ */
+ private String treenumber;
+ /**
+ * 拉丁名
+ */
+ private String latinname;
+ /**
+ * 树种
+ */
+ private String treetype;
+ /**
+ * 树高
+ */
+ private String treeheight;
+ /**
+ * 冠幅
+ */
+ private String canopy;
+ /**
+ * 胸径
+ */
+ private String dbh;
+ /**
+ * 生长势--数据字典:正常,衰弱,濒危,死亡
+ */
+ private String growthvigor;
+ /**
+ * 级别--数据字典:一级、两级
+ */
+ private String treelevel;
+ /**
+ * 经度
+ */
+ private String longitude;
+ /**
+ * 纬度
+ */
+ private String latitude;
+ /**
+ * 所在地
+ */
+ private String location;
+ /**
+ * 养护单位
+ */
+ private String maintainunit;
+ /**
+ * 管护单位
+ */
+ private String managedutyunit;
+ /**
+ * 道路id
+ */
+ private Long road;
+ /**
+ * 所属街道
+ */
+ private String street;
+ /**
+ * 权属分类--数据字典:专业绿地和单位(居住区)
+ */
+ private String oldtreeownership;
+ /**
+ * 数据状态(已更新、未更新)
+ */
+ private String datastate;
+ /**
+ * 估测树龄
+ */
+ private String estimationtreeage;
+ /**
+ * 冠幅东西
+ */
+ private String canopyeastwest;
+ /**
+ * 冠幅南北
+ */
+ private String canopysouthnorth;
+ /**
+ * 干周
+ */
+ private String weekday;
+ /**
+ * 生长地点
+ */
+ private String growlocation;
+ /**
+ * 生长环境
+ */
+ private String growthenvironment;
+ /**
+ * 树木照片一
+ */
+ private String treephotoone;
+ /**
+ * 古树照片二
+ */
+ private String treephototwo;
+ /**
+ * 古树照片三
+ */
+ private String treephotothree;
+ /**
+ * 古树照片四
+ */
+ private String treephotofour;
+ /**
+ * 古树照片五
+ */
+ private String treephotofive;
+ /**
+ * 创建者
+ */
+ private String createby;
+ /**
+ * 创建时间
+ */
+ private LocalDateTime createtime;
+ /**
+ * 更新者
+ */
+ private String updateby;
+ /**
+ * 更新时间
+ */
+ private LocalDateTime updatetime;
+ /**
+ * 备注
+ */
+ private String remark;
+
+ @TableField(exist = false)
+ private List treeImgList;
+
+ public TreeChangeLogDO imgToDomain(){
+ if (!CollectionUtils.isEmpty(treeImgList)) {
+ if (treeImgList.size() > 0) {
+ this.treephotoone = treeImgList.get(0);
+ }
+ if (treeImgList.size() > 1) {
+ this.treephototwo = treeImgList.get(1);
+ }
+ if (treeImgList.size() > 2) {
+ this.treephotothree = treeImgList.get(2);
+ }
+ if (treeImgList.size() > 3) {
+ this.treephotofour = treeImgList.get(3);
+ }
+ if (treeImgList.size() > 4) {
+ this.treephotofive = treeImgList.get(4);
+ }
+ }
+ return this;
+ }
+ public TreeChangeLogDO domainToImg(){
+ if (CollectionUtils.isEmpty(treeImgList)) {
+ treeImgList = new ArrayList<>();
+ }
+ if (!StringUtils.isEmpty(treephotoone)) {
+ treeImgList.add(treephotoone);
+ }
+ if (!StringUtils.isEmpty(treephototwo)) {
+ treeImgList.add(treephototwo);
+ }
+ if (!StringUtils.isEmpty(treephotothree)) {
+ treeImgList.add(treephotothree);
+ }
+ if (!StringUtils.isEmpty(treephotofour)) {
+ treeImgList.add(treephotofour);
+ }
+ if (!StringUtils.isEmpty(treephotofive)) {
+ treeImgList.add(treephotofive);
+ }
+ return this;
+ }
+
+
+}
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/treerecord/GardenOldtreesDO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/treerecord/GardenOldtreesDO.java
deleted file mode 100644
index a7eb290..0000000
--- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/treerecord/GardenOldtreesDO.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.zteits.urbanops.module.garden.dal.dataobject.treerecord;
-
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.zteits.urbanops.framework.mybatis.core.dataobject.BaseDO;
-import lombok.Data;
-
-@TableName("garden_oldtrees")
-@Data
-public class GardenOldtreesDO extends BaseDO {
- @TableId
- private String id;
- private String treenumber;
- private String latinname;
- private String treetype;
- private String treeheight;
- private String canopy;
- private String dbh;
- private String growthvigor;
- private String treelevel;
- private String longitude;
- private String latitude;
- private String location;
- private String maintainunit;
- private String managedutyunit;
- private Long road;
- private String street;
- private String oldtreeownership;
- private String datastate;
- private String estimationtreeage;
- private String canopyeastwest;
- private String canopysouthnorth;
- private String weekday;
- private String growlocation;
- private String growthenvironment;
- private String treephotoone;
- private String treephototwo;
- private String treephotothree;
- private String treephotofour;
- private String treephotofive;
- 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/oldtrees/OldtreesMapper.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/oldtrees/OldtreesMapper.java
new file mode 100644
index 0000000..0e0567b
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/oldtrees/OldtreesMapper.java
@@ -0,0 +1,71 @@
+package com.zteits.urbanops.module.garden.dal.mysql.oldtrees;
+
+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.oldtrees.OldtreesDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.zteits.urbanops.module.garden.controller.admin.oldtrees.vo.*;
+
+/**
+ * 古树名木 Mapper
+ *
+ * @author 超级管理员
+ */
+@Mapper
+public interface OldtreesMapper extends BaseMapperX {
+
+ default PageResult selectPage(OldtreesPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(OldtreesDO::getFamoustreenumber, reqVO.getFamoustreenumber())
+ .eqIfPresent(OldtreesDO::getTreelevel, reqVO.getTreelevel())
+ .eqIfPresent(OldtreesDO::getTreetype, reqVO.getTreetype())
+ .eqIfPresent(OldtreesDO::getLocation, reqVO.getLocation())
+ .eqIfPresent(OldtreesDO::getMaintainunit, reqVO.getMaintainunit())
+ .eqIfPresent(OldtreesDO::getOldtreeownership, reqVO.getOldtreeownership())
+ .eqIfPresent(OldtreesDO::getGrowlocation, reqVO.getGrowlocation())
+ .likeIfPresent(OldtreesDO::getLatinname, reqVO.getLatinname())
+ .eqIfPresent(OldtreesDO::getTreeheight, reqVO.getTreeheight())
+ .eqIfPresent(OldtreesDO::getEstimationtreeage, reqVO.getEstimationtreeage())
+ .eqIfPresent(OldtreesDO::getDbh, reqVO.getDbh())
+ .eqIfPresent(OldtreesDO::getLongitude, reqVO.getLongitude())
+ .eqIfPresent(OldtreesDO::getLatitude, reqVO.getLatitude())
+ .eqIfPresent(OldtreesDO::getCanopyeastwest, reqVO.getCanopyeastwest())
+ .eqIfPresent(OldtreesDO::getCanopysouthnorth, reqVO.getCanopysouthnorth())
+ .eqIfPresent(OldtreesDO::getManagedutyunit, reqVO.getManagedutyunit())
+ .eqIfPresent(OldtreesDO::getWeekday, reqVO.getWeekday())
+ .eqIfPresent(OldtreesDO::getGrowthvigor, reqVO.getGrowthvigor())
+ .eqIfPresent(OldtreesDO::getGrowthenvironment, reqVO.getGrowthenvironment())
+ .eqIfPresent(OldtreesDO::getTreephotoone, reqVO.getTreephotoone())
+ .eqIfPresent(OldtreesDO::getSpringmaintenance, reqVO.getSpringmaintenance())
+ .eqIfPresent(OldtreesDO::getSummermaintenance, reqVO.getSummermaintenance())
+ .eqIfPresent(OldtreesDO::getAutumnmaintenance, reqVO.getAutumnmaintenance())
+ .eqIfPresent(OldtreesDO::getWintermaintenance, reqVO.getWintermaintenance())
+ .eqIfPresent(OldtreesDO::getAnnual, reqVO.getAnnual())
+ .eqIfPresent(OldtreesDO::getCuringremark, reqVO.getCuringremark())
+ .eqIfPresent(OldtreesDO::getTreephototwo, reqVO.getTreephototwo())
+ .eqIfPresent(OldtreesDO::getTreephotothree, reqVO.getTreephotothree())
+ .eqIfPresent(OldtreesDO::getNameplatephoto, reqVO.getNameplatephoto())
+ .eqIfPresent(OldtreesDO::getDatastate, reqVO.getDatastate())
+ .eqIfPresent(OldtreesDO::getCuringstaff, reqVO.getCuringstaff())
+ .eqIfPresent(OldtreesDO::getState, reqVO.getState())
+ .eqIfPresent(OldtreesDO::getPlatformstate, reqVO.getPlatformstate())
+ .eqIfPresent(OldtreesDO::getStreet, reqVO.getStreet())
+ .likeIfPresent(OldtreesDO::getResponsibleusername, reqVO.getResponsibleusername())
+ .eqIfPresent(OldtreesDO::getResponsibleuserphone, reqVO.getResponsibleuserphone())
+ .eqIfPresent(OldtreesDO::getCreateby, reqVO.getCreateby())
+ .betweenIfPresent(OldtreesDO::getCreatetime, reqVO.getCreatetime())
+ .eqIfPresent(OldtreesDO::getUpdateby, reqVO.getUpdateby())
+ .betweenIfPresent(OldtreesDO::getUpdatetime, reqVO.getUpdatetime())
+ .eqIfPresent(OldtreesDO::getDeptId, reqVO.getDeptId())
+ .orderByDesc(OldtreesDO::getId));
+ }
+
+ default OldtreesDO selectByFamoustreenumber(String famoustreenumber) {
+ return selectOne(new LambdaQueryWrapperX()
+ .eqIfPresent(OldtreesDO::getFamoustreenumber, famoustreenumber));
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/oldtreeschangelog/OldtreesChangeLogMapper.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/oldtreeschangelog/OldtreesChangeLogMapper.java
new file mode 100644
index 0000000..f95f375
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/oldtreeschangelog/OldtreesChangeLogMapper.java
@@ -0,0 +1,66 @@
+package com.zteits.urbanops.module.garden.dal.mysql.oldtreeschangelog;
+
+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.oldtreeschangelog.OldtreesChangeLogDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.zteits.urbanops.module.garden.controller.admin.oldtreeschangelog.vo.*;
+
+/**
+ * 古树名木修改记录 Mapper
+ *
+ * @author 超级管理员
+ */
+@Mapper
+public interface OldtreesChangeLogMapper extends BaseMapperX {
+
+ default PageResult selectPage(OldtreesChangeLogPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(OldtreesChangeLogDO::getOldtreeid, reqVO.getOldtreeid())
+ .eqIfPresent(OldtreesChangeLogDO::getFamoustreenumber, reqVO.getFamoustreenumber())
+ .eqIfPresent(OldtreesChangeLogDO::getTreelevel, reqVO.getTreelevel())
+ .eqIfPresent(OldtreesChangeLogDO::getTreetype, reqVO.getTreetype())
+ .eqIfPresent(OldtreesChangeLogDO::getLocation, reqVO.getLocation())
+ .eqIfPresent(OldtreesChangeLogDO::getMaintainunit, reqVO.getMaintainunit())
+ .eqIfPresent(OldtreesChangeLogDO::getOldtreeownership, reqVO.getOldtreeownership())
+ .eqIfPresent(OldtreesChangeLogDO::getGrowlocation, reqVO.getGrowlocation())
+ .likeIfPresent(OldtreesChangeLogDO::getLatinname, reqVO.getLatinname())
+ .eqIfPresent(OldtreesChangeLogDO::getTreeheight, reqVO.getTreeheight())
+ .eqIfPresent(OldtreesChangeLogDO::getEstimationtreeage, reqVO.getEstimationtreeage())
+ .eqIfPresent(OldtreesChangeLogDO::getDbh, reqVO.getDbh())
+ .eqIfPresent(OldtreesChangeLogDO::getLongitude, reqVO.getLongitude())
+ .eqIfPresent(OldtreesChangeLogDO::getLatitude, reqVO.getLatitude())
+ .eqIfPresent(OldtreesChangeLogDO::getCanopyeastwest, reqVO.getCanopyeastwest())
+ .eqIfPresent(OldtreesChangeLogDO::getCanopysouthnorth, reqVO.getCanopysouthnorth())
+ .eqIfPresent(OldtreesChangeLogDO::getManagedutyunit, reqVO.getManagedutyunit())
+ .eqIfPresent(OldtreesChangeLogDO::getWeekday, reqVO.getWeekday())
+ .eqIfPresent(OldtreesChangeLogDO::getGrowthvigor, reqVO.getGrowthvigor())
+ .eqIfPresent(OldtreesChangeLogDO::getGrowthenvironment, reqVO.getGrowthenvironment())
+ .eqIfPresent(OldtreesChangeLogDO::getTreephotoone, reqVO.getTreephotoone())
+ .eqIfPresent(OldtreesChangeLogDO::getSpringmaintenance, reqVO.getSpringmaintenance())
+ .eqIfPresent(OldtreesChangeLogDO::getSummermaintenance, reqVO.getSummermaintenance())
+ .eqIfPresent(OldtreesChangeLogDO::getAutumnmaintenance, reqVO.getAutumnmaintenance())
+ .eqIfPresent(OldtreesChangeLogDO::getWintermaintenance, reqVO.getWintermaintenance())
+ .eqIfPresent(OldtreesChangeLogDO::getAnnual, reqVO.getAnnual())
+ .eqIfPresent(OldtreesChangeLogDO::getCuringremark, reqVO.getCuringremark())
+ .eqIfPresent(OldtreesChangeLogDO::getTreephototwo, reqVO.getTreephototwo())
+ .eqIfPresent(OldtreesChangeLogDO::getTreephotothree, reqVO.getTreephotothree())
+ .eqIfPresent(OldtreesChangeLogDO::getNameplatephoto, reqVO.getNameplatephoto())
+ .eqIfPresent(OldtreesChangeLogDO::getDatastate, reqVO.getDatastate())
+ .eqIfPresent(OldtreesChangeLogDO::getCuringstaff, reqVO.getCuringstaff())
+ .eqIfPresent(OldtreesChangeLogDO::getState, reqVO.getState())
+ .eqIfPresent(OldtreesChangeLogDO::getPlatformstate, reqVO.getPlatformstate())
+ .eqIfPresent(OldtreesChangeLogDO::getStreet, reqVO.getStreet())
+ .likeIfPresent(OldtreesChangeLogDO::getResponsibleusername, reqVO.getResponsibleusername())
+ .eqIfPresent(OldtreesChangeLogDO::getResponsibleuserphone, reqVO.getResponsibleuserphone())
+ .eqIfPresent(OldtreesChangeLogDO::getCreateby, reqVO.getCreateby())
+ .betweenIfPresent(OldtreesChangeLogDO::getCreatetime, reqVO.getCreatetime())
+ .eqIfPresent(OldtreesChangeLogDO::getUpdateby, reqVO.getUpdateby())
+ .betweenIfPresent(OldtreesChangeLogDO::getUpdatetime, reqVO.getUpdatetime())
+ .orderByDesc(OldtreesChangeLogDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/tree/TreeMapper.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/tree/TreeMapper.java
new file mode 100644
index 0000000..d119689
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/tree/TreeMapper.java
@@ -0,0 +1,66 @@
+package com.zteits.urbanops.module.garden.dal.mysql.tree;
+
+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.tree.TreeDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.zteits.urbanops.module.garden.controller.admin.tree.vo.*;
+
+/**
+ * 一树一档案 Mapper
+ *
+ * @author 超级管理员
+ */
+@Mapper
+public interface TreeMapper extends BaseMapperX {
+
+ default PageResult selectPage(TreePageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(TreeDO::getTreenumber, reqVO.getTreenumber())
+ .likeIfPresent(TreeDO::getLatinname, reqVO.getLatinname())
+ .eqIfPresent(TreeDO::getTreetype, reqVO.getTreetype())
+ .eqIfPresent(TreeDO::getTreeheight, reqVO.getTreeheight())
+ .eqIfPresent(TreeDO::getCanopy, reqVO.getCanopy())
+ .eqIfPresent(TreeDO::getDbh, reqVO.getDbh())
+ .eqIfPresent(TreeDO::getGrowthvigor, reqVO.getGrowthvigor())
+ .eqIfPresent(TreeDO::getTreelevel, reqVO.getTreelevel())
+ .eqIfPresent(TreeDO::getLongitude, reqVO.getLongitude())
+ .eqIfPresent(TreeDO::getLatitude, reqVO.getLatitude())
+ .eqIfPresent(TreeDO::getLocation, reqVO.getLocation())
+ .eqIfPresent(TreeDO::getMaintainunit, reqVO.getMaintainunit())
+ .eqIfPresent(TreeDO::getManagedutyunit, reqVO.getManagedutyunit())
+ .eqIfPresent(TreeDO::getRoad, reqVO.getRoad())
+ .eqIfPresent(TreeDO::getStreet, reqVO.getStreet())
+ .eqIfPresent(TreeDO::getOldtreeownership, reqVO.getOldtreeownership())
+ .eqIfPresent(TreeDO::getDatastate, reqVO.getDatastate())
+ .eqIfPresent(TreeDO::getEstimationtreeage, reqVO.getEstimationtreeage())
+ .eqIfPresent(TreeDO::getCanopyeastwest, reqVO.getCanopyeastwest())
+ .eqIfPresent(TreeDO::getCanopysouthnorth, reqVO.getCanopysouthnorth())
+ .eqIfPresent(TreeDO::getWeekday, reqVO.getWeekday())
+ .eqIfPresent(TreeDO::getGrowlocation, reqVO.getGrowlocation())
+ .eqIfPresent(TreeDO::getGrowthenvironment, reqVO.getGrowthenvironment())
+ .eqIfPresent(TreeDO::getTreephotoone, reqVO.getTreephotoone())
+ .eqIfPresent(TreeDO::getTreephototwo, reqVO.getTreephototwo())
+ .eqIfPresent(TreeDO::getTreephotothree, reqVO.getTreephotothree())
+ .eqIfPresent(TreeDO::getTreephotofour, reqVO.getTreephotofour())
+ .eqIfPresent(TreeDO::getTreephotofive, reqVO.getTreephotofive())
+ .eqIfPresent(TreeDO::getCreateby, reqVO.getCreateby())
+ .betweenIfPresent(TreeDO::getCreatetime, reqVO.getCreatetime())
+ .eqIfPresent(TreeDO::getUpdateby, reqVO.getUpdateby())
+ .betweenIfPresent(TreeDO::getUpdatetime, reqVO.getUpdatetime())
+ .eqIfPresent(TreeDO::getRemark, reqVO.getRemark())
+ .eqIfPresent(TreeDO::getDeptId, reqVO.getDeptId())
+ .orderByDesc(TreeDO::getId));
+ }
+
+ default TreeDO selectByTreeNumber(String treeNumber) {
+ return selectOne(new LambdaQueryWrapperX()
+ .eqIfPresent(TreeDO::getTreenumber, treeNumber)
+ );
+ }
+
+ List selectCompanyDeptRoadTreeData(TreeVO tree);
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/treechangelog/TreeChangeLogMapper.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/treechangelog/TreeChangeLogMapper.java
new file mode 100644
index 0000000..06380c7
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/treechangelog/TreeChangeLogMapper.java
@@ -0,0 +1,59 @@
+package com.zteits.urbanops.module.garden.dal.mysql.treechangelog;
+
+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.treechangelog.TreeChangeLogDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.zteits.urbanops.module.garden.controller.admin.treechangelog.vo.*;
+
+/**
+ * 一树一档案修改记录 Mapper
+ *
+ * @author 超级管理员
+ */
+@Mapper
+public interface TreeChangeLogMapper extends BaseMapperX {
+
+ default PageResult selectPage(TreeChangeLogPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(TreeChangeLogDO::getTreeid, reqVO.getTreeid())
+ .eqIfPresent(TreeChangeLogDO::getTreenumber, reqVO.getTreenumber())
+ .likeIfPresent(TreeChangeLogDO::getLatinname, reqVO.getLatinname())
+ .eqIfPresent(TreeChangeLogDO::getTreetype, reqVO.getTreetype())
+ .eqIfPresent(TreeChangeLogDO::getTreeheight, reqVO.getTreeheight())
+ .eqIfPresent(TreeChangeLogDO::getCanopy, reqVO.getCanopy())
+ .eqIfPresent(TreeChangeLogDO::getDbh, reqVO.getDbh())
+ .eqIfPresent(TreeChangeLogDO::getGrowthvigor, reqVO.getGrowthvigor())
+ .eqIfPresent(TreeChangeLogDO::getTreelevel, reqVO.getTreelevel())
+ .eqIfPresent(TreeChangeLogDO::getLongitude, reqVO.getLongitude())
+ .eqIfPresent(TreeChangeLogDO::getLatitude, reqVO.getLatitude())
+ .eqIfPresent(TreeChangeLogDO::getLocation, reqVO.getLocation())
+ .eqIfPresent(TreeChangeLogDO::getMaintainunit, reqVO.getMaintainunit())
+ .eqIfPresent(TreeChangeLogDO::getManagedutyunit, reqVO.getManagedutyunit())
+ .eqIfPresent(TreeChangeLogDO::getRoad, reqVO.getRoad())
+ .eqIfPresent(TreeChangeLogDO::getStreet, reqVO.getStreet())
+ .eqIfPresent(TreeChangeLogDO::getOldtreeownership, reqVO.getOldtreeownership())
+ .eqIfPresent(TreeChangeLogDO::getDatastate, reqVO.getDatastate())
+ .eqIfPresent(TreeChangeLogDO::getEstimationtreeage, reqVO.getEstimationtreeage())
+ .eqIfPresent(TreeChangeLogDO::getCanopyeastwest, reqVO.getCanopyeastwest())
+ .eqIfPresent(TreeChangeLogDO::getCanopysouthnorth, reqVO.getCanopysouthnorth())
+ .eqIfPresent(TreeChangeLogDO::getWeekday, reqVO.getWeekday())
+ .eqIfPresent(TreeChangeLogDO::getGrowlocation, reqVO.getGrowlocation())
+ .eqIfPresent(TreeChangeLogDO::getGrowthenvironment, reqVO.getGrowthenvironment())
+ .eqIfPresent(TreeChangeLogDO::getTreephotoone, reqVO.getTreephotoone())
+ .eqIfPresent(TreeChangeLogDO::getTreephototwo, reqVO.getTreephototwo())
+ .eqIfPresent(TreeChangeLogDO::getTreephotothree, reqVO.getTreephotothree())
+ .eqIfPresent(TreeChangeLogDO::getTreephotofour, reqVO.getTreephotofour())
+ .eqIfPresent(TreeChangeLogDO::getTreephotofive, reqVO.getTreephotofive())
+ .eqIfPresent(TreeChangeLogDO::getCreateby, reqVO.getCreateby())
+ .betweenIfPresent(TreeChangeLogDO::getCreatetime, reqVO.getCreatetime())
+ .eqIfPresent(TreeChangeLogDO::getUpdateby, reqVO.getUpdateby())
+ .betweenIfPresent(TreeChangeLogDO::getUpdatetime, reqVO.getUpdatetime())
+ .eqIfPresent(TreeChangeLogDO::getRemark, reqVO.getRemark())
+ .orderByDesc(TreeChangeLogDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/treerecord/GardenOldtreesMapper.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/treerecord/GardenOldtreesMapper.java
deleted file mode 100644
index 6119ae8..0000000
--- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/treerecord/GardenOldtreesMapper.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.zteits.urbanops.module.garden.dal.mysql.treerecord;
-
-import com.zteits.urbanops.framework.common.pojo.PageResult;
-import com.zteits.urbanops.framework.mybatis.core.mapper.BaseMapperX;
-import com.zteits.urbanops.framework.mybatis.core.query.LambdaQueryWrapperX;
-import com.zteits.urbanops.module.garden.dal.dataobject.treerecord.GardenOldtreesDO;
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface GardenOldtreesMapper extends BaseMapperX {
- default PageResult selectPage(com.zteits.urbanops.framework.common.pojo.PageParam pageParam, GardenOldtreesDO where) {
- return selectPage(pageParam, null, new LambdaQueryWrapperX()
- .likeIfPresent(GardenOldtreesDO::getTreenumber, where.getTreenumber())
- .likeIfPresent(GardenOldtreesDO::getLatinname, where.getLatinname())
- .eqIfPresent(GardenOldtreesDO::getStreet, where.getStreet())
- .eqIfPresent(GardenOldtreesDO::getMaintainunit, where.getMaintainunit())
- .eqIfPresent(GardenOldtreesDO::getDeptId, where.getDeptId())
- .orderByDesc(GardenOldtreesDO::getUpdateTime));
- }
-}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/treerecord/GardenTreeMapper.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/treerecord/GardenTreeMapper.java
deleted file mode 100644
index c73122a..0000000
--- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/mysql/treerecord/GardenTreeMapper.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.zteits.urbanops.module.garden.dal.mysql.treerecord;
-
-import com.zteits.urbanops.framework.common.pojo.PageResult;
-import com.zteits.urbanops.framework.mybatis.core.mapper.BaseMapperX;
-import com.zteits.urbanops.framework.mybatis.core.query.LambdaQueryWrapperX;
-import com.zteits.urbanops.module.garden.dal.dataobject.treerecord.GardenTreeDO;
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface GardenTreeMapper extends BaseMapperX {
- default PageResult selectPage(com.zteits.urbanops.framework.common.pojo.PageParam pageParam, GardenTreeDO where) {
- return selectPage(pageParam, null, new LambdaQueryWrapperX()
- .likeIfPresent(GardenTreeDO::getTreenumber, where.getTreenumber())
- .likeIfPresent(GardenTreeDO::getLatinname, where.getLatinname())
- .likeIfPresent(GardenTreeDO::getTreetype, where.getTreetype())
- .eqIfPresent(GardenTreeDO::getTreeheight, where.getTreeheight())
- .eqIfPresent(GardenTreeDO::getCanopy, where.getCanopy())
- .eqIfPresent(GardenTreeDO::getDbh, where.getDbh())
- .eqIfPresent(GardenTreeDO::getGrowthvigor, where.getGrowthvigor())
- .eqIfPresent(GardenTreeDO::getTreelevel, where.getTreelevel())
- .eqIfPresent(GardenTreeDO::getLongitude, where.getLongitude())
- .eqIfPresent(GardenTreeDO::getLatitude, where.getLatitude())
- .eqIfPresent(GardenTreeDO::getLocation, where.getLocation())
- .eqIfPresent(GardenTreeDO::getMaintainunit, where.getMaintainunit())
- .eqIfPresent(GardenTreeDO::getManagedutyunit, where.getManagedutyunit())
- .eqIfPresent(GardenTreeDO::getStreet, where.getStreet())
- .eqIfPresent(GardenTreeDO::getOldtreeownership, where.getOldtreeownership())
- .eqIfPresent(GardenTreeDO::getDatastate, where.getDatastate())
- .eqIfPresent(GardenTreeDO::getEstimationtreeage, where.getEstimationtreeage())
- .eqIfPresent(GardenTreeDO::getCanopyeastwest, where.getCanopyeastwest())
- .eqIfPresent(GardenTreeDO::getCanopysouthnorth, where.getCanopysouthnorth())
- .eqIfPresent(GardenTreeDO::getWeekday, where.getWeekday())
- .eqIfPresent(GardenTreeDO::getGrowlocation, where.getGrowlocation())
- .eqIfPresent(GardenTreeDO::getGrowthenvironment, where.getGrowthenvironment())
- .eqIfPresent(GardenTreeDO::getDeleted, where.getDeleted())
- .orderByDesc(GardenTreeDO::getUpdateTime));
- }
-
- class CompanyDeptRoadRow {
- public String companyId;
- public String companyName;
- public Long deptId;
- public String deptName;
- public Long roadId;
- public String roadName;
- public String startRemark;
- public String endRemark;
- public Long treeCount;
- public Long recordedCount;
- }
-
- @org.apache.ibatis.annotations.Select("SELECT c.dict_value AS companyId, c.dict_label AS companyName, d.dept_id AS deptId, d.dept_name AS deptName, r.id AS roadId, r.road_name AS roadName, r.starting_remark AS startRemark, r.end_remark AS endRemark, COALESCE(r.tree_area, 0) AS treeCount, COUNT(t.id) AS recordedCount FROM sys_dict_data c JOIN sys_dept d ON d.belong_company_id = c.dict_value AND d.del_flag = '0' LEFT JOIN td_road_manager r ON d.dept_id = r.dept_id LEFT JOIN garden_tree t ON r.id = t.road AND t.deleted = 0 WHERE c.dict_type = 'belongCompanyId' AND d.dept_id NOT IN (SELECT DISTINCT parent_id FROM sys_dept WHERE parent_id IS NOT NULL) GROUP BY c.dict_value, c.dict_label, d.dept_id, d.dept_name, r.id, r.road_name, r.starting_remark, r.end_remark, r.tree_area ORDER BY treeCount DESC, recordedCount DESC")
- java.util.List selectCompanyDeptRoadRows();
-
- @org.apache.ibatis.annotations.Select("SELECT t.id, t.treetype, t.treeheight, t.dbh, t.treenumber, t.treephotoone AS treephoto FROM garden_tree t WHERE t.deleted = 0 AND t.road = #{road} ORDER BY t.update_time DESC")
- java.util.List selectTreesByRoadId(@org.apache.ibatis.annotations.Param("road") Long road);
-}
\ 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 6925daf..2a85bb7 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
@@ -109,4 +109,21 @@ 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 OLDTREES_NOT_EXISTS = new ErrorCode(1-100-005-001, "古树名木不存在");
+
+ ErrorCode OLDTREES_CHANGE_LOG_NOT_EXISTS = new ErrorCode(1-100-005-002, "古树名木修改记录不存在");
+
+ ErrorCode TREE_CHANGE_LOG_NOT_EXISTS = new ErrorCode(1-100-005-003, "一树一档案修改记录不存在");
+
+ ErrorCode TREE_NOT_EXISTS = new ErrorCode(1-100-005-004, "一树一档案不存在");
+ ErrorCode OLDTREES_FAMOUSTREENUMBER_EXISTS = new ErrorCode(1-100-005-006, "古树编号已存在");
+ ErrorCode TREE_ROAD_NOT_EXISTS = new ErrorCode(1-100-005-007, "所属道路不能为空");
+ ErrorCode TREE_NUMBER_EXISTS = new ErrorCode(1-100-005-010, "树木编码已存在");
+
+
+ ErrorCode ROAD_MANAGER_NOT_EXISTS = new ErrorCode(1-100-006-001, "道路管理不存在");
+
+
+
}
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/oldtrees/OldtreesService.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/oldtrees/OldtreesService.java
new file mode 100644
index 0000000..4230bb8
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/oldtrees/OldtreesService.java
@@ -0,0 +1,62 @@
+package com.zteits.urbanops.module.garden.service.oldtrees;
+
+import java.util.*;
+import jakarta.validation.*;
+import com.zteits.urbanops.module.garden.controller.admin.oldtrees.vo.*;
+import com.zteits.urbanops.module.garden.dal.dataobject.oldtrees.OldtreesDO;
+import com.zteits.urbanops.framework.common.pojo.PageResult;
+import com.zteits.urbanops.framework.common.pojo.PageParam;
+
+/**
+ * 古树名木 Service 接口
+ *
+ * @author 超级管理员
+ */
+public interface OldtreesService {
+
+ /**
+ * 创建古树名木
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ String createOldtrees(@Valid OldtreesSaveReqVO createReqVO);
+
+ /**
+ * 更新古树名木
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateOldtrees(@Valid OldtreesSaveReqVO updateReqVO);
+
+ /**
+ * 删除古树名木
+ *
+ * @param id 编号
+ */
+ void deleteOldtrees(String id);
+
+ /**
+ * 批量删除古树名木
+ *
+ * @param ids 编号
+ */
+ void deleteOldtreesListByIds(List ids);
+
+ /**
+ * 获得古树名木
+ *
+ * @param id 编号
+ * @return 古树名木
+ */
+ OldtreesDO getOldtrees(String id);
+
+ /**
+ * 获得古树名木分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 古树名木分页
+ */
+ PageResult getOldtreesPage(OldtreesPageReqVO pageReqVO);
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/oldtrees/OldtreesServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/oldtrees/OldtreesServiceImpl.java
new file mode 100644
index 0000000..a5b3f48
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/oldtrees/OldtreesServiceImpl.java
@@ -0,0 +1,147 @@
+package com.zteits.urbanops.module.garden.service.oldtrees;
+
+import cn.hutool.core.collection.CollUtil;
+import com.zteits.urbanops.framework.common.exception.ServiceException;
+import com.zteits.urbanops.module.garden.dal.dataobject.oldtreeschangelog.OldtreesChangeLogDO;
+import com.zteits.urbanops.module.garden.dal.mysql.oldtreeschangelog.OldtreesChangeLogMapper;
+import org.springframework.stereotype.Service;
+import jakarta.annotation.Resource;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.*;
+import com.zteits.urbanops.module.garden.controller.admin.oldtrees.vo.*;
+import com.zteits.urbanops.module.garden.dal.dataobject.oldtrees.OldtreesDO;
+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.oldtrees.OldtreesMapper;
+
+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 OldtreesServiceImpl implements OldtreesService {
+
+ @Resource
+ private OldtreesMapper oldtreesMapper;
+
+ @Resource
+ private OldtreesChangeLogMapper oldtreesChangeLogMapper;
+
+ @Override
+ public String createOldtrees(OldtreesSaveReqVO createReqVO) {
+ // 插入
+ OldtreesDO oldtrees = BeanUtils.toBean(createReqVO, OldtreesDO.class);
+
+ if (!ObjectUtils.isEmpty(oldtrees)) {
+ oldtrees.imgToDomain();
+ }
+
+ String id = oldtrees.getId();
+ if (!StringUtils.hasText(id)) {
+ id = UUID.randomUUID().toString().replace("-", "");
+ oldtrees.setId(id);
+ }
+
+ OldtreesDO exists = oldtreesMapper.selectByFamoustreenumber(oldtrees.getFamoustreenumber());
+ if (!ObjectUtils.isEmpty(exists)) {
+ throw new ServiceException(OLDTREES_FAMOUSTREENUMBER_EXISTS);
+ }
+
+ int insert = oldtreesMapper.insert(oldtrees);
+
+ OldtreesChangeLogDO changeLog = new OldtreesChangeLogDO();
+ BeanUtils.copyProperties(createReqVO, changeLog);
+ changeLog.setOldtreeid(id);
+ changeLog.setCreateby(createReqVO.getCreateby());
+ changeLog.setCreatetime(createReqVO.getCreatetime());
+ changeLog.setUpdateby(createReqVO.getCreateby());
+ changeLog.setUpdatetime(createReqVO.getUpdatetime());
+ oldtreesChangeLogMapper.insert(changeLog);
+
+ // 返回
+ return oldtrees.getId();
+ }
+
+ @Override
+ public void updateOldtrees(OldtreesSaveReqVO updateReqVO) {
+ // 校验存在
+ OldtreesDO dbOlderTree = validateOldtreesExists(updateReqVO.getId());
+
+ if (!ObjectUtils.isEmpty(dbOlderTree) && !dbOlderTree.getFamoustreenumber().equals(updateReqVO.getFamoustreenumber())) {
+
+ OldtreesDO exists = oldtreesMapper.selectByFamoustreenumber(updateReqVO.getFamoustreenumber());
+ if (!ObjectUtils.isEmpty(exists)) {
+ throw new ServiceException(OLDTREES_FAMOUSTREENUMBER_EXISTS);
+ }
+ }
+
+ // 更新
+ OldtreesDO updateObj = BeanUtils.toBean(updateReqVO, OldtreesDO.class);
+
+ updateObj.imgToDomain();
+
+ OldtreesChangeLogDO changeLog = new OldtreesChangeLogDO();
+ org.springframework.beans.BeanUtils.copyProperties(updateReqVO, changeLog);
+ changeLog.setOldtreeid(updateReqVO.getId());
+ changeLog.setCreateby(updateReqVO.getUpdateby());
+ changeLog.setCreatetime(LocalDateTime.now());
+ changeLog.setUpdateby(updateReqVO.getUpdateby());
+ changeLog.setUpdatetime(LocalDateTime.now());
+ oldtreesChangeLogMapper.insert(changeLog);
+
+ oldtreesMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteOldtrees(String id) {
+ // 校验存在
+ validateOldtreesExists(id);
+ // 删除
+ oldtreesMapper.deleteById(id);
+ }
+
+ @Override
+ public void deleteOldtreesListByIds(List ids) {
+ // 删除
+ oldtreesMapper.deleteByIds(ids);
+ }
+
+
+ private OldtreesDO validateOldtreesExists(String id) {
+ OldtreesDO oldtreesDO = oldtreesMapper.selectById(id);
+ if (oldtreesDO == null) {
+ throw exception(OLDTREES_NOT_EXISTS);
+ }
+ return oldtreesDO;
+ }
+
+ @Override
+ public OldtreesDO getOldtrees(String id) {
+ OldtreesDO oldtreesDO = oldtreesMapper.selectById(id);
+ if (!ObjectUtils.isEmpty(oldtreesDO)) {
+ oldtreesDO.domainToImg();
+ }
+ return oldtreesDO;
+ }
+
+ @Override
+ public PageResult getOldtreesPage(OldtreesPageReqVO pageReqVO) {
+ return oldtreesMapper.selectPage(pageReqVO);
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/oldtreeschangelog/OldtreesChangeLogService.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/oldtreeschangelog/OldtreesChangeLogService.java
new file mode 100644
index 0000000..23e79dc
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/oldtreeschangelog/OldtreesChangeLogService.java
@@ -0,0 +1,62 @@
+package com.zteits.urbanops.module.garden.service.oldtreeschangelog;
+
+import java.util.*;
+import jakarta.validation.*;
+import com.zteits.urbanops.module.garden.controller.admin.oldtreeschangelog.vo.*;
+import com.zteits.urbanops.module.garden.dal.dataobject.oldtreeschangelog.OldtreesChangeLogDO;
+import com.zteits.urbanops.framework.common.pojo.PageResult;
+import com.zteits.urbanops.framework.common.pojo.PageParam;
+
+/**
+ * 古树名木修改记录 Service 接口
+ *
+ * @author 超级管理员
+ */
+public interface OldtreesChangeLogService {
+
+ /**
+ * 创建古树名木修改记录
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ String createOldtreesChangeLog(@Valid OldtreesChangeLogSaveReqVO createReqVO);
+
+ /**
+ * 更新古树名木修改记录
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateOldtreesChangeLog(@Valid OldtreesChangeLogSaveReqVO updateReqVO);
+
+ /**
+ * 删除古树名木修改记录
+ *
+ * @param id 编号
+ */
+ void deleteOldtreesChangeLog(String id);
+
+ /**
+ * 批量删除古树名木修改记录
+ *
+ * @param ids 编号
+ */
+ void deleteOldtreesChangeLogListByIds(List ids);
+
+ /**
+ * 获得古树名木修改记录
+ *
+ * @param id 编号
+ * @return 古树名木修改记录
+ */
+ OldtreesChangeLogDO getOldtreesChangeLog(String id);
+
+ /**
+ * 获得古树名木修改记录分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 古树名木修改记录分页
+ */
+ PageResult getOldtreesChangeLogPage(OldtreesChangeLogPageReqVO pageReqVO);
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/oldtreeschangelog/OldtreesChangeLogServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/oldtreeschangelog/OldtreesChangeLogServiceImpl.java
new file mode 100644
index 0000000..7393786
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/oldtreeschangelog/OldtreesChangeLogServiceImpl.java
@@ -0,0 +1,87 @@
+package com.zteits.urbanops.module.garden.service.oldtreeschangelog;
+
+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.oldtreeschangelog.vo.*;
+import com.zteits.urbanops.module.garden.dal.dataobject.oldtreeschangelog.OldtreesChangeLogDO;
+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.oldtreeschangelog.OldtreesChangeLogMapper;
+
+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 OldtreesChangeLogServiceImpl implements OldtreesChangeLogService {
+
+ @Resource
+ private OldtreesChangeLogMapper oldtreesChangeLogMapper;
+
+ @Override
+ public String createOldtreesChangeLog(OldtreesChangeLogSaveReqVO createReqVO) {
+ // 插入
+ OldtreesChangeLogDO oldtreesChangeLog = BeanUtils.toBean(createReqVO, OldtreesChangeLogDO.class);
+ oldtreesChangeLogMapper.insert(oldtreesChangeLog);
+
+ // 返回
+ return oldtreesChangeLog.getId();
+ }
+
+ @Override
+ public void updateOldtreesChangeLog(OldtreesChangeLogSaveReqVO updateReqVO) {
+ // 校验存在
+ validateOldtreesChangeLogExists(updateReqVO.getId());
+ // 更新
+ OldtreesChangeLogDO updateObj = BeanUtils.toBean(updateReqVO, OldtreesChangeLogDO.class);
+ oldtreesChangeLogMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteOldtreesChangeLog(String id) {
+ // 校验存在
+ validateOldtreesChangeLogExists(id);
+ // 删除
+ oldtreesChangeLogMapper.deleteById(id);
+ }
+
+ @Override
+ public void deleteOldtreesChangeLogListByIds(List ids) {
+ // 删除
+ oldtreesChangeLogMapper.deleteByIds(ids);
+ }
+
+
+ private void validateOldtreesChangeLogExists(String id) {
+ if (oldtreesChangeLogMapper.selectById(id) == null) {
+ throw exception(OLDTREES_CHANGE_LOG_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public OldtreesChangeLogDO getOldtreesChangeLog(String id) {
+ return oldtreesChangeLogMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult getOldtreesChangeLogPage(OldtreesChangeLogPageReqVO pageReqVO) {
+ PageResult pageResult = oldtreesChangeLogMapper.selectPage(pageReqVO);
+ pageResult.getList().forEach(OldtreesChangeLogDO::domainToImg);
+ return pageResult;
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/tree/TreeService.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/tree/TreeService.java
new file mode 100644
index 0000000..5c30a1a
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/tree/TreeService.java
@@ -0,0 +1,65 @@
+package com.zteits.urbanops.module.garden.service.tree;
+
+import java.util.*;
+import jakarta.validation.*;
+import com.zteits.urbanops.module.garden.controller.admin.tree.vo.*;
+import com.zteits.urbanops.module.garden.dal.dataobject.tree.TreeDO;
+import com.zteits.urbanops.framework.common.pojo.PageResult;
+import com.zteits.urbanops.framework.common.pojo.PageParam;
+
+/**
+ * 一树一档案 Service 接口
+ *
+ * @author 超级管理员
+ */
+public interface TreeService {
+
+ /**
+ * 创建一树一档案
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ Long createTree(@Valid TreeSaveReqVO createReqVO);
+
+ /**
+ * 更新一树一档案
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateTree(@Valid TreeSaveReqVO updateReqVO);
+
+ /**
+ * 删除一树一档案
+ *
+ * @param id 编号
+ */
+ void deleteTree(Long id);
+
+ /**
+ * 批量删除一树一档案
+ *
+ * @param ids 编号
+ */
+ void deleteTreeListByIds(List ids);
+
+ /**
+ * 获得一树一档案
+ *
+ * @param id 编号
+ * @return 一树一档案
+ */
+ TreeDO getTree(Long id);
+
+ /**
+ * 获得一树一档案分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 一树一档案分页
+ */
+ PageResult getTreePage(TreePageReqVO pageReqVO);
+
+ List getCompanyDeptRoadTreeData(TreeVO tree);
+
+ PageResult getTreesByRoadId(TreePageReqVO pageReqVO);
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/tree/TreeServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/tree/TreeServiceImpl.java
new file mode 100644
index 0000000..89c55f5
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/tree/TreeServiceImpl.java
@@ -0,0 +1,272 @@
+package com.zteits.urbanops.module.garden.service.tree;
+
+import cn.hutool.core.collection.CollUtil;
+import com.zteits.urbanops.framework.common.exception.ServiceException;
+import com.zteits.urbanops.framework.common.util.cache.CacheUtils;
+import com.zteits.urbanops.framework.dict.core.DictFrameworkUtils;
+import com.zteits.urbanops.module.garden.dal.dataobject.road.RoadDO;
+import com.zteits.urbanops.module.garden.dal.dataobject.treechangelog.TreeChangeLogDO;
+import com.zteits.urbanops.module.garden.dal.mysql.road.RoadMapper;
+import com.zteits.urbanops.module.garden.dal.mysql.treechangelog.TreeChangeLogMapper;
+import com.zteits.urbanops.module.garden.service.road.RoadService;
+import com.zteits.urbanops.module.system.dal.dataobject.dept.DeptDO;
+import com.zteits.urbanops.module.system.dal.mysql.dept.DeptMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Service;
+import jakarta.annotation.Resource;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import com.zteits.urbanops.module.garden.controller.admin.tree.vo.*;
+import com.zteits.urbanops.module.garden.dal.dataobject.tree.TreeDO;
+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.tree.TreeMapper;
+
+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 TreeServiceImpl implements TreeService {
+
+ @Resource
+ private TreeMapper treeMapper;
+
+ @Resource
+ private TreeChangeLogMapper gardenTreeChangeLogMapper;
+
+ @Resource
+ private RoadMapper roadMapper;
+
+ @Resource
+ private RedisTemplate redisTemplate;
+
+ @Resource
+ private DeptMapper deptMapper;
+
+ public static final String CACHE_REPEAT_KEY = "gardenTree:repeat:";
+
+ @Override
+ public Long createTree(TreeSaveReqVO createReqVO) {
+ // 插入
+ TreeDO tree = BeanUtils.toBean(createReqVO, TreeDO.class);
+
+ if (!ObjectUtils.isEmpty(tree)) {
+ tree.imgToDomain();
+ }
+
+ TreeDO treeDO = treeMapper.selectByTreeNumber(createReqVO.getTreenumber());
+ if (!ObjectUtils.isEmpty(treeDO)) {
+ throw exception(TREE_NUMBER_EXISTS);
+ }
+
+ if (!StringUtils.hasText(tree.getTreenumber())) {
+ Long road = tree.getRoad();
+ if (ObjectUtils.isEmpty(road)) {
+ throw new ServiceException(TREE_ROAD_NOT_EXISTS);
+ }
+ RoadDO roadDO = roadMapper.selectById(road);
+ String prefix = roadDO.getStreetId() + "-" + roadDO.getId() + "-" + roadDO.getDirection() + "-";
+ Long sequence = redisTemplate.opsForValue().increment(CACHE_REPEAT_KEY + prefix);
+ String treeNum = prefix + String.format("%0" + 3 + "d", sequence);
+ tree.setStreet(roadDO.getStreetId());
+ tree.setTreenumber(treeNum);
+ }
+
+ TreeChangeLogDO changeLog = new TreeChangeLogDO();
+ org.springframework.beans.BeanUtils.copyProperties(createReqVO, changeLog);
+ changeLog.setTreeid(createReqVO.getId());
+ changeLog.setCreateby(createReqVO.getCreateby());
+ changeLog.setCreatetime(LocalDateTime.now());
+ changeLog.setUpdateby(createReqVO.getCreateby());
+ changeLog.setUpdatetime(LocalDateTime.now());
+ gardenTreeChangeLogMapper.insert(changeLog);
+
+ treeMapper.insert(tree);
+
+ // 返回
+ return tree.getId();
+ }
+
+ @Override
+ public void updateTree(TreeSaveReqVO updateReqVO) {
+ // 校验存在
+ TreeDO dbTree = validateTreeExists(updateReqVO.getId());
+ if (!ObjectUtils.isEmpty(dbTree) && !dbTree.getTreenumber().equals(updateReqVO.getTreenumber())) {
+ TreeDO treeDO = treeMapper.selectByTreeNumber(updateReqVO.getTreenumber());
+ if (!ObjectUtils.isEmpty(treeDO)) {
+ throw exception(TREE_NUMBER_EXISTS);
+ }
+ }
+
+ // 更新
+ TreeDO updateObj = BeanUtils.toBean(updateReqVO, TreeDO.class);
+ updateObj.imgToDomain();
+
+ if (ObjectUtils.isEmpty(updateReqVO.getStreet())) {
+ Long road = updateReqVO.getRoad();
+ RoadDO roadDO = roadMapper.selectById(road);
+ updateObj.setStreet(roadDO.getStreetId());
+ }
+
+ treeMapper.updateById(updateObj);
+
+ TreeChangeLogDO changeLog = new TreeChangeLogDO();
+ org.springframework.beans.BeanUtils.copyProperties(updateObj, changeLog);
+ changeLog.setTreeid(updateObj.getId());
+ changeLog.setCreateby(updateReqVO.getUpdateby());
+ changeLog.setCreatetime(LocalDateTime.now());
+ changeLog.setUpdateby(updateReqVO.getUpdateby());
+ changeLog.setUpdatetime(LocalDateTime.now());
+ gardenTreeChangeLogMapper.insert(changeLog);
+ }
+
+ @Override
+ public void deleteTree(Long id) {
+ // 校验存在
+ validateTreeExists(id);
+ // 删除
+ treeMapper.deleteById(id);
+ }
+
+ @Override
+ public void deleteTreeListByIds(List ids) {
+ // 删除
+ treeMapper.deleteByIds(ids);
+ }
+
+
+ private TreeDO validateTreeExists(Long id) {
+ TreeDO treeDO = treeMapper.selectById(id);
+ if (treeDO == null) {
+ throw exception(TREE_NOT_EXISTS);
+ }
+ return treeDO;
+ }
+
+ @Override
+ public TreeDO getTree(Long id) {
+ TreeDO treeDO = treeMapper.selectById(id);
+ if (!ObjectUtils.isEmpty(treeDO)) {
+ treeDO.domainToImg();
+ }
+ return treeDO;
+ }
+
+ @Override
+ public PageResult getTreePage(TreePageReqVO pageReqVO) {
+ return treeMapper.selectPage(pageReqVO);
+ }
+
+ @Override
+ public List getCompanyDeptRoadTreeData(TreeVO tree) {
+ List sysDepts = deptMapper.selectList();
+
+ List companyDeptRoadVOS = treeMapper.selectCompanyDeptRoadTreeData(tree);
+
+
+ // 按公司分组所有部门
+ Map> companyDeptsMap = sysDepts.stream()
+ .filter(d -> d.getParentId() != null)
+ .collect(Collectors.groupingBy(DeptDO::getParentId));
+
+ // 过滤出叶子部门(没有子部门的部门)
+ Map> companyLeafDeptsMap = new HashMap<>();
+ for (Map.Entry> entry : companyDeptsMap.entrySet()) {
+ Long companyId = entry.getKey();
+ List depts = entry.getValue();
+
+ // 构建部门ID到部门的映射
+ Map deptMap = depts.stream()
+ .collect(Collectors.toMap(DeptDO::getId, d -> d));
+
+ // 找出叶子部门(其parentId不在deptMap中的部门,或者其parentId为0的部门)
+ List leafDepts = depts.stream()
+ .filter(d -> d.getParentId() == 0 || !deptMap.containsKey(d.getParentId()))
+ .collect(Collectors.toList());
+
+ companyLeafDeptsMap.put(companyId, leafDepts);
+ }
+
+ // 建立现有结果的映射: 公司ID -> CompanyDeptRoadVO
+ Map existingCompanyMap = companyDeptRoadVOS.stream()
+ .collect(Collectors.toMap(
+ CompanyDeptRoadVO::getCompanyId,
+ vo -> vo,
+ (existing, replacement) -> existing
+ ));
+
+ // 遍历所有公司,补充缺失的公司和部门
+ for (Map.Entry> entry : companyLeafDeptsMap.entrySet()) {
+ Long companyId = entry.getKey();
+ List depts = entry.getValue();
+
+ CompanyDeptRoadVO companyVO;
+ if (!existingCompanyMap.containsKey(companyId)) {
+ // 如果公司不存在,创建新的公司对象
+ companyVO = new CompanyDeptRoadVO();
+ companyVO.setCompanyId(companyId);
+ companyVO.setCompanyName(DictFrameworkUtils.parseDictDataValue("belongCompanyId", companyId + ""));
+ companyVO.setDepts(new ArrayList<>());
+ companyDeptRoadVOS.add(companyVO);
+ } else {
+ companyVO = existingCompanyMap.get(companyId);
+ }
+
+ // 建立该公司下已存在的部门映射: 部门ID -> DeptVO
+ Map existingDeptMap = companyVO.getDepts().stream()
+ .collect(Collectors.toMap(
+ deptVO -> Long.valueOf(deptVO.getDeptId()),
+ deptVO -> deptVO,
+ (existing, replacement) -> existing
+ ));
+
+ // 补充缺失的部门(仅叶子部门)
+ for (DeptDO sysDept : depts) {
+ Long deptId = sysDept.getId();
+ if (!existingDeptMap.containsKey(deptId)) {
+ // 创建缺失的部门对象
+ CompanyDeptRoadVO.DeptVO missingDept = new CompanyDeptRoadVO.DeptVO();
+ missingDept.setDeptId(deptId);
+ missingDept.setDeptName(sysDept.getName());
+ missingDept.setRoads(new ArrayList<>());
+ companyVO.getDepts().add(missingDept);
+ }
+ }
+ }
+ return companyDeptRoadVOS;
+ }
+
+ @Override
+ public PageResult getTreesByRoadId(TreePageReqVO pageReqVO) {
+ PageResult treePage = this.getTreePage(pageReqVO);
+ List roadTreeVOS = treePage.getList().stream()
+ .map(treeDO -> {
+ RoadTreeVO roadTreeVO = new RoadTreeVO();
+ BeanUtils.copyProperties(treeDO, roadTreeVO);
+ return roadTreeVO;
+ })
+ .collect(Collectors.toList());
+ return new PageResult<>(roadTreeVOS, treePage.getTotal());
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/treechangelog/TreeChangeLogService.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/treechangelog/TreeChangeLogService.java
new file mode 100644
index 0000000..1ffa963
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/treechangelog/TreeChangeLogService.java
@@ -0,0 +1,62 @@
+package com.zteits.urbanops.module.garden.service.treechangelog;
+
+import java.util.*;
+import jakarta.validation.*;
+import com.zteits.urbanops.module.garden.controller.admin.treechangelog.vo.*;
+import com.zteits.urbanops.module.garden.dal.dataobject.treechangelog.TreeChangeLogDO;
+import com.zteits.urbanops.framework.common.pojo.PageResult;
+import com.zteits.urbanops.framework.common.pojo.PageParam;
+
+/**
+ * 一树一档案修改记录 Service 接口
+ *
+ * @author 超级管理员
+ */
+public interface TreeChangeLogService {
+
+ /**
+ * 创建一树一档案修改记录
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ Long createTreeChangeLog(@Valid TreeChangeLogSaveReqVO createReqVO);
+
+ /**
+ * 更新一树一档案修改记录
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateTreeChangeLog(@Valid TreeChangeLogSaveReqVO updateReqVO);
+
+ /**
+ * 删除一树一档案修改记录
+ *
+ * @param id 编号
+ */
+ void deleteTreeChangeLog(Long id);
+
+ /**
+ * 批量删除一树一档案修改记录
+ *
+ * @param ids 编号
+ */
+ void deleteTreeChangeLogListByIds(List ids);
+
+ /**
+ * 获得一树一档案修改记录
+ *
+ * @param id 编号
+ * @return 一树一档案修改记录
+ */
+ TreeChangeLogDO getTreeChangeLog(Long id);
+
+ /**
+ * 获得一树一档案修改记录分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 一树一档案修改记录分页
+ */
+ PageResult getTreeChangeLogPage(TreeChangeLogPageReqVO pageReqVO);
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/treechangelog/TreeChangeLogServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/treechangelog/TreeChangeLogServiceImpl.java
new file mode 100644
index 0000000..979d078
--- /dev/null
+++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/treechangelog/TreeChangeLogServiceImpl.java
@@ -0,0 +1,87 @@
+package com.zteits.urbanops.module.garden.service.treechangelog;
+
+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.treechangelog.vo.*;
+import com.zteits.urbanops.module.garden.dal.dataobject.treechangelog.TreeChangeLogDO;
+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.treechangelog.TreeChangeLogMapper;
+
+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 TreeChangeLogServiceImpl implements TreeChangeLogService {
+
+ @Resource
+ private TreeChangeLogMapper treeChangeLogMapper;
+
+ @Override
+ public Long createTreeChangeLog(TreeChangeLogSaveReqVO createReqVO) {
+ // 插入
+ TreeChangeLogDO treeChangeLog = BeanUtils.toBean(createReqVO, TreeChangeLogDO.class);
+ treeChangeLogMapper.insert(treeChangeLog);
+
+ // 返回
+ return treeChangeLog.getId();
+ }
+
+ @Override
+ public void updateTreeChangeLog(TreeChangeLogSaveReqVO updateReqVO) {
+ // 校验存在
+ validateTreeChangeLogExists(updateReqVO.getId());
+ // 更新
+ TreeChangeLogDO updateObj = BeanUtils.toBean(updateReqVO, TreeChangeLogDO.class);
+ treeChangeLogMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteTreeChangeLog(Long id) {
+ // 校验存在
+ validateTreeChangeLogExists(id);
+ // 删除
+ treeChangeLogMapper.deleteById(id);
+ }
+
+ @Override
+ public void deleteTreeChangeLogListByIds(List ids) {
+ // 删除
+ treeChangeLogMapper.deleteByIds(ids);
+ }
+
+
+ private void validateTreeChangeLogExists(Long id) {
+ if (treeChangeLogMapper.selectById(id) == null) {
+ throw exception(TREE_CHANGE_LOG_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public TreeChangeLogDO getTreeChangeLog(Long id) {
+ return treeChangeLogMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult getTreeChangeLogPage(TreeChangeLogPageReqVO pageReqVO) {
+ PageResult pageResult = treeChangeLogMapper.selectPage(pageReqVO);
+ pageResult.getList().forEach(TreeChangeLogDO::domainToImg);
+ return pageResult;
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/treerecord/GardenOldtreesService.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/treerecord/GardenOldtreesService.java
deleted file mode 100644
index 2d299d6..0000000
--- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/treerecord/GardenOldtreesService.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.zteits.urbanops.module.garden.service.treerecord;
-
-import com.zteits.urbanops.framework.common.pojo.PageParam;
-import com.zteits.urbanops.framework.common.pojo.PageResult;
-import com.zteits.urbanops.module.garden.dal.dataobject.treerecord.GardenOldtreesDO;
-
-import java.util.List;
-
-public interface GardenOldtreesService {
- PageResult selectPage(PageParam pageParam, GardenOldtreesDO where);
- List selectList(GardenOldtreesDO where);
- GardenOldtreesDO selectById(String id);
- Boolean insert(GardenOldtreesDO entity);
- Boolean update(GardenOldtreesDO entity);
- Boolean deleteByIds(List ids);
-}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/treerecord/GardenOldtreesServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/treerecord/GardenOldtreesServiceImpl.java
deleted file mode 100644
index dcf3f8c..0000000
--- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/treerecord/GardenOldtreesServiceImpl.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.zteits.urbanops.module.garden.service.treerecord;
-
-import com.zteits.urbanops.framework.common.pojo.PageParam;
-import com.zteits.urbanops.framework.common.pojo.PageResult;
-import com.zteits.urbanops.module.garden.dal.dataobject.treerecord.GardenOldtreesDO;
-import com.zteits.urbanops.module.garden.dal.mysql.treerecord.GardenOldtreesMapper;
-import jakarta.annotation.Resource;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-@Service
-public class GardenOldtreesServiceImpl implements GardenOldtreesService {
-
- @Resource
- private GardenOldtreesMapper mapper;
-
- @Override
- public PageResult selectPage(PageParam pageParam, GardenOldtreesDO where) {
- return mapper.selectPage(pageParam, where);
- }
-
- @Override
- public List selectList(GardenOldtreesDO where) {
- return mapper.selectList(new com.zteits.urbanops.framework.mybatis.core.query.LambdaQueryWrapperX()
- .likeIfPresent(GardenOldtreesDO::getTreenumber, where.getTreenumber())
- .likeIfPresent(GardenOldtreesDO::getLatinname, where.getLatinname())
- .eqIfPresent(GardenOldtreesDO::getStreet, where.getStreet())
- .eqIfPresent(GardenOldtreesDO::getMaintainunit, where.getMaintainunit())
- .eqIfPresent(GardenOldtreesDO::getDeptId, where.getDeptId())
- .orderByDesc(GardenOldtreesDO::getUpdateTime));
- }
-
- @Override
- public GardenOldtreesDO selectById(String id) {
- return mapper.selectById(id);
- }
-
- @Override
- public Boolean insert(GardenOldtreesDO entity) {
- return mapper.insert(entity) > 0;
- }
-
- @Override
- public Boolean update(GardenOldtreesDO entity) {
- return mapper.updateById(entity) > 0;
- }
-
- @Override
- public Boolean deleteByIds(List ids) {
- return mapper.deleteBatchIds(ids) > 0;
- }
-}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/treerecord/GardenTreeService.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/treerecord/GardenTreeService.java
deleted file mode 100644
index 2ecae2b..0000000
--- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/treerecord/GardenTreeService.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.zteits.urbanops.module.garden.service.treerecord;
-
-import com.zteits.urbanops.framework.common.pojo.PageResult;
-import com.zteits.urbanops.module.garden.dal.dataobject.treerecord.GardenTreeDO;
-
-import java.util.List;
-
-public interface GardenTreeService {
- PageResult selectPage(GardenTreeDO where, Integer pageNo, Integer pageSize);
- GardenTreeDO selectById(Long id);
- Boolean insert(GardenTreeDO entity);
- Boolean update(GardenTreeDO entity);
- Boolean deleteById(Long id);
- Boolean deleteByIds(List ids);
-
- java.util.List getCompanyDeptRoadTreeData(Long belongCompanyId, String roadName, Long deptId);
-
- java.util.List getTreesByRoadId(Long road);
-}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/treerecord/GardenTreeServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/treerecord/GardenTreeServiceImpl.java
deleted file mode 100644
index 3385145..0000000
--- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/treerecord/GardenTreeServiceImpl.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package com.zteits.urbanops.module.garden.service.treerecord;
-
-import com.zteits.urbanops.framework.common.pojo.PageResult;
-import com.zteits.urbanops.module.garden.dal.dataobject.treerecord.GardenTreeDO;
-import com.zteits.urbanops.module.garden.dal.mysql.treerecord.GardenTreeMapper;
-import com.zteits.urbanops.module.garden.controller.admin.treerecord.vo.CompanyDeptRoadVO;
-import com.zteits.urbanops.module.garden.controller.admin.treerecord.vo.RoadTreeVO;
-import jakarta.annotation.Resource;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-@Service
-public class GardenTreeServiceImpl implements GardenTreeService {
-
- @Resource
- private GardenTreeMapper gardenTreeMapper;
-
- @Override
- public PageResult selectPage(GardenTreeDO where, Integer pageNo, Integer pageSize) {
- com.zteits.urbanops.framework.common.pojo.PageParam pageParam = new com.zteits.urbanops.framework.common.pojo.PageParam();
- pageParam.setPageNo(pageNo);
- pageParam.setPageSize(pageSize);
- return gardenTreeMapper.selectPage(pageParam, where);
- }
-
- @Override
- public GardenTreeDO selectById(Long id) {
- return gardenTreeMapper.selectById(id);
- }
-
- @Override
- public Boolean insert(GardenTreeDO entity) {
- return gardenTreeMapper.insert(entity) > 0;
- }
-
- @Override
- public Boolean update(GardenTreeDO entity) {
- return gardenTreeMapper.updateById(entity) > 0;
- }
-
- @Override
- public Boolean deleteById(Long id) {
- return gardenTreeMapper.deleteById(id) > 0;
- }
-
- @Override
- public Boolean deleteByIds(List ids) {
- return gardenTreeMapper.deleteBatchIds(ids) > 0;
- }
-
- @Override
- public List getCompanyDeptRoadTreeData(Long belongCompanyId, String roadName, Long deptId) {
- List rows = gardenTreeMapper.selectCompanyDeptRoadRows();
- Map> byCompany = rows.stream().collect(Collectors.groupingBy(r -> r.companyId));
- List result = new ArrayList<>();
- for (Map.Entry> entry : byCompany.entrySet()) {
- CompanyDeptRoadVO company = new CompanyDeptRoadVO();
- company.setCompanyId(entry.getKey());
- company.setCompanyName(entry.getValue().get(0).companyName);
- Map> byDept = entry.getValue().stream().collect(Collectors.groupingBy(r -> r.deptId));
- List deptList = new ArrayList<>();
- for (Map.Entry> d : byDept.entrySet()) {
- CompanyDeptRoadVO.DeptVO dept = new CompanyDeptRoadVO.DeptVO();
- dept.setDeptId(d.getKey());
- dept.setDeptName(d.getValue().get(0).deptName);
- List roads = new ArrayList<>();
- for (GardenTreeMapper.CompanyDeptRoadRow r : d.getValue()) {
- CompanyDeptRoadVO.RoadVO roadVO = new CompanyDeptRoadVO.RoadVO();
- roadVO.setRoadId(r.roadId);
- roadVO.setRoadName(r.roadName);
- roadVO.setTreeCount(r.treeCount);
- roadVO.setRecordedCount(r.recordedCount);
- roadVO.setStartRemark(r.startRemark);
- roadVO.setEndRemark(r.endRemark);
- roads.add(roadVO);
- }
- dept.setRoads(roads);
- deptList.add(dept);
- }
- company.setDepts(deptList);
- result.add(company);
- }
- return result;
- }
-
- @Override
- public List getTreesByRoadId(Long road) {
- return gardenTreeMapper.selectTreesByRoadId(road);
- }
-}
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/resources/mapper/oldtrees/OldtreesMapper.xml b/urbanops-module-garden/src/main/resources/mapper/oldtrees/OldtreesMapper.xml
new file mode 100644
index 0000000..14e8394
--- /dev/null
+++ b/urbanops-module-garden/src/main/resources/mapper/oldtrees/OldtreesMapper.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/resources/mapper/oldtreeschangelog/OldtreesChangeLogMapper.xml b/urbanops-module-garden/src/main/resources/mapper/oldtreeschangelog/OldtreesChangeLogMapper.xml
new file mode 100644
index 0000000..7303115
--- /dev/null
+++ b/urbanops-module-garden/src/main/resources/mapper/oldtreeschangelog/OldtreesChangeLogMapper.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/resources/mapper/tree/TreeMapper.xml b/urbanops-module-garden/src/main/resources/mapper/tree/TreeMapper.xml
new file mode 100644
index 0000000..bc89b70
--- /dev/null
+++ b/urbanops-module-garden/src/main/resources/mapper/tree/TreeMapper.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/urbanops-module-garden/src/main/resources/mapper/treechangelog/TreeChangeLogMapper.xml b/urbanops-module-garden/src/main/resources/mapper/treechangelog/TreeChangeLogMapper.xml
new file mode 100644
index 0000000..d0399e8
--- /dev/null
+++ b/urbanops-module-garden/src/main/resources/mapper/treechangelog/TreeChangeLogMapper.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/urbanops-module-workorder/pom.xml b/urbanops-module-workorder/pom.xml
new file mode 100644
index 0000000..b8e6f0d
--- /dev/null
+++ b/urbanops-module-workorder/pom.xml
@@ -0,0 +1,131 @@
+
+
+ 4.0.0
+
+ com.zteits.boot
+ urbanops
+ ${revision}
+
+
+ urbanops-module-workorder
+ jar
+ ${project.artifactId}
+
+
+ 工单管理模块 园林 市政 物业
+
+
+
+
+
+ com.zteits.boot
+ urbanops-spring-boot-starter-biz-tenant
+
+
+
+
+ com.zteits.boot
+ urbanops-spring-boot-starter-security
+
+
+
+ com.zteits.boot
+ urbanops-spring-boot-starter-websocket
+
+
+
+
+ com.zteits.boot
+ urbanops-spring-boot-starter-mybatis
+
+
+ com.baomidou
+ mybatis-plus-generator
+
+
+
+ com.zteits.boot
+ urbanops-spring-boot-starter-redis
+
+
+
+
+
+
+ com.zteits.boot
+ urbanops-spring-boot-starter-job
+
+
+
+
+ com.zteits.boot
+ urbanops-spring-boot-starter-mq
+
+
+
+
+ com.zteits.boot
+ urbanops-spring-boot-starter-test
+ test
+
+
+
+
+ com.zteits.boot
+ urbanops-spring-boot-starter-excel
+
+
+
+ org.apache.velocity
+ velocity-engine-core
+
+
+
+
+ com.squareup.okhttp3
+ okhttp
+ 3.14.9
+
+
+
+
+ com.zteits.boot
+ urbanops-spring-boot-starter-monitor
+
+
+
+ de.codecentric
+ spring-boot-admin-starter-server
+ true
+
+
+
+
+ commons-net
+ commons-net
+
+
+ com.github.mwiede
+ jsch
+
+
+
+ software.amazon.awssdk
+ s3
+
+
+
+ org.apache.tika
+ tika-core
+
+
+
+ com.zteits.boot
+ urbanops-module-system
+ ${revision}
+
+
+
+
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/attachment/AttachmentController.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/attachment/AttachmentController.java
new file mode 100644
index 0000000..1c21434
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/attachment/AttachmentController.java
@@ -0,0 +1,104 @@
+package com.zteits.urbanops.module.workorder.controller.admin.attachment;
+
+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.workorder.controller.admin.attachment.vo.*;
+import com.zteits.urbanops.module.workorder.dal.dataobject.attachment.AttachmentDO;
+import com.zteits.urbanops.module.workorder.service.attachment.AttachmentService;
+
+@Tag(name = "管理后台 - 工单附件信息")
+@RestController
+@RequestMapping("/workorder/attachment")
+@Validated
+public class AttachmentController {
+
+ @Resource
+ private AttachmentService attachmentService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建工单附件信息")
+ @PreAuthorize("@ss.hasPermission('workorder:attachment:create')")
+ public CommonResult createAttachment(@Valid @RequestBody AttachmentSaveReqVO createReqVO) {
+ return success(attachmentService.createAttachment(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新工单附件信息")
+ @PreAuthorize("@ss.hasPermission('workorder:attachment:update')")
+ public CommonResult updateAttachment(@Valid @RequestBody AttachmentSaveReqVO updateReqVO) {
+ attachmentService.updateAttachment(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除工单附件信息")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('workorder:attachment:delete')")
+ public CommonResult deleteAttachment(@RequestParam("id") Long id) {
+ attachmentService.deleteAttachment(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除工单附件信息")
+ @PreAuthorize("@ss.hasPermission('workorder:attachment:delete')")
+ public CommonResult deleteAttachmentList(@RequestParam("ids") List ids) {
+ attachmentService.deleteAttachmentListByIds(ids);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得工单附件信息")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('workorder:attachment:query')")
+ public CommonResult getAttachment(@RequestParam("id") Long id) {
+ AttachmentDO attachment = attachmentService.getAttachment(id);
+ return success(BeanUtils.toBean(attachment, AttachmentRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得工单附件信息分页")
+ @PreAuthorize("@ss.hasPermission('workorder:attachment:query')")
+ public CommonResult> getAttachmentPage(@Valid AttachmentPageReqVO pageReqVO) {
+ PageResult pageResult = attachmentService.getAttachmentPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, AttachmentRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出工单附件信息 Excel")
+ @PreAuthorize("@ss.hasPermission('workorder:attachment:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportAttachmentExcel(@Valid AttachmentPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = attachmentService.getAttachmentPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "工单附件信息.xls", "数据", AttachmentRespVO.class,
+ BeanUtils.toBean(list, AttachmentRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/attachment/vo/AttachmentPageReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/attachment/vo/AttachmentPageReqVO.java
new file mode 100644
index 0000000..e6090c3
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/attachment/vo/AttachmentPageReqVO.java
@@ -0,0 +1,44 @@
+package com.zteits.urbanops.module.workorder.controller.admin.attachment.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 AttachmentPageReqVO extends PageParam {
+
+ @Schema(description = "工单号")
+ private String orderNo;
+
+ @Schema(description = "业务线:yl 园林,wy 物业,sz 市政 ")
+ private String busiLine;
+
+ @Schema(description = "业务类型:01 问题图片,02 街道图片,03 选景图片", example = "1")
+ private String busiType;
+
+ @Schema(description = "文件名称")
+ private String fileNames;
+
+ @Schema(description = "路径", example = "https://www.iocoder.cn")
+ private String hostUrl;
+
+ @Schema(description = "文件大小")
+ private String fileSize;
+
+ @Schema(description = "文件类型", example = "2")
+ private String contentType;
+
+ @Schema(description = "描述", example = "你说的对")
+ private String remark;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/attachment/vo/AttachmentRespVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/attachment/vo/AttachmentRespVO.java
new file mode 100644
index 0000000..bc76c6e
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/attachment/vo/AttachmentRespVO.java
@@ -0,0 +1,55 @@
+package com.zteits.urbanops.module.workorder.controller.admin.attachment.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 AttachmentRespVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "4728")
+ @ExcelProperty("ID")
+ private Long id;
+
+ @Schema(description = "工单号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("工单号")
+ private String orderNo;
+
+ @Schema(description = "业务线:yl 园林,wy 物业,sz 市政 ", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("业务线:yl 园林,wy 物业,sz 市政 ")
+ private String busiLine;
+
+ @Schema(description = "业务类型:01 问题图片,02 街道图片,03 选景图片", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @ExcelProperty("业务类型:01 问题图片,02 街道图片,03 选景图片")
+ private String busiType;
+
+ @Schema(description = "文件名称")
+ @ExcelProperty("文件名称")
+ private String fileNames;
+
+ @Schema(description = "路径", example = "https://www.iocoder.cn")
+ @ExcelProperty("路径")
+ private String hostUrl;
+
+ @Schema(description = "文件大小")
+ @ExcelProperty("文件大小")
+ private String fileSize;
+
+ @Schema(description = "文件类型", example = "2")
+ @ExcelProperty("文件类型")
+ private String contentType;
+
+ @Schema(description = "描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对")
+ @ExcelProperty("描述")
+ private String remark;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/attachment/vo/AttachmentSaveReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/attachment/vo/AttachmentSaveReqVO.java
new file mode 100644
index 0000000..101d017
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/attachment/vo/AttachmentSaveReqVO.java
@@ -0,0 +1,43 @@
+package com.zteits.urbanops.module.workorder.controller.admin.attachment.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 AttachmentSaveReqVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "4728")
+ private Long id;
+
+ @Schema(description = "工单号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "工单号不能为空")
+ private String orderNo;
+
+ @Schema(description = "业务线:yl 园林,wy 物业,sz 市政 ", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "业务线:yl 园林,wy 物业,sz 市政 不能为空")
+ private String busiLine;
+
+ @Schema(description = "业务类型:01 问题图片,02 街道图片,03 选景图片", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @NotEmpty(message = "业务类型:01 问题图片,02 街道图片,03 选景图片不能为空")
+ private String busiType;
+
+ @Schema(description = "文件名称")
+ private String fileNames;
+
+ @Schema(description = "路径", example = "https://www.iocoder.cn")
+ private String hostUrl;
+
+ @Schema(description = "文件大小")
+ private String fileSize;
+
+ @Schema(description = "文件类型", example = "2")
+ private String contentType;
+
+ @Schema(description = "描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对")
+ @NotEmpty(message = "描述不能为空")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/MainInfoController.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/MainInfoController.java
new file mode 100644
index 0000000..32806fc
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/MainInfoController.java
@@ -0,0 +1,104 @@
+package com.zteits.urbanops.module.workorder.controller.admin.maininfo;
+
+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.workorder.controller.admin.maininfo.vo.*;
+import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoDO;
+import com.zteits.urbanops.module.workorder.service.maininfo.MainInfoService;
+
+@Tag(name = "管理后台 - 工单信息")
+@RestController
+@RequestMapping("/workorder/main-info")
+@Validated
+public class MainInfoController {
+
+ @Resource
+ private MainInfoService mainInfoService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建工单信息")
+ @PreAuthorize("@ss.hasPermission('workorder:main-info:create')")
+ public CommonResult createMainInfo(@Valid @RequestBody MainInfoSaveReqVO createReqVO) {
+ return success(mainInfoService.createMainInfo(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新工单信息")
+ @PreAuthorize("@ss.hasPermission('workorder:main-info:update')")
+ public CommonResult updateMainInfo(@Valid @RequestBody MainInfoSaveReqVO updateReqVO) {
+ mainInfoService.updateMainInfo(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除工单信息")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('workorder:main-info:delete')")
+ public CommonResult deleteMainInfo(@RequestParam("id") Long id) {
+ mainInfoService.deleteMainInfo(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除工单信息")
+ @PreAuthorize("@ss.hasPermission('workorder:main-info:delete')")
+ public CommonResult deleteMainInfoList(@RequestParam("ids") List ids) {
+ mainInfoService.deleteMainInfoListByIds(ids);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得工单信息")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('workorder:main-info:query')")
+ public CommonResult getMainInfo(@RequestParam("id") Long id) {
+ MainInfoDO mainInfo = mainInfoService.getMainInfo(id);
+ return success(BeanUtils.toBean(mainInfo, MainInfoRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得工单信息分页")
+ @PreAuthorize("@ss.hasPermission('workorder:main-info:query')")
+ public CommonResult> getMainInfoPage(@Valid MainInfoPageReqVO pageReqVO) {
+ PageResult pageResult = mainInfoService.getMainInfoPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, MainInfoRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出工单信息 Excel")
+ @PreAuthorize("@ss.hasPermission('workorder:main-info:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportMainInfoExcel(@Valid MainInfoPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = mainInfoService.getMainInfoPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "工单信息.xls", "数据", MainInfoRespVO.class,
+ BeanUtils.toBean(list, MainInfoRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoPageReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoPageReqVO.java
new file mode 100644
index 0000000..83629e8
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoPageReqVO.java
@@ -0,0 +1,100 @@
+package com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.zteits.urbanops.framework.common.pojo.PageParam;
+import java.math.BigDecimal;
+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 MainInfoPageReqVO extends PageParam {
+
+ @Schema(description = "业务线:yl 园林,wy 物业,sz 市政 ")
+ private String busiLine;
+
+ @Schema(description = "工单号")
+ private String orderNo;
+
+ @Schema(description = "工单名称", example = "张三")
+ private String orderName;
+
+ @Schema(description = "来源ID", example = "1828")
+ private Integer sourceId;
+
+ @Schema(description = "来源名称", example = "芋艿")
+ private String sourceName;
+
+ @Schema(description = "道路ID", example = "21128")
+ private Long roadId;
+
+ @Schema(description = "道路名称", example = "王五")
+ private String roadName;
+
+ @Schema(description = "街道ID", example = "27852")
+ private String streetId;
+
+ @Schema(description = "街道名称", example = "芋艿")
+ private String streetName;
+
+ @Schema(description = "养护级别ID", example = "28278")
+ private Integer curingLevelId;
+
+ @Schema(description = "养护级别", example = "王五")
+ private String curingLevelName;
+
+ @Schema(description = "提交日期")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] commitDate;
+
+ @Schema(description = "紧急程度:1:特急;2:紧急;3:一般", example = "2")
+ private Integer pressingType;
+
+ @Schema(description = "提交用户ID", example = "12757")
+ private Long userId;
+
+ @Schema(description = "提交用户名称", example = "王五")
+ private String userName;
+
+ @Schema(description = "部门id", example = "26936")
+ private Long companyId;
+
+ @Schema(description = "经纬度类型: 1:国标; 2:百度;3:高德;4:腾讯", example = "2")
+ private Integer latLonType;
+
+ @Schema(description = "经度")
+ private BigDecimal lat;
+
+ @Schema(description = "维度")
+ private BigDecimal lon;
+
+ @Schema(description = "经纬度地址")
+ private String lonLatAddress;
+
+ @Schema(description = "三方工单ID")
+ private String thirdWorkNo;
+
+ @Schema(description = "三方工单结果上报状态:1:待推送;2:推送成功;3:推送失败")
+ private Integer thirdPushState;
+
+ @Schema(description = "业务状态", example = "1")
+ private String buzStatus;
+
+ @Schema(description = "审批状态", example = "2")
+ private Integer status;
+
+ @Schema(description = "流程实例的编号", example = "9184")
+ private String processInstanceId;
+
+ @Schema(description = "工单描述", example = "你说的对")
+ private String remark;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoRespVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoRespVO.java
new file mode 100644
index 0000000..f8d705c
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoRespVO.java
@@ -0,0 +1,128 @@
+package com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import cn.idev.excel.annotation.*;
+
+@Schema(description = "管理后台 - 工单信息 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class MainInfoRespVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "7114")
+ @ExcelProperty("ID")
+ private Long id;
+
+ @Schema(description = "业务线:yl 园林,wy 物业,sz 市政 ", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("业务线:yl 园林,wy 物业,sz 市政 ")
+ private String busiLine;
+
+ @Schema(description = "工单号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("工单号")
+ private String orderNo;
+
+ @Schema(description = "工单名称", example = "张三")
+ @ExcelProperty("工单名称")
+ private String orderName;
+
+ @Schema(description = "来源ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1828")
+ @ExcelProperty("来源ID")
+ private Integer sourceId;
+
+ @Schema(description = "来源名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
+ @ExcelProperty("来源名称")
+ private String sourceName;
+
+ @Schema(description = "道路ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "21128")
+ @ExcelProperty("道路ID")
+ private Long roadId;
+
+ @Schema(description = "道路名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
+ @ExcelProperty("道路名称")
+ private String roadName;
+
+ @Schema(description = "街道ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "27852")
+ @ExcelProperty("街道ID")
+ private String streetId;
+
+ @Schema(description = "街道名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
+ @ExcelProperty("街道名称")
+ private String streetName;
+
+ @Schema(description = "养护级别ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "28278")
+ @ExcelProperty("养护级别ID")
+ private Integer curingLevelId;
+
+ @Schema(description = "养护级别", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
+ @ExcelProperty("养护级别")
+ private String curingLevelName;
+
+ @Schema(description = "提交日期", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("提交日期")
+ private LocalDateTime commitDate;
+
+ @Schema(description = "紧急程度:1:特急;2:紧急;3:一般", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+ @ExcelProperty("紧急程度:1:特急;2:紧急;3:一般")
+ private Integer pressingType;
+
+ @Schema(description = "提交用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "12757")
+ @ExcelProperty("提交用户ID")
+ private Long userId;
+
+ @Schema(description = "提交用户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
+ @ExcelProperty("提交用户名称")
+ private String userName;
+
+ @Schema(description = "部门id", requiredMode = Schema.RequiredMode.REQUIRED, example = "26936")
+ @ExcelProperty("部门id")
+ private Long companyId;
+
+ @Schema(description = "经纬度类型: 1:国标; 2:百度;3:高德;4:腾讯", example = "2")
+ @ExcelProperty("经纬度类型: 1:国标; 2:百度;3:高德;4:腾讯")
+ private Integer latLonType;
+
+ @Schema(description = "经度", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("经度")
+ private BigDecimal lat;
+
+ @Schema(description = "维度", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("维度")
+ private BigDecimal lon;
+
+ @Schema(description = "经纬度地址", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("经纬度地址")
+ private String lonLatAddress;
+
+ @Schema(description = "三方工单ID")
+ @ExcelProperty("三方工单ID")
+ private String thirdWorkNo;
+
+ @Schema(description = "三方工单结果上报状态:1:待推送;2:推送成功;3:推送失败")
+ @ExcelProperty("三方工单结果上报状态:1:待推送;2:推送成功;3:推送失败")
+ private Integer thirdPushState;
+
+ @Schema(description = "业务状态", example = "1")
+ @ExcelProperty("业务状态")
+ private String buzStatus;
+
+ @Schema(description = "审批状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+ @ExcelProperty("审批状态")
+ private Integer status;
+
+ @Schema(description = "流程实例的编号", example = "9184")
+ @ExcelProperty("流程实例的编号")
+ private String processInstanceId;
+
+ @Schema(description = "工单描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对")
+ @ExcelProperty("工单描述")
+ private String remark;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoSaveReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoSaveReqVO.java
new file mode 100644
index 0000000..9a3e5e4
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/maininfo/vo/MainInfoSaveReqVO.java
@@ -0,0 +1,116 @@
+package com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import jakarta.validation.constraints.*;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 工单信息新增/修改 Request VO")
+@Data
+public class MainInfoSaveReqVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "7114")
+ private Long id;
+
+ @Schema(description = "业务线:yl 园林,wy 物业,sz 市政 ", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "业务线:yl 园林,wy 物业,sz 市政 不能为空")
+ private String busiLine;
+
+ @Schema(description = "工单号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "工单号不能为空")
+ private String orderNo;
+
+ @Schema(description = "工单名称", example = "张三")
+ private String orderName;
+
+ @Schema(description = "来源ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1828")
+ @NotNull(message = "来源ID不能为空")
+ private Integer sourceId;
+
+ @Schema(description = "来源名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
+ @NotEmpty(message = "来源名称不能为空")
+ private String sourceName;
+
+ @Schema(description = "道路ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "21128")
+ @NotNull(message = "道路ID不能为空")
+ private Long roadId;
+
+ @Schema(description = "道路名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
+ @NotEmpty(message = "道路名称不能为空")
+ private String roadName;
+
+ @Schema(description = "街道ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "27852")
+ @NotEmpty(message = "街道ID不能为空")
+ private String streetId;
+
+ @Schema(description = "街道名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
+ @NotEmpty(message = "街道名称不能为空")
+ private String streetName;
+
+ @Schema(description = "养护级别ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "28278")
+ @NotNull(message = "养护级别ID不能为空")
+ private Integer curingLevelId;
+
+ @Schema(description = "养护级别", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
+ @NotEmpty(message = "养护级别不能为空")
+ private String curingLevelName;
+
+ @Schema(description = "提交日期", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "提交日期不能为空")
+ private LocalDateTime commitDate;
+
+ @Schema(description = "紧急程度:1:特急;2:紧急;3:一般", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+ @NotNull(message = "紧急程度:1:特急;2:紧急;3:一般不能为空")
+ private Integer pressingType;
+
+ @Schema(description = "提交用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "12757")
+ @NotNull(message = "提交用户ID不能为空")
+ private Long userId;
+
+ @Schema(description = "提交用户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
+ @NotEmpty(message = "提交用户名称不能为空")
+ private String userName;
+
+ @Schema(description = "部门id", requiredMode = Schema.RequiredMode.REQUIRED, example = "26936")
+ @NotNull(message = "部门id不能为空")
+ private Long companyId;
+
+ @Schema(description = "经纬度类型: 1:国标; 2:百度;3:高德;4:腾讯", example = "2")
+ private Integer latLonType;
+
+ @Schema(description = "经度", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "经度不能为空")
+ private BigDecimal lat;
+
+ @Schema(description = "维度", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "维度不能为空")
+ private BigDecimal lon;
+
+ @Schema(description = "经纬度地址", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "经纬度地址不能为空")
+ private String lonLatAddress;
+
+ @Schema(description = "三方工单ID")
+ private String thirdWorkNo;
+
+ @Schema(description = "三方工单结果上报状态:1:待推送;2:推送成功;3:推送失败")
+ private Integer thirdPushState;
+
+ @Schema(description = "业务状态", example = "1")
+ private String buzStatus;
+
+ @Schema(description = "审批状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+ @NotNull(message = "审批状态不能为空")
+ private Integer status;
+
+ @Schema(description = "流程实例的编号", example = "9184")
+ private String processInstanceId;
+
+ @Schema(description = "工单描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对")
+ @NotEmpty(message = "工单描述不能为空")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/materialdetail/MaterialDetailController.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/materialdetail/MaterialDetailController.java
new file mode 100644
index 0000000..4b2d08b
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/materialdetail/MaterialDetailController.java
@@ -0,0 +1,104 @@
+package com.zteits.urbanops.module.workorder.controller.admin.materialdetail;
+
+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.workorder.controller.admin.materialdetail.vo.*;
+import com.zteits.urbanops.module.workorder.dal.dataobject.materialdetail.MaterialDetailDO;
+import com.zteits.urbanops.module.workorder.service.materialdetail.MaterialDetailService;
+
+@Tag(name = "管理后台 - 工单耗材明细")
+@RestController
+@RequestMapping("/workorder/material-detail")
+@Validated
+public class MaterialDetailController {
+
+ @Resource
+ private MaterialDetailService materialDetailService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建工单耗材明细")
+ @PreAuthorize("@ss.hasPermission('workorder:material-detail:create')")
+ public CommonResult createMaterialDetail(@Valid @RequestBody MaterialDetailSaveReqVO createReqVO) {
+ return success(materialDetailService.createMaterialDetail(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新工单耗材明细")
+ @PreAuthorize("@ss.hasPermission('workorder:material-detail:update')")
+ public CommonResult updateMaterialDetail(@Valid @RequestBody MaterialDetailSaveReqVO updateReqVO) {
+ materialDetailService.updateMaterialDetail(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除工单耗材明细")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('workorder:material-detail:delete')")
+ public CommonResult deleteMaterialDetail(@RequestParam("id") Long id) {
+ materialDetailService.deleteMaterialDetail(id);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete-list")
+ @Parameter(name = "ids", description = "编号", required = true)
+ @Operation(summary = "批量删除工单耗材明细")
+ @PreAuthorize("@ss.hasPermission('workorder:material-detail:delete')")
+ public CommonResult deleteMaterialDetailList(@RequestParam("ids") List ids) {
+ materialDetailService.deleteMaterialDetailListByIds(ids);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得工单耗材明细")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('workorder:material-detail:query')")
+ public CommonResult getMaterialDetail(@RequestParam("id") Long id) {
+ MaterialDetailDO materialDetail = materialDetailService.getMaterialDetail(id);
+ return success(BeanUtils.toBean(materialDetail, MaterialDetailRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得工单耗材明细分页")
+ @PreAuthorize("@ss.hasPermission('workorder:material-detail:query')")
+ public CommonResult> getMaterialDetailPage(@Valid MaterialDetailPageReqVO pageReqVO) {
+ PageResult pageResult = materialDetailService.getMaterialDetailPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, MaterialDetailRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出工单耗材明细 Excel")
+ @PreAuthorize("@ss.hasPermission('workorder:material-detail:export')")
+ @ApiAccessLog(operateType = EXPORT)
+ public void exportMaterialDetailExcel(@Valid MaterialDetailPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = materialDetailService.getMaterialDetailPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "工单耗材明细.xls", "数据", MaterialDetailRespVO.class,
+ BeanUtils.toBean(list, MaterialDetailRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/materialdetail/vo/MaterialDetailPageReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/materialdetail/vo/MaterialDetailPageReqVO.java
new file mode 100644
index 0000000..faaa226
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/materialdetail/vo/MaterialDetailPageReqVO.java
@@ -0,0 +1,59 @@
+package com.zteits.urbanops.module.workorder.controller.admin.materialdetail.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 MaterialDetailPageReqVO extends PageParam {
+
+ @Schema(description = "工单号")
+ private String orderNo;
+
+ @Schema(description = "提交用户ID", example = "10300")
+ private Long userId;
+
+ @Schema(description = "提交用户名称", example = "赵六")
+ private String userName;
+
+ @Schema(description = "种类ID", example = "27821")
+ private Long classifyId;
+
+ @Schema(description = "种类名称", example = "张三")
+ private String classifyName;
+
+ @Schema(description = "类别ID", example = "23969")
+ private Long typeId;
+
+ @Schema(description = "类别名称", example = "李四")
+ private String typeName;
+
+ @Schema(description = "类别明细ID", example = "11240")
+ private Long typeDetailId;
+
+ @Schema(description = "类别明细名称", example = "赵六")
+ private String typeDetailName;
+
+ @Schema(description = "使用数量", example = "20141")
+ private Double userCount;
+
+ @Schema(description = "单位", example = "李四")
+ private String unitName;
+
+ @Schema(description = "状态(0正常 1停用)", example = "1")
+ private String status;
+
+ @Schema(description = "描述", example = "你说的对")
+ private String remark;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/materialdetail/vo/MaterialDetailRespVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/materialdetail/vo/MaterialDetailRespVO.java
new file mode 100644
index 0000000..89f8a59
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/materialdetail/vo/MaterialDetailRespVO.java
@@ -0,0 +1,75 @@
+package com.zteits.urbanops.module.workorder.controller.admin.materialdetail.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 MaterialDetailRespVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "234")
+ @ExcelProperty("ID")
+ private Long id;
+
+ @Schema(description = "工单号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("工单号")
+ private String orderNo;
+
+ @Schema(description = "提交用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10300")
+ @ExcelProperty("提交用户ID")
+ private Long userId;
+
+ @Schema(description = "提交用户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
+ @ExcelProperty("提交用户名称")
+ private String userName;
+
+ @Schema(description = "种类ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "27821")
+ @ExcelProperty("种类ID")
+ private Long classifyId;
+
+ @Schema(description = "种类名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
+ @ExcelProperty("种类名称")
+ private String classifyName;
+
+ @Schema(description = "类别ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "23969")
+ @ExcelProperty("类别ID")
+ private Long typeId;
+
+ @Schema(description = "类别名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+ @ExcelProperty("类别名称")
+ private String typeName;
+
+ @Schema(description = "类别明细ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11240")
+ @ExcelProperty("类别明细ID")
+ private Long typeDetailId;
+
+ @Schema(description = "类别明细名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
+ @ExcelProperty("类别明细名称")
+ private String typeDetailName;
+
+ @Schema(description = "使用数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "20141")
+ @ExcelProperty("使用数量")
+ private Double userCount;
+
+ @Schema(description = "单位", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+ @ExcelProperty("单位")
+ private String unitName;
+
+ @Schema(description = "状态(0正常 1停用)", example = "1")
+ @ExcelProperty("状态(0正常 1停用)")
+ private String status;
+
+ @Schema(description = "描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对")
+ @ExcelProperty("描述")
+ private String remark;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/materialdetail/vo/MaterialDetailSaveReqVO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/materialdetail/vo/MaterialDetailSaveReqVO.java
new file mode 100644
index 0000000..fd21287
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/controller/admin/materialdetail/vo/MaterialDetailSaveReqVO.java
@@ -0,0 +1,66 @@
+package com.zteits.urbanops.module.workorder.controller.admin.materialdetail.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 MaterialDetailSaveReqVO {
+
+ @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "234")
+ private Long id;
+
+ @Schema(description = "工单号", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotEmpty(message = "工单号不能为空")
+ private String orderNo;
+
+ @Schema(description = "提交用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10300")
+ @NotNull(message = "提交用户ID不能为空")
+ private Long userId;
+
+ @Schema(description = "提交用户名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
+ @NotEmpty(message = "提交用户名称不能为空")
+ private String userName;
+
+ @Schema(description = "种类ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "27821")
+ @NotNull(message = "种类ID不能为空")
+ private Long classifyId;
+
+ @Schema(description = "种类名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
+ @NotEmpty(message = "种类名称不能为空")
+ private String classifyName;
+
+ @Schema(description = "类别ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "23969")
+ @NotNull(message = "类别ID不能为空")
+ private Long typeId;
+
+ @Schema(description = "类别名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+ @NotEmpty(message = "类别名称不能为空")
+ private String typeName;
+
+ @Schema(description = "类别明细ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "11240")
+ @NotNull(message = "类别明细ID不能为空")
+ private Long typeDetailId;
+
+ @Schema(description = "类别明细名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
+ @NotEmpty(message = "类别明细名称不能为空")
+ private String typeDetailName;
+
+ @Schema(description = "使用数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "20141")
+ @NotNull(message = "使用数量不能为空")
+ private Double userCount;
+
+ @Schema(description = "单位", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+ @NotEmpty(message = "单位不能为空")
+ private String unitName;
+
+ @Schema(description = "状态(0正常 1停用)", example = "1")
+ private String status;
+
+ @Schema(description = "描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "你说的对")
+ @NotEmpty(message = "描述不能为空")
+ private String remark;
+
+}
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/attachment/AttachmentDO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/attachment/AttachmentDO.java
new file mode 100644
index 0000000..68bd6a0
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/attachment/AttachmentDO.java
@@ -0,0 +1,64 @@
+package com.zteits.urbanops.module.workorder.dal.dataobject.attachment;
+
+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("workorder_attachment")
+@KeySequence("workorder_attachment_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class AttachmentDO extends BaseDO {
+
+ /**
+ * ID
+ */
+ @TableId
+ private Long id;
+ /**
+ * 工单号
+ */
+ private String orderNo;
+ /**
+ * 业务线:yl 园林,wy 物业,sz 市政
+ */
+ private String busiLine;
+ /**
+ * 业务类型:01 问题图片,02 街道图片,03 选景图片
+ */
+ private String busiType;
+ /**
+ * 文件名称
+ */
+ private String fileNames;
+ /**
+ * 路径
+ */
+ private String hostUrl;
+ /**
+ * 文件大小
+ */
+ private String fileSize;
+ /**
+ * 文件类型
+ */
+ private String contentType;
+ /**
+ * 描述
+ */
+ private String remark;
+
+
+}
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/maininfo/MainInfoDO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/maininfo/MainInfoDO.java
new file mode 100644
index 0000000..d320ae3
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/maininfo/MainInfoDO.java
@@ -0,0 +1,139 @@
+package com.zteits.urbanops.module.workorder.dal.dataobject.maininfo;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.math.BigDecimal;
+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("workorder_main_info")
+@KeySequence("workorder_main_info_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class MainInfoDO extends BaseDO {
+
+ /**
+ * ID
+ */
+ @TableId
+ private Long id;
+ /**
+ * 业务线:yl 园林,wy 物业,sz 市政
+ */
+ private String busiLine;
+ /**
+ * 工单号
+ */
+ private String orderNo;
+ /**
+ * 工单名称
+ */
+ private String orderName;
+ /**
+ * 来源ID
+ */
+ private Integer sourceId;
+ /**
+ * 来源名称
+ */
+ private String sourceName;
+ /**
+ * 道路ID
+ */
+ private Long roadId;
+ /**
+ * 道路名称
+ */
+ private String roadName;
+ /**
+ * 街道ID
+ */
+ private String streetId;
+ /**
+ * 街道名称
+ */
+ private String streetName;
+ /**
+ * 养护级别ID
+ */
+ private Integer curingLevelId;
+ /**
+ * 养护级别
+ */
+ private String curingLevelName;
+ /**
+ * 提交日期
+ */
+ private LocalDateTime commitDate;
+ /**
+ * 紧急程度:1:特急;2:紧急;3:一般
+ */
+ private Integer pressingType;
+ /**
+ * 提交用户ID
+ */
+ private Long userId;
+ /**
+ * 提交用户名称
+ */
+ private String userName;
+ /**
+ * 部门id
+ */
+ private Long companyId;
+ /**
+ * 经纬度类型: 1:国标; 2:百度;3:高德;4:腾讯
+ */
+ private Integer latLonType;
+ /**
+ * 经度
+ */
+ private BigDecimal lat;
+ /**
+ * 维度
+ */
+ private BigDecimal lon;
+ /**
+ * 经纬度地址
+ */
+ private String lonLatAddress;
+ /**
+ * 三方工单ID
+ */
+ private String thirdWorkNo;
+ /**
+ * 三方工单结果上报状态:1:待推送;2:推送成功;3:推送失败
+ */
+ private Integer thirdPushState;
+ /**
+ * 业务状态
+ */
+ private String buzStatus;
+ /**
+ * 审批状态
+ */
+ private Integer status;
+ /**
+ * 流程实例的编号
+ */
+ private String processInstanceId;
+ /**
+ * 工单描述
+ */
+ private String remark;
+
+
+}
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/materialdetail/MaterialDetailDO.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/materialdetail/MaterialDetailDO.java
new file mode 100644
index 0000000..215fd64
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/dataobject/materialdetail/MaterialDetailDO.java
@@ -0,0 +1,84 @@
+package com.zteits.urbanops.module.workorder.dal.dataobject.materialdetail;
+
+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("workorder_material_detail")
+@KeySequence("workorder_material_detail_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class MaterialDetailDO extends BaseDO {
+
+ /**
+ * ID
+ */
+ @TableId
+ private Long id;
+ /**
+ * 工单号
+ */
+ private String orderNo;
+ /**
+ * 提交用户ID
+ */
+ private Long userId;
+ /**
+ * 提交用户名称
+ */
+ private String userName;
+ /**
+ * 种类ID
+ */
+ private Long classifyId;
+ /**
+ * 种类名称
+ */
+ private String classifyName;
+ /**
+ * 类别ID
+ */
+ private Long typeId;
+ /**
+ * 类别名称
+ */
+ private String typeName;
+ /**
+ * 类别明细ID
+ */
+ private Long typeDetailId;
+ /**
+ * 类别明细名称
+ */
+ private String typeDetailName;
+ /**
+ * 使用数量
+ */
+ private Double userCount;
+ /**
+ * 单位
+ */
+ private String unitName;
+ /**
+ * 状态(0正常 1停用)
+ */
+ private String status;
+ /**
+ * 描述
+ */
+ private String remark;
+
+
+}
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/mysql/attachment/AttachmentMapper.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/mysql/attachment/AttachmentMapper.java
new file mode 100644
index 0000000..01ebd98
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/mysql/attachment/AttachmentMapper.java
@@ -0,0 +1,34 @@
+package com.zteits.urbanops.module.workorder.dal.mysql.attachment;
+
+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.workorder.dal.dataobject.attachment.AttachmentDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.zteits.urbanops.module.workorder.controller.admin.attachment.vo.*;
+
+/**
+ * 工单附件信息 Mapper
+ *
+ * @author 超级管理员
+ */
+@Mapper
+public interface AttachmentMapper extends BaseMapperX {
+
+ default PageResult selectPage(AttachmentPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(AttachmentDO::getOrderNo, reqVO.getOrderNo())
+ .eqIfPresent(AttachmentDO::getBusiLine, reqVO.getBusiLine())
+ .eqIfPresent(AttachmentDO::getBusiType, reqVO.getBusiType())
+ .eqIfPresent(AttachmentDO::getFileNames, reqVO.getFileNames())
+ .eqIfPresent(AttachmentDO::getHostUrl, reqVO.getHostUrl())
+ .eqIfPresent(AttachmentDO::getFileSize, reqVO.getFileSize())
+ .eqIfPresent(AttachmentDO::getContentType, reqVO.getContentType())
+ .eqIfPresent(AttachmentDO::getRemark, reqVO.getRemark())
+ .betweenIfPresent(AttachmentDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(AttachmentDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/mysql/maininfo/MainInfoMapper.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/mysql/maininfo/MainInfoMapper.java
new file mode 100644
index 0000000..70d1a17
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/mysql/maininfo/MainInfoMapper.java
@@ -0,0 +1,52 @@
+package com.zteits.urbanops.module.workorder.dal.mysql.maininfo;
+
+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.workorder.dal.dataobject.maininfo.MainInfoDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo.*;
+
+/**
+ * 工单信息 Mapper
+ *
+ * @author 超级管理员
+ */
+@Mapper
+public interface MainInfoMapper extends BaseMapperX {
+
+ default PageResult selectPage(MainInfoPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(MainInfoDO::getBusiLine, reqVO.getBusiLine())
+ .eqIfPresent(MainInfoDO::getOrderNo, reqVO.getOrderNo())
+ .likeIfPresent(MainInfoDO::getOrderName, reqVO.getOrderName())
+ .eqIfPresent(MainInfoDO::getSourceId, reqVO.getSourceId())
+ .likeIfPresent(MainInfoDO::getSourceName, reqVO.getSourceName())
+ .eqIfPresent(MainInfoDO::getRoadId, reqVO.getRoadId())
+ .likeIfPresent(MainInfoDO::getRoadName, reqVO.getRoadName())
+ .eqIfPresent(MainInfoDO::getStreetId, reqVO.getStreetId())
+ .likeIfPresent(MainInfoDO::getStreetName, reqVO.getStreetName())
+ .eqIfPresent(MainInfoDO::getCuringLevelId, reqVO.getCuringLevelId())
+ .likeIfPresent(MainInfoDO::getCuringLevelName, reqVO.getCuringLevelName())
+ .betweenIfPresent(MainInfoDO::getCommitDate, reqVO.getCommitDate())
+ .eqIfPresent(MainInfoDO::getPressingType, reqVO.getPressingType())
+ .eqIfPresent(MainInfoDO::getUserId, reqVO.getUserId())
+ .likeIfPresent(MainInfoDO::getUserName, reqVO.getUserName())
+ .eqIfPresent(MainInfoDO::getCompanyId, reqVO.getCompanyId())
+ .eqIfPresent(MainInfoDO::getLatLonType, reqVO.getLatLonType())
+ .eqIfPresent(MainInfoDO::getLat, reqVO.getLat())
+ .eqIfPresent(MainInfoDO::getLon, reqVO.getLon())
+ .eqIfPresent(MainInfoDO::getLonLatAddress, reqVO.getLonLatAddress())
+ .eqIfPresent(MainInfoDO::getThirdWorkNo, reqVO.getThirdWorkNo())
+ .eqIfPresent(MainInfoDO::getThirdPushState, reqVO.getThirdPushState())
+ .eqIfPresent(MainInfoDO::getBuzStatus, reqVO.getBuzStatus())
+ .eqIfPresent(MainInfoDO::getStatus, reqVO.getStatus())
+ .eqIfPresent(MainInfoDO::getProcessInstanceId, reqVO.getProcessInstanceId())
+ .eqIfPresent(MainInfoDO::getRemark, reqVO.getRemark())
+ .betweenIfPresent(MainInfoDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(MainInfoDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/mysql/materialdetail/MaterialDetailMapper.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/mysql/materialdetail/MaterialDetailMapper.java
new file mode 100644
index 0000000..a85fbbb
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/dal/mysql/materialdetail/MaterialDetailMapper.java
@@ -0,0 +1,39 @@
+package com.zteits.urbanops.module.workorder.dal.mysql.materialdetail;
+
+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.workorder.dal.dataobject.materialdetail.MaterialDetailDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.zteits.urbanops.module.workorder.controller.admin.materialdetail.vo.*;
+
+/**
+ * 工单耗材明细 Mapper
+ *
+ * @author 超级管理员
+ */
+@Mapper
+public interface MaterialDetailMapper extends BaseMapperX {
+
+ default PageResult selectPage(MaterialDetailPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(MaterialDetailDO::getOrderNo, reqVO.getOrderNo())
+ .eqIfPresent(MaterialDetailDO::getUserId, reqVO.getUserId())
+ .likeIfPresent(MaterialDetailDO::getUserName, reqVO.getUserName())
+ .eqIfPresent(MaterialDetailDO::getClassifyId, reqVO.getClassifyId())
+ .likeIfPresent(MaterialDetailDO::getClassifyName, reqVO.getClassifyName())
+ .eqIfPresent(MaterialDetailDO::getTypeId, reqVO.getTypeId())
+ .likeIfPresent(MaterialDetailDO::getTypeName, reqVO.getTypeName())
+ .eqIfPresent(MaterialDetailDO::getTypeDetailId, reqVO.getTypeDetailId())
+ .likeIfPresent(MaterialDetailDO::getTypeDetailName, reqVO.getTypeDetailName())
+ .eqIfPresent(MaterialDetailDO::getUserCount, reqVO.getUserCount())
+ .likeIfPresent(MaterialDetailDO::getUnitName, reqVO.getUnitName())
+ .eqIfPresent(MaterialDetailDO::getStatus, reqVO.getStatus())
+ .eqIfPresent(MaterialDetailDO::getRemark, reqVO.getRemark())
+ .betweenIfPresent(MaterialDetailDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(MaterialDetailDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/enums/ErrorCodeConstants.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/enums/ErrorCodeConstants.java
new file mode 100644
index 0000000..9ebffe2
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/enums/ErrorCodeConstants.java
@@ -0,0 +1,19 @@
+package com.zteits.urbanops.module.workorder.enums;
+
+
+import com.zteits.urbanops.framework.common.exception.ErrorCode;
+
+/**
+ * workorder 错误码枚举类
+ *
+ * workorder 系统,使用 1-100-000-000 段
+ */
+public interface ErrorCodeConstants {
+
+ // ========== server 工单 1-100-001-000 ==========
+ ErrorCode MAIN_INFO_NOT_EXISTS = new ErrorCode(1-100-001-000, "工单信息不存在");
+
+ ErrorCode ATTACHMENT_NOT_EXISTS = new ErrorCode(1-100-002-000, "工单附件信息不存在");
+
+ ErrorCode MATERIAL_DETAIL_NOT_EXISTS = new ErrorCode(1-100-003-000, "工单耗材明细不存在");
+}
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/attachment/AttachmentService.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/attachment/AttachmentService.java
new file mode 100644
index 0000000..bf01a32
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/attachment/AttachmentService.java
@@ -0,0 +1,62 @@
+package com.zteits.urbanops.module.workorder.service.attachment;
+
+import java.util.*;
+import jakarta.validation.*;
+import com.zteits.urbanops.module.workorder.controller.admin.attachment.vo.*;
+import com.zteits.urbanops.module.workorder.dal.dataobject.attachment.AttachmentDO;
+import com.zteits.urbanops.framework.common.pojo.PageResult;
+import com.zteits.urbanops.framework.common.pojo.PageParam;
+
+/**
+ * 工单附件信息 Service 接口
+ *
+ * @author 超级管理员
+ */
+public interface AttachmentService {
+
+ /**
+ * 创建工单附件信息
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ Long createAttachment(@Valid AttachmentSaveReqVO createReqVO);
+
+ /**
+ * 更新工单附件信息
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateAttachment(@Valid AttachmentSaveReqVO updateReqVO);
+
+ /**
+ * 删除工单附件信息
+ *
+ * @param id 编号
+ */
+ void deleteAttachment(Long id);
+
+ /**
+ * 批量删除工单附件信息
+ *
+ * @param ids 编号
+ */
+ void deleteAttachmentListByIds(List ids);
+
+ /**
+ * 获得工单附件信息
+ *
+ * @param id 编号
+ * @return 工单附件信息
+ */
+ AttachmentDO getAttachment(Long id);
+
+ /**
+ * 获得工单附件信息分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 工单附件信息分页
+ */
+ PageResult getAttachmentPage(AttachmentPageReqVO pageReqVO);
+
+}
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/attachment/AttachmentServiceImpl.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/attachment/AttachmentServiceImpl.java
new file mode 100644
index 0000000..0af1491
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/attachment/AttachmentServiceImpl.java
@@ -0,0 +1,85 @@
+package com.zteits.urbanops.module.workorder.service.attachment;
+
+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.workorder.controller.admin.attachment.vo.*;
+import com.zteits.urbanops.module.workorder.dal.dataobject.attachment.AttachmentDO;
+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.workorder.dal.mysql.attachment.AttachmentMapper;
+
+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.workorder.enums.ErrorCodeConstants.*;
+
+/**
+ * 工单附件信息 Service 实现类
+ *
+ * @author 超级管理员
+ */
+@Service
+@Validated
+public class AttachmentServiceImpl implements AttachmentService {
+
+ @Resource
+ private AttachmentMapper attachmentMapper;
+
+ @Override
+ public Long createAttachment(AttachmentSaveReqVO createReqVO) {
+ // 插入
+ AttachmentDO attachment = BeanUtils.toBean(createReqVO, AttachmentDO.class);
+ attachmentMapper.insert(attachment);
+
+ // 返回
+ return attachment.getId();
+ }
+
+ @Override
+ public void updateAttachment(AttachmentSaveReqVO updateReqVO) {
+ // 校验存在
+ validateAttachmentExists(updateReqVO.getId());
+ // 更新
+ AttachmentDO updateObj = BeanUtils.toBean(updateReqVO, AttachmentDO.class);
+ attachmentMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteAttachment(Long id) {
+ // 校验存在
+ validateAttachmentExists(id);
+ // 删除
+ attachmentMapper.deleteById(id);
+ }
+
+ @Override
+ public void deleteAttachmentListByIds(List ids) {
+ // 删除
+ attachmentMapper.deleteByIds(ids);
+ }
+
+
+ private void validateAttachmentExists(Long id) {
+ if (attachmentMapper.selectById(id) == null) {
+ throw exception(ATTACHMENT_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public AttachmentDO getAttachment(Long id) {
+ return attachmentMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult getAttachmentPage(AttachmentPageReqVO pageReqVO) {
+ return attachmentMapper.selectPage(pageReqVO);
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/maininfo/MainInfoService.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/maininfo/MainInfoService.java
new file mode 100644
index 0000000..95cee14
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/maininfo/MainInfoService.java
@@ -0,0 +1,62 @@
+package com.zteits.urbanops.module.workorder.service.maininfo;
+
+import java.util.*;
+import jakarta.validation.*;
+import com.zteits.urbanops.module.workorder.controller.admin.maininfo.vo.*;
+import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoDO;
+import com.zteits.urbanops.framework.common.pojo.PageResult;
+import com.zteits.urbanops.framework.common.pojo.PageParam;
+
+/**
+ * 工单信息 Service 接口
+ *
+ * @author 超级管理员
+ */
+public interface MainInfoService {
+
+ /**
+ * 创建工单信息
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ Long createMainInfo(@Valid MainInfoSaveReqVO createReqVO);
+
+ /**
+ * 更新工单信息
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateMainInfo(@Valid MainInfoSaveReqVO updateReqVO);
+
+ /**
+ * 删除工单信息
+ *
+ * @param id 编号
+ */
+ void deleteMainInfo(Long id);
+
+ /**
+ * 批量删除工单信息
+ *
+ * @param ids 编号
+ */
+ void deleteMainInfoListByIds(List ids);
+
+ /**
+ * 获得工单信息
+ *
+ * @param id 编号
+ * @return 工单信息
+ */
+ MainInfoDO getMainInfo(Long id);
+
+ /**
+ * 获得工单信息分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 工单信息分页
+ */
+ PageResult getMainInfoPage(MainInfoPageReqVO pageReqVO);
+
+}
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/maininfo/MainInfoServiceImpl.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/maininfo/MainInfoServiceImpl.java
new file mode 100644
index 0000000..3b11d64
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/maininfo/MainInfoServiceImpl.java
@@ -0,0 +1,85 @@
+package com.zteits.urbanops.module.workorder.service.maininfo;
+
+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.workorder.controller.admin.maininfo.vo.*;
+import com.zteits.urbanops.module.workorder.dal.dataobject.maininfo.MainInfoDO;
+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.workorder.dal.mysql.maininfo.MainInfoMapper;
+
+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.workorder.enums.ErrorCodeConstants.*;
+
+/**
+ * 工单信息 Service 实现类
+ *
+ * @author 超级管理员
+ */
+@Service
+@Validated
+public class MainInfoServiceImpl implements MainInfoService {
+
+ @Resource
+ private MainInfoMapper mainInfoMapper;
+
+ @Override
+ public Long createMainInfo(MainInfoSaveReqVO createReqVO) {
+ // 插入
+ MainInfoDO mainInfo = BeanUtils.toBean(createReqVO, MainInfoDO.class);
+ mainInfoMapper.insert(mainInfo);
+
+ // 返回
+ return mainInfo.getId();
+ }
+
+ @Override
+ public void updateMainInfo(MainInfoSaveReqVO updateReqVO) {
+ // 校验存在
+ validateMainInfoExists(updateReqVO.getId());
+ // 更新
+ MainInfoDO updateObj = BeanUtils.toBean(updateReqVO, MainInfoDO.class);
+ mainInfoMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteMainInfo(Long id) {
+ // 校验存在
+ validateMainInfoExists(id);
+ // 删除
+ mainInfoMapper.deleteById(id);
+ }
+
+ @Override
+ public void deleteMainInfoListByIds(List ids) {
+ // 删除
+ mainInfoMapper.deleteByIds(ids);
+ }
+
+
+ private void validateMainInfoExists(Long id) {
+ if (mainInfoMapper.selectById(id) == null) {
+ throw exception(MAIN_INFO_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public MainInfoDO getMainInfo(Long id) {
+ return mainInfoMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult getMainInfoPage(MainInfoPageReqVO pageReqVO) {
+ return mainInfoMapper.selectPage(pageReqVO);
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/materialdetail/MaterialDetailService.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/materialdetail/MaterialDetailService.java
new file mode 100644
index 0000000..812fe24
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/materialdetail/MaterialDetailService.java
@@ -0,0 +1,62 @@
+package com.zteits.urbanops.module.workorder.service.materialdetail;
+
+import java.util.*;
+import jakarta.validation.*;
+import com.zteits.urbanops.module.workorder.controller.admin.materialdetail.vo.*;
+import com.zteits.urbanops.module.workorder.dal.dataobject.materialdetail.MaterialDetailDO;
+import com.zteits.urbanops.framework.common.pojo.PageResult;
+import com.zteits.urbanops.framework.common.pojo.PageParam;
+
+/**
+ * 工单耗材明细 Service 接口
+ *
+ * @author 超级管理员
+ */
+public interface MaterialDetailService {
+
+ /**
+ * 创建工单耗材明细
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ Long createMaterialDetail(@Valid MaterialDetailSaveReqVO createReqVO);
+
+ /**
+ * 更新工单耗材明细
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateMaterialDetail(@Valid MaterialDetailSaveReqVO updateReqVO);
+
+ /**
+ * 删除工单耗材明细
+ *
+ * @param id 编号
+ */
+ void deleteMaterialDetail(Long id);
+
+ /**
+ * 批量删除工单耗材明细
+ *
+ * @param ids 编号
+ */
+ void deleteMaterialDetailListByIds(List ids);
+
+ /**
+ * 获得工单耗材明细
+ *
+ * @param id 编号
+ * @return 工单耗材明细
+ */
+ MaterialDetailDO getMaterialDetail(Long id);
+
+ /**
+ * 获得工单耗材明细分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 工单耗材明细分页
+ */
+ PageResult getMaterialDetailPage(MaterialDetailPageReqVO pageReqVO);
+
+}
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/materialdetail/MaterialDetailServiceImpl.java b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/materialdetail/MaterialDetailServiceImpl.java
new file mode 100644
index 0000000..1145c54
--- /dev/null
+++ b/urbanops-module-workorder/src/main/java/com/zteits/urbanops/module/workorder/service/materialdetail/MaterialDetailServiceImpl.java
@@ -0,0 +1,85 @@
+package com.zteits.urbanops.module.workorder.service.materialdetail;
+
+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.workorder.controller.admin.materialdetail.vo.*;
+import com.zteits.urbanops.module.workorder.dal.dataobject.materialdetail.MaterialDetailDO;
+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.workorder.dal.mysql.materialdetail.MaterialDetailMapper;
+
+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.workorder.enums.ErrorCodeConstants.*;
+
+/**
+ * 工单耗材明细 Service 实现类
+ *
+ * @author 超级管理员
+ */
+@Service
+@Validated
+public class MaterialDetailServiceImpl implements MaterialDetailService {
+
+ @Resource
+ private MaterialDetailMapper materialDetailMapper;
+
+ @Override
+ public Long createMaterialDetail(MaterialDetailSaveReqVO createReqVO) {
+ // 插入
+ MaterialDetailDO materialDetail = BeanUtils.toBean(createReqVO, MaterialDetailDO.class);
+ materialDetailMapper.insert(materialDetail);
+
+ // 返回
+ return materialDetail.getId();
+ }
+
+ @Override
+ public void updateMaterialDetail(MaterialDetailSaveReqVO updateReqVO) {
+ // 校验存在
+ validateMaterialDetailExists(updateReqVO.getId());
+ // 更新
+ MaterialDetailDO updateObj = BeanUtils.toBean(updateReqVO, MaterialDetailDO.class);
+ materialDetailMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteMaterialDetail(Long id) {
+ // 校验存在
+ validateMaterialDetailExists(id);
+ // 删除
+ materialDetailMapper.deleteById(id);
+ }
+
+ @Override
+ public void deleteMaterialDetailListByIds(List ids) {
+ // 删除
+ materialDetailMapper.deleteByIds(ids);
+ }
+
+
+ private void validateMaterialDetailExists(Long id) {
+ if (materialDetailMapper.selectById(id) == null) {
+ throw exception(MATERIAL_DETAIL_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public MaterialDetailDO getMaterialDetail(Long id) {
+ return materialDetailMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult getMaterialDetailPage(MaterialDetailPageReqVO pageReqVO) {
+ return materialDetailMapper.selectPage(pageReqVO);
+ }
+
+}
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/resources/mapper/maininfo/MainInfoMapper.xml b/urbanops-module-workorder/src/main/resources/mapper/maininfo/MainInfoMapper.xml
new file mode 100644
index 0000000..0693933
--- /dev/null
+++ b/urbanops-module-workorder/src/main/resources/mapper/maininfo/MainInfoMapper.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/resources/mapper/mapper/attachment/AttachmentMapper.xml b/urbanops-module-workorder/src/main/resources/mapper/mapper/attachment/AttachmentMapper.xml
new file mode 100644
index 0000000..29c87ff
--- /dev/null
+++ b/urbanops-module-workorder/src/main/resources/mapper/mapper/attachment/AttachmentMapper.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/urbanops-module-workorder/src/main/resources/mapper/materialdetail/MaterialDetailMapper.xml b/urbanops-module-workorder/src/main/resources/mapper/materialdetail/MaterialDetailMapper.xml
new file mode 100644
index 0000000..e182d04
--- /dev/null
+++ b/urbanops-module-workorder/src/main/resources/mapper/materialdetail/MaterialDetailMapper.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/urbanops-server/pom.xml b/urbanops-server/pom.xml
index 566c7a6..19d1e1a 100644
--- a/urbanops-server/pom.xml
+++ b/urbanops-server/pom.xml
@@ -43,6 +43,13 @@
urbanops-module-garden
${revision}
+
+
+
+ com.zteits.boot
+ urbanops-module-workorder
+ ${revision}
+