From b33e6f53dd537abaebad066de12474580fcc33b2 Mon Sep 17 00:00:00 2001
From: yaowanxin <3588231647@qq.com>
Date: 星期四, 21 八月 2025 15:03:14 +0800
Subject: [PATCH] Merge branch 'pim_ywx'

---
 src/main/java/com/ruoyi/warehouse/service/WarehouseGoodsShelvesRowcolService.java            |   23 
 src/main/java/com/ruoyi/warehouse/dto/DocumentationBorrowManagementDto.java                  |   16 
 src/main/java/com/ruoyi/warehouse/pojo/Warehouse.java                                        |   62 +
 src/main/java/com/ruoyi/warehouse/pojo/WarehouseGoodsShelves.java                            |   79 +
 src/main/java/com/ruoyi/warehouse/pojo/DocumentationReturnManagement.java                    |  130 ++
 src/main/java/com/ruoyi/warehouse/service/impl/DocumentationServiceImpl.java                 |  116 ++
 src/main/java/com/ruoyi/warehouse/mapper/WarehouseMapper.java                                |   26 
 src/main/resources/mapper/warehouse/DocumentClassificationMapper.xml                         |   23 
 src/main/java/com/ruoyi/warehouse/dto/DocumentationDto.java                                  |   20 
 src/main/java/com/ruoyi/warehouse/service/DocumentClassificationService.java                 |   20 
 src/main/java/com/ruoyi/warehouse/mapper/DocumentationFileMapper.java                        |   17 
 src/main/java/com/ruoyi/warehouse/dto/DocumentationReturnManagementDto.java                  |   12 
 src/main/java/com/ruoyi/warehouse/dto/DocumentClassificationDto.java                         |   12 
 src/main/java/com/ruoyi/warehouse/dto/DocumentClassificationTreeDto.java                     |   13 
 src/main/java/com/ruoyi/warehouse/mapper/DocumentationReturnManagementMapper.java            |   33 
 src/main/java/com/ruoyi/warehouse/mapper/DocumentationBorrowManagementMapper.java            |   35 
 src/main/java/com/ruoyi/warehouse/mapper/DocumentClassificationMapper.java                   |   20 
 src/main/java/com/ruoyi/warehouse/service/impl/DocumentClassificationServiceImpl.java        |   97 +
 src/main/resources/mapper/warehouse/WarehouseMapper.xml                                      |   42 
 src/main/resources/mybatis/mybatis-config.xml                                                |    1 
 src/main/java/com/ruoyi/warehouse/service/impl/WarehouseServiceImpl.java                     |  175 +++
 src/main/java/com/ruoyi/warehouse/dto/WarehouseDto.java                                      |   13 
 src/main/java/com/ruoyi/warehouse/dto/WarehouseGoodsShelvesDto.java                          |   12 
 src/main/java/com/ruoyi/warehouse/controller/DocumentClassificationController.java           |   52 +
 src/main/java/com/ruoyi/warehouse/controller/DocumentationFileController.java                |   64 +
 src/main/resources/mapper/warehouse/DocumentationMapper.xml                                  |   87 +
 src/main/java/com/ruoyi/warehouse/dto/WarehouseGoodsShelvesRowcolDto.java                    |   15 
 src/main/resources/mapper/warehouse/WarehouseGoodsShelvesMapper.xml                          |   50 
 src/main/resources/mapper/warehouse/DocumentationBorrowManagementMapper.xml                  |   88 +
 src/main/java/com/ruoyi/warehouse/pojo/DocumentationFile.java                                |   60 +
 src/main/resources/mapper/warehouse/DocumentationFileMapper.xml                              |   17 
 src/main/java/com/ruoyi/warehouse/pojo/DocumentClassification.java                           |   67 +
 src/main/java/com/ruoyi/warehouse/mapper/WarehouseGoodsShelvesMapper.java                    |   29 
 src/main/java/com/ruoyi/warehouse/controller/WarehouseGoodsShelvesController.java            |   54 +
 src/main/java/com/ruoyi/warehouse/service/impl/WarehouseGoodsShelvesServiceImpl.java         |  179 +++
 src/main/java/com/ruoyi/warehouse/pojo/DocumentationBorrowManagement.java                    |  129 ++
 src/main/java/com/ruoyi/warehouse/service/DocumentationService.java                          |   40 
 src/main/java/com/ruoyi/warehouse/dto/WarehouseTreeDto.java                                  |   12 
 src/main/java/com/ruoyi/warehouse/pojo/Documentation.java                                    |  175 +++
 src/main/java/com/ruoyi/warehouse/controller/WarehouseGoodsShelvesRowcolController.java      |   32 
 src/main/java/com/ruoyi/warehouse/service/impl/WarehouseGoodsShelvesRowcolServiceImpl.java   |   63 +
 src/main/java/com/ruoyi/warehouse/controller/DocumentationController.java                    |   91 +
 src/main/java/com/ruoyi/warehouse/controller/WarehouseController.java                        |   63 +
 src/main/java/com/ruoyi/warehouse/pojo/WarehouseGoodsShelvesRowcol.java                      |   79 +
 src/main/java/com/ruoyi/warehouse/service/WarehouseGoodsShelvesService.java                  |   27 
 src/main/java/com/ruoyi/warehouse/mapper/DocumentationMapper.java                            |   48 
 src/main/java/com/ruoyi/warehouse/dto/ReturnExportDto.java                                   |   27 
 src/main/java/com/ruoyi/warehouse/service/WarehouseService.java                              |   24 
 src/main/java/com/ruoyi/warehouse/mapper/WarehouseGoodsShelvesRowcolMapper.java              |   25 
 src/main/java/com/ruoyi/warehouse/service/DocumentationFileService.java                      |   14 
 src/main/resources/mapper/warehouse/DocumentationReturnManagementMapper.xml                  |   57 +
 src/main/java/com/ruoyi/warehouse/service/impl/DocumentationBorrowManagementServiceImpl.java |  157 +++
 src/main/resources/mapper/warehouse/WarehouseGoodsShelvesRowcolMapper.xml                    |   41 
 src/main/java/com/ruoyi/warehouse/service/DocumentationBorrowManagementService.java          |   36 
 src/main/java/com/ruoyi/warehouse/controller/DocumentationBorrowManagementController.java    |  107 ++
 src/main/java/com/ruoyi/warehouse/service/impl/DocumentationFileServiceImpl.java             |   26 
 56 files changed, 3,032 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/warehouse/controller/DocumentClassificationController.java b/src/main/java/com/ruoyi/warehouse/controller/DocumentClassificationController.java
