From 894e2c6d4d9a6a1d5b8906e83d82c6e190d28f3a Mon Sep 17 00:00:00 2001
From: chenrui <1187576398@qq.com>
Date: 星期四, 27 二月 2025 14:53:09 +0800
Subject: [PATCH] 服务和供应品采购代码迁移

---
 cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesExpendsMapper.java                |   16 
 cnas-require/src/main/java/com/ruoyi/require/excel/StoreExcel.java                                       |   37 +
 cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesExpends.java                        |   53 ++
 cnas-require/src/main/java/com/ruoyi/require/dto/ProcurementSuppliesExpendDto.java                       |   11 
 cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesExpendsServiceImpl.java     |   90 ++++
 cnas-require/src/main/java/com/ruoyi/require/service/impl/SuppliersDirectoryContentsServiceImpl.java     |   76 +++
 cnas-require/src/main/java/com/ruoyi/require/pojo/SuppliersDirectoryContents.java                        |   52 ++
 cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesStoreController.java          |   80 ++++
 cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesListController.java           |   10 
 cnas-process/src/main/java/com/ruoyi/process/controller/InspectionOrderController.java                   |    6 
 cnas-require/src/main/java/com/ruoyi/require/mapper/SuppliersDirectoryContentsMapper.java                |   16 
 cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesConsumablesMapper.java            |    9 
 cnas-require/src/main/java/com/ruoyi/require/service/SuppliersDirectoryContentsService.java              |   22 +
 cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesStoreService.java                |   21 +
 cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesContentsController.java       |   75 +++
 ruoyi-framework/src/main/java/com/ruoyi/framework/common/PrintChina.java                                 |   60 +++
 cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesStoreMapper.java                  |   27 +
 cnas-require/src/main/java/com/ruoyi/require/controller/SuppliersDirectoryContentsController.java        |   77 +++
 cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesConsumablesService.java          |    7 
 ruoyi-framework/src/main/java/com/ruoyi/framework/annotation/ValueTableShow.java                         |   15 
 cnas-require/src/main/java/com/ruoyi/require/dto/StoreDto.java                                           |   22 +
 cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesConsumablesServiceImpl.java |   14 
 cnas-require/src/main/resources/mapper/ProcurementSuppliesStoreMapper.xml                                |   84 ++++
 cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesStore.java                          |   52 ++
 cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesExpendsService.java              |   22 +
 cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesExpendsController.java        |   49 ++
 cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesConsumables.java                    |   50 ++
 cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesStoreServiceImpl.java       |  125 ++++++
 28 files changed, 1,169 insertions(+), 9 deletions(-)

diff --git a/cnas-process/src/main/java/com/ruoyi/process/controller/InspectionOrderController.java b/cnas-process/src/main/java/com/ruoyi/process/controller/InspectionOrderController.java
index 47bf3f2..06ada10 100644
--- a/cnas-process/src/main/java/com/ruoyi/process/controller/InspectionOrderController.java
+++ b/cnas-process/src/main/java/com/ruoyi/process/controller/InspectionOrderController.java
@@ -99,10 +99,8 @@
      * @return
      */
     @ApiOperation(value = "濮旀墭鍗曟煡璇㈡垚鍝佽鍗�")