new file mode 100644
index 0000000..625c82b
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/controller/DocumentClassificationController.java
@@ -0,0 +1,52 @@
+package com.ruoyi.warehouse.controller;
+
+import com.ruoyi.basic.dto.ProductDto;
+import com.ruoyi.basic.dto.ProductTreeDto;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.warehouse.dto.DocumentClassificationDto;
+import com.ruoyi.warehouse.dto.DocumentClassificationTreeDto;
+import com.ruoyi.warehouse.pojo.DocumentClassification;
+import com.ruoyi.warehouse.service.DocumentClassificationService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@Api(tags = "鏂囨。鍒嗙被")
+@RequestMapping("/warehouse/documentClassification")
+public class DocumentClassificationController extends BaseController {
+    @Autowired
+    private DocumentClassificationService documentClassificationService;
+    //鏍戠粨鏋�
+    @GetMapping("/getList")
+    public  AjaxResult getList() {
+        return AjaxResult.success(documentClassificationService.selectDocumentClassificationList());
+    }
+    @PostMapping("/add")
+    @ApiOperation("鏂囨。鍒嗙被-娣诲姞")
+    @Log(title = "鏂囨。鍒嗙被-娣诲姞", businessType = BusinessType.INSERT)
+    public AjaxResult add(@RequestBody DocumentClassification documentClassification) {
+        return AjaxResult.success(documentClassificationService.save(documentClassification));
+    }
+    @PutMapping("/update")
+    @ApiOperation("鏂囨。鍒嗙被-鏇存柊")
+    @Log(title = "鏂囨。鍒嗙被-鏇存柊", businessType = BusinessType.UPDATE)
+    public AjaxResult update(@RequestBody DocumentClassification documentClassification) {
+        return AjaxResult.success(documentClassificationService.updateById(documentClassification));
+    }
+    @DeleteMapping("/delete")
+    @ApiOperation("鏂囨。鍒嗙被鍒犻櫎")
+    @Log(title = "鏂囨。鍒嗙被鍒犻櫎", businessType = BusinessType.DELETE)
+    public AjaxResult delete(@RequestBody List<Long> ids) {
+        if(CollectionUtils.isEmpty(ids)) return AjaxResult.error("璇蜂紶鍏ヨ鍒犻櫎鐨処D");
+        return AjaxResult.success(documentClassificationService.deleteByIds(ids));
+    }
+
+}
diff --git a/src/main/java/com/ruoyi/warehouse/controller/DocumentationBorrowManagementController.java b/src/main/java/com/ruoyi/warehouse/controller/DocumentationBorrowManagementController.java
new file mode 100644
index 0000000..d4b44ad
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/controller/DocumentationBorrowManagementController.java
@@ -0,0 +1,107 @@
+package com.ruoyi.warehouse.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+
+import com.ruoyi.warehouse.mapper.DocumentationBorrowManagementMapper;
+import com.ruoyi.warehouse.mapper.DocumentationReturnManagementMapper;
+import com.ruoyi.warehouse.pojo.DocumentationBorrowManagement;
+import com.ruoyi.warehouse.pojo.DocumentationReturnManagement;
+import com.ruoyi.warehouse.pojo.Warehouse;
+import com.ruoyi.warehouse.service.DocumentationBorrowManagementService;
+import com.ruoyi.warehouse.service.WarehouseService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@RestController
+@Api(tags = "鏂囨。鍊熼槄绠$悊")
+@RequestMapping("/documentationBorrowManagement")
+public class DocumentationBorrowManagementController extends BaseController {
+    @Autowired
+    private DocumentationBorrowManagementService documentationBorrowManagementService;
+    @Autowired
+    private DocumentationBorrowManagementMapper documentationBorrowManagementMapper;
+    @Autowired
+    private DocumentationReturnManagementMapper documentationReturnManagementMapper;
+    @GetMapping("/listPage")
+    @ApiOperation("鏂囨。鍊熼槄绠$悊-鍊熼槄鍒嗛〉鏌ヨ")
+    @Log(title = "鏂囨。鍊熼槄绠$悊-鍊熼槄鍒嗛〉鏌ヨ", businessType = BusinessType.OTHER)
+    public AjaxResult listPage(Page page, DocumentationBorrowManagement documentationBorrowManagement) {
+        return AjaxResult.success(documentationBorrowManagementService.listPage(page, documentationBorrowManagement));
+    }
+    @GetMapping("/list")
+    @ApiOperation("鏂囨。鍊熼槄绠$悊-鍊熼槄鏌ヨ")
+    @Log(title = "鏂囨。鍊熼槄绠$悊-鍊熼槄鏌ヨ", businessType = BusinessType.OTHER)
+    public AjaxResult list() {
+        return AjaxResult.success(documentationBorrowManagementService.listAll());
+    }
+    @GetMapping("/listPageReturn")
+    @ApiOperation("鏂囨。鍊熼槄绠$悊-褰掕繕鍒嗛〉鏌ヨ")
+    @Log(title = "鏂囨。鍊熼槄绠$悊-褰掕繕鍒嗛〉鏌ヨ", businessType = BusinessType.OTHER)
+    public AjaxResult listPageReturn(Page page, DocumentationReturnManagement documentationReturnManagement) {
+        return AjaxResult.success(documentationReturnManagementMapper.listPage(page, documentationReturnManagement));
+    }
+    @PostMapping("/add")
+    @ApiOperation("鏂囨。鍊熼槄绠$悊-鍊熼槄")
+    @Log(title = "鏂囨。鍊熼槄绠$悊-鍊熼槄", businessType = BusinessType.INSERT)
+    public AjaxResult add(@RequestBody DocumentationBorrowManagement documentationBorrowManagement) {
+        return AjaxResult.success(documentationBorrowManagementService.add(documentationBorrowManagement));
+    }
+    @PutMapping("/revent")
+    @ApiOperation("鏂囨。鍊熼槄绠$悊-褰掕繕")
+    @Log(title = "鏂囨。鍊熼槄绠$悊-褰掕繕", businessType = BusinessType.UPDATE)
+    public AjaxResult revent(@RequestBody DocumentationReturnManagement documentationReturnManagement) {
+        return AjaxResult.success(documentationBorrowManagementService.reventdbm(documentationReturnManagement));
+    }
+    @PutMapping("/update")
+    @ApiOperation("鏂囨。鍊熼槄绠$悊-鏇存柊")
+    @Log(title = "鏂囨。鍊熼槄绠$悊-鏇存柊", businessType = BusinessType.UPDATE)
+    public AjaxResult update(@RequestBody DocumentationBorrowManagement documentationBorrowManagement) {
+        return AjaxResult.success(documentationBorrowManagementService.updateById(documentationBorrowManagement));
+    }
+    @PutMapping("/reventUpdate")
+    @ApiOperation("鏂囨。鍊熼槄绠$悊-褰掕繕鏇存柊")
+    @Log(title = "鏂囨。鍊熼槄绠$悊-褰掕繕鏇存柊", businessType = BusinessType.UPDATE)
+    public AjaxResult reventupdate(@RequestBody DocumentationReturnManagement documentationReturnManagement) {
+        return AjaxResult.success(documentationReturnManagementMapper.updateById(documentationReturnManagement));
+    }
+    @DeleteMapping ("/delete")
+    @ApiOperation("鏂囨。鍊熼槄绠$悊-鍊熼槄鍒犻櫎")
+    @Log(title = "鏂囨。鍊熼槄绠$悊-鍊熼槄鍒犻櫎", businessType = BusinessType.DELETE)
+    public AjaxResult delete(@RequestBody List<Long> ids) {
+        if(CollectionUtils.isEmpty(ids)) return AjaxResult.error("璇蜂紶鍏ヨ鍒犻櫎鐨処D");
+        return AjaxResult.success(documentationBorrowManagementService.deleteByIds(ids));
+    }
+    @DeleteMapping ("/reventDelete")
+    @ApiOperation("鏂囨。鍊熼槄绠$悊-褰掕繕鍒犻櫎")
+    @Log(title = "鏂囨。鍊熼槄绠$悊-褰掕繕鍒犻櫎", businessType = BusinessType.DELETE)
+    public AjaxResult reventdelete(@RequestBody List<Long> ids) {
+        if(CollectionUtils.isEmpty(ids)) return AjaxResult.error("璇蜂紶鍏ヨ鍒犻櫎鐨処D");
+        return AjaxResult.success(documentationBorrowManagementService.reventDeleteByIds(ids));
+    }
+    @PostMapping("/export")
+    @ApiOperation("鏂囨。鍊熼槄绠$悊-鍊熼槄瀵煎嚭")
+    @Log(title = "鏂囨。鍊熼槄绠$悊-鍊熼槄瀵煎嚭", businessType = BusinessType.EXPORT)
+    public void export(HttpServletResponse response,DocumentationBorrowManagement documentationBorrowManagement) {
+        documentationBorrowManagementService.export(response,documentationBorrowManagement);
+    }
+    @PostMapping("/exportrevent")
+    @ApiOperation("鏂囨。鍊熼槄绠$悊-褰掕繕瀵煎嚭")
+    @Log(title = "鏂囨。鍊熼槄绠$悊-褰掕繕瀵煎嚭", businessType = BusinessType.EXPORT)
+    public void exportrevent(HttpServletResponse response, DocumentationReturnManagement documentationReturnManagement) {
+        documentationBorrowManagementService.exportrevent(response,documentationReturnManagement);
+    }
+}
diff --git a/src/main/java/com/ruoyi/warehouse/controller/DocumentationController.java b/src/main/java/com/ruoyi/warehouse/controller/DocumentationController.java
new file mode 100644
index 0000000..586c330
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/controller/DocumentationController.java
@@ -0,0 +1,91 @@
+package com.ruoyi.warehouse.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.controller.BaseController;
+
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.warehouse.dto.DocumentationDto;
+import com.ruoyi.warehouse.pojo.Documentation;
+import com.ruoyi.warehouse.pojo.Warehouse;
+import com.ruoyi.warehouse.service.DocumentationService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/documentation")
+@Api(tags = "鏂囨。淇℃伅琛�")
+public class DocumentationController extends BaseController {
+    @Autowired
+    private DocumentationService documentationService;
+    @GetMapping("/listPage")
+    @ApiOperation("鏂囨。淇℃伅琛�-鍒嗛〉鏌ヨ")
+    @Log(title = "鏂囨。淇℃伅琛�-鍒嗛〉鏌ヨ", businessType = BusinessType.OTHER)
+    public AjaxResult listPage(Page page, Documentation documentation) {
+        IPage<DocumentationDto> list = documentationService.listPage(page, documentation);
+        return AjaxResult.success(list);
+    }
+    @GetMapping("/list")
+    @ApiOperation("鏂囨。淇℃伅琛ㄦ煡璇�")
+    @Log(title = "鏂囨。淇℃伅琛ㄦ煡璇�", businessType = BusinessType.OTHER)
+    public AjaxResult list() {
+        List<DocumentationDto> list = documentationService.listAll();
+        return AjaxResult.success(list);
+    }
+    @PostMapping("/add")
+    @ApiOperation("鏂囨。淇℃伅琛�-娣诲姞")
+    @Log(title = "鏂囨。淇℃伅琛�-娣诲姞", businessType = BusinessType.INSERT)
+    public AjaxResult add(@RequestBody Documentation documentation) {
+        return AjaxResult.success(documentationService.save(documentation));
+    }
+    @PutMapping("/update")
+    @ApiOperation("鏂囨。淇℃伅琛�-鏇存柊")
+    @Log(title = "鏂囨。淇℃伅琛�-鏇存柊", businessType = BusinessType.UPDATE)
+    public AjaxResult update(@RequestBody Documentation documentation) {
+        return AjaxResult.success(documentationService.updateById(documentation));
+    }
+    @DeleteMapping("/delete")
+    @ApiOperation("鏂囨。淇℃伅琛�-鍒犻櫎")
+    @Log(title = "鏂囨。淇℃伅琛�-鍒犻櫎", businessType = BusinessType.DELETE)
+    public AjaxResult delete(@RequestBody List<Long> ids) {
+        if(CollectionUtils.isEmpty(ids)) return AjaxResult.error("璇蜂紶鍏ヨ鍒犻櫎鐨処D");
+        return AjaxResult.success(documentationService.deleteByIds(ids));
+    }
+
+    @PostMapping("/export")
+    @ApiOperation("鏂囨。淇℃伅琛�-瀵煎嚭")
+    @Log(title = "鏂囨。淇℃伅琛�-瀵煎嚭", businessType = BusinessType.EXPORT)
+    public void export(HttpServletResponse response,Documentation documentation ) {
+        documentationService.export(response,documentation);
+    }
+    @ApiOperation("鏂囨。淇℃伅琛�-缁熻")
+    @GetMapping("/overview")
+    public AjaxResult getOverviewStatistics() {
+        Map<String, Object> result = new HashMap<>();
+        result.put("totalDocsCount", documentationService.getTotalDocsCount());
+        result.put("categoryNumCount", documentationService.getCategoryNumCount());
+        result.put("borrowedDocsCount", documentationService.getBorrowedDocsCount());
+        result.put("monthlyAddedDocsCount", documentationService.getMonthlyAddedDocsCount());
+        return AjaxResult.success(result);
+    }
+    @ApiOperation("鏂囨。淇℃伅琛�-鍒嗙被缁熻")
+    @GetMapping("/category")
+    public AjaxResult getCategoryDistribution() {
+        return AjaxResult.success(documentationService.getCategoryDistribution());
+    }
+    @ApiOperation("鏂囨。淇℃伅琛�-鐘舵�佺粺璁�")
+    @GetMapping("/status")
+    public AjaxResult getStatusDistribution() {
+        return AjaxResult.success(documentationService.getStatusDistribution());
+    }
+}
diff --git a/src/main/java/com/ruoyi/warehouse/controller/DocumentationFileController.java b/src/main/java/com/ruoyi/warehouse/controller/DocumentationFileController.java
new file mode 100644
index 0000000..13a1bc7
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/controller/DocumentationFileController.java
@@ -0,0 +1,64 @@
+package com.ruoyi.warehouse.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.account.pojo.AccountFile;
+import com.ruoyi.account.service.AccountFileService;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.warehouse.pojo.DocumentationFile;
+import com.ruoyi.warehouse.service.DocumentationFileService;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 鏂囨。闄勪欢
+ */
+@RestController
+@RequestMapping("/documentation/documentationFile")
+public class DocumentationFileController {
+
+
+    @Resource
+    private DocumentationFileService documentationFileService;
+
+    /**
+     * 鏂板
+     * @param documentationFile
+     * @return
+     */
+    @PostMapping("/add")
+    public AjaxResult add(@RequestBody DocumentationFile documentationFile) {
+        return AjaxResult.success(documentationFileService.save(documentationFile));
+    }
+
+    /**
+     * 鍒犻櫎
+     * @param ids
+     * @return
+     */
+    @DeleteMapping("/del")
+    public AjaxResult delDocumentationFile(@RequestBody List<Long> ids) {
+        if(CollectionUtils.isEmpty(ids)){
+            return AjaxResult.error("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
+        }
+        //鍒犻櫎妫�楠岄檮浠�
+        return AjaxResult.success(documentationFileService.removeBatchByIds(ids));
+    }
+
+    /**
+     *鏌ヨ
+     * @param
+     * @param documentationFile
+     * @return
+     */
+    @GetMapping("/listPage")
+    public AjaxResult documentationFileListPage(DocumentationFile documentationFile) {
+        return AjaxResult.success(documentationFileService.documentationFileListPage( documentationFile));
+    }
+
+
+
+
+}
diff --git a/src/main/java/com/ruoyi/warehouse/controller/WarehouseController.java b/src/main/java/com/ruoyi/warehouse/controller/WarehouseController.java
new file mode 100644
index 0000000..0876334
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/controller/WarehouseController.java
@@ -0,0 +1,63 @@
+package com.ruoyi.warehouse.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.ruoyi.warehouse.pojo.Warehouse;
+import com.ruoyi.warehouse.pojo.WarehouseGoodsShelves;
+import com.ruoyi.warehouse.service.WarehouseGoodsShelvesService;
+import com.ruoyi.warehouse.service.WarehouseService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@Api(tags = "浠撳簱")
+@RequestMapping("/warehouse")
+public class WarehouseController extends BaseController {
+    @Autowired
+    private WarehouseService warehouseService;
+    @GetMapping("/tree")
+    @ApiOperation("浠撳簱-鏌ヨ鏍�")
+    @Log(title = "浠撳簱-鏌ヨ鏍�", businessType = BusinessType.OTHER)
+    public AjaxResult listTree() {
+        return AjaxResult.success(warehouseService.findListTree());
+    }
+    @GetMapping("/list")
+    @ApiOperation("浠撳簱-鏌ヨ")
+    @Log(title = "浠撳簱-鏌ヨ", businessType = BusinessType.OTHER)
+    public AjaxResult list(Warehouse warehouse) {
+        return AjaxResult.success(warehouseService.findList(warehouse));
+    }
+    @PostMapping("/add")
+    @ApiOperation("浠撳簱-娣诲姞")
+    @Log(title = "浠撳簱-娣诲姞", businessType = BusinessType.INSERT)
+    public AjaxResult add(@RequestBody Warehouse warehouse) {
+        return AjaxResult.success(warehouseService.save(warehouse));
+    }
+
+    @PutMapping("/update")
+    @ApiOperation("浠撳簱-鏇存柊")
+    @Log(title = "浠撳簱-鏇存柊", businessType = BusinessType.UPDATE)
+    public AjaxResult update(@RequestBody Warehouse warehouse) {
+        return AjaxResult.success(warehouseService.updateById(warehouse));
+    }
+
+    @DeleteMapping("/delete")
+    @ApiOperation("浠撳簱-鍒犻櫎")
+    @Log(title = "浠撳簱-鍒犻櫎", businessType = BusinessType.DELETE)
+    public AjaxResult delete(@RequestBody List<Long> ids) {
+        if(CollectionUtils.isEmpty(ids)) return AjaxResult.error("璇蜂紶鍏ヨ鍒犻櫎鐨処D");
+        return AjaxResult.success(warehouseService.deleteByIds(ids));
+    }
+}
diff --git a/src/main/java/com/ruoyi/warehouse/controller/WarehouseGoodsShelvesController.java b/src/main/java/com/ruoyi/warehouse/controller/WarehouseGoodsShelvesController.java
new file mode 100644
index 0000000..bed5510
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/controller/WarehouseGoodsShelvesController.java
@@ -0,0 +1,54 @@
+package com.ruoyi.warehouse.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.warehouse.dto.WarehouseGoodsShelvesDto;
+import com.ruoyi.warehouse.pojo.WarehouseGoodsShelves;
+import com.ruoyi.warehouse.service.WarehouseGoodsShelvesService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@Api(tags = "鍟嗗搧璐ф灦")
+@RequestMapping("/warehouse/goodsShelves")
+public class WarehouseGoodsShelvesController extends BaseController {
+    @Autowired
+    private WarehouseGoodsShelvesService warehouseGoodsShelvesService;
+
+    @GetMapping("/listById")
+    @ApiOperation("鍟嗗搧璐ф灦-鏌ヨ")
+    @Log(title = "鍟嗗搧璐ф灦-鏌ヨ", businessType = BusinessType.OTHER)
+    public AjaxResult listById(WarehouseGoodsShelves warehouseGoodsShelves) {
+        List<WarehouseGoodsShelvesDto> list = warehouseGoodsShelvesService.findList(warehouseGoodsShelves);
+        return AjaxResult.success(list);
+    }
+    @PostMapping("/add")
+    @ApiOperation("鍟嗗搧璐ф灦-娣诲姞")
+    @Log(title = "鍟嗗搧璐ф灦-娣诲姞", businessType = BusinessType.INSERT)
+    public AjaxResult add(@RequestBody WarehouseGoodsShelves warehouseGoodsShelves) {
+        return AjaxResult.success(warehouseGoodsShelvesService.add(warehouseGoodsShelves));
+    }
+    @PutMapping("/update")
+    @ApiOperation("鍟嗗搧璐ф灦-鏇存柊")
+    @Log(title = "鍟嗗搧璐ф灦-鏇存柊", businessType = BusinessType.UPDATE)
+    public AjaxResult update(@RequestBody WarehouseGoodsShelves warehouseGoodsShelves) {
+        return AjaxResult.success(warehouseGoodsShelvesService.updateRowcolById(warehouseGoodsShelves));
+    }
+    @DeleteMapping("/delete")
+    @ApiOperation("鍟嗗搧璐ф灦-鍒犻櫎")
+    @Log(title = "鍟嗗搧璐ф灦-鍒犻櫎", businessType = BusinessType.DELETE)
+    public AjaxResult delete(@RequestBody List<Long> ids) {
+        if(CollectionUtils.isEmpty(ids)) return AjaxResult.error("璇蜂紶鍏ヨ鍒犻櫎鐨処D");
+        return  AjaxResult.success(warehouseGoodsShelvesService.deleteByIds(ids));
+    }
+}
diff --git a/src/main/java/com/ruoyi/warehouse/controller/WarehouseGoodsShelvesRowcolController.java b/src/main/java/com/ruoyi/warehouse/controller/WarehouseGoodsShelvesRowcolController.java
new file mode 100644
index 0000000..36073ac
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/controller/WarehouseGoodsShelvesRowcolController.java
@@ -0,0 +1,32 @@
+package com.ruoyi.warehouse.controller;
+
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.warehouse.pojo.WarehouseGoodsShelvesRowcol;
+import com.ruoyi.warehouse.dto.WarehouseGoodsShelvesRowcolDto;
+import com.ruoyi.warehouse.service.WarehouseGoodsShelvesRowcolService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@Api(tags = "鍟嗗搧璐ф灦琛屽垪")
+@RequestMapping("/warehouse/goodsShelvesRowcol")
+public class WarehouseGoodsShelvesRowcolController extends BaseController {
+    @Autowired
+    private WarehouseGoodsShelvesRowcolService warehouseGoodsShelvesRowcolService;
+    @GetMapping("/list")
+    @ApiOperation("鍟嗗搧璐ф灦琛屽垪-鏌ヨ")
+    @Log(title = "鍟嗗搧璐ф灦琛屽垪-鏌ヨ", businessType = BusinessType.OTHER)
+    public AjaxResult list(WarehouseGoodsShelvesRowcol warehouseGoodsShelvesRowcol) {
+
+        List<WarehouseGoodsShelvesRowcolDto> list = warehouseGoodsShelvesRowcolService.getList(warehouseGoodsShelvesRowcol);
+        return AjaxResult.success(list);
+    }
+
+}
diff --git a/src/main/java/com/ruoyi/warehouse/dto/DocumentClassificationDto.java b/src/main/java/com/ruoyi/warehouse/dto/DocumentClassificationDto.java
new file mode 100644
index 0000000..ed20c8d
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/dto/DocumentClassificationDto.java
@@ -0,0 +1,12 @@
+package com.ruoyi.warehouse.dto;
+
+import com.ruoyi.warehouse.pojo.DocumentClassification;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class DocumentClassificationDto extends DocumentClassification {
+
+    private List<DocumentClassification> documentClassificationList;
+}
diff --git a/src/main/java/com/ruoyi/warehouse/dto/DocumentClassificationTreeDto.java b/src/main/java/com/ruoyi/warehouse/dto/DocumentClassificationTreeDto.java
new file mode 100644
index 0000000..e2817db
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/dto/DocumentClassificationTreeDto.java
@@ -0,0 +1,13 @@
+package com.ruoyi.warehouse.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class DocumentClassificationTreeDto {
+    private Long id;
+    private Long parentId;
+    private String category;
+    private List<DocumentClassificationTreeDto> children;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/warehouse/dto/DocumentationBorrowManagementDto.java b/src/main/java/com/ruoyi/warehouse/dto/DocumentationBorrowManagementDto.java
new file mode 100644
index 0000000..8fb893a
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/dto/DocumentationBorrowManagementDto.java
@@ -0,0 +1,16 @@
+package com.ruoyi.warehouse.dto;
+
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.warehouse.pojo.DocumentationBorrowManagement;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class DocumentationBorrowManagementDto extends DocumentationBorrowManagement {
+    /**
+     * 鏂囨。鍚嶇О
+     */
+    @Excel(name = "鏂囨。鍚嶇О")
+    private String docName;
+
+}
diff --git a/src/main/java/com/ruoyi/warehouse/dto/DocumentationDto.java b/src/main/java/com/ruoyi/warehouse/dto/DocumentationDto.java
new file mode 100644
index 0000000..ad10fc2
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/dto/DocumentationDto.java
@@ -0,0 +1,20 @@
+package com.ruoyi.warehouse.dto;
+
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.warehouse.pojo.Documentation;
+import lombok.Data;
+
+@Data
+public class DocumentationDto extends Documentation {
+    /**
+     * 绫诲埆鍚嶇О
+     */
+    @Excel(name = "绫诲埆鍚嶇О")
+    private String category;
+    /**
+     * 浣嶇疆淇℃伅
+     */
+    @Excel(name = "浣嶇疆淇℃伅")
+    private String locationInfo;
+
+}
diff --git a/src/main/java/com/ruoyi/warehouse/dto/DocumentationReturnManagementDto.java b/src/main/java/com/ruoyi/warehouse/dto/DocumentationReturnManagementDto.java
new file mode 100644
index 0000000..a65e1e0
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/dto/DocumentationReturnManagementDto.java
@@ -0,0 +1,12 @@
+package com.ruoyi.warehouse.dto;
+
+import com.ruoyi.warehouse.pojo.DocumentationReturnManagement;
+import lombok.Data;
+
+@Data
+public class DocumentationReturnManagementDto extends DocumentationReturnManagement {
+    /**
+     * 鏂囨。鍚嶇О
+     */
+    private String docName;
+}
diff --git a/src/main/java/com/ruoyi/warehouse/dto/ReturnExportDto.java b/src/main/java/com/ruoyi/warehouse/dto/ReturnExportDto.java
new file mode 100644
index 0000000..bb9c391
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/dto/ReturnExportDto.java
@@ -0,0 +1,27 @@
+package com.ruoyi.warehouse.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotBlank;
+import java.time.LocalDateTime;
+
+public class ReturnExportDto {
+    private String id; // 璁板綍缂栧彿
+    @Excel(name = "鏂囨。鍚嶇О")
+    private String docName; // 鏂囨。鍚嶇О
+    @Excel(name = "鍘熷�熼槄浜�")
+    private String borrower; // 鍊熼槄浜�
+    @Excel(name = "鍊熼槄鏃堕棿", dateFormat = "yyyy-MM-dd", width = 30)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDateTime borrowDate; // 鍊熼槄鏃堕棿
+    @Excel(name = "褰掕繕浜�")
+    @NotBlank(message = "褰掕繕浜轰笉鑳戒负绌�!!")
+    private String returner; // 褰掕繕浜�
+    @Excel(name = "褰掕繕鏃堕棿", dateFormat = "yyyy-MM-dd", width = 30)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDateTime returnDate; // 褰掕繕鏃堕棿
+}
diff --git a/src/main/java/com/ruoyi/warehouse/dto/WarehouseDto.java b/src/main/java/com/ruoyi/warehouse/dto/WarehouseDto.java
new file mode 100644
index 0000000..34ac3f1
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/dto/WarehouseDto.java
@@ -0,0 +1,13 @@
+package com.ruoyi.warehouse.dto;
+
+import com.ruoyi.warehouse.pojo.*;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class WarehouseDto extends Warehouse {
+
+    private String goodsShelvesName;
+    private String category;
+}
diff --git a/src/main/java/com/ruoyi/warehouse/dto/WarehouseGoodsShelvesDto.java b/src/main/java/com/ruoyi/warehouse/dto/WarehouseGoodsShelvesDto.java
new file mode 100644
index 0000000..b637542
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/dto/WarehouseGoodsShelvesDto.java
@@ -0,0 +1,12 @@
+package com.ruoyi.warehouse.dto;
+
+import com.ruoyi.warehouse.pojo.WarehouseGoodsShelves;
+
+import java.util.List;
+
+public class WarehouseGoodsShelvesDto extends WarehouseGoodsShelves {
+    private String warehouseName;
+    private String docName;
+    private String docNumber;
+    private String category;
+}
diff --git a/src/main/java/com/ruoyi/warehouse/dto/WarehouseGoodsShelvesRowcolDto.java b/src/main/java/com/ruoyi/warehouse/dto/WarehouseGoodsShelvesRowcolDto.java
new file mode 100644
index 0000000..2bff39e
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/dto/WarehouseGoodsShelvesRowcolDto.java
@@ -0,0 +1,15 @@
+package com.ruoyi.warehouse.dto;
+
+import com.ruoyi.warehouse.dto.DocumentationDto;
+import com.ruoyi.warehouse.pojo.WarehouseGoodsShelvesRowcol;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class WarehouseGoodsShelvesRowcolDto extends WarehouseGoodsShelvesRowcol {
+    private String warehouseName;
+    private String name;
+    private List<DocumentationDto> documentationDtoList;
+    private String category;
+}
diff --git a/src/main/java/com/ruoyi/warehouse/dto/WarehouseTreeDto.java b/src/main/java/com/ruoyi/warehouse/dto/WarehouseTreeDto.java
new file mode 100644
index 0000000..80be317
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/dto/WarehouseTreeDto.java
@@ -0,0 +1,12 @@
+package com.ruoyi.warehouse.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class WarehouseTreeDto {
+    private Long id;
+    private String label;
+    private List<WarehouseTreeDto> children;
+}
diff --git a/src/main/java/com/ruoyi/warehouse/mapper/DocumentClassificationMapper.java b/src/main/java/com/ruoyi/warehouse/mapper/DocumentClassificationMapper.java
new file mode 100644
index 0000000..93b121f
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/mapper/DocumentClassificationMapper.java
@@ -0,0 +1,20 @@
+package com.ruoyi.warehouse.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.warehouse.pojo.DocumentClassification;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @author 86151
+* @description 閽堝琛ㄣ�恉ocument_classification(鏂囨。鍒嗙被琛�)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2025-08-15 10:44:23
+* @Entity com.ruoyi.warehouse.pojo.DocumentClassification
+*/
+@Mapper
+public interface DocumentClassificationMapper extends BaseMapper<DocumentClassification> {
+
+}
+
+
+
+
diff --git a/src/main/java/com/ruoyi/warehouse/mapper/DocumentationBorrowManagementMapper.java b/src/main/java/com/ruoyi/warehouse/mapper/DocumentationBorrowManagementMapper.java
new file mode 100644
index 0000000..6af2ceb
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/mapper/DocumentationBorrowManagementMapper.java
@@ -0,0 +1,35 @@
+package com.ruoyi.warehouse.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.warehouse.dto.DocumentationBorrowManagementDto;
+import com.ruoyi.warehouse.dto.ReturnExportDto;
+import com.ruoyi.warehouse.pojo.DocumentationBorrowManagement;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+* @author 86151
+* @description 閽堝琛ㄣ�恉ocumentation_borrow_management(鏂囨。鍊熼槄-褰掕繕琛�)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2025-08-14 15:55:45
+* @Entity com.ruoyi.warehouse.pojo.DocumentationBorrowManagement
+*/
+@Mapper
+public interface DocumentationBorrowManagementMapper extends BaseMapper<DocumentationBorrowManagement> {
+
+    IPage<DocumentationBorrowManagement> listPage(Page page, @Param("documentationBorrowManagement") DocumentationBorrowManagement documentationBorrowManagement);
+
+    List<DocumentationBorrowManagementDto> export(@Param("documentationBorrowManagement") DocumentationBorrowManagement documentationBorrowManagement);
+
+    List<DocumentationBorrowManagementDto> list(@Param("ew") Wrapper<DocumentationBorrowManagementDto> queryWrapper);
+}
+
+
+
+
diff --git a/src/main/java/com/ruoyi/warehouse/mapper/DocumentationFileMapper.java b/src/main/java/com/ruoyi/warehouse/mapper/DocumentationFileMapper.java
new file mode 100644
index 0000000..0617258
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/mapper/DocumentationFileMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.warehouse.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.account.pojo.AccountFile;
+import com.ruoyi.warehouse.pojo.DocumentationFile;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface DocumentationFileMapper extends BaseMapper<DocumentationFile> {
+
+    List<DocumentationFile> documentationFileListPage(@Param("documentationFile") DocumentationFile documentationFile);
+}
diff --git a/src/main/java/com/ruoyi/warehouse/mapper/DocumentationMapper.java b/src/main/java/com/ruoyi/warehouse/mapper/DocumentationMapper.java
new file mode 100644
index 0000000..33278bf
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/mapper/DocumentationMapper.java
@@ -0,0 +1,48 @@
+package com.ruoyi.warehouse.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.procurementrecord.dto.ProcurementRecordOutPageDto;
+import com.ruoyi.warehouse.dto.DocumentationDto;
+import com.ruoyi.warehouse.pojo.Documentation;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* @author 86151
+* @description 閽堝琛ㄣ�恉ocumentation(鏂囨。淇℃伅琛�)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2025-08-14 14:05:49
+* @Entity com.ruoyi.warehouse.pojo.Documentation
+*/
+@Mapper
+public interface DocumentationMapper extends BaseMapper<Documentation> {
+
+    IPage<DocumentationDto> listPage(Page page, @Param("documentation") Documentation documentation);
+    List<DocumentationDto> list();
+    List<DocumentationDto> listByDocumentClassificationId(@Param("documentClassificationId") Long documentClassificationId);
+    List<DocumentationDto> listBywarehouseGoodsShelvesRowcolId(@Param("warehouseGoodsShelvesRowcolId") Long warehouseGoodsShelvesRowcolId);
+    @Select("select count(*) from documentation")
+    Integer countTotalDocs();
+    @Select("select count(distinct document_classification_id) from documentation")
+    Integer countCategoryNum();
+    @Select("select count(*) from documentation where doc_status = '鍊熷嚭'")
+    Integer countBorrowedDocs();
+    @Select("select count(*) from documentation where create_time >= date_format(now(), '%Y-%m-01') and create_time < date_format(now(), '%Y-%m-%d')")
+    Integer countMonthlyAddedDocs();
+
+    @Select("select dc.category, count(*) as count from documentation doc left join document_classification dc on doc.document_classification_id = dc.id group by dc.category")
+    List<Map<String, Object>> countCategoryDistribution();
+
+    @Select("select doc_status as docStatus, count(*) as count from documentation group by doc_status")
+    List<Map<String, Object>> countStatusDistribution();
+
+}
+
+
+
+
diff --git a/src/main/java/com/ruoyi/warehouse/mapper/DocumentationReturnManagementMapper.java b/src/main/java/com/ruoyi/warehouse/mapper/DocumentationReturnManagementMapper.java
new file mode 100644
index 0000000..d9de592
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/mapper/DocumentationReturnManagementMapper.java
@@ -0,0 +1,33 @@
+package com.ruoyi.warehouse.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.warehouse.dto.DocumentationBorrowManagementDto;
+import com.ruoyi.warehouse.dto.ReturnExportDto;
+import com.ruoyi.warehouse.pojo.DocumentationBorrowManagement;
+import com.ruoyi.warehouse.pojo.DocumentationReturnManagement;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+* @author 86151
+* @description 閽堝琛ㄣ�恉ocumentation_borrow_management(鏂囨。鍊熼槄-褰掕繕琛�)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2025-08-14 15:55:45
+* @Entity com.ruoyi.warehouse.pojo.DocumentationBorrowManagement
+*/
+@Mapper
+public interface DocumentationReturnManagementMapper extends BaseMapper<DocumentationReturnManagement> {
+
+    IPage<DocumentationReturnManagement> listPage(Page page, @Param("documentationReturnManagement") DocumentationReturnManagement documentationReturnManagement);
+//
+//    List<DocumentationReturnManagementDto> export(@Param("documentationReturnManagement") DocumentationReturnManagement documentationReturnManagement);
+//
+    List<ReturnExportDto> exportrevent(@Param("documentationReturnManagement") DocumentationReturnManagement documentationReturnManagement);
+}
+
+
+
+
diff --git a/src/main/java/com/ruoyi/warehouse/mapper/WarehouseGoodsShelvesMapper.java b/src/main/java/com/ruoyi/warehouse/mapper/WarehouseGoodsShelvesMapper.java
new file mode 100644
index 0000000..d02e0cd
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/mapper/WarehouseGoodsShelvesMapper.java
@@ -0,0 +1,29 @@
+package com.ruoyi.warehouse.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.warehouse.dto.WarehouseGoodsShelvesDto;
+import com.ruoyi.warehouse.pojo.WarehouseGoodsShelves;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+*
+* @description 閽堝琛ㄣ�恮arehouse_goods_shelves(浠撳簱璐ф灦琛�)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2025-08-13 11:49:02
+* @Entity warehouse.pojo.WarehouseGoodsShelves
+*/
+@Mapper
+public interface WarehouseGoodsShelvesMapper extends BaseMapper<WarehouseGoodsShelves> {
+
+    List<WarehouseGoodsShelvesDto> findList(@Param("warehouseGoodsShelves") WarehouseGoodsShelves warehouseGoodsShelves);
+    List<WarehouseGoodsShelvesDto> listAll(@Param("warehouseGoodsShelves") WarehouseGoodsShelves warehouseGoodsShelves);
+}
+
+
+
+
diff --git a/src/main/java/com/ruoyi/warehouse/mapper/WarehouseGoodsShelvesRowcolMapper.java b/src/main/java/com/ruoyi/warehouse/mapper/WarehouseGoodsShelvesRowcolMapper.java
new file mode 100644
index 0000000..69da1ee
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/mapper/WarehouseGoodsShelvesRowcolMapper.java
@@ -0,0 +1,25 @@
+package com.ruoyi.warehouse.mapper;
+
+import com.ruoyi.warehouse.dto.WarehouseGoodsShelvesRowcolDto;
+import org.apache.ibatis.annotations.Mapper;
+import com.ruoyi.warehouse.pojo.WarehouseGoodsShelvesRowcol;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+* @author 86151
+* @description 閽堝琛ㄣ�恮arehouse_goods_shelves_rowcol(浠撳簱璐ф灦灞傦紝鍒楄〃)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2025-08-13 11:49:02
+* @Entity warehouse.pojo.WarehouseGoodsShelvesRowcol
+*/
+@Mapper
+public interface WarehouseGoodsShelvesRowcolMapper extends BaseMapper<WarehouseGoodsShelvesRowcol> {
+
+    List<WarehouseGoodsShelvesRowcolDto> findList(@Param("warehouseGoodsShelvesRowcol") WarehouseGoodsShelvesRowcol warehouseGoodsShelvesRowcol);
+}
+
+
+
+
diff --git a/src/main/java/com/ruoyi/warehouse/mapper/WarehouseMapper.java b/src/main/java/com/ruoyi/warehouse/mapper/WarehouseMapper.java
new file mode 100644
index 0000000..392f8ca
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/mapper/WarehouseMapper.java
@@ -0,0 +1,26 @@
+package com.ruoyi.warehouse.mapper;
+
+
+import com.ruoyi.warehouse.dto.WarehouseDto;
+import com.ruoyi.warehouse.pojo.Warehouse;
+import org.apache.ibatis.annotations.Mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+* @author 86151
+* @description 閽堝琛ㄣ�恮arehouse(浠撳簱琛�)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2025-08-13 11:49:02
+* @Entity warehouse.pojo.Warehouse
+*/
+@Mapper
+public interface WarehouseMapper extends BaseMapper<Warehouse> {
+    List<WarehouseDto> findList(@Param("warehouse") Warehouse warehouse);
+    List<Warehouse> listAll(@Param("warehouse") Warehouse warehouse);
+}
+
+
+
+
diff --git a/src/main/java/com/ruoyi/warehouse/pojo/DocumentClassification.java b/src/main/java/com/ruoyi/warehouse/pojo/DocumentClassification.java
new file mode 100644
index 0000000..98855ce
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/pojo/DocumentClassification.java
@@ -0,0 +1,67 @@
+package com.ruoyi.warehouse.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 鏂囨。鍒嗙被琛�
+ * @TableName document_classification
+ */
+@TableName(value ="document_classification")
+@Data
+@ApiModel(value = "鏂囨。鍒嗙被琛�")
+public class DocumentClassification implements Serializable {
+    /**
+     *
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 绫诲埆鍚嶇О
+     */
+    private String category;
+
+    /**
+     * 鐖剁被id
+     */
+    private Long parentId;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /**
+     * 鍒涘缓鐢ㄦ埛
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    /**
+     * 淇敼鐢ㄦ埛
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    /**
+     * 绉熸埛id
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+
+    private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/warehouse/pojo/Documentation.java b/src/main/java/com/ruoyi/warehouse/pojo/Documentation.java
new file mode 100644
index 0000000..0c1a612
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/pojo/Documentation.java
@@ -0,0 +1,175 @@
+package com.ruoyi.warehouse.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 鏂囨。淇℃伅琛�
+ * @TableName documentation
+ */
+@TableName(value ="documentation")
+@Data
+@ApiModel(value = "鏂囨。淇℃伅琛�")
+public class Documentation implements Serializable {
+    /**
+     * 
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "鏂囨。ID")
+    private Long id;
+
+    /**
+     * 绫诲埆鍚嶇Оid
+     */
+    @Excel(name = "绫诲埆鍚嶇Оid")
+    @ApiModelProperty(value = "绫诲埆鍚嶇Оid")
+    private Long documentClassificationId;
+
+    /**
+     * 鏂囨。鍚嶇О
+     */
+    @Excel(name = "鏂囨。鍚嶇О")
+    @ApiModelProperty(value = "鏂囨。鍚嶇О")
+    private String docName;
+
+    /**
+     * 鏂囨。缂栧彿
+     */
+    @Excel(name = "鏂囨。缂栧彿")
+    @ApiModelProperty(value = "鏂囨。缂栧彿")
+    private String docNumber;
+
+    /**
+     * 骞翠唤
+     */
+    @Excel(name = "骞翠唤")
+    @ApiModelProperty(value = "骞翠唤")
+    private Long year;
+
+    /**
+     * 璐d换浜�
+     */
+    @Excel(name = "璐d换浜�")
+    @ApiModelProperty(value = "璐d换浜�")
+    private String responsiblePerson;
+
+    /**
+     * 鏂囨。鏀剧疆浣嶇疆
+     */
+    @Excel(name = "鏂囨。鏀剧疆浣嶇疆")
+    @ApiModelProperty(value = "鏂囨。鏀剧疆浣嶇疆")
+    private Long warehouseGoodsShelvesRowcolId;
+
+    /**
+     * 鏂囨。鏃ユ湡
+     */
+
+    @Excel(name = "鏂囨。鏃ユ湡", dateFormat = "yyyy-MM-dd", width = 30)
+    @ApiModelProperty(value = "鏂囨。鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime docDate;
+
+    /**
+     * 淇濈鏈熼檺
+     */
+    @Excel(name = "淇濈鏈熼檺")
+    @ApiModelProperty(value = "淇濈鏈熼檺")
+    private Long retentionPeriod;
+
+    /**
+     * 淇濆瘑绾у埆
+     */
+    @Excel(name = "淇濆瘑绾у埆")
+    @ApiModelProperty(value = "淇濆瘑绾у埆")
+    private String securityLevel;
+
+    /**
+     * 浠芥暟
+     */
+    @Excel(name = "浠芥暟")
+    @ApiModelProperty(value = "浠芥暟")
+    private Long copyCount;
+
+    /**
+     * 椤垫暟
+     */
+    @Excel(name = "椤垫暟")
+    @ApiModelProperty(value = "椤垫暟")
+    private Long pageCount;
+
+    /**
+     * 鏂囨。绫诲埆
+     */
+    @Excel(name = "鏂囨。绫诲埆")
+    @ApiModelProperty(value = "鏂囨。绫诲埆")
+    private String docCategory;
+
+    /**
+     * 鏂囨。绉嶇被
+     */
+    @Excel(name = "鏂囨。绉嶇被")
+    @ApiModelProperty(value = "鏂囨。绉嶇被")
+    private String docType;
+
+    /**
+     * 绱ф�ョ▼搴�
+     */
+    @Excel(name = "绱ф�ョ▼搴�")
+    @ApiModelProperty(value = "绱ф�ョ▼搴�")
+    private String urgencyLevel;
+
+    /**
+     * 鏂囨。鐘舵��
+     */
+    @Excel(name = "鏂囨。鐘舵��")
+    @ApiModelProperty(value = "鏂囨。鐘舵��")
+    private String docStatus;
+
+    /**
+     * 澶囨敞
+     */
+    @Excel(name = "澶囨敞")
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /**
+     * 鍒涘缓鐢ㄦ埛
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    /**
+     * 淇敼鐢ㄦ埛
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    /**
+     * 绉熸埛ID
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+
+    private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/warehouse/pojo/DocumentationBorrowManagement.java b/src/main/java/com/ruoyi/warehouse/pojo/DocumentationBorrowManagement.java
new file mode 100644
index 0000000..a6c560f
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/pojo/DocumentationBorrowManagement.java
@@ -0,0 +1,129 @@
+package com.ruoyi.warehouse.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.dto.DateQueryDto;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * 鏂囨。鍊熼槄-褰掕繕琛�
+ * @TableName documentation_borrow_management
+ */
+@TableName(value ="documentation_borrow_management")
+@Data
+@ApiModel(value = "鏂囨。鍊熼槄琛�")
+public class DocumentationBorrowManagement extends DateQueryDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    /**
+     * 涓婚敭
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 鏂囨。id
+     */
+    @ApiModelProperty(value = "鏂囨。id")
+    private Long documentationId;
+
+    /**
+     * 鍊熼槄浜�
+     */
+    @ApiModelProperty(value = "鍊熼槄浜�")
+    @Excel(name = "鍊熼槄浜�")
+    private String borrower;
+    /**
+     * 褰掕繕浜�
+     */
+    @ApiModelProperty(value = "褰掕繕浜�")
+    @Excel(name = "褰掕繕浜�")
+    private String returner;
+
+    /**
+     * 鍊熼槄鐩殑
+     */
+    @Excel(name = "鍊熼槄鐩殑")
+    @ApiModelProperty(value = "鍊熼槄鐩殑")
+    private String borrowPurpose;
+
+    /**
+     * 鍊熼槄鏃ユ湡
+     */
+
+    @ApiModelProperty(value = "鍊熼槄鏃ユ湡")
+    @Excel(name = "鍊熼槄鏃ユ湡", dateFormat = "yyyy-MM-dd", width = 30)
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate borrowDate;
+
+    /**
+     * 搴斿綊杩樻棩鏈�
+     */
+    @ApiModelProperty(value = "搴斿綊杩樻棩鏈�")
+    @Excel(name = "搴斿綊杩樻棩鏈�", dateFormat = "yyyy-MM-dd", width = 30)
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate dueReturnDate;
+
+    /**
+     * 瀹為檯褰掕繕鏃ユ湡
+     */
+    @ApiModelProperty(value = "瀹為檯褰掕繕鏃ユ湡")
+    @Excel(name = "瀹為檯褰掕繕鏃ユ湡", dateFormat = "yyyy-MM-dd", width = 30)
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate returnDate;
+
+    /**
+     * 鍊熼槄鐘舵��
+     */
+    @ApiModelProperty(value = "鍊熼槄鐘舵��")
+    @Excel(name = "鍊熼槄鐘舵��")
+    private String borrowStatus;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value = "澶囨敞")
+    @Excel(name = "澶囨敞")
+    private String remark;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /**
+     * 鍒涘缓鐢ㄦ埛
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    /**
+     * 淇敼鐢ㄦ埛
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    /**
+     * 绉熸埛id
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/warehouse/pojo/DocumentationFile.java b/src/main/java/com/ruoyi/warehouse/pojo/DocumentationFile.java
new file mode 100644
index 0000000..c24805c
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/pojo/DocumentationFile.java
@@ -0,0 +1,60 @@
+package com.ruoyi.warehouse.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 鏂囨。淇℃伅琛�--闄勪欢
+ * documentation_file
+ */
+@TableName(value = "documentation_file")
+@Data
+public class DocumentationFile implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 搴忓彿
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "鏂囦欢鍚嶇О")
+    private String name;
+
+    @ApiModelProperty(value = "鏂囦欢璺緞")
+    private String url;
+
+    @ApiModelProperty(value = "鏂囦欢澶у皬")
+    private Long fileSize;
+
+    @ApiModelProperty(value = "鏂囨。ID")
+    @NotBlank(message = "鏂囨。id涓嶈兘涓虹┖!")
+    private Long documentationId;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty(value = "淇敼鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty(value = "绉熸埛ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+
+
+}
diff --git a/src/main/java/com/ruoyi/warehouse/pojo/DocumentationReturnManagement.java b/src/main/java/com/ruoyi/warehouse/pojo/DocumentationReturnManagement.java
new file mode 100644
index 0000000..5573923
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/pojo/DocumentationReturnManagement.java
@@ -0,0 +1,130 @@
+package com.ruoyi.warehouse.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.dto.DateQueryDto;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * 鏂囨。鍊熼槄-褰掕繕琛�
+ * @TableName documentation_return_management
+ */
+@TableName(value ="documentation_return_management")
+@Data
+@ApiModel(value = "鏂囨。褰掕繕琛�")
+public class DocumentationReturnManagement extends DateQueryDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    /**
+     * 涓婚敭
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 鏂囨。id
+     */
+    @ApiModelProperty(value = "鏂囨。id")
+    private Long documentationId;
+    /**
+     * 鍊熼槄id
+     */
+    private Long borrowId;
+    /**
+     * 鍊熼槄浜�
+     */
+    @ApiModelProperty(value = "鍊熼槄浜�")
+    @Excel(name = "鍊熼槄浜�")
+    private String borrower;
+    /**
+     * 褰掕繕浜�
+     */
+    @ApiModelProperty(value = "褰掕繕浜�")
+    @Excel(name = "褰掕繕浜�")
+    private String returner;
+
+    /**
+     * 鍊熼槄鐩殑
+     */
+    @Excel(name = "鍊熼槄鐩殑")
+    @ApiModelProperty(value = "鍊熼槄鐩殑")
+    private String borrowPurpose;
+
+    /**
+     * 鍊熼槄鏃ユ湡
+     */
+
+    @ApiModelProperty(value = "鍊熼槄鏃ユ湡")
+    @Excel(name = "鍊熼槄鏃ユ湡", dateFormat = "yyyy-MM-dd", width = 30)
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate borrowDate;
+
+    /**
+     * 搴斿綊杩樻棩鏈�
+     */
+    @ApiModelProperty(value = "搴斿綊杩樻棩鏈�")
+    @Excel(name = "搴斿綊杩樻棩鏈�", dateFormat = "yyyy-MM-dd", width = 30)
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate dueReturnDate;
+
+    /**
+     * 瀹為檯褰掕繕鏃ユ湡
+     */
+    @ApiModelProperty(value = "瀹為檯褰掕繕鏃ユ湡")
+    @Excel(name = "瀹為檯褰掕繕鏃ユ湡", dateFormat = "yyyy-MM-dd", width = 30)
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate returnDate;
+
+    /**
+     * 鍊熼槄鐘舵��
+     */
+    @ApiModelProperty(value = "鍊熼槄鐘舵��")
+    @Excel(name = "鍊熼槄鐘舵��")
+    private String borrowStatus;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value = "澶囨敞")
+    @Excel(name = "澶囨敞")
+    private String remark;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /**
+     * 鍒涘缓鐢ㄦ埛
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    /**
+     * 淇敼鐢ㄦ埛
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    /**
+     * 绉熸埛id
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/warehouse/pojo/Warehouse.java b/src/main/java/com/ruoyi/warehouse/pojo/Warehouse.java
new file mode 100644
index 0000000..a8ae602
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/pojo/Warehouse.java
@@ -0,0 +1,62 @@
+package com.ruoyi.warehouse.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 浠撳簱琛�
+ * @TableName warehouse
+ */
+@TableName(value ="warehouse")
+@Data
+@ApiModel
+public class Warehouse implements Serializable {
+    /**
+     * 
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 浠撳簱鍚嶇О
+     */
+    private String warehouseName;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /**
+     * 鍒涘缓鐢ㄦ埛
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    /**
+     * 淇敼鐢ㄦ埛
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    /**
+     * 绉熸埛ID
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+
+    private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/warehouse/pojo/WarehouseGoodsShelves.java b/src/main/java/com/ruoyi/warehouse/pojo/WarehouseGoodsShelves.java
new file mode 100644
index 0000000..d267986
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/pojo/WarehouseGoodsShelves.java
@@ -0,0 +1,79 @@
+package com.ruoyi.warehouse.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 浠撳簱璐ф灦琛�
+ * @TableName warehouse_goods_shelves
+ */
+@TableName(value ="warehouse_goods_shelves")
+@Data
+@ApiModel
+public class WarehouseGoodsShelves implements Serializable {
+    /**
+     * 
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 璐ф灦鍚嶇О
+     */
+    private String name;
+    /**
+     * 灞傛暟
+     */
+    @TableField("`row`")
+    private Long row;
+
+    /**
+     * 鍒楁暟
+     */
+    @TableField("`col`")
+    private Long col;
+
+    /**
+     * 浠撳簱id
+     */
+    private Long warehouseId;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /**
+     * 鍒涘缓鐢ㄦ埛
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    /**
+     * 淇敼鐢ㄦ埛
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    /**
+     * 绉熸埛ID
+     */
+
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+
+    private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/warehouse/pojo/WarehouseGoodsShelvesRowcol.java b/src/main/java/com/ruoyi/warehouse/pojo/WarehouseGoodsShelvesRowcol.java
new file mode 100644
index 0000000..4372314
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/pojo/WarehouseGoodsShelvesRowcol.java
@@ -0,0 +1,79 @@
+package com.ruoyi.warehouse.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 浠撳簱璐ф灦灞傦紝鍒楄〃
+ * @TableName warehouse_goods_shelves_rowcol
+ */
+@TableName(value ="warehouse_goods_shelves_rowcol")
+@Data
+@ApiModel(value = "浠撳簱璐ф灦灞傦紝鍒楄〃")
+public class WarehouseGoodsShelvesRowcol implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    /**
+     * 
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 灞傛暟
+     */
+    @TableField("`row`")
+    private Long row;
+
+    /**
+     * 鍒楁暟
+     */
+    @TableField("`col`")
+    private Long col;
+
+    /**
+     * 璐ф灦id
+     */
+    private Long warehouseGoodsShelvesId;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /**
+     * 鍒涘缓鐢ㄦ埛
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    /**
+     * 淇敼鐢ㄦ埛
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Integer updateUser;
+
+    /**
+     * 绉熸埛ID
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+    /**
+     * 澶囨敞
+     */
+    private String remark;
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/warehouse/service/DocumentClassificationService.java b/src/main/java/com/ruoyi/warehouse/service/DocumentClassificationService.java
new file mode 100644
index 0000000..0fbe456
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/service/DocumentClassificationService.java
@@ -0,0 +1,20 @@
+package com.ruoyi.warehouse.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.warehouse.dto.DocumentClassificationDto;
+import com.ruoyi.warehouse.dto.DocumentClassificationTreeDto;
+import com.ruoyi.warehouse.pojo.DocumentClassification;
+
+import java.util.List;
+
+/**
+* @author 86151
+* @description 閽堝琛ㄣ�恉ocument_classification(鏂囨。鍒嗙被琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2025-08-15 10:44:23
+*/
+public interface DocumentClassificationService extends IService<DocumentClassification> {
+
+    boolean deleteByIds(List<Long> ids);
+
+    List<DocumentClassificationTreeDto> selectDocumentClassificationList();
+}
diff --git a/src/main/java/com/ruoyi/warehouse/service/DocumentationBorrowManagementService.java b/src/main/java/com/ruoyi/warehouse/service/DocumentationBorrowManagementService.java
new file mode 100644
index 0000000..2a162d2
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/service/DocumentationBorrowManagementService.java
@@ -0,0 +1,36 @@
+package com.ruoyi.warehouse.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.warehouse.dto.DocumentationBorrowManagementDto;
+import com.ruoyi.warehouse.pojo.DocumentationBorrowManagement;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.warehouse.pojo.DocumentationReturnManagement;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+* @author 86151
+* @description 閽堝琛ㄣ�恉ocumentation_borrow_management(鏂囨。鍊熼槄-褰掕繕琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2025-08-14 15:55:45
+*/
+public interface DocumentationBorrowManagementService extends IService<DocumentationBorrowManagement> {
+
+    IPage<DocumentationBorrowManagement> listPage(Page page, DocumentationBorrowManagement documentationBorrowManagement);
+
+
+    boolean add(DocumentationBorrowManagement documentationBorrowManagement);
+
+    boolean deleteByIds(List<Long> ids);
+
+    boolean reventdbm(DocumentationReturnManagement documentationReturnManagement);
+
+    boolean reventDeleteByIds(List<Long> ids);
+
+    void export(HttpServletResponse response, DocumentationBorrowManagement documentationBorrowManagement);
+
+    void exportrevent(HttpServletResponse response, DocumentationReturnManagement documentationReturnManagement);
+
+    List<DocumentationBorrowManagementDto> listAll();
+}
diff --git a/src/main/java/com/ruoyi/warehouse/service/DocumentationFileService.java b/src/main/java/com/ruoyi/warehouse/service/DocumentationFileService.java
new file mode 100644
index 0000000..575ecd4
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/service/DocumentationFileService.java
@@ -0,0 +1,14 @@
+package com.ruoyi.warehouse.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.account.pojo.AccountFile;
+import com.ruoyi.warehouse.pojo.DocumentationFile;
+
+import java.util.List;
+
+public interface DocumentationFileService extends IService<DocumentationFile> {
+
+    List<DocumentationFile> documentationFileListPage(DocumentationFile documentationFile);
+}
diff --git a/src/main/java/com/ruoyi/warehouse/service/DocumentationService.java b/src/main/java/com/ruoyi/warehouse/service/DocumentationService.java
new file mode 100644
index 0000000..32910ce
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/service/DocumentationService.java
@@ -0,0 +1,40 @@
+package com.ruoyi.warehouse.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.warehouse.dto.DocumentationDto;
+import com.ruoyi.warehouse.pojo.Documentation;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+/**
+* @author 86151
+* @description 閽堝琛ㄣ�恉ocumentation(鏂囨。淇℃伅琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2025-08-14 14:05:49
+*/
+public interface DocumentationService extends IService<Documentation> {
+
+    IPage<DocumentationDto> listPage(Page page, Documentation documentation);
+
+    void export(HttpServletResponse response,Documentation documentation);
+
+    boolean deleteByIds(List<Long> ids);
+
+    List<DocumentationDto> listAll();
+    Integer getTotalDocsCount();
+
+    Integer getCategoryNumCount();
+
+    Integer getBorrowedDocsCount();
+
+    Integer getMonthlyAddedDocsCount();
+
+
+    List<Map<String, Object>> getCategoryDistribution();
+
+
+    List<Map<String, Object>> getStatusDistribution();
+}
diff --git a/src/main/java/com/ruoyi/warehouse/service/WarehouseGoodsShelvesRowcolService.java b/src/main/java/com/ruoyi/warehouse/service/WarehouseGoodsShelvesRowcolService.java
new file mode 100644
index 0000000..ed3bccc
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/service/WarehouseGoodsShelvesRowcolService.java
@@ -0,0 +1,23 @@
+package com.ruoyi.warehouse.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.warehouse.pojo.WarehouseGoodsShelvesRowcol;
+import com.ruoyi.warehouse.dto.WarehouseGoodsShelvesRowcolDto;
+
+import java.util.List;
+
+/**
+* @author 86151
+* @description 閽堝琛ㄣ�恮arehouse_goods_shelves_rowcol(浠撳簱璐ф灦灞傦紝鍒楄〃)銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2025-08-13 11:49:02
+*/
+public interface WarehouseGoodsShelvesRowcolService extends IService<WarehouseGoodsShelvesRowcol> {
+
+    boolean deleteByIds(List<Long> ids);
+
+
+    List<WarehouseGoodsShelvesRowcolDto> getList(WarehouseGoodsShelvesRowcol warehouseGoodsShelvesRowcol);
+
+
+
+}
diff --git a/src/main/java/com/ruoyi/warehouse/service/WarehouseGoodsShelvesService.java b/src/main/java/com/ruoyi/warehouse/service/WarehouseGoodsShelvesService.java
new file mode 100644
index 0000000..622d8e1
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/service/WarehouseGoodsShelvesService.java
@@ -0,0 +1,27 @@
+package com.ruoyi.warehouse.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.warehouse.dto.WarehouseGoodsShelvesDto;
+import com.ruoyi.warehouse.pojo.WarehouseGoodsShelves;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+* @author 86151
+* @description 閽堝琛ㄣ�恮arehouse_goods_shelves(浠撳簱璐ф灦琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2025-08-13 11:49:02
+*/
+public interface WarehouseGoodsShelvesService extends IService<WarehouseGoodsShelves> {
+
+
+    boolean add(WarehouseGoodsShelves warehouseGoodsShelves);
+
+    boolean updateRowcolById(WarehouseGoodsShelves warehouseGoodsShelves);
+
+    boolean deleteByIds(List<Long> ids);
+
+    List<WarehouseGoodsShelvesDto> findList(WarehouseGoodsShelves warehouseGoodsShelves);
+}
diff --git a/src/main/java/com/ruoyi/warehouse/service/WarehouseService.java b/src/main/java/com/ruoyi/warehouse/service/WarehouseService.java
new file mode 100644
index 0000000..0b68de8
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/service/WarehouseService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.warehouse.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.warehouse.dto.WarehouseDto;
+import com.ruoyi.warehouse.dto.WarehouseGoodsShelvesDto;
+import com.ruoyi.warehouse.dto.WarehouseTreeDto;
+import com.ruoyi.warehouse.pojo.Warehouse;
+
+import java.util.List;
+
+/**
+* @author 86151
+* @description 閽堝琛ㄣ�恮arehouse(浠撳簱琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2025-08-13 11:49:02
+*/
+public interface WarehouseService extends IService<Warehouse> {
+
+    boolean deleteByIds(List<Long> ids);
+
+    List<Warehouse> findList(Warehouse warehouse);
+
+    List<WarehouseTreeDto> findListTree();
+}
diff --git a/src/main/java/com/ruoyi/warehouse/service/impl/DocumentClassificationServiceImpl.java b/src/main/java/com/ruoyi/warehouse/service/impl/DocumentClassificationServiceImpl.java
new file mode 100644
index 0000000..54c642e
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/service/impl/DocumentClassificationServiceImpl.java
@@ -0,0 +1,97 @@
+package com.ruoyi.warehouse.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.dto.ProductTreeDto;
+import com.ruoyi.basic.pojo.Product;
+import com.ruoyi.common.utils.bean.BeanUtils;
+import com.ruoyi.warehouse.dto.DocumentClassificationDto;
+import com.ruoyi.warehouse.dto.DocumentClassificationTreeDto;
+import com.ruoyi.warehouse.dto.DocumentationDto;
+import com.ruoyi.warehouse.mapper.DocumentationMapper;
+import com.ruoyi.warehouse.pojo.DocumentClassification;
+import com.ruoyi.warehouse.pojo.Documentation;
+import com.ruoyi.warehouse.service.DocumentClassificationService;
+import com.ruoyi.warehouse.mapper.DocumentClassificationMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+/**
+* @author 86151
+* @description 閽堝琛ㄣ�恉ocument_classification(鏂囨。鍒嗙被琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+* @createDate 2025-08-15 10:44:23
+*/
+@Service
+public class DocumentClassificationServiceImpl extends ServiceImpl<DocumentClassificationMapper, DocumentClassification>
+    implements DocumentClassificationService{
+    @Autowired
+    private DocumentationMapper documentationMapper;
+    @Autowired
+    private DocumentClassificationMapper documentClassificationMapper;
+    @Override
+    public boolean deleteByIds(List<Long> ids) {
+        List<DocumentClassification> list = documentClassificationMapper.selectList(new LambdaQueryWrapper<DocumentClassification>().in(DocumentClassification::getId, ids));
+        for (DocumentClassification documentClassification : list) {
+          //濡傛灉姣忛」鐨勭埗id涓虹┖锛岃鏄庢槸鏍硅妭鐐癸紝闇�瑕佸垹闄ゆ枃妗d俊鎭〃涓殑鏁版嵁
+            List<DocumentationDto> documentationDtos = documentationMapper.listByDocumentClassificationId(documentClassification.getId());
+            if (CollectionUtils.isNotEmpty(documentationDtos)){
+                throw new RuntimeException("瀛樺湪鏂囨。淇℃伅锛屼笉鑳藉垹闄�");
+            }
+            documentClassificationMapper.deleteById(documentClassification.getId());
+        }
+        return true;
+    }
+
+    @Override
+    public List<DocumentClassificationTreeDto> selectDocumentClassificationList() {
+        // 鏌ヨ鏍硅妭鐐癸紙parentId 涓� null锛�
+        LambdaQueryWrapper<DocumentClassification> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.isNull(DocumentClassification::getParentId);
+
+        // 鏌ヨ鏍硅妭鐐瑰垪琛�
+        List<DocumentClassification> rootList = baseMapper.selectList(queryWrapper);
+
+        // 杞崲涓烘爲鑺傜偣骞堕�掑綊鏋勫缓瀛愭爲
+        List<DocumentClassificationTreeDto> tree = new ArrayList<>();
+        for (DocumentClassification documentClassification : rootList) {
+            DocumentClassificationTreeDto node = convertToTreeDto(documentClassification);
+            node.setChildren(buildDocumentChildrenNodes(documentClassification.getId()));
+            tree.add(node);
+        }
+        return tree;
+    }
+    // 閫掑綊鏋勫缓瀛愯妭鐐�
+    private List<DocumentClassificationTreeDto> buildDocumentChildrenNodes(Long parentId) {
+        // 鏌ヨ褰撳墠鐖惰妭鐐圭殑瀛愯妭鐐�
+        LambdaQueryWrapper<DocumentClassification> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(DocumentClassification::getParentId, parentId);
+        List<DocumentClassification> childList = baseMapper.selectList(queryWrapper);
+
+        // 杞崲瀛愯妭鐐瑰苟閫掑綊鏋勫缓瀹冧滑鐨勫瓙鏍�
+        List<DocumentClassificationTreeDto> children = new ArrayList<>();
+        for (DocumentClassification child : childList) {
+            DocumentClassificationTreeDto childNode = convertToTreeDto(child);
+            childNode.setChildren(buildDocumentChildrenNodes(child.getId()));
+            children.add(childNode);
+        }
+
+        return children;
+    }
+    // 灏� DocumentClassification 杞崲涓� DocumentClassificationTreeDto
+    private DocumentClassificationTreeDto convertToTreeDto(DocumentClassification documentClassification) {
+        DocumentClassificationTreeDto dto = new DocumentClassificationTreeDto();
+        BeanUtils.copyProperties(documentClassification, dto);
+        dto.setCategory(documentClassification.getCategory()); // 璁剧疆 label 涓轰骇鍝佸悕绉�
+        dto.setChildren(new ArrayList<>());
+        return dto;
+    }
+}
+
+
+
+
diff --git a/src/main/java/com/ruoyi/warehouse/service/impl/DocumentationBorrowManagementServiceImpl.java b/src/main/java/com/ruoyi/warehouse/service/impl/DocumentationBorrowManagementServiceImpl.java
new file mode 100644
index 0000000..38b8d5a
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/service/impl/DocumentationBorrowManagementServiceImpl.java
@@ -0,0 +1,157 @@
+package com.ruoyi.warehouse.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.warehouse.dto.DocumentationBorrowManagementDto;
+import com.ruoyi.warehouse.dto.ReturnExportDto;
+import com.ruoyi.warehouse.mapper.DocumentationReturnManagementMapper;
+import com.ruoyi.warehouse.pojo.Documentation;
+import com.ruoyi.warehouse.pojo.DocumentationBorrowManagement;
+import com.ruoyi.warehouse.pojo.DocumentationReturnManagement;
+import com.ruoyi.warehouse.service.DocumentationBorrowManagementService;
+import com.ruoyi.warehouse.mapper.DocumentationBorrowManagementMapper;
+import com.ruoyi.warehouse.service.DocumentationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpServletResponse;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+* @author 86151
+* @description 閽堝琛ㄣ�恉ocumentation_borrow_management(鏂囨。鍊熼槄-褰掕繕琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+* @createDate 2025-08-14 15:55:45
+*/
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class DocumentationBorrowManagementServiceImpl extends ServiceImpl<DocumentationBorrowManagementMapper, DocumentationBorrowManagement>
+    implements DocumentationBorrowManagementService{
+    @Autowired
+    private DocumentationBorrowManagementMapper documentationBorrowManagementMapper;
+    @Autowired
+    private DocumentationReturnManagementMapper documentationReturnManagementMapper;
+    @Autowired
+    private DocumentationService documentationService;
+    @Override
+    public IPage<DocumentationBorrowManagement> listPage(Page page, DocumentationBorrowManagement documentationBorrowManagement) {
+        IPage<DocumentationBorrowManagement> listPage = documentationBorrowManagementMapper.listPage(page, documentationBorrowManagement);
+        return listPage;
+    }
+
+
+    @Override
+    public boolean add(DocumentationBorrowManagement documentationBorrowManagement) {
+        documentationBorrowManagement.setBorrowStatus("鍊熼槄");
+        documentationBorrowManagementMapper.insert(documentationBorrowManagement);
+        Documentation documentation = documentationService.getById(documentationBorrowManagement.getDocumentationId());
+        documentation.setDocStatus("鍊熷嚭");
+        documentationService.updateById(documentation);
+        return true;
+    }
+    @Override
+    public boolean reventdbm(DocumentationReturnManagement documentationReturnManagement) {
+        // 鏇存柊鍊熼槄璁板綍鐘舵�佷负褰掕繕
+        DocumentationBorrowManagement documentationBorrowManagement1 = documentationBorrowManagementMapper.selectById(documentationReturnManagement.getBorrowId());
+
+        DocumentationReturnManagement returnManagement = new DocumentationReturnManagement();
+        returnManagement.setDocumentationId(documentationBorrowManagement1.getDocumentationId());
+        returnManagement.setBorrower(documentationBorrowManagement1.getBorrower());
+        returnManagement.setBorrowPurpose(documentationBorrowManagement1.getBorrowPurpose());
+        returnManagement.setBorrowDate(documentationBorrowManagement1.getBorrowDate());
+        returnManagement.setDueReturnDate(documentationBorrowManagement1.getDueReturnDate());
+        returnManagement.setBorrowStatus("褰掕繕");
+        returnManagement.setBorrowId(documentationReturnManagement.getBorrowId());
+        returnManagement.setReturner(documentationReturnManagement.getReturner());
+        returnManagement.setReturnDate(LocalDate.now());
+        returnManagement.setRemark(documentationReturnManagement.getRemark());
+
+        documentationReturnManagementMapper.insert(returnManagement);
+        documentationBorrowManagement1.setBorrowStatus("褰掕繕");
+        documentationBorrowManagement1.setReturner(documentationReturnManagement.getReturner());
+        documentationBorrowManagement1.setReturnDate(LocalDate.now());
+        documentationBorrowManagementMapper.updateById(documentationBorrowManagement1);
+        // 鏇存柊鏂囨。鐘舵�佷负姝e父
+        Documentation documentation = documentationService.getById(documentationBorrowManagement1.getDocumentationId());
+        documentation.setDocStatus("姝e父");
+        documentationService.updateById(documentation);
+        return true;
+    }
+
+    @Override
+    public boolean reventDeleteByIds(List<Long> ids) {
+        QueryWrapper<DocumentationReturnManagement> queryWrapper = new QueryWrapper<>();
+        queryWrapper.in("id", ids);
+//        queryWrapper.eq("borrow_status", "褰掕繕");
+        List<DocumentationReturnManagement> list = documentationReturnManagementMapper.selectList(queryWrapper);
+
+        for (DocumentationReturnManagement documentationReturnManagement : list) {
+
+            try {
+                documentationReturnManagementMapper.deleteById(documentationReturnManagement);
+                DocumentationBorrowManagement documentationBorrowManagement = documentationBorrowManagementMapper.selectById(documentationReturnManagement.getBorrowId());
+                documentationBorrowManagement.setBorrowStatus("鍊熼槄");
+                documentationBorrowManagement.setReturner(null);
+                documentationBorrowManagement.setReturnDate(null);
+                documentationBorrowManagementMapper.updateById(documentationBorrowManagement);
+
+                Documentation documentation = documentationService.getById(documentationReturnManagement.getDocumentationId());
+                documentation.setDocStatus("鍊熷嚭");
+                documentationService.updateById(documentation);
+            } catch (Exception e) {
+                throw new RuntimeException("鍒犻櫎褰掕繕璁板綍鍜屾枃妗g姸鎬佹椂鍑洪敊", e);
+            }
+        }
+//        documentationReturnManagementMapper.deleteBatchIds(ids);
+        return true;
+    }
+
+    @Override
+    public void export(HttpServletResponse response, DocumentationBorrowManagement documentationBorrowManagement) {
+        List<DocumentationBorrowManagementDto> documentationBorrowManagements = documentationBorrowManagementMapper.export(documentationBorrowManagement);
+        ExcelUtil<DocumentationBorrowManagementDto> util = new ExcelUtil<>(DocumentationBorrowManagementDto.class);
+        util.exportExcel(response, documentationBorrowManagements, "鏂囨。鍊熼槄-鍊熼槄璁板綍");
+    }
+
+    @Override
+    public void exportrevent(HttpServletResponse response, DocumentationReturnManagement documentationReturnManagement) {
+        List<ReturnExportDto> documentationReturnManagements = documentationReturnManagementMapper.exportrevent(documentationReturnManagement);
+        ExcelUtil<ReturnExportDto> util = new ExcelUtil<>(ReturnExportDto.class);
+        util.exportExcel(response, documentationReturnManagements, "鏂囨。鍊熼槄-褰掕繕璁板綍");
+    }
+
+    @Override
+    public List<DocumentationBorrowManagementDto> listAll() {
+        return documentationBorrowManagementMapper.list(new LambdaQueryWrapper<DocumentationBorrowManagementDto>().eq(DocumentationBorrowManagementDto::getBorrowStatus, "鍊熼槄"));
+    }
+
+    @Override
+    public boolean deleteByIds(List<Long> ids) {
+        List<DocumentationBorrowManagement> list = documentationBorrowManagementMapper.selectList(new LambdaQueryWrapper<DocumentationBorrowManagement>().in(DocumentationBorrowManagement::getId, ids));
+        for (DocumentationBorrowManagement documentationBorrowManagement : list) {
+            Documentation documentation = documentationService.getById(documentationBorrowManagement.getDocumentationId());
+            documentation.setDocStatus("姝e父");
+            boolean b = documentationService.updateById(documentation);
+            if (!b){
+                throw new RuntimeException("鏇存柊鏂囨。鐘舵�佸け璐�");
+            }
+        }
+        documentationBorrowManagementMapper.deleteBatchIds(ids);
+        return true;
+    }
+
+
+
+
+}
+
+
+
+
diff --git a/src/main/java/com/ruoyi/warehouse/service/impl/DocumentationFileServiceImpl.java b/src/main/java/com/ruoyi/warehouse/service/impl/DocumentationFileServiceImpl.java
new file mode 100644
index 0000000..61dafcd
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/service/impl/DocumentationFileServiceImpl.java
@@ -0,0 +1,26 @@
+package com.ruoyi.warehouse.service.impl;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.warehouse.mapper.DocumentationFileMapper;
+import com.ruoyi.warehouse.pojo.DocumentationFile;
+import com.ruoyi.warehouse.service.DocumentationFileService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@AllArgsConstructor
+@Service
+public class DocumentationFileServiceImpl extends ServiceImpl<DocumentationFileMapper, DocumentationFile> implements DocumentationFileService {
+
+    private DocumentationFileMapper documentationFileMapper;
+
+
+    @Override
+    public List<DocumentationFile> documentationFileListPage(DocumentationFile documentationFile) {
+        return documentationFileMapper.documentationFileListPage(documentationFile);
+    }
+}
diff --git a/src/main/java/com/ruoyi/warehouse/service/impl/DocumentationServiceImpl.java b/src/main/java/com/ruoyi/warehouse/service/impl/DocumentationServiceImpl.java
new file mode 100644
index 0000000..5a7cf30
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/service/impl/DocumentationServiceImpl.java
@@ -0,0 +1,116 @@
+package com.ruoyi.warehouse.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.warehouse.dto.DocumentationDto;
+import com.ruoyi.warehouse.pojo.Documentation;
+import com.ruoyi.warehouse.pojo.DocumentationBorrowManagement;
+import com.ruoyi.warehouse.service.DocumentationService;
+import com.ruoyi.warehouse.mapper.DocumentationMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+* @author 86151
+* @description 閽堝琛ㄣ�恉ocumentation(鏂囨。淇℃伅琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+* @createDate 2025-08-14 14:05:49
+*/
+@Service
+public class DocumentationServiceImpl extends ServiceImpl<DocumentationMapper, Documentation>
+    implements DocumentationService{
+    @Autowired
+    private DocumentationMapper documentationMapper;
+    @Override
+    public IPage<DocumentationDto> listPage(Page page, Documentation documentation) {
+        return documentationMapper.listPage(page, documentation);
+    }
+
+    @Override
+    public void export(HttpServletResponse response,Documentation documentation) {
+        IPage<DocumentationDto> list = documentationMapper.listPage(null, documentation);
+        ExcelUtil<DocumentationDto> util = new ExcelUtil<>(DocumentationDto.class);
+        util.exportExcel(response, list.getRecords(), "鏂囨。淇℃伅琛�");
+    }
+
+    @Override
+    public boolean deleteByIds(List<Long> ids) {
+        List<Documentation> documentationList = documentationMapper.selectList(new LambdaQueryWrapper<Documentation>().in(Documentation::getId, ids));
+        for (Documentation documentation : documentationList) {
+            //濡傛灉鏂囨。鐘舵�佹槸宸插�熷嚭锛屼笉鑳藉垹闄�
+            if ("鍊熷嚭".equals(documentation.getDocStatus()) || "浣滃簾".equals(documentation.getDocStatus())) {
+                throw new RuntimeException("褰撳墠鏂囨。鐘舵�佷负 " + documentation.getDocStatus() + "锛屼笉鏀寔鍒犻櫎");
+            }
+            documentationMapper.deleteById(documentation.getId());
+        }
+        return true;
+    }
+    /**
+     * 鍒楄〃鎵�鏈夋枃妗�
+     * @return
+     */
+    @Override
+    public List<DocumentationDto> listAll() {
+        List<DocumentationDto> list = documentationMapper.list().stream().filter(documentationDto -> "姝e父".equals(documentationDto.getDocStatus())).collect(Collectors.toList());
+        return list;
+    }
+    /**
+     * 鑾峰彇鏂囨。鎬绘暟
+     * @return
+     */
+    @Override
+    public Integer getTotalDocsCount() {
+        return documentationMapper.countTotalDocs();
+    }
+    /**
+     * 鑾峰彇鏂囨。鍒嗙被鎬绘暟
+     * @return
+     */
+    @Override
+    public Integer getCategoryNumCount() {
+        return documentationMapper.countCategoryNum();
+    }
+    /**
+     * 鑾峰彇宸插�熷嚭鏂囨。鎬绘暟
+     * @return
+     */
+    @Override
+    public Integer getBorrowedDocsCount() {
+        return documentationMapper.countBorrowedDocs();
+    }
+    /**
+     * 鑾峰彇姣忔湀鏂板鏂囨。鎬绘暟
+     * @return
+     */
+    @Override
+    public Integer getMonthlyAddedDocsCount() {
+        return documentationMapper.countMonthlyAddedDocs();
+    }
+    /**
+     * 鑾峰彇鏂囨。鍒嗙被鍒嗗竷
+     * @return
+     */
+    @Override
+    public List<Map<String, Object>> getCategoryDistribution() {
+        return documentationMapper.countCategoryDistribution();
+    }
+    /**
+     * 鑾峰彇鏂囨。鐘舵�佸垎甯�
+     * @return
+     */
+    @Override
+    public List<Map<String, Object>> getStatusDistribution() {
+        return documentationMapper.countStatusDistribution();
+    }
+}
+
+
+
+
diff --git a/src/main/java/com/ruoyi/warehouse/service/impl/WarehouseGoodsShelvesRowcolServiceImpl.java b/src/main/java/com/ruoyi/warehouse/service/impl/WarehouseGoodsShelvesRowcolServiceImpl.java
new file mode 100644
index 0000000..7715520
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/service/impl/WarehouseGoodsShelvesRowcolServiceImpl.java
@@ -0,0 +1,63 @@
+package com.ruoyi.warehouse.service.impl;
+
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.warehouse.mapper.DocumentationMapper;
+import com.ruoyi.warehouse.mapper.WarehouseGoodsShelvesRowcolMapper;
+import com.ruoyi.warehouse.pojo.Documentation;
+import com.ruoyi.warehouse.pojo.WarehouseGoodsShelvesRowcol;
+import com.ruoyi.warehouse.dto.WarehouseGoodsShelvesRowcolDto;
+import com.ruoyi.warehouse.service.WarehouseGoodsShelvesRowcolService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+import java.util.List;
+
+
+/**
+* @author 86151
+* @description 閽堝琛ㄣ�恮arehouse_goods_shelves_rowcol(浠撳簱璐ф灦灞傦紝鍒楄〃)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+* @createDate 2025-08-13 11:49:02
+*/
+@Service
+@Slf4j
+public class WarehouseGoodsShelvesRowcolServiceImpl extends ServiceImpl<WarehouseGoodsShelvesRowcolMapper, WarehouseGoodsShelvesRowcol>
+    implements WarehouseGoodsShelvesRowcolService {
+    @Autowired
+    private WarehouseGoodsShelvesRowcolMapper warehouseGoodsShelvesRowcolMapper;
+    @Autowired
+    private DocumentationMapper documentationMapper;
+
+    @Override
+    public List<WarehouseGoodsShelvesRowcolDto> getList(WarehouseGoodsShelvesRowcol warehouseGoodsShelvesRowcol) {
+        List<WarehouseGoodsShelvesRowcolDto> list = warehouseGoodsShelvesRowcolMapper.findList(warehouseGoodsShelvesRowcol);
+        for (WarehouseGoodsShelvesRowcolDto dto : list) {
+            //鑾峰彇灞俰ds
+            Long id = dto.getId();
+            //鑾峰彇鏂囨。
+            dto.setDocumentationDtoList(documentationMapper.listBywarehouseGoodsShelvesRowcolId(id));
+        }
+        return list;
+    }
+    @Override
+    public boolean deleteByIds(List<Long> ids) {
+        // 3. 妫�鏌ユ槸鍚︽湁鍟嗗搧
+        Wrapper<Documentation> queryWrapper = new LambdaQueryWrapper<Documentation>()
+                .in(Documentation::getWarehouseGoodsShelvesRowcolId, ids);
+        List<Documentation> documentations = documentationMapper.selectList(queryWrapper);
+        if (!documentations.isEmpty()) throw new RuntimeException("璐ф灦涓嬫湁鍟嗗搧锛屼笉鑳藉垹闄�");
+        warehouseGoodsShelvesRowcolMapper.deleteBatchIds(ids);
+        return true;
+    }
+
+
+
+}
+
+
+
+
diff --git a/src/main/java/com/ruoyi/warehouse/service/impl/WarehouseGoodsShelvesServiceImpl.java b/src/main/java/com/ruoyi/warehouse/service/impl/WarehouseGoodsShelvesServiceImpl.java
new file mode 100644
index 0000000..3d33d5c
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/service/impl/WarehouseGoodsShelvesServiceImpl.java
@@ -0,0 +1,179 @@
+package com.ruoyi.warehouse.service.impl;
+
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.warehouse.dto.WarehouseGoodsShelvesDto;
+import com.ruoyi.warehouse.mapper.DocumentationMapper;
+import com.ruoyi.warehouse.mapper.WarehouseGoodsShelvesMapper;
+import com.ruoyi.warehouse.mapper.WarehouseGoodsShelvesRowcolMapper;
+import com.ruoyi.warehouse.pojo.Documentation;
+import com.ruoyi.warehouse.pojo.WarehouseGoodsShelvesRowcol;
+import com.ruoyi.warehouse.service.DocumentationService;
+import com.ruoyi.warehouse.service.WarehouseGoodsShelvesRowcolService;
+import com.ruoyi.warehouse.service.WarehouseGoodsShelvesService;
+import lombok.extern.slf4j.Slf4j;
+import com.ruoyi.warehouse.pojo.WarehouseGoodsShelves;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+* @author 86151
+* @description 閽堝琛ㄣ�恮arehouse_goods_shelves(浠撳簱璐ф灦琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+* @createDate 2025-08-13 11:49:02
+*/
+@Service
+@Slf4j
+@Transactional(rollbackFor = Exception.class)
+public class WarehouseGoodsShelvesServiceImpl extends ServiceImpl<WarehouseGoodsShelvesMapper, WarehouseGoodsShelves>
+    implements WarehouseGoodsShelvesService {
+    @Autowired
+    private WarehouseGoodsShelvesRowcolService warehouseGoodsShelvesRowcolService;
+    @Autowired
+    private WarehouseGoodsShelvesRowcolMapper warehouseGoodsShelvesRowcolMapper;
+    @Autowired
+    private WarehouseGoodsShelvesMapper warehouseGoodsShelvesMapper;
+    @Autowired
+    private DocumentationService documentationService;
+    @Autowired
+    private DocumentationMapper documentationMapper;
+
+    @Override
+    public boolean add(WarehouseGoodsShelves warehouseGoodsShelves) {
+        WarehouseGoodsShelves one = warehouseGoodsShelvesMapper.selectOne(new LambdaQueryWrapper<WarehouseGoodsShelves>().eq(WarehouseGoodsShelves::getId, warehouseGoodsShelves.getId()));
+        // 1. 妫�鏌ヨ揣鏋跺悕绉版槸鍚﹀凡瀛樺湪
+        if (one == null) {
+            if(warehouseGoodsShelves.getRow() == null || warehouseGoodsShelves.getRow() == 0 && warehouseGoodsShelves.getCol() == null || warehouseGoodsShelves.getCol() == 0){
+                throw new IllegalArgumentException("灞傛暟鍜屽垪鏁颁笉鑳戒负绌�");
+            }
+            int insert = warehouseGoodsShelvesMapper.insert(warehouseGoodsShelves);
+            if (insert <= 0) return false;
+        }
+
+        Long shelvesId = warehouseGoodsShelves.getId();
+        Long warehouseId = warehouseGoodsShelves.getWarehouseId();
+        // 3. 鎵归噺鍒涘缓琛屽垪璁板綍
+        List<WarehouseGoodsShelvesRowcol> rowcolList = new ArrayList<>();
+        for (long i = 1; i <= warehouseGoodsShelves.getRow(); i++) {
+            for (long j = 1; j <= warehouseGoodsShelves.getCol(); j++) {
+                WarehouseGoodsShelvesRowcol rowcol = new WarehouseGoodsShelvesRowcol();
+                rowcol.setRow(i);
+                rowcol.setCol(j);
+                rowcol.setWarehouseGoodsShelvesId(shelvesId);
+                rowcolList.add(rowcol);
+            }
+        }
+        // 4. 鎵归噺鎻掑叆琛屽垪璁板綍
+        if (!rowcolList.isEmpty()) {
+            try {
+                // 浣跨敤鎵归噺鎻掑叆鏂规硶鏇夸唬寰幆鍗曟潯鎻掑叆
+                warehouseGoodsShelvesRowcolService.saveBatch(rowcolList);
+            } catch (Exception e) {
+                // 鎶涘嚭寮傚父瑙﹀彂浜嬪姟鍥炴粴
+                throw e;
+            }
+        }
+        return true;
+    }
+    /**
+     * 鏍规嵁ID鏇存柊璐ф灦鍙婂叾琛屽垪淇℃伅
+     * @param warehouseGoodsShelves 璐ф灦淇℃伅
+     * @return 鏄惁鏇存柊鎴愬姛
+     */
+    @Override
+    public boolean updateRowcolById(WarehouseGoodsShelves warehouseGoodsShelves) {
+        Long shelvesId = warehouseGoodsShelves.getId();
+
+        // 鏋勫缓鏌ヨ鏉′欢锛氭煡璇㈣璐ф灦涓嬬殑鎵�鏈夎鍒楄褰�
+        Wrapper<WarehouseGoodsShelvesRowcol> queryWrapper = new LambdaQueryWrapper<WarehouseGoodsShelvesRowcol>()
+                .eq(WarehouseGoodsShelvesRowcol::getWarehouseGoodsShelvesId, shelvesId);
+        List<WarehouseGoodsShelvesRowcol> rowcolList = warehouseGoodsShelvesRowcolService.list(queryWrapper);
+        //鑾峰緱rowcolList涓墍鏈夌殑Id
+        List<Long> rowcolIds = rowcolList.stream()
+                .map(WarehouseGoodsShelvesRowcol::getId)
+                .collect(Collectors.toList());
+        // 3. 妫�鏌ユ槸鍚︽湁鍟嗗搧
+        Wrapper<Documentation> queryWrapper1 = new LambdaQueryWrapper<Documentation>()
+                .in(Documentation::getWarehouseGoodsShelvesRowcolId, rowcolIds);
+        List<Documentation> documentations = documentationMapper.selectList(queryWrapper1);
+        if (!documentations.isEmpty()) throw new RuntimeException("璐ф灦涓嬫湁鍟嗗搧锛屼笉鑳藉垹闄�");
+
+        // 鍏堟洿鏂拌揣鏋朵富淇℃伅
+        updateById(warehouseGoodsShelves);
+        // 鍒犻櫎鏃х殑琛屽垪璁板綍
+        warehouseGoodsShelvesRowcolService.removeByIds(rowcolIds);
+        // 娣诲姞鏂扮殑琛屽垪璁板綍
+        add(warehouseGoodsShelves);
+        return true;
+    }
+    /**
+     * 鎵归噺鍒犻櫎璐ф灦鍙婂叾鍏宠仈鐨勮鍒楄褰�
+     * @param ids 璐ф灦ID鍒楄〃
+     * @return 鏄惁鍒犻櫎鎴愬姛
+     */
+    @Override
+    public boolean deleteByIds(List<Long> ids) {
+        // 1. 鍏堟煡璇㈡墍鏈夎鍒犻櫎鐨勮揣鏋朵俊鎭�
+        List<WarehouseGoodsShelves> shelvesList = warehouseGoodsShelvesMapper.selectBatchIds(ids);
+
+        // 2. 妫�鏌ユ墍鏈夎揣鏋舵槸鍚﹀瓨鍦ㄥ晢鍝侊紙鏈夊晢鍝佸垯涓嶅厑璁稿垹闄わ級
+        for (WarehouseGoodsShelves shelves : shelvesList) {
+            Long shelvesId = shelves.getId();
+            // 鏋勫缓鏌ヨ鏉′欢锛氭煡璇㈠綋鍓嶈揣鏋剁殑鎵�鏈夎鍒楄褰�
+            Wrapper<WarehouseGoodsShelvesRowcol> queryWrapper = new LambdaQueryWrapper<WarehouseGoodsShelvesRowcol>()
+                    .eq(WarehouseGoodsShelvesRowcol::getWarehouseGoodsShelvesId, shelvesId);
+
+            List<WarehouseGoodsShelvesRowcol> rowcolList = warehouseGoodsShelvesRowcolService.list(queryWrapper);
+            if (CollectionUtils.isEmpty(rowcolList)) {
+                continue; // 鏃犲叧鑱旇褰曪紝璺宠繃妫�鏌�
+            }
+            //鑾峰緱rowcolList涓墍鏈夌殑Id
+            List<Long> rowcolIds = rowcolList.stream()
+                    .map(WarehouseGoodsShelvesRowcol::getId)
+                    .collect(Collectors.toList());
+            // 3. 妫�鏌ユ槸鍚︽湁鍟嗗搧
+            Wrapper<Documentation> queryWrapper1 = new LambdaQueryWrapper<Documentation>()
+                    .in(Documentation::getWarehouseGoodsShelvesRowcolId, rowcolIds);
+            List<Documentation> documentations = documentationMapper.selectList(queryWrapper1);
+            if (!documentations.isEmpty()) throw new RuntimeException("璐ф灦涓嬫湁鍟嗗搧锛屼笉鑳藉垹闄�"); // 浠讳竴璐ф灦鏈夊晢鍝佸垯缁堟鍒犻櫎
+        }
+
+        // 3. 鍏堝垹闄よ揣鏋朵富璁板綍
+        warehouseGoodsShelvesMapper.deleteBatchIds(ids);
+
+        // 4. 鎵归噺鍒犻櫎鎵�鏈夎鍒楄褰�
+        List<Long> allShelvesIds = shelvesList.stream()
+                .map(WarehouseGoodsShelves::getId)
+                .collect(Collectors.toList());
+
+        // 鏋勫缓鎵归噺鍒犻櫎鏉′欢
+        Wrapper<WarehouseGoodsShelvesRowcol> deleteWrapper = new LambdaQueryWrapper<WarehouseGoodsShelvesRowcol>()
+                .in(WarehouseGoodsShelvesRowcol::getWarehouseGoodsShelvesId, allShelvesIds);
+        warehouseGoodsShelvesRowcolService.remove(deleteWrapper);
+        return true;
+    }
+
+
+    @Override
+    public List<WarehouseGoodsShelvesDto> findList(WarehouseGoodsShelves warehouseGoodsShelves) {
+        return warehouseGoodsShelvesMapper.listAll(warehouseGoodsShelves);
+    }
+
+}
+
+
+
+
diff --git a/src/main/java/com/ruoyi/warehouse/service/impl/WarehouseServiceImpl.java b/src/main/java/com/ruoyi/warehouse/service/impl/WarehouseServiceImpl.java
new file mode 100644
index 0000000..74276a7
--- /dev/null
+++ b/src/main/java/com/ruoyi/warehouse/service/impl/WarehouseServiceImpl.java
@@ -0,0 +1,175 @@
+package com.ruoyi.warehouse.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.warehouse.dto.WarehouseDto;
+import com.ruoyi.warehouse.dto.WarehouseGoodsShelvesDto;
+import com.ruoyi.warehouse.dto.WarehouseTreeDto;
+import com.ruoyi.warehouse.mapper.WarehouseGoodsShelvesMapper;
+import com.ruoyi.warehouse.mapper.WarehouseGoodsShelvesRowcolMapper;
+import com.ruoyi.warehouse.mapper.WarehouseMapper;
+import com.ruoyi.warehouse.pojo.Warehouse;
+import com.ruoyi.warehouse.pojo.WarehouseGoodsShelves;
+import com.ruoyi.warehouse.pojo.WarehouseGoodsShelvesRowcol;
+import com.ruoyi.warehouse.service.WarehouseGoodsShelvesService;
+import com.ruoyi.warehouse.service.WarehouseService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.sql.Array;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static org.springframework.beans.BeanUtils.copyProperties;
+
+/**
+* @author 86151
+* @description 閽堝琛ㄣ�恮arehouse(浠撳簱琛�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+* @createDate 2025-08-13 11:49:02
+*/
+@Service
+@Slf4j
+public class WarehouseServiceImpl extends ServiceImpl<WarehouseMapper, Warehouse>
+    implements WarehouseService {
+    @Autowired
+    private WarehouseMapper warehouseMapper;
+    @Autowired
+    private WarehouseGoodsShelvesService warehouseGoodsShelvesService;
+    @Autowired
+    private WarehouseGoodsShelvesMapper warehouseGoodsShelvesMapper;
+    @Autowired
+    private WarehouseGoodsShelvesRowcolMapper warehouseGoodsShelvesRowcolMapper;
+
+    @Override
+    public boolean deleteByIds(List<Long> ids) {
+        // 1. 妫�鏌ユ槸鍚︽湁璐ф灦
+        Wrapper<WarehouseGoodsShelves> queryWrapper = new LambdaQueryWrapper<WarehouseGoodsShelves>()
+                .in(WarehouseGoodsShelves::getWarehouseId, ids);
+        List<WarehouseGoodsShelves> shelvesList = warehouseGoodsShelvesService.list(queryWrapper);
+        //鑾峰緱shelvesList涓墍鏈夌殑Id
+
+        List<Long> shelvesIds = shelvesList.stream().map(WarehouseGoodsShelves::getId).collect(Collectors.toList());
+        // 2. 鍒犻櫎璐ф灦
+        if (!shelvesIds.isEmpty()) {
+            boolean b = warehouseGoodsShelvesService.deleteByIds(shelvesIds);
+            if (!b) {
+                throw new RuntimeException("鍒犻櫎璐ф灦澶辫触");
+            }
+        }
+        return removeByIds(ids);
+    }
+
+    @Override
+    public List<Warehouse> findList(Warehouse warehouse) {
+        return warehouseMapper.listAll(warehouse);
+    }
+    /**
+     * 鏌ヨ浠撳簱-璐ф灦-灞傚垪涓夌骇鏍戠粨鏋�
+     */
+    @Override
+    public List<WarehouseTreeDto> findListTree() {
+
+        // 鏌ヨ鎵�鏈夋牴鑺傜偣锛堜粨搴擄級
+        LambdaQueryWrapper<Warehouse> queryWrapper = new LambdaQueryWrapper<>();
+        // 鏌ヨ浠撳簱鍒楄〃锛堜竴绾ц妭鐐癸級
+        List<Warehouse> warehouseList = warehouseMapper.selectList(queryWrapper);
+
+        // 杞崲涓烘爲鑺傜偣骞舵瀯寤哄瓙鏍�
+        List<WarehouseTreeDto> tree = new ArrayList<>();
+        for (Warehouse warehouse : warehouseList) {
+            WarehouseTreeDto node = convertToWarehouseTreeDto(warehouse);
+            // 涓烘瘡涓粨搴撴坊鍔犺揣鏋跺瓙鑺傜偣
+            node.setChildren(buildShelfChildrenNodes(warehouse.getId()));
+            tree.add(node);
+        }
+        return tree;
+    }
+    /**
+     * 鏋勫缓璐ф灦瀛愯妭鐐癸紙浜岀骇鑺傜偣锛�
+     */
+    private List<WarehouseTreeDto> buildShelfChildrenNodes(Long warehouseId) {
+        // 鏌ヨ鎸囧畾浠撳簱涓嬬殑鎵�鏈夎揣鏋�
+        LambdaQueryWrapper<WarehouseGoodsShelves> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(WarehouseGoodsShelves::getWarehouseId, warehouseId);
+        List<WarehouseGoodsShelves> shelfList = warehouseGoodsShelvesMapper.selectList(queryWrapper);
+
+        // 杞崲涓烘爲鑺傜偣骞舵瀯寤哄眰鍒楀瓙鑺傜偣
+        List<WarehouseTreeDto> shelfNodes = new ArrayList<>();
+        for (WarehouseGoodsShelves shelf : shelfList) {
+            WarehouseTreeDto shelfNode = convertToShelfTreeDto(shelf);
+            // 涓烘瘡涓揣鏋舵坊鍔犲眰鍒楀瓙鑺傜偣
+            shelfNode.setChildren(buildRowcolChildrenNodes(shelf.getId()));
+            shelfNodes.add(shelfNode);
+        }
+
+        return shelfNodes;
+    }
+
+    /**
+     * 鏋勫缓灞傚垪瀛愯妭鐐癸紙涓夌骇鑺傜偣锛�
+     */
+    private List<WarehouseTreeDto> buildRowcolChildrenNodes(Long shelfId) {
+        // 鏌ヨ鎸囧畾璐ф灦涓嬬殑鎵�鏈夊眰鍒�
+        LambdaQueryWrapper<WarehouseGoodsShelvesRowcol> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(WarehouseGoodsShelvesRowcol::getWarehouseGoodsShelvesId, shelfId);
+        List<WarehouseGoodsShelvesRowcol> rowcolList = warehouseGoodsShelvesRowcolMapper.selectList(queryWrapper);
+
+        // 杞崲涓烘爲鑺傜偣锛堝眰鍒楁病鏈夊瓙鑺傜偣锛�
+        List<WarehouseTreeDto> rowcolNodes = new ArrayList<>();
+        for (WarehouseGoodsShelvesRowcol rowcol : rowcolList) {
+            WarehouseTreeDto rowcolNode = convertToRowcolTreeDto(rowcol);
+            rowcolNodes.add(rowcolNode);
+        }
+
+        return rowcolNodes;
+    }
+
+    /**
+     * 浠撳簱瀹炰綋杞崲涓烘爲鑺傜偣DTO
+     */
+    private WarehouseTreeDto convertToWarehouseTreeDto(Warehouse warehouse) {
+        WarehouseTreeDto dto = new WarehouseTreeDto();
+        copyProperties(warehouse, dto);
+        dto.setLabel(warehouse.getWarehouseName());
+        dto.setChildren(new ArrayList<>());
+        return dto;
+    }
+
+    /**
+     * 璐ф灦瀹炰綋杞崲涓烘爲鑺傜偣DTO
+     */
+    private WarehouseTreeDto convertToShelfTreeDto(WarehouseGoodsShelves shelf) {
+        WarehouseTreeDto dto = new WarehouseTreeDto();
+        copyProperties(shelf, dto);
+//        dto.setLabel(shelf.getGoodsShelvesName());
+        dto.setLabel(shelf.getName());
+        dto.setChildren(new ArrayList<>());
+        return dto;
+    }
+
+    /**
+     * 灞傚垪瀹炰綋杞崲涓烘爲鑺傜偣DTO
+     */
+    private WarehouseTreeDto convertToRowcolTreeDto(WarehouseGoodsShelvesRowcol rowcol) {
+        WarehouseTreeDto dto = new WarehouseTreeDto();
+        copyProperties(rowcol, dto);
+//        dto.setLabel(rowcol.getStorey() + "-" + rowcol.getArrange());
+        dto.setLabel(rowcol.getRow() + "-" + rowcol.getCol());
+        dto.setChildren(new ArrayList<>());
+        return dto;
+    }
+
+}
+
+
+
+
diff --git a/src/main/resources/mapper/warehouse/DocumentClassificationMapper.xml b/src/main/resources/mapper/warehouse/DocumentClassificationMapper.xml
new file mode 100644
index 0000000..e758e4f
--- /dev/null
+++ b/src/main/resources/mapper/warehouse/DocumentClassificationMapper.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.warehouse.mapper.DocumentClassificationMapper">
+
+    <resultMap id="BaseResultMap" type="com.ruoyi.warehouse.pojo.DocumentClassification">
+            <id property="id" column="id" />
+            <result property="category" column="category" />
+            <result property="parentId" column="parent_id" />
+            <result property="createTime" column="create_time" />
+            <result property="createUser" column="create_user" />
+            <result property="updateTime" column="update_time" />
+            <result property="updateUser" column="update_user" />
+            <result property="tenantId" column="tenant_id" />
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,category,parent_id,
+        create_time,create_user,update_time,
+        update_user,tenant_id
+    </sql>
+</mapper>
diff --git a/src/main/resources/mapper/warehouse/DocumentationBorrowManagementMapper.xml b/src/main/resources/mapper/warehouse/DocumentationBorrowManagementMapper.xml
new file mode 100644
index 0000000..18b2082
--- /dev/null
+++ b/src/main/resources/mapper/warehouse/DocumentationBorrowManagementMapper.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.warehouse.mapper.DocumentationBorrowManagementMapper">
+
+<!--    <resultMap id="BaseResultMap" type="com.ruoyi.warehouse.pojo.DocumentationBorrowManagement">-->
+<!--            <id property="id" column="id"/>-->
+<!--            <result property="documentationId" column="documentation_id" />-->
+<!--            <result property="borrowerId" column="borrower_id" />-->
+<!--            <result property="borrowPurpose" column="borrow_purpose" />-->
+<!--            <result property="borrowDate" column="borrow_date"/>-->
+<!--            <result property="dueReturnDate" column="due_return_date" />-->
+<!--            <result property="returnDate" column="return_date"/>-->
+<!--            <result property="borrowStatus" column="borrow_status" />-->
+<!--            <result property="remark" column="remark"/>-->
+<!--            <result property="createTime" column="create_time"/>-->
+<!--            <result property="createUser" column="create_user"/>-->
+<!--            <result property="updateTime" column="update_time"/>-->
+<!--            <result property="updateUser" column="update_user"/>-->
+<!--            <result property="tenantId" column="tenant_id"/>-->
+<!--    </resultMap>-->
+
+<!--    <sql id="Base_Column_List">-->
+<!--        id,documentation_id,borrower_id,-->
+<!--        borrow_purpose,borrow_date,due_return_date,-->
+<!--        return_date,borrow_status,remark,-->
+<!--        create_time,create_user,update_time,-->
+<!--        update_user,tenant_id-->
+<!--    </sql>-->
+    <select id="listPage" resultType="com.ruoyi.warehouse.dto.DocumentationBorrowManagementDto">
+        select dbm.*,doc.doc_name
+        from documentation_borrow_management dbm
+        LEFT JOIN documentation doc on doc.id = dbm.documentation_id
+        where 1=1
+        <if test="documentationBorrowManagement.borrowStatus != null">
+            and borrow_status = #{documentationBorrowManagement.borrowStatus}
+        </if>
+        <if test="documentationBorrowManagement.documentationId != null">
+            and documentation_id = #{documentationBorrowManagement.documentationId}
+        </if>
+        <if test="documentationBorrowManagement.borrower != null">
+            and borrower like concat('%',#{documentationBorrowManagement.borrower},'%')
+        </if>
+        <if test="documentationBorrowManagement.returner != null">
+            and returner like concat('%',#{documentationBorrowManagement.returner},'%')
+        </if>
+        <if test="documentationBorrowManagement.entryDateStart != null and documentationBorrowManagement.entryDateStart != ''">
+            and borrow_date >= DATE_FORMAT(#{documentationBorrowManagement.entryDateStart},'%Y-%m-%d')
+        </if>
+        <if test="documentationBorrowManagement.entryDateEnd != null and documentationBorrowManagement.entryDateEnd != ''">
+            and borrow_date &lt;= DATE_FORMAT(#{documentationBorrowManagement.entryDateEnd},'%Y-%m-%d')
+        </if>
+    </select>
+    <select id="export" resultType="com.ruoyi.warehouse.dto.DocumentationBorrowManagementDto">
+        select dbm.*,doc.doc_name
+        from documentation_borrow_management dbm
+        LEFT JOIN documentation doc on doc.id = dbm.documentation_id
+        where 1=1
+        <if test="documentationBorrowManagement.borrowStatus != null">
+            and borrow_status = #{documentationBorrowManagement.borrowStatus}
+        </if>
+        <if test="documentationBorrowManagement.documentationId != null">
+            and documentation_id = #{documentationBorrowManagement.documentationId}
+        </if>
+        <if test="documentationBorrowManagement.borrower != null">
+            and borrower like concat('%',#{documentationBorrowManagement.borrower},'%')
+        </if>
+        <if test="documentationBorrowManagement.returner != null">
+            and returner like concat('%',#{documentationBorrowManagement.returner},'%')
+        </if>
+        <if test="documentationBorrowManagement.entryDateStart != null and documentationBorrowManagement.entryDateStart != ''">
+            and borrow_date >= DATE_FORMAT(#{documentationBorrowManagement.entryDateStart},'%Y-%m-%d')
+        </if>
+        <if test="documentationBorrowManagement.entryDateEnd != null and documentationBorrowManagement.entryDateEnd != ''">
+            and borrow_date &lt;= DATE_FORMAT(#{documentationBorrowManagement.entryDateEnd},'%Y-%m-%d')
+        </if>
+    </select>
+    <select id="list" resultType="com.ruoyi.warehouse.dto.DocumentationBorrowManagementDto">
+        select dbm.*,doc.doc_name
+        from documentation_borrow_management dbm
+        LEFT JOIN documentation doc on doc.id = dbm.documentation_id
+        <if test="ew != null">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+
+</mapper>
diff --git a/src/main/resources/mapper/warehouse/DocumentationFileMapper.xml b/src/main/resources/mapper/warehouse/DocumentationFileMapper.xml
new file mode 100644
index 0000000..a8b74f9
--- /dev/null
+++ b/src/main/resources/mapper/warehouse/DocumentationFileMapper.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.ruoyi.warehouse.mapper.DocumentationFileMapper">
+    <select id="documentationFileListPage" resultType="com.ruoyi.warehouse.pojo.DocumentationFile">
+        SELECT
+        *
+        FROM documentation_file
+        where
+        1=1
+        <if test="documentationFile.name != null and documentationFile.name != '' ">
+            AND name = #{documentationFile.name}
+        </if>
+        <if test="documentationFile.documentationId != null">
+            AND documentation_id = #{documentationFile.documentationId}
+        </if>
+    </select>
+</mapper>
diff --git a/src/main/resources/mapper/warehouse/DocumentationMapper.xml b/src/main/resources/mapper/warehouse/DocumentationMapper.xml
new file mode 100644
index 0000000..91f17a9
--- /dev/null
+++ b/src/main/resources/mapper/warehouse/DocumentationMapper.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.warehouse.mapper.DocumentationMapper">
+
+    <select id="listPage" resultType="com.ruoyi.warehouse.dto.DocumentationDto">
+        SELECT
+        doc.*,
+        dc.category,
+        CONCAT(
+            w.warehouse_name, '-',
+            wgs.name, '-',
+            wgsr.row, '灞�-',
+            wgsr.col, '鍒�'
+        ) AS location_info  -- 鍚堝苟鍚庣殑瀛楁鍚�
+        FROM documentation doc
+        LEFT JOIN document_classification dc ON doc.document_classification_id = dc.id
+        LEFT JOIN warehouse_goods_shelves_rowcol wgsr ON wgsr.id = doc.warehouse_goods_shelves_rowcol_id
+        LEFT JOIN warehouse_goods_shelves wgs ON wgs.id = wgsr.warehouse_goods_shelves_id
+        LEFT JOIN warehouse w ON w.id = wgs.warehouse_id
+        where 1=1
+        <if test="documentation.documentClassificationId != null">
+            and doc.document_classification_id = #{documentation.documentClassificationId}
+        </if>
+        <if test="documentation.docName != null">
+            and doc.doc_name = #{documentation.docName}
+        </if>
+        <if test="documentation.docNumber != null">
+            and doc.doc_number = #{documentation.docNumber}
+        </if>
+        <if test="documentation.id != null">
+            and doc.id = #{documentation.id}
+        </if>
+    </select>
+    <select id="listByDocumentClassificationId" resultType="com.ruoyi.warehouse.dto.DocumentationDto">
+        SELECT
+        doc.*,
+        dc.category,
+        CONCAT(
+        w.warehouse_name, '-',
+        wgs.name, '-',
+        wgsr.row, '灞�-',
+        wgsr.col, '鍒�'
+        ) AS location_info  -- 鍚堝苟鍚庣殑瀛楁鍚�
+        FROM documentation doc
+        LEFT JOIN document_classification dc ON doc.document_classification_id = dc.id
+        LEFT JOIN warehouse_goods_shelves_rowcol wgsr ON wgsr.id = doc.warehouse_goods_shelves_rowcol_id
+        LEFT JOIN warehouse_goods_shelves wgs ON wgs.id = wgsr.warehouse_goods_shelves_id
+        LEFT JOIN warehouse w ON w.id = wgs.warehouse_id
+        where doc.document_classification_id = #{documentClassificationId}
+    </select>
+    <select id="list" resultType="com.ruoyi.warehouse.dto.DocumentationDto">
+        SELECT
+            doc.*,
+            dc.category,
+            CONCAT(
+                    w.warehouse_name, '-',
+                    wgs.name, '-',
+                    wgsr.row, '灞�-',
+                    wgsr.col, '鍒�'
+                ) AS location_info  -- 鍚堝苟鍚庣殑瀛楁鍚�
+        FROM documentation doc
+         LEFT JOIN document_classification dc ON doc.document_classification_id = dc.id
+         LEFT JOIN warehouse_goods_shelves_rowcol wgsr ON wgsr.id = doc.warehouse_goods_shelves_rowcol_id
+         LEFT JOIN warehouse_goods_shelves wgs ON wgs.id = wgsr.warehouse_goods_shelves_id
+         LEFT JOIN warehouse w ON w.id = wgs.warehouse_id
+    </select>
+    <select id="listBywarehouseGoodsShelvesRowcolId" resultType="com.ruoyi.warehouse.dto.DocumentationDto">
+        SELECT
+        doc.*,
+        dc.category,
+        CONCAT(
+        w.warehouse_name, '-',
+        wgs.name, '-',
+        wgsr.row, '灞�-',
+        wgsr.col, '鍒�'
+        ) AS location_info  -- 鍚堝苟鍚庣殑瀛楁鍚�
+        FROM documentation doc
+        LEFT JOIN document_classification dc ON doc.document_classification_id = dc.id
+        LEFT JOIN warehouse_goods_shelves_rowcol wgsr ON wgsr.id = doc.warehouse_goods_shelves_rowcol_id
+        LEFT JOIN warehouse_goods_shelves wgs ON wgs.id = wgsr.warehouse_goods_shelves_id
+        LEFT JOIN warehouse w ON w.id = wgs.warehouse_id
+        where doc.warehouse_goods_shelves_rowcol_id = #{warehouseGoodsShelvesRowcolId}
+    </select>
+
+</mapper>
diff --git a/src/main/resources/mapper/warehouse/DocumentationReturnManagementMapper.xml b/src/main/resources/mapper/warehouse/DocumentationReturnManagementMapper.xml
new file mode 100644
index 0000000..dabc4f0
--- /dev/null
+++ b/src/main/resources/mapper/warehouse/DocumentationReturnManagementMapper.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.warehouse.mapper.DocumentationReturnManagementMapper">
+
+
+    <select id="listPage" resultType="com.ruoyi.warehouse.dto.DocumentationReturnManagementDto">
+        select dbm.*,doc.doc_name
+        from documentation_return_management dbm
+        LEFT JOIN documentation doc on doc.id = dbm.documentation_id
+        where 1=1
+        <if test="documentationReturnManagement.borrowStatus != null">
+            and borrow_status = #{documentationReturnManagement.borrowStatus}
+        </if>
+        <if test="documentationReturnManagement.documentationId != null">
+            and documentation_id = #{documentationReturnManagement.documentationId}
+        </if>
+        <if test="documentationReturnManagement.borrower != null">
+            and borrower like concat('%',#{documentationReturnManagement.borrower},'%')
+        </if>
+        <if test="documentationReturnManagement.returner != null">
+            and returner like concat('%',#{documentationReturnManagement.returner},'%')
+        </if>
+        <if test="documentationReturnManagement.entryDateStart != null and documentationReturnManagement.entryDateStart != ''">
+            and return_date >= DATE_FORMAT(#{documentationReturnManagement.entryDateStart},'%Y-%m-%d')
+        </if>
+        <if test="documentationReturnManagement.entryDateEnd != null and documentationReturnManagement.entryDateEnd != ''">
+            and return_date &lt;= DATE_FORMAT(#{documentationReturnManagement.entryDateEnd},'%Y-%m-%d')
+        </if>
+    </select>
+
+    <select id="exportrevent" resultType="com.ruoyi.warehouse.dto.ReturnExportDto">
+        select dbm.*,doc.doc_name
+        from documentation_return_management dbm
+        LEFT JOIN documentation doc on doc.id = dbm.documentation_id
+        where dbm.returner IS NOT NULL
+        <if test="documentationReturnManagement.returnStatus != null">
+            and return_status = #{documentationReturnManagement.returnStatus}
+        </if>
+        <if test="documentationReturnManagement.documentationId != null">
+            and documentation_id = #{documentationReturnManagement.documentationId}
+        </if>
+        <if test="documentationReturnManagement.borrower != null">
+            and borrower like concat('%',#{documentationReturnManagement.borrower},'%')
+        </if>
+        <if test="documentationReturnManagement.returner != null">
+            and returner like concat('%',#{documentationReturnManagement.returner},'%')
+        </if>
+        <if test="documentationReturnManagement.entryDateStart != null and documentationReturnManagement.entryDateStart != ''">
+            and return_date >= DATE_FORMAT(#{documentationReturnManagement.entryDateStart},'%Y-%m-%d')
+        </if>
+        <if test="documentationReturnManagement.entryDateEnd != null and documentationReturnManagement.entryDateEnd != ''">
+            and return_date &lt;= DATE_FORMAT(#{documentationReturnManagement.entryDateEnd},'%Y-%m-%d')
+        </if>
+    </select>
+</mapper>
diff --git a/src/main/resources/mapper/warehouse/WarehouseGoodsShelvesMapper.xml b/src/main/resources/mapper/warehouse/WarehouseGoodsShelvesMapper.xml
new file mode 100644
index 0000000..8493e2d
--- /dev/null
+++ b/src/main/resources/mapper/warehouse/WarehouseGoodsShelvesMapper.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.warehouse.mapper.WarehouseGoodsShelvesMapper">
+
+
+    <select id="findList" resultType="com.ruoyi.warehouse.dto.WarehouseGoodsShelvesDto">
+        SELECT
+        doc.doc_name,
+        doc.doc_number,
+        wgs.*,
+        w.warehouse_name,
+        dc.category
+        FROM warehouse_goods_shelves_rowcol wgsr
+        LEFT JOIN warehouse_goods_shelves wgs ON wgs.id = wgsr.warehouse_goods_shelves_id
+        LEFT JOIN warehouse w ON w.id = wgs.warehouse_id
+        LEFT JOIN documentation doc ON doc.warehouse_goods_shelves_rowcol_id = wgsr.id
+        LEFT JOIN document_classification dc ON doc.document_classification_id = dc.id
+        <where>
+            1=1
+            <if test="warehouseGoodsShelves.goodsShelvesName != null and warehouseGoodsShelves.goodsShelvesName != ''">
+                and wgs.goods_shelves_name like concat('%',#{warehouseGoodsShelves.goodsShelvesName},'%')
+            </if>
+            <if test="warehouseGoodsShelves.warehouseId != null">
+                and wgs.warehouse_id = #{warehouseGoodsShelves.warehouseId}
+            </if>
+            <if test="warehouseGoodsShelves.id != null">
+                and wgs.id = #{warehouseGoodsShelves.id}
+            </if>
+        </where>
+    </select>
+    <select id="listAll" resultType="com.ruoyi.warehouse.dto.WarehouseGoodsShelvesDto">
+        select wgs.*,w.warehouse_name from warehouse_goods_shelves wgs
+        LEFT JOIN warehouse w ON w.id = wgs.warehouse_id
+        <where>
+            1=1
+            <if test="warehouseGoodsShelves.goodsShelvesName != null and warehouseGoodsShelves.goodsShelvesName != ''">
+                and goods_shelves_name like concat('%',#{warehouseGoodsShelves.goodsShelvesName},'%')
+            </if>
+            <if test="warehouseGoodsShelves.warehouseId != null">
+                and warehouse_id = #{warehouseGoodsShelves.warehouseId}
+            </if>
+            <if test="warehouseGoodsShelves.id != null">
+                and id = #{warehouseGoodsShelves.id}
+            </if>
+        </where>
+    </select>
+
+
+</mapper>
diff --git a/src/main/resources/mapper/warehouse/WarehouseGoodsShelvesRowcolMapper.xml b/src/main/resources/mapper/warehouse/WarehouseGoodsShelvesRowcolMapper.xml
new file mode 100644
index 0000000..87dfa32
--- /dev/null
+++ b/src/main/resources/mapper/warehouse/WarehouseGoodsShelvesRowcolMapper.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.warehouse.mapper.WarehouseGoodsShelvesRowcolMapper">
+    <select id="findList" resultType="com.ruoyi.warehouse.dto.WarehouseGoodsShelvesRowcolDto">
+--         SELECT
+--         wgsr.*,
+--         w.warehouse_name,
+--         wgs.name,
+--         dc.category
+--         FROM warehouse_goods_shelves_rowcol wgsr
+--         LEFT JOIN documentation doc ON doc.warehouse_goods_shelves_rowcol_id = wgsr.id
+--         LEFT JOIN warehouse_goods_shelves wgs ON wgs.id = wgsr.warehouse_goods_shelves_id
+--         LEFT JOIN warehouse w ON w.id = wgs.warehouse_id
+--         LEFT JOIN document_classification dc ON doc.document_classification_id = dc.id
+        SELECT
+        wgsr.*,
+        w.warehouse_name,
+        wgs.name
+        FROM warehouse_goods_shelves_rowcol wgsr
+        LEFT JOIN warehouse_goods_shelves wgs ON wgs.id = wgsr.warehouse_goods_shelves_id
+        LEFT JOIN warehouse w ON w.id = wgs.warehouse_id
+        <where>
+            1=1
+            <if test="warehouseGoodsShelvesRowcol.row != null">
+                and wgsr.row = #{warehouseGoodsShelvesRowcol.row}
+            </if>
+            <if test="warehouseGoodsShelvesRowcol.col != null">
+                and wgsr.col = #{warehouseGoodsShelvesRowcol.col}
+            </if>
+            <if test="warehouseGoodsShelvesRowcol.warehouseGoodsShelvesId != null">
+                and wgsr.warehouse_goods_shelves_id = #{warehouseGoodsShelvesRowcol.warehouseGoodsShelvesId}
+            </if>
+            <if test="warehouseGoodsShelvesRowcol.id != null">
+                and wgsr.id = #{warehouseGoodsShelvesRowcol.id}
+            </if>
+        </where>
+    </select>
+
+</mapper>
diff --git a/src/main/resources/mapper/warehouse/WarehouseMapper.xml b/src/main/resources/mapper/warehouse/WarehouseMapper.xml
new file mode 100644
index 0000000..dd45695
--- /dev/null
+++ b/src/main/resources/mapper/warehouse/WarehouseMapper.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.warehouse.mapper.WarehouseMapper">
+
+
+    <select id="findList" resultType="com.ruoyi.warehouse.dto.WarehouseDto">
+        SELECT
+        w.*,
+        wgs.name,
+        doc.doc_name,
+        doc.doc_number,
+        dc.category
+        FROM warehouse_goods_shelves_rowcol wgsr
+        LEFT JOIN warehouse_goods_shelves wgs ON wgs.id = wgsr.warehouse_goods_shelves_id
+        LEFT JOIN warehouse w ON w.id = wgs.warehouse_id
+        LEFT JOIN documentation doc ON doc.warehouse_goods_shelves_rowcol_id = wgsr.id
+        LEFT JOIN document_classification dc ON doc.document_classification_id = dc.id
+        <where>
+            1=1
+            <if test="warehouse.warehouseName != null">
+                and w.warehouse_name like concat('%',#{warehouse.warehouseName},'%')
+            </if>
+            <if test="warehouse.id != null">
+                and w.id = #{warehouse.id}
+            </if>
+        </where>
+    </select>
+    <select id="listAll" resultType="com.ruoyi.warehouse.pojo.Warehouse">
+        select * from warehouse
+        <where>
+            1=1
+            <if test="warehouse.warehouseName != null">
+                and warehouse_name like concat('%',#{warehouse.warehouseName},'%')
+            </if>
+            <if test="warehouse.id != null">
+                and w.id = #{warehouse.id}
+            </if>
+        </where>
+    </select>
+</mapper>
diff --git a/src/main/resources/mybatis/mybatis-config.xml b/src/main/resources/mybatis/mybatis-config.xml
index 4b8c496..ee4d2a1 100644
--- a/src/main/resources/mybatis/mybatis-config.xml
+++ b/src/main/resources/mybatis/mybatis-config.xml
@@ -13,6 +13,7 @@
         <setting name="defaultExecutorType"      value="SIMPLE" />
 		<!-- 鎸囧畾 MyBatis 鎵�鐢ㄦ棩蹇楃殑鍏蜂綋瀹炵幇 -->
         <setting name="logImpl"                  value="SLF4J"  />
+<!--        <setting name="logImpl"                  value="org.apache.ibatis.logging.stdout.StdOutImpl"  />-->
         <!-- 浣跨敤椹煎嘲鍛藉悕娉曡浆鎹㈠瓧娈� -->
 		<!-- <setting name="mapUnderscoreToCamelCase" value="true"/> -->
 	</settings>

--
Gitblit v1.9.3