-    @PostMapping("/getInsOrderOnInspection")
-    public Result<IPage<InsOrder>> getInsOrderOnInspection(@RequestBody Map<String, Object> data) throws Exception {
-        Page page = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("page")), Page.class);
-        InsOrder insOrder = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), InsOrder.class);
+    @GetMapping("/getInsOrderOnInspection")
+    public Result<IPage<InsOrder>> getInsOrderOnInspection(Page page ,InsOrder insOrder) throws Exception {
         return Result.success(inspectionOrderService.getInsOrderOnInspection(page, insOrder));
     }
 
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesContentsController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesContentsController.java
new file mode 100644
index 0000000..aff3aa5
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesContentsController.java
@@ -0,0 +1,75 @@
+package com.ruoyi.require.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.require.pojo.ProcurementSuppliesContents;
+import com.ruoyi.require.service.ProcurementSuppliesContentsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Api(tags = "鏈嶅姟鍜屼緵搴斿搧閲囪喘鍏徃鍒楄〃")
+@RestController
+@RequestMapping("/procurementSuppliesContents")
+@AllArgsConstructor
+public class ProcurementSuppliesContentsController {
+
+    private ProcurementSuppliesContentsService procurementSuppliesService;
+
+    @ApiOperation(value = "鏌ヨ鐩綍鍒楄〃")
+    @GetMapping("/directoryListing")
+    public Result directoryListing() {
+        return Result.success(procurementSuppliesService.directoryListing());
+    }
+
+    @ApiOperation(value = "鏍规嵁id鏌ヨ")
+    @GetMapping("/selectProcurementSuppliesContentById")
+    public Result selectProcurementSuppliesContentById(Integer id) {
+        return Result.success(procurementSuppliesService.getById(id));
+    }
+
+    @ApiOperation(value = "娣诲姞瀛愯妭鐐�")
+    @PostMapping("/addProcurementSuppliesContents")
+    public Result addProcurementSuppliesContents(@RequestBody ProcurementSuppliesContents procurementSupplies) {
+        procurementSupplies.setUpdateTime(LocalDateTime.now());
+        procurementSuppliesService.save(procurementSupplies);
+        return Result.success(procurementSupplies.getId());
+    }
+
+    @ApiOperation(value = "鏇存柊瀛愯妭鐐�")
+    @PostMapping("/updateProcurementSuppliesContents")
+    public Result updateProcurementSuppliesContents(@RequestBody ProcurementSuppliesContents procurementSupplies) {
+        return Result.success(procurementSuppliesService.updateById(procurementSupplies));
+    }
+
+    @ApiOperation(value = "鍒犻櫎瀛愯妭鐐�")
+    @DeleteMapping("/deleteProcurementSuppliesContentById")
+    public Result deleteProcurementSuppliesContentById(Integer id) {
+        List<ProcurementSuppliesContents> list = procurementSuppliesService.list(new LambdaQueryWrapper<ProcurementSuppliesContents>()
+                .eq(ProcurementSuppliesContents::getParentId, id));
+        if(list.size() > 0) {
+            throw new ErrorException("璇ヨ妭鐐瑰惈鏈夊瓙鑺傜偣,璇峰厛鍒犻櫎瀛愯妭鐐�");
+        }
+        procurementSuppliesService.removeById(id);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鏌ヨ鎵�鏈夎妭鐐�")
+    @GetMapping("/getNodeNames")
+    public Result getNodeNames() {
+        return Result.success(procurementSuppliesService.getNodeNames());
+    }
+
+    @ApiOperation(value = "鑾峰彇鎵�鏈変汉鍛�")
+    @GetMapping("/getUserList")
+    public Result getUserList() {
+        return Result.success(procurementSuppliesService.getUserList());
+    }
+
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesExpendsController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesExpendsController.java
new file mode 100644
index 0000000..d8dd387
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesExpendsController.java
@@ -0,0 +1,49 @@
+package com.ruoyi.require.controller;
+
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.require.dto.ProcurementSuppliesExpendDto;
+import com.ruoyi.require.service.ProcurementSuppliesExpendsService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 03:47:19
+ */
+@Api(tags = "鏈嶅姟鍜屼緵搴斿搧閲囪喘鑰楁潗娑堣��")
+@RestController
+@RequestMapping("/procurementSuppliesExpends")
+public class ProcurementSuppliesExpendsController {
+    @Autowired
+    private ProcurementSuppliesExpendsService procurementSuppliesExpendsService;
+
+    @ApiOperation(value = "鏌ヨ鎵�鏈夎褰�")
+    @GetMapping("/procurementSuppliesExpendlist")
+    public Result procurementSuppliesExpendlist(Long procurementSuppliesListId) {
+        return Result.success(procurementSuppliesExpendsService.selectAll(procurementSuppliesListId));
+    }
+
+    @ApiOperation(value = "鏂板娑堣�楄褰�")
+    @PostMapping("/addProcurementSuppliesExpends")
+    public Result addProcurementSuppliesExpends(@RequestBody ProcurementSuppliesExpendDto dto) throws ServiceException {
+        Integer added = procurementSuppliesExpendsService.addExpends(dto);
+
+        if ( added == 0) {
+            return Result.fail("褰撳墠搴撳瓨涓嶈冻");
+        }
+        return Result.success(added);
+    }
+
+    @ApiOperation(value = "鍒犻櫎娑堣�楄褰�")
+    @DeleteMapping("/deleteProcurementSuppliesExpends")
+    public Result deleteProcurementSuppliesExpends(Long expendId) throws ServiceException {
+        return Result.success(procurementSuppliesExpendsService.deleteExpends(expendId));
+    }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesListController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesListController.java
index 27b5729..8311a65 100644
--- a/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesListController.java
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesListController.java
@@ -79,14 +79,14 @@
     }
 
     @ApiOperation(value = "鍒犻櫎鑰楁潗")
-    @PostMapping("/deleteProcurementSuppliesList")
-    public Result deleteProcurementSuppliesList(@RequestBody ProcurementSuppliesListDto dto) {
-        return Result.success(listMapper.deleteById(dto.getId()));
+    @DeleteMapping("/deleteProcurementSuppliesList")
+    public Result deleteProcurementSuppliesList(Long id) {
+        return Result.success(listMapper.deleteById(id));
     }
 
     @ApiOperation(value = "瀵煎嚭鑰楁潗鍒楄〃")
-    @PostMapping("/exportProcurementSuppliesList/{parentId}")
-    public void exportProcurementSuppliesList( @PathVariable Integer parentId ,HttpServletResponse response) throws Exception {
+    @GetMapping("/exportProcurementSuppliesList")
+    public void exportProcurementSuppliesList(Integer parentId ,HttpServletResponse response) throws Exception {
         procurementSuppliesListService.exportProcurementSuppliesList(parentId,response);
 
     }
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesStoreController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesStoreController.java
new file mode 100644
index 0000000..08d86e4
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/ProcurementSuppliesStoreController.java
@@ -0,0 +1,80 @@
+package com.ruoyi.require.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.JackSonUtil;
+import com.ruoyi.require.dto.StoreDto;
+import com.ruoyi.require.pojo.ProcurementSuppliesConsumables;
+import com.ruoyi.require.pojo.ProcurementSuppliesStore;
+import com.ruoyi.require.service.ProcurementSuppliesConsumablesService;
+import com.ruoyi.require.service.ProcurementSuppliesStoreService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Api(tags = "鏈嶅姟鍜屼緵搴斿搧閲囪喘鑰楁潗鍏ュ簱")
+@RestController
+@RequestMapping("/procurementSuppliesStore")
+@AllArgsConstructor
+public class ProcurementSuppliesStoreController {
+
+    private ProcurementSuppliesStoreService storeService;
+
+    private ProcurementSuppliesConsumablesService consumablesService;
+
+
+    @ApiOperation(value = "鑰楁潗鍏ュ簱鍒嗛〉鏌ヨ")
+    @GetMapping("/storeList")
+    public Result storeList(Page page,StoreDto storeDto) throws Exception {
+        return Result.success(storeService.selectStoreList(page, storeDto));
+    }
+
+    @ApiOperation(value = "娣诲姞鑰楁潗鍏ュ簱鍒楄〃")
+    @PostMapping("/addStore")
+    public Result addStore(@RequestBody Map<String,Object> map) {
+        storeService.addStore(map);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鍒犻櫎鑰楁潗鍏ュ簱")
+    @DeleteMapping("/deleteStore")
+    public Result deleteStore(@RequestParam("id") Integer id,@RequestParam("consumablesId") Integer consumablesId) {
+        storeService.deleteStore(id,consumablesId);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鏇存柊鑰楁潗鍏ュ簱")
+        @PostMapping("/updateStore")
+    public Result updateStore(@RequestBody Map<String,Object> map) {
+        storeService.updateStore(map);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鏍规嵁id鏌ヨ鑰楁潗鍏ュ簱")
+    @GetMapping("/selectStoreById")
+    public Result selectStore(Integer id) {
+        HashMap<String, Object> map = new HashMap<>();
+        ProcurementSuppliesStore procurementSuppliesStore = storeService.getById(id);
+        List<ProcurementSuppliesConsumables> list = consumablesService.list(new LambdaQueryWrapper<ProcurementSuppliesConsumables>()
+                .eq(ProcurementSuppliesConsumables::getStoreId, id));
+        map.put("store", procurementSuppliesStore);
+        map.put("consumables", list);
+        return Result.success(map);
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @GetMapping("/exportExcel")
+    public void exportExcel(Integer parentId, HttpServletResponse response) throws IOException {
+        storeService.exportExcel(parentId, response);
+    }
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/SuppliersDirectoryContentsController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/SuppliersDirectoryContentsController.java
new file mode 100644
index 0000000..2b7aeb5
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/SuppliersDirectoryContentsController.java
@@ -0,0 +1,77 @@
+package com.ruoyi.require.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.require.pojo.SuppliersDirectoryContents;
+import com.ruoyi.require.service.SuppliersDirectoryContentsService;
+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.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟鍜屼緵搴斿搧閲囪喘鐩綍 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-12-17 06:14:51
+ */
+@Api(tags = "渚涘簲鍟嗙鐞嗘爲")
+@RestController
+@RequestMapping("/suppliersDirectoryContents")
+public class SuppliersDirectoryContentsController {
+
+    @Autowired
+    private SuppliersDirectoryContentsService suppliersDirectoryContentsService;
+
+    @ApiOperation(value = "鏌ヨ鐩綍鍒楄〃")
+    @GetMapping("/suppliersDirectoryContentsListing")
+    public Result suppliersDirectoryContentsListing() {
+        return Result.success(suppliersDirectoryContentsService.directoryListing());
+
+    }
+
+    @ApiOperation(value = "鏍规嵁id鏌ヨ")
+    @GetMapping("/selectSuppliersDirectoryContentsById")
+    public Result selectSuppliersDirectoryContentsById(Integer id) {
+        return Result.success(suppliersDirectoryContentsService.getById(id));
+    }
+
+    @ApiOperation(value = "娣诲姞瀛愯妭鐐�")
+    @PostMapping("/addSuppliersDirectoryContents")
+    public Result addSuppliersDirectoryContents(@RequestBody SuppliersDirectoryContents suppliersDirectoryContents ) {
+        suppliersDirectoryContents.setUpdateTime(LocalDateTime.now());
+        suppliersDirectoryContentsService.save(suppliersDirectoryContents);
+        return Result.success(suppliersDirectoryContents.getId());
+    }
+
+    @ApiOperation(value = "鏇存柊瀛愯妭鐐�")
+    @PostMapping("/updateSuppliersDirectoryContents")
+    public Result updateSuppliersDirectoryContents(@RequestBody SuppliersDirectoryContents suppliersDirectoryContents) {
+        return Result.success(suppliersDirectoryContentsService.updateById(suppliersDirectoryContents));
+    }
+
+    @ApiOperation(value = "鍒犻櫎瀛愯妭鐐�")
+    @DeleteMapping("/deleteSuppliersDirectoryContentsById")
+    public Result deleteSuppliersDirectoryContentsById(Integer id) {
+        List<SuppliersDirectoryContents> list = suppliersDirectoryContentsService.list(new LambdaQueryWrapper<SuppliersDirectoryContents>()
+                .eq(SuppliersDirectoryContents::getParentId, id));
+        if(list.size() > 0) {
+            throw new ErrorException("璇ヨ妭鐐瑰惈鏈夊瓙鑺傜偣,璇峰厛鍒犻櫎瀛愯妭鐐�");
+        }
+        suppliersDirectoryContentsService.removeById(id);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鏌ヨ鎵�鏈夎妭鐐�")
+    @GetMapping("/getSuppliersDirectoryContentsNodeNames")
+    public Result getSuppliersDirectoryContentsNodeNames() {
+        return Result.success(suppliersDirectoryContentsService.getSuppliersDirectoryContentsNodeNames());
+    }
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/dto/ProcurementSuppliesExpendDto.java b/cnas-require/src/main/java/com/ruoyi/require/dto/ProcurementSuppliesExpendDto.java
new file mode 100644
index 0000000..6022164
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/dto/ProcurementSuppliesExpendDto.java
@@ -0,0 +1,11 @@
+package com.ruoyi.require.dto;
+
+import com.ruoyi.require.pojo.ProcurementSuppliesExpends;
+import lombok.Data;
+
+@Data
+public class ProcurementSuppliesExpendDto extends ProcurementSuppliesExpends {
+    private String listName; // 椤圭洰鑰楁潗鍚嶇О
+    private String enterUserName; // 褰曞叆浜哄悕绉�
+    private String updateUserName; // 鏇存柊浜哄悕绉�
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/dto/StoreDto.java b/cnas-require/src/main/java/com/ruoyi/require/dto/StoreDto.java
new file mode 100644
index 0000000..818c205
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/dto/StoreDto.java
@@ -0,0 +1,22 @@
+package com.ruoyi.require.dto;
+
+import com.ruoyi.require.pojo.ProcurementSuppliesStore;
+import lombok.Data;
+
+@Data
+public class StoreDto extends ProcurementSuppliesStore {
+
+
+    private String consumablesName;
+
+    private Integer storeNumber;
+
+    private Double totalPrice;
+
+    private String registrantName;
+
+    private String storageUserName;
+
+    private Integer consumablesId;
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/excel/StoreExcel.java b/cnas-require/src/main/java/com/ruoyi/require/excel/StoreExcel.java
new file mode 100644
index 0000000..d0d7b88
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/excel/StoreExcel.java
@@ -0,0 +1,37 @@
+package com.ruoyi.require.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+@Data
+public class StoreExcel {
+    @ExcelProperty("鍏ュ簱鍗曞彿")
+    private String oddNumbers;
+
+    @ExcelProperty("鑰楁潗鍚嶇О")
+    private String consumablesName;
+
+    @ExcelProperty("鍏ュ簱鏁伴噺")
+    private Integer storeNumber;
+
+    @ExcelProperty("鍏ュ簱鎬讳环")
+    private Double totalPrice;
+
+    @ExcelProperty("鍏ュ簱浜�")
+    private String storageUserName;
+
+    @ExcelProperty("鍏ュ簱鏃ユ湡")
+    private LocalDate storageTime;
+
+    @ExcelProperty("璇存槑")
+    private String remark;
+
+    @ExcelProperty("鐧昏浜�")
+    private String registrantName;
+
+    @ExcelProperty("鐧昏鏃ユ湡")
+    private LocalDate registrantTime;
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesConsumablesMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesConsumablesMapper.java
new file mode 100644
index 0000000..8d9eddf
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesConsumablesMapper.java
@@ -0,0 +1,9 @@
+package com.ruoyi.require.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.require.pojo.ProcurementSuppliesConsumables;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ProcurementSuppliesConsumablesMapper extends BaseMapper<ProcurementSuppliesConsumables> {
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesExpendsMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesExpendsMapper.java
new file mode 100644
index 0000000..08df116
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesExpendsMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.require.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.require.pojo.ProcurementSuppliesExpends;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 03:47:19
+ */
+public interface ProcurementSuppliesExpendsMapper extends BaseMapper<ProcurementSuppliesExpends> {
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesStoreMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesStoreMapper.java
new file mode 100644
index 0000000..93b16ec
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/ProcurementSuppliesStoreMapper.java
@@ -0,0 +1,27 @@
+package com.ruoyi.require.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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.require.dto.StoreDto;
+import com.ruoyi.require.excel.StoreExcel;
+import com.ruoyi.require.pojo.ProcurementSuppliesStore;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface ProcurementSuppliesStoreMapper extends BaseMapper<ProcurementSuppliesStore> {
+
+    IPage<StoreDto> selectStoreList(Page page, @Param("ew") QueryWrapper<StoreDto> ew);
+
+    /**
+     *       鍜屾爲鍏宠仈鐨勬潯浠讹紝锛岋紝鐩墠娌℃湁鍏宠仈鍏崇郴    WHERE s.contents_id = #{contentsId}
+     * @param contentsId
+     * @return
+     */
+    List<StoreExcel> exportExcel(Integer contentsId);
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/SuppliersDirectoryContentsMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/SuppliersDirectoryContentsMapper.java
new file mode 100644
index 0000000..b2e8b89
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/SuppliersDirectoryContentsMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.require.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.require.pojo.SuppliersDirectoryContents;
+
+/**
+ * <p>
+ * 鏈嶅姟鍜屼緵搴斿搧閲囪喘鐩綍 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-12-17 06:14:51
+ */
+public interface SuppliersDirectoryContentsMapper extends BaseMapper<SuppliersDirectoryContents> {
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesConsumables.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesConsumables.java
new file mode 100644
index 0000000..3bd0a29
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesConsumables.java
@@ -0,0 +1,50 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@TableName("procurement_supplies_consumables")
+@ApiModel("鑰楁潗閲囪喘鏄庣粏琛�")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ProcurementSuppliesConsumables {
+
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鑰楁潗涓昏〃id")
+    private Integer storeId;
+
+    @ApiModelProperty("鑰楁潗鍚嶇О")
+    private String consumablesName;
+
+    @ApiModelProperty("鍗曚环")
+    private Double unitPrice;
+
+    @ApiModelProperty("鍏ュ簱鏁伴噺")
+    private Integer storeNumber;
+
+    @ApiModelProperty("鎬讳环")
+    private Double totalPrice;
+
+    @ApiModelProperty("璐у彿")
+    private String itemNumber;
+
+    @ApiModelProperty("绫诲埆")
+    private String type;
+
+    @ApiModelProperty("瑙勬牸")
+    private String specifications;
+
+    @ApiModelProperty("鍙傝�冧緵搴斿晢")
+    private String supplier;
+
+    @ApiModelProperty("璁¢噺鍗曚綅")
+    private String unit;
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesExpends.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesExpends.java
new file mode 100644
index 0000000..731a523
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesExpends.java
@@ -0,0 +1,53 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 03:47:19
+ */
+@Getter
+@Setter
+@TableName("procurement_supplies_expends")
+@ApiModel(value = "ProcurementSuppliesExpends瀵硅薄", description = "")
+public class ProcurementSuppliesExpends implements Serializable {
+
+
+    @ApiModelProperty("涓昏〃Id")
+    @TableId(value = "expend_id", type = IdType.AUTO)
+    private Long expendId;
+
+    @ApiModelProperty("鑰楁潗Id")
+    private Long listId;
+
+    @ApiModelProperty("娑堣�楁暟閲�")
+    private Integer amount;
+
+    @ApiModelProperty("褰曞叆浜篿d")
+    private Integer enterUserId;
+
+    @ApiModelProperty("鏇存柊浜篿d")
+    private Integer updateUserId;
+
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesStore.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesStore.java
new file mode 100644
index 0000000..076cf31
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/ProcurementSuppliesStore.java
@@ -0,0 +1,52 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+
+@Data
+@TableName("procurement_supplies_store")
+@ApiModel("鑰楁潗鍏ュ簱琛�")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ProcurementSuppliesStore implements Serializable {
+
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鐩綍id")
+    private Integer contentsId;
+
+    @ApiModelProperty("鍏ュ簱鍗曞彿")
+    private String oddNumbers;
+
+    @ApiModelProperty("鍏ュ簱搴撳瓨")
+    private String inventory;
+
+    @ApiModelProperty("鍏ュ簱鎬婚噾棰�")
+    private Double totalAmount;
+
+    @ApiModelProperty("鍏ュ簱浜�")
+    private Integer storageUser;
+
+    @ApiModelProperty("鍏ュ簱鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private LocalDate storageTime;
+
+    @ApiModelProperty("鍏ュ簱璇存槑")
+    private String remark;
+
+    @ApiModelProperty("鐧昏浜�")
+    private Integer registrant;
+
+    @ApiModelProperty("鐧昏鏃堕棿")
+    private LocalDate registrantTime;
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/SuppliersDirectoryContents.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/SuppliersDirectoryContents.java
new file mode 100644
index 0000000..8d43ecc
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/SuppliersDirectoryContents.java
@@ -0,0 +1,52 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟鍜屼緵搴斿搧閲囪喘鐩綍
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-12-17 06:14:51
+ */
+@Getter
+@Setter
+@TableName("suppliers_directory_contents")
+@ApiModel(value = "SuppliersDirectoryContents瀵硅薄", description = "鏈嶅姟鍜屼緵搴斿搧閲囪喘鐩綍")
+public class SuppliersDirectoryContents implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鑺傜偣鍚嶇О")
+    private String nodeName;
+
+    @ApiModelProperty("浠e彿")
+    private String code;
+
+    @ApiModelProperty("鏇存柊浜�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鐖惰妭鐐�")
+    private Integer parentId;
+
+
+    @TableField(exist = false)
+    private List<SuppliersDirectoryContents> children;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesConsumablesService.java b/cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesConsumablesService.java
new file mode 100644
index 0000000..ade7f0c
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesConsumablesService.java
@@ -0,0 +1,7 @@
+package com.ruoyi.require.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.require.pojo.ProcurementSuppliesConsumables;
+
+public interface ProcurementSuppliesConsumablesService extends IService<ProcurementSuppliesConsumables> {
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesExpendsService.java b/cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesExpendsService.java
new file mode 100644
index 0000000..f5ef01a
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesExpendsService.java
@@ -0,0 +1,22 @@
+package com.ruoyi.require.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.require.dto.ProcurementSuppliesExpendDto;
+import com.ruoyi.require.pojo.ProcurementSuppliesExpends;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 03:47:19
+ */
+public interface ProcurementSuppliesExpendsService extends IService<ProcurementSuppliesExpends> {
+    public List<ProcurementSuppliesExpendDto> selectAll(Long procurementSuppliesListId);
+    public Integer addExpends(ProcurementSuppliesExpendDto expendDto) throws ServiceException;
+    public Integer deleteExpends(Long id);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesStoreService.java b/cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesStoreService.java
new file mode 100644
index 0000000..931890c
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/ProcurementSuppliesStoreService.java
@@ -0,0 +1,21 @@
+package com.ruoyi.require.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.require.dto.StoreDto;
+import com.ruoyi.require.pojo.ProcurementSuppliesStore;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Map;
+
+public interface ProcurementSuppliesStoreService extends IService<ProcurementSuppliesStore> {
+    void addStore(Map<String,Object> map);
+    void updateStore(Map<String,Object> map);
+
+    void deleteStore(Integer id, Integer consumablesId);
+    IPage<StoreDto> selectStoreList(Page page, StoreDto storeDto);
+
+    void exportExcel(Integer contentsId, HttpServletResponse response) throws IOException;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/SuppliersDirectoryContentsService.java b/cnas-require/src/main/java/com/ruoyi/require/service/SuppliersDirectoryContentsService.java
new file mode 100644
index 0000000..a6db661
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/SuppliersDirectoryContentsService.java
@@ -0,0 +1,22 @@
+package com.ruoyi.require.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.require.pojo.SuppliersDirectoryContents;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏈嶅姟鍜屼緵搴斿搧閲囪喘鐩綍 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-12-17 06:14:51
+ */
+public interface SuppliersDirectoryContentsService extends IService<SuppliersDirectoryContents> {
+
+    ArrayList<SuppliersDirectoryContents> directoryListing();
+    List<Map<String, Object>> getSuppliersDirectoryContentsNodeNames();
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesConsumablesServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesConsumablesServiceImpl.java
new file mode 100644
index 0000000..deeb125
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesConsumablesServiceImpl.java
@@ -0,0 +1,14 @@
+package com.ruoyi.require.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.require.mapper.ProcurementSuppliesConsumablesMapper;
+import com.ruoyi.require.pojo.ProcurementSuppliesConsumables;
+import com.ruoyi.require.service.ProcurementSuppliesConsumablesService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+@Service
+@AllArgsConstructor
+public class ProcurementSuppliesConsumablesServiceImpl extends ServiceImpl<ProcurementSuppliesConsumablesMapper, ProcurementSuppliesConsumables>
+        implements ProcurementSuppliesConsumablesService {
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesExpendsServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesExpendsServiceImpl.java
new file mode 100644
index 0000000..0d1c184
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesExpendsServiceImpl.java
@@ -0,0 +1,90 @@
+package com.ruoyi.require.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.require.dto.ProcurementSuppliesExpendDto;
+import com.ruoyi.require.mapper.ProcurementSuppliesExpendsMapper;
+import com.ruoyi.require.mapper.ProcurementSuppliesListMapper;
+import com.ruoyi.require.pojo.ProcurementSuppliesExpends;
+import com.ruoyi.require.pojo.ProcurementSuppliesList;
+import com.ruoyi.require.service.ProcurementSuppliesExpendsService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.BeanUtils;
+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.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-15 03:47:19
+ */
+@Service
+public class ProcurementSuppliesExpendsServiceImpl extends ServiceImpl<ProcurementSuppliesExpendsMapper, ProcurementSuppliesExpends> implements ProcurementSuppliesExpendsService {
+    @Autowired
+    private ProcurementSuppliesExpendsMapper expendsMapper;
+
+    @Autowired
+    private UserMapper userMapper;
+
+    @Autowired
+    private ProcurementSuppliesListMapper listMapper;
+
+    @Override
+    public List<ProcurementSuppliesExpendDto> selectAll(Long procurementSuppliesListId) {
+        List<ProcurementSuppliesExpendDto> res = new ArrayList<>();
+        List<ProcurementSuppliesExpends> list =  expendsMapper.selectList(new QueryWrapper<ProcurementSuppliesExpends>().lambda().eq(ProcurementSuppliesExpends::getListId, procurementSuppliesListId));
+        for (ProcurementSuppliesExpends procurementSuppliesExpend : list) {
+            ProcurementSuppliesExpendDto dto = new ProcurementSuppliesExpendDto();
+            BeanUtils.copyProperties(procurementSuppliesExpend, dto);
+
+            User enterUser = userMapper.selectById(procurementSuppliesExpend.getEnterUserId());
+            User updateUser = userMapper.selectById(procurementSuppliesExpend.getUpdateUserId());
+            dto.setEnterUserName(enterUser.getName());
+            dto.setUpdateUserName(updateUser.getName());
+            res.add(dto);
+        }
+
+        return res;
+    }
+
+    @Override
+    @Transactional
+    public Integer addExpends(ProcurementSuppliesExpendDto expendDto) throws ServiceException {
+        ProcurementSuppliesList list = listMapper.selectProcurementSuppliesListForUpdate(expendDto.getListId());
+
+        ProcurementSuppliesExpends expends = new ProcurementSuppliesExpends();
+        BeanUtils.copyProperties(expendDto, expends);
+        expends.setEnterUserId(SecurityUtils.getUserId().intValue());
+        expends.setUpdateUserId(SecurityUtils.getUserId().intValue());
+        if (list.getCurrentAmount() < expendDto.getAmount()) {
+            return 0;
+        }
+
+        list.setCurrentAmount(list.getCurrentAmount() - expendDto.getAmount());
+
+        listMapper.updateById(list);
+        return expendsMapper.insert(expends);
+    }
+
+    @Override
+    @Transactional
+    public Integer deleteExpends(Long id) {
+        ProcurementSuppliesExpends expend = expendsMapper.selectById(id);
+        ProcurementSuppliesList list = listMapper.selectProcurementSuppliesListForUpdate(expend.getListId());
+        list.setCurrentAmount(list.getCurrentAmount() + expend.getAmount());
+        list.setUpdateUser(SecurityUtils.getUserId().intValue());
+        listMapper.updateById(list);
+        return expendsMapper.deleteById(id);
+    }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesStoreServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesStoreServiceImpl.java
new file mode 100644
index 0000000..9e7a548
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/ProcurementSuppliesStoreServiceImpl.java
@@ -0,0 +1,125 @@
+package com.ruoyi.require.service.impl;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.framework.common.PrintChina;
+import com.ruoyi.require.dto.StoreDto;
+import com.ruoyi.require.excel.StoreExcel;
+import com.ruoyi.require.mapper.ProcurementSuppliesConsumablesMapper;
+import com.ruoyi.require.mapper.ProcurementSuppliesStoreMapper;
+import com.ruoyi.require.pojo.ProcurementSuppliesConsumables;
+import com.ruoyi.require.pojo.ProcurementSuppliesStore;
+import com.ruoyi.require.service.ProcurementSuppliesStoreService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+@Service
+@AllArgsConstructor
+public class ProcurementSuppliesStoreServiceImpl extends ServiceImpl<ProcurementSuppliesStoreMapper, ProcurementSuppliesStore>
+        implements ProcurementSuppliesStoreService {
+
+    private ProcurementSuppliesConsumablesMapper consumablesMapper;
+
+
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void addStore(Map<String,Object> map) {
+        ProcurementSuppliesStore procurementSuppliesStore = JSONObject.parseObject(JSONObject.toJSONString(map.get("store")), ProcurementSuppliesStore.class);
+        procurementSuppliesStore.setRegistrant(SecurityUtils.getUserId().intValue());
+        procurementSuppliesStore.setRegistrantTime(LocalDate.now());
+        baseMapper.insert(procurementSuppliesStore);
+        List<ProcurementSuppliesConsumables> list = JSON.parseArray(JSONObject.toJSONString(map.get("consumables")), ProcurementSuppliesConsumables.class);
+        // 鐢熸垚璐у彿
+        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
+        if(!Objects.isNull(list) && list.size() > 0) {
+            for (int i = 0; i < list.size(); i++) {
+                list.get(i).setStoreId(procurementSuppliesStore.getId());
+                String itemNumber ="HCRK" + LocalDate.now().format(dateTimeFormatter) +  String.format("%03d", i);
+                list.get(i).setItemNumber(itemNumber);
+                consumablesMapper.insert(list.get(i));
+            }
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateStore(Map<String,Object> map) {
+        ProcurementSuppliesStore procurementSuppliesStore = JSONObject.parseObject(JSONObject.toJSONString(map.get("store")), ProcurementSuppliesStore.class);
+        baseMapper.updateById(procurementSuppliesStore);
+        List<ProcurementSuppliesConsumables> list = JSON.parseArray(JSONObject.toJSONString(map.get("consumables")), ProcurementSuppliesConsumables.class);
+        consumablesMapper.delete(new LambdaQueryWrapper<ProcurementSuppliesConsumables>()
+                .eq(ProcurementSuppliesConsumables::getStoreId, procurementSuppliesStore.getId()));
+        if(!Objects.isNull(list) && list.size() > 0) {
+            for (int i = 0; i < list.size(); i++) {
+                list.get(i).setId(null);
+                list.get(i).setStoreId(procurementSuppliesStore.getId());
+                consumablesMapper.insert(list.get(i));
+            }
+        }
+    }
+
+    @Override
+    public void deleteStore(Integer id, Integer consumablesId) {
+        consumablesMapper.deleteById(consumablesId);
+        List<ProcurementSuppliesConsumables> consumables = consumablesMapper.selectList(new LambdaQueryWrapper<ProcurementSuppliesConsumables>()
+                .eq(ProcurementSuppliesConsumables::getStoreId, id));
+        // 鍒ゆ柇鏄惁杩樻湁鑰楁潗 娌℃湁灏卞皢涓昏〃Store鍒犻櫎
+        if(CollectionUtils.isEmpty(consumables)) {
+            baseMapper.deleteById(id);
+        }
+    }
+
+    @Override
+    public  IPage<StoreDto> selectStoreList(Page page, StoreDto storeDto) {
+        IPage<StoreDto> iPage = baseMapper.selectStoreList(page, QueryWrappers.queryWrappers(storeDto));
+        return iPage;
+    }
+
+    /**
+     * 瀵煎嚭excel
+     * @param contentsId
+     * @param response
+     */
+    @Override
+    public void exportExcel(Integer contentsId, HttpServletResponse response) throws IOException {
+        List<StoreExcel> storeExcels = baseMapper.exportExcel(contentsId);
+        response.setContentType("application/vnd.ms-excel");
+        response.setCharacterEncoding("UTF-8");
+        // 杩欓噷URLEncoder.encode鍙互闃叉涓枃涔辩爜 褰撶劧鍜宔asyexcel娌℃湁鍏崇郴
+        String fileName = null;
+        try {
+            fileName = URLEncoder.encode("鑰楁潗鍏ュ簱", "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e);
+        }
+        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+        ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
+        WriteSheet writeSheet = EasyExcel.writerSheet(0, "鑰楁潗鍏ュ簱").head(StoreExcel.class).build();
+        excelWriter.write(storeExcels, writeSheet);
+        excelWriter.finish();
+    }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/SuppliersDirectoryContentsServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/SuppliersDirectoryContentsServiceImpl.java
new file mode 100644
index 0000000..ce0bde8
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/SuppliersDirectoryContentsServiceImpl.java
@@ -0,0 +1,76 @@
+package com.ruoyi.require.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.require.mapper.SuppliersDirectoryContentsMapper;
+import com.ruoyi.require.pojo.SuppliersDirectoryContents;
+import com.ruoyi.require.service.SuppliersDirectoryContentsService;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 鏈嶅姟鍜屼緵搴斿搧閲囪喘鐩綍 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-12-17 06:14:51
+ */
+@Service
+public class SuppliersDirectoryContentsServiceImpl extends ServiceImpl<SuppliersDirectoryContentsMapper, SuppliersDirectoryContents> implements SuppliersDirectoryContentsService {
+
+    @Override
+    public ArrayList<SuppliersDirectoryContents> directoryListing() {
+        ArrayList<SuppliersDirectoryContents> list = new ArrayList<>();
+        // 鏌ュ嚭涓�绾х洰褰�
+        List<SuppliersDirectoryContents> firstLevel = baseMapper.selectList(new LambdaQueryWrapper<SuppliersDirectoryContents>()
+                .isNull(SuppliersDirectoryContents::getParentId));
+
+        // 鏌ュ嚭鍚湁鐖惰妭鐐圭殑 骞堕�氳繃鐖惰妭鐐瑰垎缁�
+        List<SuppliersDirectoryContents> seconds = baseMapper.selectList(new LambdaQueryWrapper<SuppliersDirectoryContents>()
+                .isNotNull(SuppliersDirectoryContents::getParentId));
+        if(firstLevel.size() > 0){
+            Map<Integer, List<SuppliersDirectoryContents>> collect = seconds.stream()
+                    .collect(Collectors.groupingBy(SuppliersDirectoryContents::getParentId));
+            // 鏍规嵁鍒嗙粍鐨刱ey 璧嬪�煎搴旂殑children
+            for (int i = 0; i < firstLevel.size(); i++) {
+                recursion(firstLevel.get(i),collect);
+                list.add(firstLevel.get(i));
+            }
+        }
+        return list;
+    }
+
+    @Override
+    public List<Map<String, Object>> getSuppliersDirectoryContentsNodeNames() {
+        List<SuppliersDirectoryContents> procurementSuppliesContents = baseMapper.selectList(null);
+        List<Map<String, Object>> collect = new ArrayList<>();
+        if(procurementSuppliesContents.size() > 0) {
+            collect = procurementSuppliesContents.stream().map(item -> {
+                HashMap<String, Object> map = new HashMap<>();
+                map.put("id", item.getId());
+                map.put("nodeName", item.getNodeName());
+                return map;
+            }).collect(Collectors.toList());
+        }
+        return collect;
+    }
+
+
+    public SuppliersDirectoryContents recursion(SuppliersDirectoryContents firstLevel, Map<Integer, List<SuppliersDirectoryContents>> collect) {
+        // 灏嗙埗鑺傜偣鐨刢hildren璧嬪��
+        if(collect.containsKey(firstLevel.getId())) {
+            List<SuppliersDirectoryContents> procurementSupplies = collect.get(firstLevel.getId());
+            firstLevel.setChildren(procurementSupplies);
+            for (int i = 0; i < procurementSupplies.size(); i++) {
+                recursion(procurementSupplies.get(i),collect);
+            }
+        }
+        return firstLevel;
+    }
+}
diff --git a/cnas-require/src/main/resources/mapper/ProcurementSuppliesStoreMapper.xml b/cnas-require/src/main/resources/mapper/ProcurementSuppliesStoreMapper.xml
new file mode 100644
index 0000000..20f4dd9
--- /dev/null
+++ b/cnas-require/src/main/resources/mapper/ProcurementSuppliesStoreMapper.xml
@@ -0,0 +1,84 @@
+<?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.require.mapper.ProcurementSuppliesStoreMapper">
+    <resultMap id="map" type="com.ruoyi.require.dto.StoreDto">
+        <id column="id" property="id"/>
+        <result column="consumables_id" property="consumablesId"/>
+        <result column="odd_numbers" property="oddNumbers"/>
+        <result column="consumables_name" property="consumablesName"/>
+        <result column="store_number" property="storeNumber"/>
+        <result column="total_price" property="totalPrice"/>
+        <result column="storage_user" property="storageUser"/>
+        <result column="storage_time" property="storageTime"/>
+        <result column="remark" property="remark"/>
+        <result column="registrant" property="registrant"/>
+        <result column="registrant_time" property="registrantTime"/>
+        <result column="storageUserName" property="storageUserName"/>
+        <result column="registrantName" property="registrantName"/>
+    </resultMap>
+
+    <resultMap id="storeExcelMap" type="com.ruoyi.require.excel.StoreExcel">
+        <result column="odd_numbers" property="oddNumbers"/>
+        <result column="consumables_name" property="consumablesName"/>
+        <result column="store_number" property="storeNumber"/>
+        <result column="total_price" property="totalPrice"/>
+        <result column="storage_time" property="storageTime"/>
+        <result column="remark" property="remark"/>
+        <result column="registrant_time" property="registrantTime"/>
+        <result column="storageUserName" property="storageUserName"/>
+        <result column="registrantName" property="registrantName"/>
+    </resultMap>
+
+
+    <select id="selectStoreList" resultMap="map">
+select * from (
+        SELECT
+        s.id,
+        c.id AS consumables_id,
+        s.contents_id,
+        s.odd_numbers,
+        c.consumables_name,
+        c.store_number,
+        c.total_price,
+        s.storage_user,
+        s.storage_time,
+        s.remark,
+        s.registrant,
+        s.registrant_time,
+        u.name AS storageUserName,
+        u1.name AS registrantName
+        FROM
+        `procurement_supplies_store` s
+        LEFT JOIN procurement_supplies_consumables c ON s.id = c.store_id
+        LEFT JOIN user u ON u.id = s.storage_user
+        LEFT JOIN user u1 ON u1.id = s.registrant
+        )a
+        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+            ${ew.customSqlSegment}
+        </if>
+    </select>
+
+    <select id="exportExcel" resultMap="storeExcelMap">
+        SELECT * FROM (
+                          SELECT
+                              s.odd_numbers,
+                              c.consumables_name,
+                              c.store_number,
+                              c.total_price,
+                              s.storage_time,
+                              s.remark,
+                              s.registrant_time,
+                              u.name AS storageUserName,
+                              u1.name AS registrantName
+                          FROM
+                              `procurement_supplies_store` s
+                                  LEFT JOIN procurement_supplies_consumables c ON s.id = c.store_id
+                                  LEFT JOIN user u ON u.id = s.storage_user
+                                  LEFT JOIN user u1 ON u1.id = s.registrant
+
+                      ) a
+    </select>
+
+
+
+</mapper>
\ No newline at end of file
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/annotation/ValueTableShow.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/annotation/ValueTableShow.java
new file mode 100644
index 0000000..cd1a804
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/annotation/ValueTableShow.java
@@ -0,0 +1,15 @@
+package com.ruoyi.framework.annotation;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ValueTableShow {
+
+    int value() default 1;
+
+    String name() default "";
+
+    int width() default 0;
+
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/common/PrintChina.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/common/PrintChina.java
new file mode 100644
index 0000000..d02315e
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/common/PrintChina.java
@@ -0,0 +1,60 @@
+package com.ruoyi.framework.common;
+
+import com.ruoyi.framework.annotation.ValueTableShow;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.lang.reflect.Field;
+import java.util.*;
+
+/*鏉庢灄
+* 閫氳繃娉ㄨВ蹇�熺敓鎴恡able琛ㄥご*/
+
+public class PrintChina {
+
+    public static <T> List<Map<String, Object>> printChina(Class<T> tClass) {
+        //灏嗗疄浣撶被鐨勫睘鎬у拰娉ㄩ噴杞崲鎴愬弬鏁�
+        List<Field> fieldList = new ArrayList<>();
+        while (tClass != null){
+            fieldList.addAll(new ArrayList<>(Arrays.asList(tClass.getDeclaredFields())));
+            tClass = (Class<T>) tClass.getSuperclass();
+        }
+        Field[] fields = new Field[fieldList.size()];
+        fieldList.toArray(fields);
+        ArrayList<Map<String, Object>> list = new ArrayList<>();
+        for (Field field : fields) {
+            Map<String, Object> soundVo = new HashMap<>();
+            boolean bool = field.isAnnotationPresent(ApiModelProperty.class);
+            boolean bool2 = field.isAnnotationPresent(ValueTableShow.class);
+            if (bool2) {
+                int order = field.getAnnotation(ValueTableShow.class).value();
+                String value = field.getAnnotation(ValueTableShow.class).name();
+                int width = field.getAnnotation(ValueTableShow.class).width();
+                if (bool){
+                    value = value.isEmpty() ? field.getAnnotation(ApiModelProperty.class).value() : value;
+                }
+                soundVo.put("label", field.getName());
+                soundVo.put("value", value);
+                if(width>0){
+                    soundVo.put("width", width);
+                }
+                soundVo.put("order", order + "");
+                if(list.isEmpty()){
+                    list.add(soundVo);
+                }else{
+                    boolean isAdd = false;
+                    for (int i = 0; i < list.size(); i++) {
+                        Map<String, Object> map = list.get(i);
+                        if(order < Integer.parseInt(map.get("order").toString())){
+                            list.add(i, soundVo);
+                            isAdd = true;
+                            break;
+                        }
+                    }
+                    if (!isAdd) list.add(soundVo);
+                }
+            }
+        }
+        return list;
+    }
+
+}

--
Gitblit v1.9.3