From 307b081b92632c806b1975ea769d620722ba5369 Mon Sep 17 00:00:00 2001
From: renkang <8417338+k94314517@user.noreply.gitee.com>
Date: 星期一, 06 一月 2025 11:41:17 +0800
Subject: [PATCH] 客户资料 巡检任务业务

---
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProblemServiceImpl.java           |  172 +++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwMaterialMapper.java                        |   12 
 server/db/business.yw_problem.permissions.sql                                                                    |    6 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwOutinboundController.java                     |   92 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwWarehouseMapper.java                       |   12 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWarehouse.java                       |   79 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktakingRecord.java               |   92 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProblemController.java                        |   92 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwProblemMapper.java                         |   12 
 server/db/business.yw_material.permissions.sql                                                                   |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwStocktakingService.java                |   97 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStocktakingRecordController.java              |   92 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwWarehouseService.java                  |   97 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwOutinboundMapper.java                      |   12 
 server/db/business.yw_stock.permissions.sql                                                                      |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingServiceImpl.java       |  194 +++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwStocktakingRecordMapper.java               |   12 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwStocktakingRecordService.java          |   97 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStocktakingController.java                    |   92 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwMaterial.java                        |  108 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwProblem.java                         |  109 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingRecordServiceImpl.java |  158 ++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStock.java                           |   67 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwMaterialController.java                       |   92 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktaking.java                     |  138 ++
 server/db/business.yw_stocktaking.permissions.sql                                                                |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwMaterialService.java                   |   97 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwMaterialServiceImpl.java          |  170 +++
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwWarehouseController.java                      |   92 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwProblemService.java                    |   97 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundServiceImpl.java        |  155 ++
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinbound.java                      |   88 +
 server/db/business.yw_warehouse.permissions.sql                                                                  |    6 
 server/db/business.yw_stocktaking_record.permissions.sql                                                         |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwStockMapper.java                           |   12 
 server/db/business.yw_outinbound.permissions.sql                                                                 |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwStocktakingMapper.java                     |   12 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwOutinboundService.java                 |   97 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwStockService.java                      |   97 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStockServiceImpl.java             |  139 ++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWarehouseServiceImpl.java         |  149 ++
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStockController.java                          |   92 +
 42 files changed, 3,267 insertions(+), 0 deletions(-)

diff --git a/server/db/business.yw_material.permissions.sql b/server/db/business.yw_material.permissions.sql
new file mode 100644
index 0000000..df5ce32
--- /dev/null
+++ b/server/db/business.yw_material.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywmaterial:create', '鏂板缓杩愮淮璧勪骇淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywmaterial:delete', '鍒犻櫎杩愮淮璧勪骇淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywmaterial:update', '淇敼杩愮淮璧勪骇淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywmaterial:query', '鏌ヨ杩愮淮璧勪骇淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywmaterial:exportExcel', '瀵煎嚭杩愮淮璧勪骇淇℃伅琛�(Excel)', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/db/business.yw_outinbound.permissions.sql b/server/db/business.yw_outinbound.permissions.sql
new file mode 100644
index 0000000..09b45fa
--- /dev/null
+++ b/server/db/business.yw_outinbound.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywoutinbound:create', '鏂板缓杩愮淮鍑哄叆搴撲俊鎭〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywoutinbound:delete', '鍒犻櫎杩愮淮鍑哄叆搴撲俊鎭〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywoutinbound:update', '淇敼杩愮淮鍑哄叆搴撲俊鎭〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywoutinbound:query', '鏌ヨ杩愮淮鍑哄叆搴撲俊鎭〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywoutinbound:exportExcel', '瀵煎嚭杩愮淮鍑哄叆搴撲俊鎭〃(Excel)', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/db/business.yw_problem.permissions.sql b/server/db/business.yw_problem.permissions.sql
new file mode 100644
index 0000000..07c996d
--- /dev/null
+++ b/server/db/business.yw_problem.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywproblem:create', '鏂板缓杩愮淮闂涓婃姤淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywproblem:delete', '鍒犻櫎杩愮淮闂涓婃姤淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywproblem:update', '淇敼杩愮淮闂涓婃姤淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywproblem:query', '鏌ヨ杩愮淮闂涓婃姤淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywproblem:exportExcel', '瀵煎嚭杩愮淮闂涓婃姤淇℃伅琛�(Excel)', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/db/business.yw_stock.permissions.sql b/server/db/business.yw_stock.permissions.sql
new file mode 100644
index 0000000..2a2dbd3
--- /dev/null
+++ b/server/db/business.yw_stock.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywstock:create', '鏂板缓杩愮淮搴撳瓨淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywstock:delete', '鍒犻櫎杩愮淮搴撳瓨淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywstock:update', '淇敼杩愮淮搴撳瓨淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywstock:query', '鏌ヨ杩愮淮搴撳瓨淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywstock:exportExcel', '瀵煎嚭杩愮淮搴撳瓨淇℃伅琛�(Excel)', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/db/business.yw_stocktaking.permissions.sql b/server/db/business.yw_stocktaking.permissions.sql
new file mode 100644
index 0000000..ee2d847
--- /dev/null
+++ b/server/db/business.yw_stocktaking.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywstocktaking:create', '鏂板缓杩愮淮鐩樼偣淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywstocktaking:delete', '鍒犻櫎杩愮淮鐩樼偣淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywstocktaking:update', '淇敼杩愮淮鐩樼偣淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywstocktaking:query', '鏌ヨ杩愮淮鐩樼偣淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywstocktaking:exportExcel', '瀵煎嚭杩愮淮鐩樼偣淇℃伅琛�(Excel)', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/db/business.yw_stocktaking_record.permissions.sql b/server/db/business.yw_stocktaking_record.permissions.sql
new file mode 100644
index 0000000..7013420
--- /dev/null
+++ b/server/db/business.yw_stocktaking_record.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywstocktakingrecord:create', '鏂板缓杩愮淮鐩樼偣鏄庣粏璁板綍琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywstocktakingrecord:delete', '鍒犻櫎杩愮淮鐩樼偣鏄庣粏璁板綍琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywstocktakingrecord:update', '淇敼杩愮淮鐩樼偣鏄庣粏璁板綍琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywstocktakingrecord:query', '鏌ヨ杩愮淮鐩樼偣鏄庣粏璁板綍琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywstocktakingrecord:exportExcel', '瀵煎嚭杩愮淮鐩樼偣鏄庣粏璁板綍琛�(Excel)', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/db/business.yw_warehouse.permissions.sql b/server/db/business.yw_warehouse.permissions.sql
new file mode 100644
index 0000000..a874d0b
--- /dev/null
+++ b/server/db/business.yw_warehouse.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywwarehouse:create', '鏂板缓杩愮淮浠撳簱淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywwarehouse:delete', '鍒犻櫎杩愮淮浠撳簱淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywwarehouse:update', '淇敼杩愮淮浠撳簱淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywwarehouse:query', '鏌ヨ杩愮淮浠撳簱淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:ywwarehouse:exportExcel', '瀵煎嚭杩愮淮浠撳簱淇℃伅琛�(Excel)', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwMaterialController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwMaterialController.java
new file mode 100644
index 0000000..f8ba265
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwMaterialController.java
@@ -0,0 +1,92 @@
+package com.doumee.cloud.admin;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.model.PageData;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.YwMaterial;
+import com.doumee.service.business.YwMaterialService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Api(tags = "杩愮淮璧勪骇淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/ywMaterial")
+public class YwMaterialController extends BaseController {
+
+    @Autowired
+    private YwMaterialService ywMaterialService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:ywmaterial:create")
+    public ApiResponse create(@RequestBody YwMaterial ywMaterial) {
+        return ApiResponse.success(ywMaterialService.create(ywMaterial));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:ywmaterial:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        ywMaterialService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:ywmaterial:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        ywMaterialService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:ywmaterial:update")
+    public ApiResponse updateById(@RequestBody YwMaterial ywMaterial) {
+        ywMaterialService.updateById(ywMaterial);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:ywmaterial:query")
+    public ApiResponse<PageData<YwMaterial>> findPage (@RequestBody PageWrap<YwMaterial> pageWrap) {
+        return ApiResponse.success(ywMaterialService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:ywmaterial:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<YwMaterial> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(YwMaterial.class).export(ywMaterialService.findPage(pageWrap).getRecords(), "杩愮淮璧勪骇淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:ywmaterial:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(ywMaterialService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwOutinboundController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwOutinboundController.java
new file mode 100644
index 0000000..54b0613
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwOutinboundController.java
@@ -0,0 +1,92 @@
+package com.doumee.cloud.admin;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.model.PageData;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.YwOutinbound;
+import com.doumee.service.business.YwOutinboundService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Api(tags = "杩愮淮鍑哄叆搴撲俊鎭〃")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/ywOutinbound")
+public class YwOutinboundController extends BaseController {
+
+    @Autowired
+    private YwOutinboundService ywOutinboundService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:ywoutinbound:create")
+    public ApiResponse create(@RequestBody YwOutinbound ywOutinbound) {
+        return ApiResponse.success(ywOutinboundService.create(ywOutinbound));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:ywoutinbound:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        ywOutinboundService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:ywoutinbound:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        ywOutinboundService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:ywoutinbound:update")
+    public ApiResponse updateById(@RequestBody YwOutinbound ywOutinbound) {
+        ywOutinboundService.updateById(ywOutinbound);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:ywoutinbound:query")
+    public ApiResponse<PageData<YwOutinbound>> findPage (@RequestBody PageWrap<YwOutinbound> pageWrap) {
+        return ApiResponse.success(ywOutinboundService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:ywoutinbound:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<YwOutinbound> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(YwOutinbound.class).export(ywOutinboundService.findPage(pageWrap).getRecords(), "杩愮淮鍑哄叆搴撲俊鎭〃", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:ywoutinbound:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(ywOutinboundService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProblemController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProblemController.java
new file mode 100644
index 0000000..2cacef4
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwProblemController.java
@@ -0,0 +1,92 @@
+package com.doumee.cloud.admin;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.model.PageData;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.YwProblem;
+import com.doumee.service.business.YwProblemService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Api(tags = "杩愮淮闂涓婃姤淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/ywProblem")
+public class YwProblemController extends BaseController {
+
+    @Autowired
+    private YwProblemService ywProblemService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:ywproblem:create")
+    public ApiResponse create(@RequestBody YwProblem ywProblem) {
+        return ApiResponse.success(ywProblemService.create(ywProblem));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:ywproblem:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        ywProblemService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:ywproblem:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        ywProblemService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:ywproblem:update")
+    public ApiResponse updateById(@RequestBody YwProblem ywProblem) {
+        ywProblemService.updateById(ywProblem);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:ywproblem:query")
+    public ApiResponse<PageData<YwProblem>> findPage (@RequestBody PageWrap<YwProblem> pageWrap) {
+        return ApiResponse.success(ywProblemService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:ywproblem:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<YwProblem> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(YwProblem.class).export(ywProblemService.findPage(pageWrap).getRecords(), "杩愮淮闂涓婃姤淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:ywproblem:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(ywProblemService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStockController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStockController.java
new file mode 100644
index 0000000..badb715
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStockController.java
@@ -0,0 +1,92 @@
+package com.doumee.cloud.admin;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.model.PageData;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.YwStock;
+import com.doumee.service.business.YwStockService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Api(tags = "杩愮淮搴撳瓨淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/ywStock")
+public class YwStockController extends BaseController {
+
+    @Autowired
+    private YwStockService ywStockService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:ywstock:create")
+    public ApiResponse create(@RequestBody YwStock ywStock) {
+        return ApiResponse.success(ywStockService.create(ywStock));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:ywstock:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        ywStockService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:ywstock:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        ywStockService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:ywstock:update")
+    public ApiResponse updateById(@RequestBody YwStock ywStock) {
+        ywStockService.updateById(ywStock);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:ywstock:query")
+    public ApiResponse<PageData<YwStock>> findPage (@RequestBody PageWrap<YwStock> pageWrap) {
+        return ApiResponse.success(ywStockService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:ywstock:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<YwStock> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(YwStock.class).export(ywStockService.findPage(pageWrap).getRecords(), "杩愮淮搴撳瓨淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:ywstock:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(ywStockService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStocktakingController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStocktakingController.java
new file mode 100644
index 0000000..20745cf
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStocktakingController.java
@@ -0,0 +1,92 @@
+package com.doumee.cloud.admin;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.model.PageData;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.YwStocktaking;
+import com.doumee.service.business.YwStocktakingService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Api(tags = "杩愮淮鐩樼偣淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/ywStocktaking")
+public class YwStocktakingController extends BaseController {
+
+    @Autowired
+    private YwStocktakingService ywStocktakingService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:ywstocktaking:create")
+    public ApiResponse create(@RequestBody YwStocktaking ywStocktaking) {
+        return ApiResponse.success(ywStocktakingService.create(ywStocktaking));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:ywstocktaking:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        ywStocktakingService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:ywstocktaking:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        ywStocktakingService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:ywstocktaking:update")
+    public ApiResponse updateById(@RequestBody YwStocktaking ywStocktaking) {
+        ywStocktakingService.updateById(ywStocktaking);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:ywstocktaking:query")
+    public ApiResponse<PageData<YwStocktaking>> findPage (@RequestBody PageWrap<YwStocktaking> pageWrap) {
+        return ApiResponse.success(ywStocktakingService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:ywstocktaking:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<YwStocktaking> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(YwStocktaking.class).export(ywStocktakingService.findPage(pageWrap).getRecords(), "杩愮淮鐩樼偣淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:ywstocktaking:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(ywStocktakingService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStocktakingRecordController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStocktakingRecordController.java
new file mode 100644
index 0000000..295baa6
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwStocktakingRecordController.java
@@ -0,0 +1,92 @@
+package com.doumee.cloud.admin;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.model.PageData;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.YwStocktakingRecord;
+import com.doumee.service.business.YwStocktakingRecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Api(tags = "杩愮淮鐩樼偣鏄庣粏璁板綍琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/ywStocktakingRecord")
+public class YwStocktakingRecordController extends BaseController {
+
+    @Autowired
+    private YwStocktakingRecordService ywStocktakingRecordService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:ywstocktakingrecord:create")
+    public ApiResponse create(@RequestBody YwStocktakingRecord ywStocktakingRecord) {
+        return ApiResponse.success(ywStocktakingRecordService.create(ywStocktakingRecord));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:ywstocktakingrecord:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        ywStocktakingRecordService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:ywstocktakingrecord:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        ywStocktakingRecordService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:ywstocktakingrecord:update")
+    public ApiResponse updateById(@RequestBody YwStocktakingRecord ywStocktakingRecord) {
+        ywStocktakingRecordService.updateById(ywStocktakingRecord);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:ywstocktakingrecord:query")
+    public ApiResponse<PageData<YwStocktakingRecord>> findPage (@RequestBody PageWrap<YwStocktakingRecord> pageWrap) {
+        return ApiResponse.success(ywStocktakingRecordService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:ywstocktakingrecord:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<YwStocktakingRecord> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(YwStocktakingRecord.class).export(ywStocktakingRecordService.findPage(pageWrap).getRecords(), "杩愮淮鐩樼偣鏄庣粏璁板綍琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:ywstocktakingrecord:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(ywStocktakingRecordService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwWarehouseController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwWarehouseController.java
new file mode 100644
index 0000000..8f7b90a
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwWarehouseController.java
@@ -0,0 +1,92 @@
+package com.doumee.cloud.admin;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.CloudRequiredPermission;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.model.PageData;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.YwWarehouse;
+import com.doumee.service.business.YwWarehouseService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Api(tags = "杩愮淮浠撳簱淇℃伅琛�")
+@RestController
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/business/ywWarehouse")
+public class YwWarehouseController extends BaseController {
+
+    @Autowired
+    private YwWarehouseService ywWarehouseService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @CloudRequiredPermission("business:ywwarehouse:create")
+    public ApiResponse create(@RequestBody YwWarehouse ywWarehouse) {
+        return ApiResponse.success(ywWarehouseService.create(ywWarehouse));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @CloudRequiredPermission("business:ywwarehouse:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        ywWarehouseService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @CloudRequiredPermission("business:ywwarehouse:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Integer> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Integer.valueOf(id));
+        }
+        ywWarehouseService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @CloudRequiredPermission("business:ywwarehouse:update")
+    public ApiResponse updateById(@RequestBody YwWarehouse ywWarehouse) {
+        ywWarehouseService.updateById(ywWarehouse);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @CloudRequiredPermission("business:ywwarehouse:query")
+    public ApiResponse<PageData<YwWarehouse>> findPage (@RequestBody PageWrap<YwWarehouse> pageWrap) {
+        return ApiResponse.success(ywWarehouseService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @CloudRequiredPermission("business:ywwarehouse:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<YwWarehouse> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(YwWarehouse.class).export(ywWarehouseService.findPage(pageWrap).getRecords(), "杩愮淮浠撳簱淇℃伅琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @CloudRequiredPermission("business:ywwarehouse:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(ywWarehouseService.findById(id));
+    }
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwMaterialMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwMaterialMapper.java
new file mode 100644
index 0000000..cd8fd62
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwMaterialMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.YwMaterial;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+public interface YwMaterialMapper extends BaseMapper<YwMaterial> {
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwOutinboundMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwOutinboundMapper.java
new file mode 100644
index 0000000..257d5f5
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwOutinboundMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.YwOutinbound;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+public interface YwOutinboundMapper extends BaseMapper<YwOutinbound> {
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwProblemMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwProblemMapper.java
new file mode 100644
index 0000000..92b447a
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwProblemMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.YwProblem;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+public interface YwProblemMapper extends BaseMapper<YwProblem> {
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwStockMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwStockMapper.java
new file mode 100644
index 0000000..5a4eee2
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwStockMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.YwStock;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+public interface YwStockMapper extends BaseMapper<YwStock> {
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwStocktakingMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwStocktakingMapper.java
new file mode 100644
index 0000000..8961949
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwStocktakingMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.YwStocktaking;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+public interface YwStocktakingMapper extends BaseMapper<YwStocktaking> {
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwStocktakingRecordMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwStocktakingRecordMapper.java
new file mode 100644
index 0000000..53fe3b7
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwStocktakingRecordMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.YwStocktakingRecord;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+public interface YwStocktakingRecordMapper extends BaseMapper<YwStocktakingRecord> {
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwWarehouseMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwWarehouseMapper.java
new file mode 100644
index 0000000..82f64ac
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/YwWarehouseMapper.java
@@ -0,0 +1,12 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.YwWarehouse;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+public interface YwWarehouseMapper extends BaseMapper<YwWarehouse> {
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwMaterial.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwMaterial.java
new file mode 100644
index 0000000..4fb5b81
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwMaterial.java
@@ -0,0 +1,108 @@
+package com.doumee.dao.business.model;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+import java.math.BigDecimal;
+
+/**
+ * 杩愮淮璧勪骇淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Data
+@ApiModel("杩愮淮璧勪骇淇℃伅琛�")
+@TableName("`yw_material`")
+public class YwMaterial {
+
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    @ExcelColumn(name="涓婚敭")
+    private Integer id;
+
+    @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+    private Integer creator;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createDate;
+
+    @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+    private Integer editor;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @ExcelColumn(name="鏇存柊鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date editDate;
+
+    @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+    private Integer isdeleted;
+
+    @ApiModelProperty(value = "澶囨敞")
+    @ExcelColumn(name="澶囨敞")
+    private String remark;
+
+    @ApiModelProperty(value = "鍚嶇О")
+    @ExcelColumn(name="鍚嶇О")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date name;
+
+    @ApiModelProperty(value = "鐘舵�� 0鍚敤 1绂佺敤", example = "1")
+    @ExcelColumn(name="鐘舵�� 0鍚敤 1绂佺敤")
+    private Integer status;
+
+    @ApiModelProperty(value = "缂栧彿")
+    @ExcelColumn(name="缂栧彿")
+    private String code;
+
+    @ApiModelProperty(value = "鎵�灞炰竴绾у垎绫荤紪鐮侊紙鍏宠仈category)", example = "1")
+    @ExcelColumn(name="鎵�灞炰竴绾у垎绫荤紪鐮侊紙鍏宠仈category)")
+    private Integer parentCateId;
+
+    @ApiModelProperty(value = "鎵�灞炰簩绾у垎绫荤紪鐮�(鍏宠仈category锛�", example = "1")
+    @ExcelColumn(name="鎵�灞炰簩绾у垎绫荤紪鐮�(鍏宠仈category锛�")
+    private Integer cateId;
+
+    @ApiModelProperty(value = "鏉$爜")
+    @ExcelColumn(name="鏉$爜")
+    private String qrcode;
+
+    @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
+    @ExcelColumn(name="鎺掑簭鐮�")
+    private Integer sortnum;
+
+    @ApiModelProperty(value = "鍝佺墝")
+    @ExcelColumn(name="鍝佺墝")
+    private String brand;
+
+    @ApiModelProperty(value = "瑙勬牸鍨嬪彿")
+    @ExcelColumn(name="瑙勬牸鍨嬪彿")
+    private String attr;
+
+    @ApiModelProperty(value = "瀹夊叏搴撳瓨锛堜笅闄愶級", example = "1")
+    @ExcelColumn(name="瀹夊叏搴撳瓨锛堜笅闄愶級")
+    private BigDecimal minStock;
+
+    @ApiModelProperty(value = "瀹夊叏搴撳瓨锛堜笂闄愶級", example = "1")
+    @ExcelColumn(name="瀹夊叏搴撳瓨锛堜笂闄愶級")
+    private BigDecimal maxStock;
+
+    @ApiModelProperty(value = "鍗曚綅")
+    @ExcelColumn(name="鍗曚綅")
+    private String unitName;
+
+    @ApiModelProperty(value = "鎵�灞炴埧婧愮紪鐮�(鍏宠仈yw_room)", example = "1")
+    @ExcelColumn(name="鎵�灞炴埧婧愮紪鐮�(鍏宠仈yw_room)")
+    private Integer roomId;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinbound.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinbound.java
new file mode 100644
index 0000000..fb00364
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwOutinbound.java
@@ -0,0 +1,88 @@
+package com.doumee.dao.business.model;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+import java.math.BigDecimal;
+
+/**
+ * 杩愮淮鍑哄叆搴撲俊鎭〃
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Data
+@ApiModel("杩愮淮鍑哄叆搴撲俊鎭〃")
+@TableName("`yw_outinbound`")
+public class YwOutinbound {
+
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    @ExcelColumn(name="涓婚敭")
+    private Integer id;
+
+    @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+    private Integer creator;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createDate;
+
+    @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+    private Integer editor;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @ExcelColumn(name="鏇存柊鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date editDate;
+
+    @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+    private Integer isdeleted;
+
+    @ApiModelProperty(value = "澶囨敞")
+    @ExcelColumn(name="澶囨敞")
+    private String remark;
+
+    @ApiModelProperty(value = "浠撳簱缂栫爜(鍏宠仈yw_warehouse)")
+    @ExcelColumn(name="浠撳簱缂栫爜(鍏宠仈yw_warehouse)")
+    private String warehouseId;
+
+    @ApiModelProperty(value = "鐗╄祫缂栫爜锛堝叧鑱攜w_material)", example = "1")
+    @ExcelColumn(name="鐗╄祫缂栫爜锛堝叧鑱攜w_material)")
+    private Integer materialId;
+
+    @ApiModelProperty(value = "鏁伴噺", example = "1")
+    @ExcelColumn(name="鏁伴噺")
+    private BigDecimal stock;
+
+    @ApiModelProperty(value = "绫诲瀷 0閲囪喘鍏ュ簱 1棰嗙敤閫�鍥� 2搴撳瓨璋冩暣 3鍏朵粬鍏ュ簱 4鐩樼泩鍏ュ簱 5棰嗙敤鍑哄簱 6浠撳簱鍑哄簱 7璋冩暣鍑哄簱 8閲囪喘鍑哄簱 9鍏朵粬鍑哄簱 10鐩樹簭鍑哄簱", example = "1")
+    @ExcelColumn(name="绫诲瀷 0閲囪喘鍏ュ簱 1棰嗙敤閫�鍥� 2搴撳瓨璋冩暣 3鍏朵粬鍏ュ簱 4鐩樼泩鍏ュ簱 5棰嗙敤鍑哄簱 6浠撳簱鍑哄簱 7璋冩暣鍑哄簱 8閲囪喘鍑哄簱 9鍏朵粬鍑哄簱 10鐩樹簭鍑哄簱")
+    private Integer type;
+
+    @ApiModelProperty(value = "鏉ユ簮 0鎵嬪姩褰曞叆 1绯荤粺鐢熸垚", example = "1")
+    @ExcelColumn(name="鏉ユ簮 0鎵嬪姩褰曞叆 1绯荤粺鐢熸垚")
+    private Integer origin;
+
+    @ApiModelProperty(value = "璇存槑")
+    @ExcelColumn(name="璇存槑")
+    private String content;
+
+    @ApiModelProperty(value = "鍑哄叆搴撴棩鏈�")
+    @ExcelColumn(name="鍑哄叆搴撴棩鏈�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date doneDate;
+
+    @ApiModelProperty(value = "鐘舵�� 0姝e父", example = "1")
+    @ExcelColumn(name="鐘舵�� 0姝e父")
+    private Integer status;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwProblem.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwProblem.java
new file mode 100644
index 0000000..4d1cc4f
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwProblem.java
@@ -0,0 +1,109 @@
+package com.doumee.dao.business.model;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+
+/**
+ * 杩愮淮闂涓婃姤淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Data
+@ApiModel("杩愮淮闂涓婃姤淇℃伅琛�")
+@TableName("`yw_problem`")
+public class YwProblem {
+
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    @ExcelColumn(name="涓婚敭")
+    private Integer id;
+
+    @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+    private Integer creator;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createDate;
+
+    @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+    private Integer editor;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @ExcelColumn(name="鏇存柊鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date editDate;
+
+    @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+    private Integer isdeleted;
+
+    @ApiModelProperty(value = "浣嶇疆")
+    @ExcelColumn(name="浣嶇疆")
+    private String position;
+
+    @ApiModelProperty(value = "澶囨敞")
+    @ExcelColumn(name="澶囨敞")
+    private String remark;
+
+    @ApiModelProperty(value = "鐘舵�� 0鍚敤 1绂佺敤", example = "1")
+    @ExcelColumn(name="鐘舵�� 0鍚敤 1绂佺敤")
+    private Integer status;
+
+    @ApiModelProperty(value = "鎯呭喌璇存槑")
+    @ExcelColumn(name="鎯呭喌璇存槑")
+    private String content;
+
+    @ApiModelProperty(value = "涓婃姤浜哄鍚�")
+    @ExcelColumn(name="涓婃姤浜哄鍚�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date name;
+
+    @ApiModelProperty(value = "鑱旂郴鐢佃瘽")
+    @ExcelColumn(name="鑱旂郴鐢佃瘽")
+    private String phone;
+
+    @ApiModelProperty(value = "鎻愭姤鏃堕棿")
+    @ExcelColumn(name="鎻愭姤鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date submitDate;
+
+    @ApiModelProperty(value = "缂栧彿")
+    @ExcelColumn(name="缂栧彿")
+    private String code;
+
+    @ApiModelProperty(value = "澶勭悊鐘舵�� 0寰呭鐞� 1宸茶浆宸ュ崟 2宸插叧闂�", example = "1")
+    @ExcelColumn(name="澶勭悊鐘舵�� 0寰呭鐞� 1宸茶浆宸ュ崟 2宸插叧闂�")
+    private Integer dealStatus;
+
+    @ApiModelProperty(value = "澶勭悊浜虹紪鐮�(鍏宠仈system_user)", example = "1")
+    @ExcelColumn(name="澶勭悊浜虹紪鐮�(鍏宠仈system_user)")
+    private Integer dealUserId;
+
+    @ApiModelProperty(value = "澶勭悊鏃堕棿")
+    @ExcelColumn(name="澶勭悊鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date dealDate;
+
+    @ApiModelProperty(value = "澶勭悊澶囨敞")
+    @ExcelColumn(name="澶勭悊澶囨敞")
+    private String dealInfo;
+
+    @ApiModelProperty(value = "澶勭悊鏂瑰紡 0杞伐鍗� 1鍏抽棴", example = "1")
+    @ExcelColumn(name="澶勭悊鏂瑰紡 0杞伐鍗� 1鍏抽棴")
+    private Integer dealType;
+
+    @ApiModelProperty(value = "鍏宠仈宸ュ崟缂栫爜锛堝叧鑱攜w_workorder)", example = "1")
+    @ExcelColumn(name="鍏宠仈宸ュ崟缂栫爜锛堝叧鑱攜w_workorder)")
+    private Integer workorderId;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStock.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStock.java
new file mode 100644
index 0000000..9e4dcfd
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStock.java
@@ -0,0 +1,67 @@
+package com.doumee.dao.business.model;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+import java.math.BigDecimal;
+
+/**
+ * 杩愮淮搴撳瓨淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Data
+@ApiModel("杩愮淮搴撳瓨淇℃伅琛�")
+@TableName("`yw_stock`")
+public class YwStock {
+
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    @ExcelColumn(name="涓婚敭")
+    private Integer id;
+
+    @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+    private Integer creator;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createDate;
+
+    @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+    private Integer editor;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @ExcelColumn(name="鏇存柊鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date editDate;
+
+    @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+    private Integer isdeleted;
+
+    @ApiModelProperty(value = "澶囨敞")
+    @ExcelColumn(name="澶囨敞")
+    private String remark;
+
+    @ApiModelProperty(value = "浠撳簱缂栫爜(鍏宠仈yw_warehouse)")
+    @ExcelColumn(name="浠撳簱缂栫爜(鍏宠仈yw_warehouse)")
+    private String warehouseId;
+
+    @ApiModelProperty(value = "鐗╄祫缂栫爜锛堝叧鑱攜w_material)", example = "1")
+    @ExcelColumn(name="鐗╄祫缂栫爜锛堝叧鑱攜w_material)")
+    private Integer materialId;
+
+    @ApiModelProperty(value = "鏁伴噺", example = "1")
+    @ExcelColumn(name="鏁伴噺")
+    private BigDecimal stock;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktaking.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktaking.java
new file mode 100644
index 0000000..f7e178c
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktaking.java
@@ -0,0 +1,138 @@
+package com.doumee.dao.business.model;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+
+/**
+ * 杩愮淮鐩樼偣淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Data
+@ApiModel("杩愮淮鐩樼偣淇℃伅琛�")
+@TableName("`yw_stocktaking`")
+public class YwStocktaking {
+
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    @ExcelColumn(name="涓婚敭")
+    private Integer id;
+
+    @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+    private Integer creator;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createDate;
+
+    @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+    private Integer editor;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @ExcelColumn(name="鏇存柊鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date editDate;
+
+    @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+    private Integer isdeleted;
+
+    @ApiModelProperty(value = "浣嶇疆")
+    @ExcelColumn(name="浣嶇疆")
+    private String position;
+
+    @ApiModelProperty(value = "澶囨敞")
+    @ExcelColumn(name="澶囨敞")
+    private String remark;
+
+    @ApiModelProperty(value = "鐘舵�� 0鏈紑濮� 1杩涜涓� 2宸插畬鎴� 3宸插彇娑�", example = "1")
+    @ExcelColumn(name="鐘舵�� 0鏈紑濮� 1杩涜涓� 2宸插畬鎴� 3宸插彇娑�")
+    private Integer status;
+
+    @ApiModelProperty(value = "鐩樼偣鍛樼紪鐮�(鍏宠仈system_user)")
+    @ExcelColumn(name="鐩樼偣鍛樼紪鐮�(鍏宠仈system_user)")
+    private String userId;
+
+    @ApiModelProperty(value = "鐩樼偣鏃堕棿")
+    @ExcelColumn(name="鐩樼偣鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date planDate;
+
+    @ApiModelProperty(value = "缂栧彿")
+    @ExcelColumn(name="缂栧彿")
+    private String code;
+
+    @ApiModelProperty(value = "寮�濮嬪鐞嗕汉(鍏宠仈system_user)", example = "1")
+    @ExcelColumn(name="寮�濮嬪鐞嗕汉(鍏宠仈system_user)")
+    private Integer dealUserId;
+
+    @ApiModelProperty(value = "寮�濮嬫椂闂�")
+    @ExcelColumn(name="寮�濮嬫椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date dealDate;
+
+    @ApiModelProperty(value = "寮�濮嬪娉�")
+    @ExcelColumn(name="寮�濮嬪娉�")
+    private String dealInfo;
+
+    @ApiModelProperty(value = "宸茬洏鐐圭墿璧勬暟閲�", example = "1")
+    @ExcelColumn(name="宸茬洏鐐圭墿璧勬暟閲�")
+    private Integer doneNum;
+
+    @ApiModelProperty(value = "鏈洏鐐圭墿璧勬暟閲�", example = "1")
+    @ExcelColumn(name="鏈洏鐐圭墿璧勬暟閲�")
+    private Integer waitNum;
+
+    @ApiModelProperty(value = "鎬荤墿璧勬暟閲�", example = "1")
+    @ExcelColumn(name="鎬荤墿璧勬暟閲�")
+    private Integer totalNum;
+
+    @ApiModelProperty(value = "鐩樼泩鐗╄祫鏁伴噺", example = "1")
+    @ExcelColumn(name="鐩樼泩鐗╄祫鏁伴噺")
+    private Integer profitNum;
+
+    @ApiModelProperty(value = "鐩樹簭鐗╄祫鏁伴噺", example = "1")
+    @ExcelColumn(name="鐩樹簭鐗╄祫鏁伴噺")
+    private Integer lossNum;
+
+    @ApiModelProperty(value = "璐﹀疄鐩哥鐗╄祫鏁伴噺", example = "1")
+    @ExcelColumn(name="璐﹀疄鐩哥鐗╄祫鏁伴噺")
+    private Integer equalNum;
+
+    @ApiModelProperty(value = "瀹屾垚澶勭悊浜�(鍏宠仈system_user)", example = "1")
+    @ExcelColumn(name="瀹屾垚澶勭悊浜�(鍏宠仈system_user)")
+    private Integer doneUserId;
+
+    @ApiModelProperty(value = "瀹屾垚鏃堕棿")
+    @ExcelColumn(name="瀹屾垚鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date doneDate;
+
+    @ApiModelProperty(value = "瀹屾垚澶囨敞")
+    @ExcelColumn(name="瀹屾垚澶囨敞")
+    private String doneInfo;
+
+    @ApiModelProperty(value = "鍙栨秷澶勭悊浜�(鍏宠仈system_user)", example = "1")
+    @ExcelColumn(name="鍙栨秷澶勭悊浜�(鍏宠仈system_user)")
+    private Integer cancelUserId;
+
+    @ApiModelProperty(value = "鍙栨秷鏃堕棿")
+    @ExcelColumn(name="鍙栨秷鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date cancelDate;
+
+    @ApiModelProperty(value = "鍙栨秷澶囨敞")
+    @ExcelColumn(name="鍙栨秷澶囨敞")
+    private String cancelInfo;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktakingRecord.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktakingRecord.java
new file mode 100644
index 0000000..24f9096
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwStocktakingRecord.java
@@ -0,0 +1,92 @@
+package com.doumee.dao.business.model;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+import java.math.BigDecimal;
+
+/**
+ * 杩愮淮鐩樼偣鏄庣粏璁板綍琛�
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Data
+@ApiModel("杩愮淮鐩樼偣鏄庣粏璁板綍琛�")
+@TableName("`yw_stocktaking_record`")
+public class YwStocktakingRecord {
+
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    @ExcelColumn(name="涓婚敭")
+    private Integer id;
+
+    @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+    private Integer creator;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createDate;
+
+    @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+    private Integer editor;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @ExcelColumn(name="鏇存柊鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date editDate;
+
+    @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+    private Integer isdeleted;
+
+    @ApiModelProperty(value = "澶囨敞")
+    @ExcelColumn(name="澶囨敞")
+    private String remark;
+
+    @ApiModelProperty(value = "鐘舵�� 0鏈紑濮� 1宸茬洏鐐�", example = "1")
+    @ExcelColumn(name="鐘舵�� 0鏈紑濮� 1宸茬洏鐐�")
+    private Integer status;
+
+    @ApiModelProperty(value = "鐩樼偣鍛樼紪鐮�(鍏宠仈system_user)")
+    @ExcelColumn(name="鐩樼偣鍛樼紪鐮�(鍏宠仈system_user)")
+    private String userId;
+
+    @ApiModelProperty(value = "鐩樼偣鏃堕棿")
+    @ExcelColumn(name="鐩樼偣鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date planDate;
+
+    @ApiModelProperty(value = "缂栧彿")
+    @ExcelColumn(name="缂栧彿")
+    private String code;
+
+    @ApiModelProperty(value = "鐗╄祫缂栫爜锛堝叧鑱攜w_material)", example = "1")
+    @ExcelColumn(name="鐗╄祫缂栫爜锛堝叧鑱攜w_material)")
+    private Integer materialId;
+
+    @ApiModelProperty(value = "璐﹂潰鏁伴噺", example = "1")
+    @ExcelColumn(name="璐﹂潰鏁伴噺")
+    private BigDecimal stock;
+
+    @ApiModelProperty(value = "瀹為檯鐩樼偣搴撳瓨閲�", example = "1")
+    @ExcelColumn(name="瀹為檯鐩樼偣搴撳瓨閲�")
+    private BigDecimal actStock;
+
+    @ApiModelProperty(value = "鐩樼偣 0璐﹀疄鐩哥 1鐩樹簭 2鐩樼泩", example = "1")
+    @ExcelColumn(name="鐩樼偣 0璐﹀疄鐩哥 1鐩樹簭 2鐩樼泩")
+    private Integer type;
+
+    @ApiModelProperty(value = "鐩樼偣璁″垝缂栫爜(鍏宠仈yw_stocktaking)", example = "1")
+    @ExcelColumn(name="鐩樼偣璁″垝缂栫爜(鍏宠仈yw_stocktaking)")
+    private Integer stocktakingId;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWarehouse.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWarehouse.java
new file mode 100644
index 0000000..deb0b2d
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWarehouse.java
@@ -0,0 +1,79 @@
+package com.doumee.dao.business.model;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+
+/**
+ * 杩愮淮浠撳簱淇℃伅琛�
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Data
+@ApiModel("杩愮淮浠撳簱淇℃伅琛�")
+@TableName("`yw_warehouse`")
+public class YwWarehouse {
+
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    @ExcelColumn(name="涓婚敭")
+    private Integer id;
+
+    @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+    private Integer creator;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createDate;
+
+    @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+    private Integer editor;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @ExcelColumn(name="鏇存柊鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date editDate;
+
+    @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
+    @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+    private Integer isdeleted;
+
+    @ApiModelProperty(value = "澶囨敞")
+    @ExcelColumn(name="澶囨敞")
+    private String remark;
+
+    @ApiModelProperty(value = "鐘舵�� 0鍚敤 1绂佺敤", example = "1")
+    @ExcelColumn(name="鐘舵�� 0鍚敤 1绂佺敤")
+    private Integer status;
+
+    @ApiModelProperty(value = "鍚嶇О")
+    @ExcelColumn(name="鍚嶇О")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date name;
+
+    @ApiModelProperty(value = "浣嶇疆")
+    @ExcelColumn(name="浣嶇疆")
+    private String position;
+
+    @ApiModelProperty(value = "缂栧彿")
+    @ExcelColumn(name="缂栧彿")
+    private String code;
+
+    @ApiModelProperty(value = "璐熻矗浜虹紪鐮�(鍏宠仈system_user)", example = "1")
+    @ExcelColumn(name="璐熻矗浜虹紪鐮�(鍏宠仈system_user)")
+    private Integer userId;
+
+    @ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
+    @ExcelColumn(name="鎺掑簭鐮�")
+    private Integer sortnum;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwMaterialService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwMaterialService.java
new file mode 100644
index 0000000..7a38321
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwMaterialService.java
@@ -0,0 +1,97 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.YwMaterial;
+import java.util.List;
+
+/**
+ * 杩愮淮璧勪骇淇℃伅琛⊿ervice瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+public interface YwMaterialService {
+
+    /**
+     * 鍒涘缓
+     * 
+     * @param ywMaterial 瀹炰綋瀵硅薄
+     * @return Integer
+     */
+    Integer create(YwMaterial ywMaterial);
+
+    /**
+     * 涓婚敭鍒犻櫎
+     *
+     * @param id 涓婚敭
+     */
+    void deleteById(Integer id);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param ywMaterial 瀹炰綋瀵硅薄
+     */
+    void delete(YwMaterial ywMaterial);
+
+    /**
+     * 鎵归噺涓婚敭鍒犻櫎
+     *
+     * @param ids 涓婚敭闆�
+     */
+    void deleteByIdInBatch(List<Integer> ids);
+
+    /**
+     * 涓婚敭鏇存柊
+     *
+     * @param ywMaterial 瀹炰綋瀵硅薄
+     */
+    void updateById(YwMaterial ywMaterial);
+
+    /**
+     * 鎵归噺涓婚敭鏇存柊
+     *
+     * @param ywMaterials 瀹炰綋闆�
+     */
+    void updateByIdInBatch(List<YwMaterial> ywMaterials);
+
+    /**
+     * 涓婚敭鏌ヨ
+     *
+     * @param id 涓婚敭
+     * @return YwMaterial
+     */
+    YwMaterial findById(Integer id);
+
+    /**
+     * 鏉′欢鏌ヨ鍗曟潯璁板綍
+     *
+     * @param ywMaterial 瀹炰綋瀵硅薄
+     * @return YwMaterial
+     */
+    YwMaterial findOne(YwMaterial ywMaterial);
+
+    /**
+     * 鏉′欢鏌ヨ
+     *
+     * @param ywMaterial 瀹炰綋瀵硅薄
+     * @return List<YwMaterial>
+     */
+    List<YwMaterial> findList(YwMaterial ywMaterial);
+  
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<YwMaterial>
+     */
+    PageData<YwMaterial> findPage(PageWrap<YwMaterial> pageWrap);
+
+    /**
+     * 鏉′欢缁熻
+     *
+     * @param ywMaterial 瀹炰綋瀵硅薄
+     * @return long
+     */
+    long count(YwMaterial ywMaterial);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwOutinboundService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwOutinboundService.java
new file mode 100644
index 0000000..55e6b59
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwOutinboundService.java
@@ -0,0 +1,97 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.YwOutinbound;
+import java.util.List;
+
+/**
+ * 杩愮淮鍑哄叆搴撲俊鎭〃Service瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+public interface YwOutinboundService {
+
+    /**
+     * 鍒涘缓
+     * 
+     * @param ywOutinbound 瀹炰綋瀵硅薄
+     * @return Integer
+     */
+    Integer create(YwOutinbound ywOutinbound);
+
+    /**
+     * 涓婚敭鍒犻櫎
+     *
+     * @param id 涓婚敭
+     */
+    void deleteById(Integer id);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param ywOutinbound 瀹炰綋瀵硅薄
+     */
+    void delete(YwOutinbound ywOutinbound);
+
+    /**
+     * 鎵归噺涓婚敭鍒犻櫎
+     *
+     * @param ids 涓婚敭闆�
+     */
+    void deleteByIdInBatch(List<Integer> ids);
+
+    /**
+     * 涓婚敭鏇存柊
+     *
+     * @param ywOutinbound 瀹炰綋瀵硅薄
+     */
+    void updateById(YwOutinbound ywOutinbound);
+
+    /**
+     * 鎵归噺涓婚敭鏇存柊
+     *
+     * @param ywOutinbounds 瀹炰綋闆�
+     */
+    void updateByIdInBatch(List<YwOutinbound> ywOutinbounds);
+
+    /**
+     * 涓婚敭鏌ヨ
+     *
+     * @param id 涓婚敭
+     * @return YwOutinbound
+     */
+    YwOutinbound findById(Integer id);
+
+    /**
+     * 鏉′欢鏌ヨ鍗曟潯璁板綍
+     *
+     * @param ywOutinbound 瀹炰綋瀵硅薄
+     * @return YwOutinbound
+     */
+    YwOutinbound findOne(YwOutinbound ywOutinbound);
+
+    /**
+     * 鏉′欢鏌ヨ
+     *
+     * @param ywOutinbound 瀹炰綋瀵硅薄
+     * @return List<YwOutinbound>
+     */
+    List<YwOutinbound> findList(YwOutinbound ywOutinbound);
+  
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<YwOutinbound>
+     */
+    PageData<YwOutinbound> findPage(PageWrap<YwOutinbound> pageWrap);
+
+    /**
+     * 鏉′欢缁熻
+     *
+     * @param ywOutinbound 瀹炰綋瀵硅薄
+     * @return long
+     */
+    long count(YwOutinbound ywOutinbound);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwProblemService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwProblemService.java
new file mode 100644
index 0000000..a0f41d4
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwProblemService.java
@@ -0,0 +1,97 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.YwProblem;
+import java.util.List;
+
+/**
+ * 杩愮淮闂涓婃姤淇℃伅琛⊿ervice瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+public interface YwProblemService {
+
+    /**
+     * 鍒涘缓
+     * 
+     * @param ywProblem 瀹炰綋瀵硅薄
+     * @return Integer
+     */
+    Integer create(YwProblem ywProblem);
+
+    /**
+     * 涓婚敭鍒犻櫎
+     *
+     * @param id 涓婚敭
+     */
+    void deleteById(Integer id);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param ywProblem 瀹炰綋瀵硅薄
+     */
+    void delete(YwProblem ywProblem);
+
+    /**
+     * 鎵归噺涓婚敭鍒犻櫎
+     *
+     * @param ids 涓婚敭闆�
+     */
+    void deleteByIdInBatch(List<Integer> ids);
+
+    /**
+     * 涓婚敭鏇存柊
+     *
+     * @param ywProblem 瀹炰綋瀵硅薄
+     */
+    void updateById(YwProblem ywProblem);
+
+    /**
+     * 鎵归噺涓婚敭鏇存柊
+     *
+     * @param ywProblems 瀹炰綋闆�
+     */
+    void updateByIdInBatch(List<YwProblem> ywProblems);
+
+    /**
+     * 涓婚敭鏌ヨ
+     *
+     * @param id 涓婚敭
+     * @return YwProblem
+     */
+    YwProblem findById(Integer id);
+
+    /**
+     * 鏉′欢鏌ヨ鍗曟潯璁板綍
+     *
+     * @param ywProblem 瀹炰綋瀵硅薄
+     * @return YwProblem
+     */
+    YwProblem findOne(YwProblem ywProblem);
+
+    /**
+     * 鏉′欢鏌ヨ
+     *
+     * @param ywProblem 瀹炰綋瀵硅薄
+     * @return List<YwProblem>
+     */
+    List<YwProblem> findList(YwProblem ywProblem);
+  
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<YwProblem>
+     */
+    PageData<YwProblem> findPage(PageWrap<YwProblem> pageWrap);
+
+    /**
+     * 鏉′欢缁熻
+     *
+     * @param ywProblem 瀹炰綋瀵硅薄
+     * @return long
+     */
+    long count(YwProblem ywProblem);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwStockService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwStockService.java
new file mode 100644
index 0000000..1b6d5a0
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwStockService.java
@@ -0,0 +1,97 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.YwStock;
+import java.util.List;
+
+/**
+ * 杩愮淮搴撳瓨淇℃伅琛⊿ervice瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+public interface YwStockService {
+
+    /**
+     * 鍒涘缓
+     * 
+     * @param ywStock 瀹炰綋瀵硅薄
+     * @return Integer
+     */
+    Integer create(YwStock ywStock);
+
+    /**
+     * 涓婚敭鍒犻櫎
+     *
+     * @param id 涓婚敭
+     */
+    void deleteById(Integer id);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param ywStock 瀹炰綋瀵硅薄
+     */
+    void delete(YwStock ywStock);
+
+    /**
+     * 鎵归噺涓婚敭鍒犻櫎
+     *
+     * @param ids 涓婚敭闆�
+     */
+    void deleteByIdInBatch(List<Integer> ids);
+
+    /**
+     * 涓婚敭鏇存柊
+     *
+     * @param ywStock 瀹炰綋瀵硅薄
+     */
+    void updateById(YwStock ywStock);
+
+    /**
+     * 鎵归噺涓婚敭鏇存柊
+     *
+     * @param ywStocks 瀹炰綋闆�
+     */
+    void updateByIdInBatch(List<YwStock> ywStocks);
+
+    /**
+     * 涓婚敭鏌ヨ
+     *
+     * @param id 涓婚敭
+     * @return YwStock
+     */
+    YwStock findById(Integer id);
+
+    /**
+     * 鏉′欢鏌ヨ鍗曟潯璁板綍
+     *
+     * @param ywStock 瀹炰綋瀵硅薄
+     * @return YwStock
+     */
+    YwStock findOne(YwStock ywStock);
+
+    /**
+     * 鏉′欢鏌ヨ
+     *
+     * @param ywStock 瀹炰綋瀵硅薄
+     * @return List<YwStock>
+     */
+    List<YwStock> findList(YwStock ywStock);
+  
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<YwStock>
+     */
+    PageData<YwStock> findPage(PageWrap<YwStock> pageWrap);
+
+    /**
+     * 鏉′欢缁熻
+     *
+     * @param ywStock 瀹炰綋瀵硅薄
+     * @return long
+     */
+    long count(YwStock ywStock);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwStocktakingRecordService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwStocktakingRecordService.java
new file mode 100644
index 0000000..a38adba
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwStocktakingRecordService.java
@@ -0,0 +1,97 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.YwStocktakingRecord;
+import java.util.List;
+
+/**
+ * 杩愮淮鐩樼偣鏄庣粏璁板綍琛⊿ervice瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+public interface YwStocktakingRecordService {
+
+    /**
+     * 鍒涘缓
+     * 
+     * @param ywStocktakingRecord 瀹炰綋瀵硅薄
+     * @return Integer
+     */
+    Integer create(YwStocktakingRecord ywStocktakingRecord);
+
+    /**
+     * 涓婚敭鍒犻櫎
+     *
+     * @param id 涓婚敭
+     */
+    void deleteById(Integer id);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param ywStocktakingRecord 瀹炰綋瀵硅薄
+     */
+    void delete(YwStocktakingRecord ywStocktakingRecord);
+
+    /**
+     * 鎵归噺涓婚敭鍒犻櫎
+     *
+     * @param ids 涓婚敭闆�
+     */
+    void deleteByIdInBatch(List<Integer> ids);
+
+    /**
+     * 涓婚敭鏇存柊
+     *
+     * @param ywStocktakingRecord 瀹炰綋瀵硅薄
+     */
+    void updateById(YwStocktakingRecord ywStocktakingRecord);
+
+    /**
+     * 鎵归噺涓婚敭鏇存柊
+     *
+     * @param ywStocktakingRecords 瀹炰綋闆�
+     */
+    void updateByIdInBatch(List<YwStocktakingRecord> ywStocktakingRecords);
+
+    /**
+     * 涓婚敭鏌ヨ
+     *
+     * @param id 涓婚敭
+     * @return YwStocktakingRecord
+     */
+    YwStocktakingRecord findById(Integer id);
+
+    /**
+     * 鏉′欢鏌ヨ鍗曟潯璁板綍
+     *
+     * @param ywStocktakingRecord 瀹炰綋瀵硅薄
+     * @return YwStocktakingRecord
+     */
+    YwStocktakingRecord findOne(YwStocktakingRecord ywStocktakingRecord);
+
+    /**
+     * 鏉′欢鏌ヨ
+     *
+     * @param ywStocktakingRecord 瀹炰綋瀵硅薄
+     * @return List<YwStocktakingRecord>
+     */
+    List<YwStocktakingRecord> findList(YwStocktakingRecord ywStocktakingRecord);
+  
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<YwStocktakingRecord>
+     */
+    PageData<YwStocktakingRecord> findPage(PageWrap<YwStocktakingRecord> pageWrap);
+
+    /**
+     * 鏉′欢缁熻
+     *
+     * @param ywStocktakingRecord 瀹炰綋瀵硅薄
+     * @return long
+     */
+    long count(YwStocktakingRecord ywStocktakingRecord);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwStocktakingService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwStocktakingService.java
new file mode 100644
index 0000000..268420f
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwStocktakingService.java
@@ -0,0 +1,97 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.YwStocktaking;
+import java.util.List;
+
+/**
+ * 杩愮淮鐩樼偣淇℃伅琛⊿ervice瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+public interface YwStocktakingService {
+
+    /**
+     * 鍒涘缓
+     * 
+     * @param ywStocktaking 瀹炰綋瀵硅薄
+     * @return Integer
+     */
+    Integer create(YwStocktaking ywStocktaking);
+
+    /**
+     * 涓婚敭鍒犻櫎
+     *
+     * @param id 涓婚敭
+     */
+    void deleteById(Integer id);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param ywStocktaking 瀹炰綋瀵硅薄
+     */
+    void delete(YwStocktaking ywStocktaking);
+
+    /**
+     * 鎵归噺涓婚敭鍒犻櫎
+     *
+     * @param ids 涓婚敭闆�
+     */
+    void deleteByIdInBatch(List<Integer> ids);
+
+    /**
+     * 涓婚敭鏇存柊
+     *
+     * @param ywStocktaking 瀹炰綋瀵硅薄
+     */
+    void updateById(YwStocktaking ywStocktaking);
+
+    /**
+     * 鎵归噺涓婚敭鏇存柊
+     *
+     * @param ywStocktakings 瀹炰綋闆�
+     */
+    void updateByIdInBatch(List<YwStocktaking> ywStocktakings);
+
+    /**
+     * 涓婚敭鏌ヨ
+     *
+     * @param id 涓婚敭
+     * @return YwStocktaking
+     */
+    YwStocktaking findById(Integer id);
+
+    /**
+     * 鏉′欢鏌ヨ鍗曟潯璁板綍
+     *
+     * @param ywStocktaking 瀹炰綋瀵硅薄
+     * @return YwStocktaking
+     */
+    YwStocktaking findOne(YwStocktaking ywStocktaking);
+
+    /**
+     * 鏉′欢鏌ヨ
+     *
+     * @param ywStocktaking 瀹炰綋瀵硅薄
+     * @return List<YwStocktaking>
+     */
+    List<YwStocktaking> findList(YwStocktaking ywStocktaking);
+  
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<YwStocktaking>
+     */
+    PageData<YwStocktaking> findPage(PageWrap<YwStocktaking> pageWrap);
+
+    /**
+     * 鏉′欢缁熻
+     *
+     * @param ywStocktaking 瀹炰綋瀵硅薄
+     * @return long
+     */
+    long count(YwStocktaking ywStocktaking);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwWarehouseService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwWarehouseService.java
new file mode 100644
index 0000000..899ae96
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwWarehouseService.java
@@ -0,0 +1,97 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.YwWarehouse;
+import java.util.List;
+
+/**
+ * 杩愮淮浠撳簱淇℃伅琛⊿ervice瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+public interface YwWarehouseService {
+
+    /**
+     * 鍒涘缓
+     * 
+     * @param ywWarehouse 瀹炰綋瀵硅薄
+     * @return Integer
+     */
+    Integer create(YwWarehouse ywWarehouse);
+
+    /**
+     * 涓婚敭鍒犻櫎
+     *
+     * @param id 涓婚敭
+     */
+    void deleteById(Integer id);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param ywWarehouse 瀹炰綋瀵硅薄
+     */
+    void delete(YwWarehouse ywWarehouse);
+
+    /**
+     * 鎵归噺涓婚敭鍒犻櫎
+     *
+     * @param ids 涓婚敭闆�
+     */
+    void deleteByIdInBatch(List<Integer> ids);
+
+    /**
+     * 涓婚敭鏇存柊
+     *
+     * @param ywWarehouse 瀹炰綋瀵硅薄
+     */
+    void updateById(YwWarehouse ywWarehouse);
+
+    /**
+     * 鎵归噺涓婚敭鏇存柊
+     *
+     * @param ywWarehouses 瀹炰綋闆�
+     */
+    void updateByIdInBatch(List<YwWarehouse> ywWarehouses);
+
+    /**
+     * 涓婚敭鏌ヨ
+     *
+     * @param id 涓婚敭
+     * @return YwWarehouse
+     */
+    YwWarehouse findById(Integer id);
+
+    /**
+     * 鏉′欢鏌ヨ鍗曟潯璁板綍
+     *
+     * @param ywWarehouse 瀹炰綋瀵硅薄
+     * @return YwWarehouse
+     */
+    YwWarehouse findOne(YwWarehouse ywWarehouse);
+
+    /**
+     * 鏉′欢鏌ヨ
+     *
+     * @param ywWarehouse 瀹炰綋瀵硅薄
+     * @return List<YwWarehouse>
+     */
+    List<YwWarehouse> findList(YwWarehouse ywWarehouse);
+  
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<YwWarehouse>
+     */
+    PageData<YwWarehouse> findPage(PageWrap<YwWarehouse> pageWrap);
+
+    /**
+     * 鏉′欢缁熻
+     *
+     * @param ywWarehouse 瀹炰綋瀵硅薄
+     * @return long
+     */
+    long count(YwWarehouse ywWarehouse);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwMaterialServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwMaterialServiceImpl.java
new file mode 100644
index 0000000..27e1c16
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwMaterialServiceImpl.java
@@ -0,0 +1,170 @@
+package com.doumee.service.business.impl;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.YwMaterialMapper;
+import com.doumee.dao.business.model.YwMaterial;
+import com.doumee.service.business.YwMaterialService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * 杩愮淮璧勪骇淇℃伅琛⊿ervice瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Service
+public class YwMaterialServiceImpl implements YwMaterialService {
+
+    @Autowired
+    private YwMaterialMapper ywMaterialMapper;
+
+    @Override
+    public Integer create(YwMaterial ywMaterial) {
+        ywMaterialMapper.insert(ywMaterial);
+        return ywMaterial.getId();
+    }
+
+    @Override
+    public void deleteById(Integer id) {
+        ywMaterialMapper.deleteById(id);
+    }
+
+    @Override
+    public void delete(YwMaterial ywMaterial) {
+        UpdateWrapper<YwMaterial> deleteWrapper = new UpdateWrapper<>(ywMaterial);
+        ywMaterialMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<Integer> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        ywMaterialMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void updateById(YwMaterial ywMaterial) {
+        ywMaterialMapper.updateById(ywMaterial);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<YwMaterial> ywMaterials) {
+        if (CollectionUtils.isEmpty(ywMaterials)) {
+            return;
+        }
+        for (YwMaterial ywMaterial: ywMaterials) {
+            this.updateById(ywMaterial);
+        }
+    }
+
+    @Override
+    public YwMaterial findById(Integer id) {
+        return ywMaterialMapper.selectById(id);
+    }
+
+    @Override
+    public YwMaterial findOne(YwMaterial ywMaterial) {
+        QueryWrapper<YwMaterial> wrapper = new QueryWrapper<>(ywMaterial);
+        return ywMaterialMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<YwMaterial> findList(YwMaterial ywMaterial) {
+        QueryWrapper<YwMaterial> wrapper = new QueryWrapper<>(ywMaterial);
+        return ywMaterialMapper.selectList(wrapper);
+    }
+  
+    @Override
+    public PageData<YwMaterial> findPage(PageWrap<YwMaterial> pageWrap) {
+        IPage<YwMaterial> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<YwMaterial> queryWrapper = new QueryWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.lambda().eq(YwMaterial::getId, pageWrap.getModel().getId());
+        }
+        if (pageWrap.getModel().getCreator() != null) {
+            queryWrapper.lambda().eq(YwMaterial::getCreator, pageWrap.getModel().getCreator());
+        }
+        if (pageWrap.getModel().getCreateDate() != null) {
+            queryWrapper.lambda().ge(YwMaterial::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.lambda().le(YwMaterial::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+        }
+        if (pageWrap.getModel().getEditor() != null) {
+            queryWrapper.lambda().eq(YwMaterial::getEditor, pageWrap.getModel().getEditor());
+        }
+        if (pageWrap.getModel().getEditDate() != null) {
+            queryWrapper.lambda().ge(YwMaterial::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.lambda().le(YwMaterial::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+        }
+        if (pageWrap.getModel().getIsdeleted() != null) {
+            queryWrapper.lambda().eq(YwMaterial::getIsdeleted, pageWrap.getModel().getIsdeleted());
+        }
+        if (pageWrap.getModel().getRemark() != null) {
+            queryWrapper.lambda().eq(YwMaterial::getRemark, pageWrap.getModel().getRemark());
+        }
+        if (pageWrap.getModel().getName() != null) {
+            queryWrapper.lambda().ge(YwMaterial::getName, Utils.Date.getStart(pageWrap.getModel().getName()));
+            queryWrapper.lambda().le(YwMaterial::getName, Utils.Date.getEnd(pageWrap.getModel().getName()));
+        }
+        if (pageWrap.getModel().getStatus() != null) {
+            queryWrapper.lambda().eq(YwMaterial::getStatus, pageWrap.getModel().getStatus());
+        }
+        if (pageWrap.getModel().getCode() != null) {
+            queryWrapper.lambda().eq(YwMaterial::getCode, pageWrap.getModel().getCode());
+        }
+        if (pageWrap.getModel().getParentCateId() != null) {
+            queryWrapper.lambda().eq(YwMaterial::getParentCateId, pageWrap.getModel().getParentCateId());
+        }
+        if (pageWrap.getModel().getCateId() != null) {
+            queryWrapper.lambda().eq(YwMaterial::getCateId, pageWrap.getModel().getCateId());
+        }
+        if (pageWrap.getModel().getQrcode() != null) {
+            queryWrapper.lambda().eq(YwMaterial::getQrcode, pageWrap.getModel().getQrcode());
+        }
+        if (pageWrap.getModel().getSortnum() != null) {
+            queryWrapper.lambda().eq(YwMaterial::getSortnum, pageWrap.getModel().getSortnum());
+        }
+        if (pageWrap.getModel().getBrand() != null) {
+            queryWrapper.lambda().eq(YwMaterial::getBrand, pageWrap.getModel().getBrand());
+        }
+        if (pageWrap.getModel().getAttr() != null) {
+            queryWrapper.lambda().eq(YwMaterial::getAttr, pageWrap.getModel().getAttr());
+        }
+        if (pageWrap.getModel().getMinStock() != null) {
+            queryWrapper.lambda().eq(YwMaterial::getMinStock, pageWrap.getModel().getMinStock());
+        }
+        if (pageWrap.getModel().getMaxStock() != null) {
+            queryWrapper.lambda().eq(YwMaterial::getMaxStock, pageWrap.getModel().getMaxStock());
+        }
+        if (pageWrap.getModel().getUnitName() != null) {
+            queryWrapper.lambda().eq(YwMaterial::getUnitName, pageWrap.getModel().getUnitName());
+        }
+        if (pageWrap.getModel().getRoomId() != null) {
+            queryWrapper.lambda().eq(YwMaterial::getRoomId, pageWrap.getModel().getRoomId());
+        }
+        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                queryWrapper.orderByDesc(sortData.getProperty());
+            } else {
+                queryWrapper.orderByAsc(sortData.getProperty());
+            }
+        }
+        return PageData.from(ywMaterialMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public long count(YwMaterial ywMaterial) {
+        QueryWrapper<YwMaterial> wrapper = new QueryWrapper<>(ywMaterial);
+        return ywMaterialMapper.selectCount(wrapper);
+    }
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundServiceImpl.java
new file mode 100644
index 0000000..9e5724f
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwOutinboundServiceImpl.java
@@ -0,0 +1,155 @@
+package com.doumee.service.business.impl;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.YwOutinboundMapper;
+import com.doumee.dao.business.model.YwOutinbound;
+import com.doumee.service.business.YwOutinboundService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * 杩愮淮鍑哄叆搴撲俊鎭〃Service瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Service
+public class YwOutinboundServiceImpl implements YwOutinboundService {
+
+    @Autowired
+    private YwOutinboundMapper ywOutinboundMapper;
+
+    @Override
+    public Integer create(YwOutinbound ywOutinbound) {
+        ywOutinboundMapper.insert(ywOutinbound);
+        return ywOutinbound.getId();
+    }
+
+    @Override
+    public void deleteById(Integer id) {
+        ywOutinboundMapper.deleteById(id);
+    }
+
+    @Override
+    public void delete(YwOutinbound ywOutinbound) {
+        UpdateWrapper<YwOutinbound> deleteWrapper = new UpdateWrapper<>(ywOutinbound);
+        ywOutinboundMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<Integer> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        ywOutinboundMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void updateById(YwOutinbound ywOutinbound) {
+        ywOutinboundMapper.updateById(ywOutinbound);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<YwOutinbound> ywOutinbounds) {
+        if (CollectionUtils.isEmpty(ywOutinbounds)) {
+            return;
+        }
+        for (YwOutinbound ywOutinbound: ywOutinbounds) {
+            this.updateById(ywOutinbound);
+        }
+    }
+
+    @Override
+    public YwOutinbound findById(Integer id) {
+        return ywOutinboundMapper.selectById(id);
+    }
+
+    @Override
+    public YwOutinbound findOne(YwOutinbound ywOutinbound) {
+        QueryWrapper<YwOutinbound> wrapper = new QueryWrapper<>(ywOutinbound);
+        return ywOutinboundMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<YwOutinbound> findList(YwOutinbound ywOutinbound) {
+        QueryWrapper<YwOutinbound> wrapper = new QueryWrapper<>(ywOutinbound);
+        return ywOutinboundMapper.selectList(wrapper);
+    }
+  
+    @Override
+    public PageData<YwOutinbound> findPage(PageWrap<YwOutinbound> pageWrap) {
+        IPage<YwOutinbound> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<YwOutinbound> queryWrapper = new QueryWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.lambda().eq(YwOutinbound::getId, pageWrap.getModel().getId());
+        }
+        if (pageWrap.getModel().getCreator() != null) {
+            queryWrapper.lambda().eq(YwOutinbound::getCreator, pageWrap.getModel().getCreator());
+        }
+        if (pageWrap.getModel().getCreateDate() != null) {
+            queryWrapper.lambda().ge(YwOutinbound::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.lambda().le(YwOutinbound::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+        }
+        if (pageWrap.getModel().getEditor() != null) {
+            queryWrapper.lambda().eq(YwOutinbound::getEditor, pageWrap.getModel().getEditor());
+        }
+        if (pageWrap.getModel().getEditDate() != null) {
+            queryWrapper.lambda().ge(YwOutinbound::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.lambda().le(YwOutinbound::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+        }
+        if (pageWrap.getModel().getIsdeleted() != null) {
+            queryWrapper.lambda().eq(YwOutinbound::getIsdeleted, pageWrap.getModel().getIsdeleted());
+        }
+        if (pageWrap.getModel().getRemark() != null) {
+            queryWrapper.lambda().eq(YwOutinbound::getRemark, pageWrap.getModel().getRemark());
+        }
+        if (pageWrap.getModel().getWarehouseId() != null) {
+            queryWrapper.lambda().eq(YwOutinbound::getWarehouseId, pageWrap.getModel().getWarehouseId());
+        }
+        if (pageWrap.getModel().getMaterialId() != null) {
+            queryWrapper.lambda().eq(YwOutinbound::getMaterialId, pageWrap.getModel().getMaterialId());
+        }
+        if (pageWrap.getModel().getStock() != null) {
+            queryWrapper.lambda().eq(YwOutinbound::getStock, pageWrap.getModel().getStock());
+        }
+        if (pageWrap.getModel().getType() != null) {
+            queryWrapper.lambda().eq(YwOutinbound::getType, pageWrap.getModel().getType());
+        }
+        if (pageWrap.getModel().getOrigin() != null) {
+            queryWrapper.lambda().eq(YwOutinbound::getOrigin, pageWrap.getModel().getOrigin());
+        }
+        if (pageWrap.getModel().getContent() != null) {
+            queryWrapper.lambda().eq(YwOutinbound::getContent, pageWrap.getModel().getContent());
+        }
+        if (pageWrap.getModel().getDoneDate() != null) {
+            queryWrapper.lambda().ge(YwOutinbound::getDoneDate, Utils.Date.getStart(pageWrap.getModel().getDoneDate()));
+            queryWrapper.lambda().le(YwOutinbound::getDoneDate, Utils.Date.getEnd(pageWrap.getModel().getDoneDate()));
+        }
+        if (pageWrap.getModel().getStatus() != null) {
+            queryWrapper.lambda().eq(YwOutinbound::getStatus, pageWrap.getModel().getStatus());
+        }
+        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                queryWrapper.orderByDesc(sortData.getProperty());
+            } else {
+                queryWrapper.orderByAsc(sortData.getProperty());
+            }
+        }
+        return PageData.from(ywOutinboundMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public long count(YwOutinbound ywOutinbound) {
+        QueryWrapper<YwOutinbound> wrapper = new QueryWrapper<>(ywOutinbound);
+        return ywOutinboundMapper.selectCount(wrapper);
+    }
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProblemServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProblemServiceImpl.java
new file mode 100644
index 0000000..60ba960
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProblemServiceImpl.java
@@ -0,0 +1,172 @@
+package com.doumee.service.business.impl;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.YwProblemMapper;
+import com.doumee.dao.business.model.YwProblem;
+import com.doumee.service.business.YwProblemService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * 杩愮淮闂涓婃姤淇℃伅琛⊿ervice瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Service
+public class YwProblemServiceImpl implements YwProblemService {
+
+    @Autowired
+    private YwProblemMapper ywProblemMapper;
+
+    @Override
+    public Integer create(YwProblem ywProblem) {
+        ywProblemMapper.insert(ywProblem);
+        return ywProblem.getId();
+    }
+
+    @Override
+    public void deleteById(Integer id) {
+        ywProblemMapper.deleteById(id);
+    }
+
+    @Override
+    public void delete(YwProblem ywProblem) {
+        UpdateWrapper<YwProblem> deleteWrapper = new UpdateWrapper<>(ywProblem);
+        ywProblemMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<Integer> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        ywProblemMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void updateById(YwProblem ywProblem) {
+        ywProblemMapper.updateById(ywProblem);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<YwProblem> ywProblems) {
+        if (CollectionUtils.isEmpty(ywProblems)) {
+            return;
+        }
+        for (YwProblem ywProblem: ywProblems) {
+            this.updateById(ywProblem);
+        }
+    }
+
+    @Override
+    public YwProblem findById(Integer id) {
+        return ywProblemMapper.selectById(id);
+    }
+
+    @Override
+    public YwProblem findOne(YwProblem ywProblem) {
+        QueryWrapper<YwProblem> wrapper = new QueryWrapper<>(ywProblem);
+        return ywProblemMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<YwProblem> findList(YwProblem ywProblem) {
+        QueryWrapper<YwProblem> wrapper = new QueryWrapper<>(ywProblem);
+        return ywProblemMapper.selectList(wrapper);
+    }
+  
+    @Override
+    public PageData<YwProblem> findPage(PageWrap<YwProblem> pageWrap) {
+        IPage<YwProblem> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<YwProblem> queryWrapper = new QueryWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.lambda().eq(YwProblem::getId, pageWrap.getModel().getId());
+        }
+        if (pageWrap.getModel().getCreator() != null) {
+            queryWrapper.lambda().eq(YwProblem::getCreator, pageWrap.getModel().getCreator());
+        }
+        if (pageWrap.getModel().getCreateDate() != null) {
+            queryWrapper.lambda().ge(YwProblem::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.lambda().le(YwProblem::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+        }
+        if (pageWrap.getModel().getEditor() != null) {
+            queryWrapper.lambda().eq(YwProblem::getEditor, pageWrap.getModel().getEditor());
+        }
+        if (pageWrap.getModel().getEditDate() != null) {
+            queryWrapper.lambda().ge(YwProblem::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.lambda().le(YwProblem::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+        }
+        if (pageWrap.getModel().getIsdeleted() != null) {
+            queryWrapper.lambda().eq(YwProblem::getIsdeleted, pageWrap.getModel().getIsdeleted());
+        }
+        if (pageWrap.getModel().getPosition() != null) {
+            queryWrapper.lambda().eq(YwProblem::getPosition, pageWrap.getModel().getPosition());
+        }
+        if (pageWrap.getModel().getRemark() != null) {
+            queryWrapper.lambda().eq(YwProblem::getRemark, pageWrap.getModel().getRemark());
+        }
+        if (pageWrap.getModel().getStatus() != null) {
+            queryWrapper.lambda().eq(YwProblem::getStatus, pageWrap.getModel().getStatus());
+        }
+        if (pageWrap.getModel().getContent() != null) {
+            queryWrapper.lambda().eq(YwProblem::getContent, pageWrap.getModel().getContent());
+        }
+        if (pageWrap.getModel().getName() != null) {
+            queryWrapper.lambda().ge(YwProblem::getName, Utils.Date.getStart(pageWrap.getModel().getName()));
+            queryWrapper.lambda().le(YwProblem::getName, Utils.Date.getEnd(pageWrap.getModel().getName()));
+        }
+        if (pageWrap.getModel().getPhone() != null) {
+            queryWrapper.lambda().eq(YwProblem::getPhone, pageWrap.getModel().getPhone());
+        }
+        if (pageWrap.getModel().getSubmitDate() != null) {
+            queryWrapper.lambda().ge(YwProblem::getSubmitDate, Utils.Date.getStart(pageWrap.getModel().getSubmitDate()));
+            queryWrapper.lambda().le(YwProblem::getSubmitDate, Utils.Date.getEnd(pageWrap.getModel().getSubmitDate()));
+        }
+        if (pageWrap.getModel().getCode() != null) {
+            queryWrapper.lambda().eq(YwProblem::getCode, pageWrap.getModel().getCode());
+        }
+        if (pageWrap.getModel().getDealStatus() != null) {
+            queryWrapper.lambda().eq(YwProblem::getDealStatus, pageWrap.getModel().getDealStatus());
+        }
+        if (pageWrap.getModel().getDealUserId() != null) {
+            queryWrapper.lambda().eq(YwProblem::getDealUserId, pageWrap.getModel().getDealUserId());
+        }
+        if (pageWrap.getModel().getDealDate() != null) {
+            queryWrapper.lambda().ge(YwProblem::getDealDate, Utils.Date.getStart(pageWrap.getModel().getDealDate()));
+            queryWrapper.lambda().le(YwProblem::getDealDate, Utils.Date.getEnd(pageWrap.getModel().getDealDate()));
+        }
+        if (pageWrap.getModel().getDealInfo() != null) {
+            queryWrapper.lambda().eq(YwProblem::getDealInfo, pageWrap.getModel().getDealInfo());
+        }
+        if (pageWrap.getModel().getDealType() != null) {
+            queryWrapper.lambda().eq(YwProblem::getDealType, pageWrap.getModel().getDealType());
+        }
+        if (pageWrap.getModel().getWorkorderId() != null) {
+            queryWrapper.lambda().eq(YwProblem::getWorkorderId, pageWrap.getModel().getWorkorderId());
+        }
+        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                queryWrapper.orderByDesc(sortData.getProperty());
+            } else {
+                queryWrapper.orderByAsc(sortData.getProperty());
+            }
+        }
+        return PageData.from(ywProblemMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public long count(YwProblem ywProblem) {
+        QueryWrapper<YwProblem> wrapper = new QueryWrapper<>(ywProblem);
+        return ywProblemMapper.selectCount(wrapper);
+    }
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStockServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStockServiceImpl.java
new file mode 100644
index 0000000..c378978
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStockServiceImpl.java
@@ -0,0 +1,139 @@
+package com.doumee.service.business.impl;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.YwStockMapper;
+import com.doumee.dao.business.model.YwStock;
+import com.doumee.service.business.YwStockService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * 杩愮淮搴撳瓨淇℃伅琛⊿ervice瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Service
+public class YwStockServiceImpl implements YwStockService {
+
+    @Autowired
+    private YwStockMapper ywStockMapper;
+
+    @Override
+    public Integer create(YwStock ywStock) {
+        ywStockMapper.insert(ywStock);
+        return ywStock.getId();
+    }
+
+    @Override
+    public void deleteById(Integer id) {
+        ywStockMapper.deleteById(id);
+    }
+
+    @Override
+    public void delete(YwStock ywStock) {
+        UpdateWrapper<YwStock> deleteWrapper = new UpdateWrapper<>(ywStock);
+        ywStockMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<Integer> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        ywStockMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void updateById(YwStock ywStock) {
+        ywStockMapper.updateById(ywStock);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<YwStock> ywStocks) {
+        if (CollectionUtils.isEmpty(ywStocks)) {
+            return;
+        }
+        for (YwStock ywStock: ywStocks) {
+            this.updateById(ywStock);
+        }
+    }
+
+    @Override
+    public YwStock findById(Integer id) {
+        return ywStockMapper.selectById(id);
+    }
+
+    @Override
+    public YwStock findOne(YwStock ywStock) {
+        QueryWrapper<YwStock> wrapper = new QueryWrapper<>(ywStock);
+        return ywStockMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<YwStock> findList(YwStock ywStock) {
+        QueryWrapper<YwStock> wrapper = new QueryWrapper<>(ywStock);
+        return ywStockMapper.selectList(wrapper);
+    }
+  
+    @Override
+    public PageData<YwStock> findPage(PageWrap<YwStock> pageWrap) {
+        IPage<YwStock> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<YwStock> queryWrapper = new QueryWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.lambda().eq(YwStock::getId, pageWrap.getModel().getId());
+        }
+        if (pageWrap.getModel().getCreator() != null) {
+            queryWrapper.lambda().eq(YwStock::getCreator, pageWrap.getModel().getCreator());
+        }
+        if (pageWrap.getModel().getCreateDate() != null) {
+            queryWrapper.lambda().ge(YwStock::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.lambda().le(YwStock::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+        }
+        if (pageWrap.getModel().getEditor() != null) {
+            queryWrapper.lambda().eq(YwStock::getEditor, pageWrap.getModel().getEditor());
+        }
+        if (pageWrap.getModel().getEditDate() != null) {
+            queryWrapper.lambda().ge(YwStock::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.lambda().le(YwStock::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+        }
+        if (pageWrap.getModel().getIsdeleted() != null) {
+            queryWrapper.lambda().eq(YwStock::getIsdeleted, pageWrap.getModel().getIsdeleted());
+        }
+        if (pageWrap.getModel().getRemark() != null) {
+            queryWrapper.lambda().eq(YwStock::getRemark, pageWrap.getModel().getRemark());
+        }
+        if (pageWrap.getModel().getWarehouseId() != null) {
+            queryWrapper.lambda().eq(YwStock::getWarehouseId, pageWrap.getModel().getWarehouseId());
+        }
+        if (pageWrap.getModel().getMaterialId() != null) {
+            queryWrapper.lambda().eq(YwStock::getMaterialId, pageWrap.getModel().getMaterialId());
+        }
+        if (pageWrap.getModel().getStock() != null) {
+            queryWrapper.lambda().eq(YwStock::getStock, pageWrap.getModel().getStock());
+        }
+        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                queryWrapper.orderByDesc(sortData.getProperty());
+            } else {
+                queryWrapper.orderByAsc(sortData.getProperty());
+            }
+        }
+        return PageData.from(ywStockMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public long count(YwStock ywStock) {
+        QueryWrapper<YwStock> wrapper = new QueryWrapper<>(ywStock);
+        return ywStockMapper.selectCount(wrapper);
+    }
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingRecordServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingRecordServiceImpl.java
new file mode 100644
index 0000000..70631e9
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingRecordServiceImpl.java
@@ -0,0 +1,158 @@
+package com.doumee.service.business.impl;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.YwStocktakingRecordMapper;
+import com.doumee.dao.business.model.YwStocktakingRecord;
+import com.doumee.service.business.YwStocktakingRecordService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * 杩愮淮鐩樼偣鏄庣粏璁板綍琛⊿ervice瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Service
+public class YwStocktakingRecordServiceImpl implements YwStocktakingRecordService {
+
+    @Autowired
+    private YwStocktakingRecordMapper ywStocktakingRecordMapper;
+
+    @Override
+    public Integer create(YwStocktakingRecord ywStocktakingRecord) {
+        ywStocktakingRecordMapper.insert(ywStocktakingRecord);
+        return ywStocktakingRecord.getId();
+    }
+
+    @Override
+    public void deleteById(Integer id) {
+        ywStocktakingRecordMapper.deleteById(id);
+    }
+
+    @Override
+    public void delete(YwStocktakingRecord ywStocktakingRecord) {
+        UpdateWrapper<YwStocktakingRecord> deleteWrapper = new UpdateWrapper<>(ywStocktakingRecord);
+        ywStocktakingRecordMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<Integer> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        ywStocktakingRecordMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void updateById(YwStocktakingRecord ywStocktakingRecord) {
+        ywStocktakingRecordMapper.updateById(ywStocktakingRecord);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<YwStocktakingRecord> ywStocktakingRecords) {
+        if (CollectionUtils.isEmpty(ywStocktakingRecords)) {
+            return;
+        }
+        for (YwStocktakingRecord ywStocktakingRecord: ywStocktakingRecords) {
+            this.updateById(ywStocktakingRecord);
+        }
+    }
+
+    @Override
+    public YwStocktakingRecord findById(Integer id) {
+        return ywStocktakingRecordMapper.selectById(id);
+    }
+
+    @Override
+    public YwStocktakingRecord findOne(YwStocktakingRecord ywStocktakingRecord) {
+        QueryWrapper<YwStocktakingRecord> wrapper = new QueryWrapper<>(ywStocktakingRecord);
+        return ywStocktakingRecordMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<YwStocktakingRecord> findList(YwStocktakingRecord ywStocktakingRecord) {
+        QueryWrapper<YwStocktakingRecord> wrapper = new QueryWrapper<>(ywStocktakingRecord);
+        return ywStocktakingRecordMapper.selectList(wrapper);
+    }
+  
+    @Override
+    public PageData<YwStocktakingRecord> findPage(PageWrap<YwStocktakingRecord> pageWrap) {
+        IPage<YwStocktakingRecord> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<YwStocktakingRecord> queryWrapper = new QueryWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.lambda().eq(YwStocktakingRecord::getId, pageWrap.getModel().getId());
+        }
+        if (pageWrap.getModel().getCreator() != null) {
+            queryWrapper.lambda().eq(YwStocktakingRecord::getCreator, pageWrap.getModel().getCreator());
+        }
+        if (pageWrap.getModel().getCreateDate() != null) {
+            queryWrapper.lambda().ge(YwStocktakingRecord::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.lambda().le(YwStocktakingRecord::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+        }
+        if (pageWrap.getModel().getEditor() != null) {
+            queryWrapper.lambda().eq(YwStocktakingRecord::getEditor, pageWrap.getModel().getEditor());
+        }
+        if (pageWrap.getModel().getEditDate() != null) {
+            queryWrapper.lambda().ge(YwStocktakingRecord::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.lambda().le(YwStocktakingRecord::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+        }
+        if (pageWrap.getModel().getIsdeleted() != null) {
+            queryWrapper.lambda().eq(YwStocktakingRecord::getIsdeleted, pageWrap.getModel().getIsdeleted());
+        }
+        if (pageWrap.getModel().getRemark() != null) {
+            queryWrapper.lambda().eq(YwStocktakingRecord::getRemark, pageWrap.getModel().getRemark());
+        }
+        if (pageWrap.getModel().getStatus() != null) {
+            queryWrapper.lambda().eq(YwStocktakingRecord::getStatus, pageWrap.getModel().getStatus());
+        }
+        if (pageWrap.getModel().getUserId() != null) {
+            queryWrapper.lambda().eq(YwStocktakingRecord::getUserId, pageWrap.getModel().getUserId());
+        }
+        if (pageWrap.getModel().getPlanDate() != null) {
+            queryWrapper.lambda().ge(YwStocktakingRecord::getPlanDate, Utils.Date.getStart(pageWrap.getModel().getPlanDate()));
+            queryWrapper.lambda().le(YwStocktakingRecord::getPlanDate, Utils.Date.getEnd(pageWrap.getModel().getPlanDate()));
+        }
+        if (pageWrap.getModel().getCode() != null) {
+            queryWrapper.lambda().eq(YwStocktakingRecord::getCode, pageWrap.getModel().getCode());
+        }
+        if (pageWrap.getModel().getMaterialId() != null) {
+            queryWrapper.lambda().eq(YwStocktakingRecord::getMaterialId, pageWrap.getModel().getMaterialId());
+        }
+        if (pageWrap.getModel().getStock() != null) {
+            queryWrapper.lambda().eq(YwStocktakingRecord::getStock, pageWrap.getModel().getStock());
+        }
+        if (pageWrap.getModel().getActStock() != null) {
+            queryWrapper.lambda().eq(YwStocktakingRecord::getActStock, pageWrap.getModel().getActStock());
+        }
+        if (pageWrap.getModel().getType() != null) {
+            queryWrapper.lambda().eq(YwStocktakingRecord::getType, pageWrap.getModel().getType());
+        }
+        if (pageWrap.getModel().getStocktakingId() != null) {
+            queryWrapper.lambda().eq(YwStocktakingRecord::getStocktakingId, pageWrap.getModel().getStocktakingId());
+        }
+        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                queryWrapper.orderByDesc(sortData.getProperty());
+            } else {
+                queryWrapper.orderByAsc(sortData.getProperty());
+            }
+        }
+        return PageData.from(ywStocktakingRecordMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public long count(YwStocktakingRecord ywStocktakingRecord) {
+        QueryWrapper<YwStocktakingRecord> wrapper = new QueryWrapper<>(ywStocktakingRecord);
+        return ywStocktakingRecordMapper.selectCount(wrapper);
+    }
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingServiceImpl.java
new file mode 100644
index 0000000..4901208
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwStocktakingServiceImpl.java
@@ -0,0 +1,194 @@
+package com.doumee.service.business.impl;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.YwStocktakingMapper;
+import com.doumee.dao.business.model.YwStocktaking;
+import com.doumee.service.business.YwStocktakingService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * 杩愮淮鐩樼偣淇℃伅琛⊿ervice瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Service
+public class YwStocktakingServiceImpl implements YwStocktakingService {
+
+    @Autowired
+    private YwStocktakingMapper ywStocktakingMapper;
+
+    @Override
+    public Integer create(YwStocktaking ywStocktaking) {
+        ywStocktakingMapper.insert(ywStocktaking);
+        return ywStocktaking.getId();
+    }
+
+    @Override
+    public void deleteById(Integer id) {
+        ywStocktakingMapper.deleteById(id);
+    }
+
+    @Override
+    public void delete(YwStocktaking ywStocktaking) {
+        UpdateWrapper<YwStocktaking> deleteWrapper = new UpdateWrapper<>(ywStocktaking);
+        ywStocktakingMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<Integer> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        ywStocktakingMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void updateById(YwStocktaking ywStocktaking) {
+        ywStocktakingMapper.updateById(ywStocktaking);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<YwStocktaking> ywStocktakings) {
+        if (CollectionUtils.isEmpty(ywStocktakings)) {
+            return;
+        }
+        for (YwStocktaking ywStocktaking: ywStocktakings) {
+            this.updateById(ywStocktaking);
+        }
+    }
+
+    @Override
+    public YwStocktaking findById(Integer id) {
+        return ywStocktakingMapper.selectById(id);
+    }
+
+    @Override
+    public YwStocktaking findOne(YwStocktaking ywStocktaking) {
+        QueryWrapper<YwStocktaking> wrapper = new QueryWrapper<>(ywStocktaking);
+        return ywStocktakingMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<YwStocktaking> findList(YwStocktaking ywStocktaking) {
+        QueryWrapper<YwStocktaking> wrapper = new QueryWrapper<>(ywStocktaking);
+        return ywStocktakingMapper.selectList(wrapper);
+    }
+  
+    @Override
+    public PageData<YwStocktaking> findPage(PageWrap<YwStocktaking> pageWrap) {
+        IPage<YwStocktaking> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<YwStocktaking> queryWrapper = new QueryWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.lambda().eq(YwStocktaking::getId, pageWrap.getModel().getId());
+        }
+        if (pageWrap.getModel().getCreator() != null) {
+            queryWrapper.lambda().eq(YwStocktaking::getCreator, pageWrap.getModel().getCreator());
+        }
+        if (pageWrap.getModel().getCreateDate() != null) {
+            queryWrapper.lambda().ge(YwStocktaking::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.lambda().le(YwStocktaking::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+        }
+        if (pageWrap.getModel().getEditor() != null) {
+            queryWrapper.lambda().eq(YwStocktaking::getEditor, pageWrap.getModel().getEditor());
+        }
+        if (pageWrap.getModel().getEditDate() != null) {
+            queryWrapper.lambda().ge(YwStocktaking::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.lambda().le(YwStocktaking::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+        }
+        if (pageWrap.getModel().getIsdeleted() != null) {
+            queryWrapper.lambda().eq(YwStocktaking::getIsdeleted, pageWrap.getModel().getIsdeleted());
+        }
+        if (pageWrap.getModel().getPosition() != null) {
+            queryWrapper.lambda().eq(YwStocktaking::getPosition, pageWrap.getModel().getPosition());
+        }
+        if (pageWrap.getModel().getRemark() != null) {
+            queryWrapper.lambda().eq(YwStocktaking::getRemark, pageWrap.getModel().getRemark());
+        }
+        if (pageWrap.getModel().getStatus() != null) {
+            queryWrapper.lambda().eq(YwStocktaking::getStatus, pageWrap.getModel().getStatus());
+        }
+        if (pageWrap.getModel().getUserId() != null) {
+            queryWrapper.lambda().eq(YwStocktaking::getUserId, pageWrap.getModel().getUserId());
+        }
+        if (pageWrap.getModel().getPlanDate() != null) {
+            queryWrapper.lambda().ge(YwStocktaking::getPlanDate, Utils.Date.getStart(pageWrap.getModel().getPlanDate()));
+            queryWrapper.lambda().le(YwStocktaking::getPlanDate, Utils.Date.getEnd(pageWrap.getModel().getPlanDate()));
+        }
+        if (pageWrap.getModel().getCode() != null) {
+            queryWrapper.lambda().eq(YwStocktaking::getCode, pageWrap.getModel().getCode());
+        }
+        if (pageWrap.getModel().getDealUserId() != null) {
+            queryWrapper.lambda().eq(YwStocktaking::getDealUserId, pageWrap.getModel().getDealUserId());
+        }
+        if (pageWrap.getModel().getDealDate() != null) {
+            queryWrapper.lambda().ge(YwStocktaking::getDealDate, Utils.Date.getStart(pageWrap.getModel().getDealDate()));
+            queryWrapper.lambda().le(YwStocktaking::getDealDate, Utils.Date.getEnd(pageWrap.getModel().getDealDate()));
+        }
+        if (pageWrap.getModel().getDealInfo() != null) {
+            queryWrapper.lambda().eq(YwStocktaking::getDealInfo, pageWrap.getModel().getDealInfo());
+        }
+        if (pageWrap.getModel().getDoneNum() != null) {
+            queryWrapper.lambda().eq(YwStocktaking::getDoneNum, pageWrap.getModel().getDoneNum());
+        }
+        if (pageWrap.getModel().getWaitNum() != null) {
+            queryWrapper.lambda().eq(YwStocktaking::getWaitNum, pageWrap.getModel().getWaitNum());
+        }
+        if (pageWrap.getModel().getTotalNum() != null) {
+            queryWrapper.lambda().eq(YwStocktaking::getTotalNum, pageWrap.getModel().getTotalNum());
+        }
+        if (pageWrap.getModel().getProfitNum() != null) {
+            queryWrapper.lambda().eq(YwStocktaking::getProfitNum, pageWrap.getModel().getProfitNum());
+        }
+        if (pageWrap.getModel().getLossNum() != null) {
+            queryWrapper.lambda().eq(YwStocktaking::getLossNum, pageWrap.getModel().getLossNum());
+        }
+        if (pageWrap.getModel().getEqualNum() != null) {
+            queryWrapper.lambda().eq(YwStocktaking::getEqualNum, pageWrap.getModel().getEqualNum());
+        }
+        if (pageWrap.getModel().getDoneUserId() != null) {
+            queryWrapper.lambda().eq(YwStocktaking::getDoneUserId, pageWrap.getModel().getDoneUserId());
+        }
+        if (pageWrap.getModel().getDoneDate() != null) {
+            queryWrapper.lambda().ge(YwStocktaking::getDoneDate, Utils.Date.getStart(pageWrap.getModel().getDoneDate()));
+            queryWrapper.lambda().le(YwStocktaking::getDoneDate, Utils.Date.getEnd(pageWrap.getModel().getDoneDate()));
+        }
+        if (pageWrap.getModel().getDoneInfo() != null) {
+            queryWrapper.lambda().eq(YwStocktaking::getDoneInfo, pageWrap.getModel().getDoneInfo());
+        }
+        if (pageWrap.getModel().getCancelUserId() != null) {
+            queryWrapper.lambda().eq(YwStocktaking::getCancelUserId, pageWrap.getModel().getCancelUserId());
+        }
+        if (pageWrap.getModel().getCancelDate() != null) {
+            queryWrapper.lambda().ge(YwStocktaking::getCancelDate, Utils.Date.getStart(pageWrap.getModel().getCancelDate()));
+            queryWrapper.lambda().le(YwStocktaking::getCancelDate, Utils.Date.getEnd(pageWrap.getModel().getCancelDate()));
+        }
+        if (pageWrap.getModel().getCancelInfo() != null) {
+            queryWrapper.lambda().eq(YwStocktaking::getCancelInfo, pageWrap.getModel().getCancelInfo());
+        }
+        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                queryWrapper.orderByDesc(sortData.getProperty());
+            } else {
+                queryWrapper.orderByAsc(sortData.getProperty());
+            }
+        }
+        return PageData.from(ywStocktakingMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public long count(YwStocktaking ywStocktaking) {
+        QueryWrapper<YwStocktaking> wrapper = new QueryWrapper<>(ywStocktaking);
+        return ywStocktakingMapper.selectCount(wrapper);
+    }
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWarehouseServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWarehouseServiceImpl.java
new file mode 100644
index 0000000..1fdf92c
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWarehouseServiceImpl.java
@@ -0,0 +1,149 @@
+package com.doumee.service.business.impl;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.YwWarehouseMapper;
+import com.doumee.dao.business.model.YwWarehouse;
+import com.doumee.service.business.YwWarehouseService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * 杩愮淮浠撳簱淇℃伅琛⊿ervice瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2025/01/06 11:05
+ */
+@Service
+public class YwWarehouseServiceImpl implements YwWarehouseService {
+
+    @Autowired
+    private YwWarehouseMapper ywWarehouseMapper;
+
+    @Override
+    public Integer create(YwWarehouse ywWarehouse) {
+        ywWarehouseMapper.insert(ywWarehouse);
+        return ywWarehouse.getId();
+    }
+
+    @Override
+    public void deleteById(Integer id) {
+        ywWarehouseMapper.deleteById(id);
+    }
+
+    @Override
+    public void delete(YwWarehouse ywWarehouse) {
+        UpdateWrapper<YwWarehouse> deleteWrapper = new UpdateWrapper<>(ywWarehouse);
+        ywWarehouseMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<Integer> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        ywWarehouseMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void updateById(YwWarehouse ywWarehouse) {
+        ywWarehouseMapper.updateById(ywWarehouse);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<YwWarehouse> ywWarehouses) {
+        if (CollectionUtils.isEmpty(ywWarehouses)) {
+            return;
+        }
+        for (YwWarehouse ywWarehouse: ywWarehouses) {
+            this.updateById(ywWarehouse);
+        }
+    }
+
+    @Override
+    public YwWarehouse findById(Integer id) {
+        return ywWarehouseMapper.selectById(id);
+    }
+
+    @Override
+    public YwWarehouse findOne(YwWarehouse ywWarehouse) {
+        QueryWrapper<YwWarehouse> wrapper = new QueryWrapper<>(ywWarehouse);
+        return ywWarehouseMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<YwWarehouse> findList(YwWarehouse ywWarehouse) {
+        QueryWrapper<YwWarehouse> wrapper = new QueryWrapper<>(ywWarehouse);
+        return ywWarehouseMapper.selectList(wrapper);
+    }
+  
+    @Override
+    public PageData<YwWarehouse> findPage(PageWrap<YwWarehouse> pageWrap) {
+        IPage<YwWarehouse> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<YwWarehouse> queryWrapper = new QueryWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.lambda().eq(YwWarehouse::getId, pageWrap.getModel().getId());
+        }
+        if (pageWrap.getModel().getCreator() != null) {
+            queryWrapper.lambda().eq(YwWarehouse::getCreator, pageWrap.getModel().getCreator());
+        }
+        if (pageWrap.getModel().getCreateDate() != null) {
+            queryWrapper.lambda().ge(YwWarehouse::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.lambda().le(YwWarehouse::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+        }
+        if (pageWrap.getModel().getEditor() != null) {
+            queryWrapper.lambda().eq(YwWarehouse::getEditor, pageWrap.getModel().getEditor());
+        }
+        if (pageWrap.getModel().getEditDate() != null) {
+            queryWrapper.lambda().ge(YwWarehouse::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.lambda().le(YwWarehouse::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+        }
+        if (pageWrap.getModel().getIsdeleted() != null) {
+            queryWrapper.lambda().eq(YwWarehouse::getIsdeleted, pageWrap.getModel().getIsdeleted());
+        }
+        if (pageWrap.getModel().getRemark() != null) {
+            queryWrapper.lambda().eq(YwWarehouse::getRemark, pageWrap.getModel().getRemark());
+        }
+        if (pageWrap.getModel().getStatus() != null) {
+            queryWrapper.lambda().eq(YwWarehouse::getStatus, pageWrap.getModel().getStatus());
+        }
+        if (pageWrap.getModel().getName() != null) {
+            queryWrapper.lambda().ge(YwWarehouse::getName, Utils.Date.getStart(pageWrap.getModel().getName()));
+            queryWrapper.lambda().le(YwWarehouse::getName, Utils.Date.getEnd(pageWrap.getModel().getName()));
+        }
+        if (pageWrap.getModel().getPosition() != null) {
+            queryWrapper.lambda().eq(YwWarehouse::getPosition, pageWrap.getModel().getPosition());
+        }
+        if (pageWrap.getModel().getCode() != null) {
+            queryWrapper.lambda().eq(YwWarehouse::getCode, pageWrap.getModel().getCode());
+        }
+        if (pageWrap.getModel().getUserId() != null) {
+            queryWrapper.lambda().eq(YwWarehouse::getUserId, pageWrap.getModel().getUserId());
+        }
+        if (pageWrap.getModel().getSortnum() != null) {
+            queryWrapper.lambda().eq(YwWarehouse::getSortnum, pageWrap.getModel().getSortnum());
+        }
+        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                queryWrapper.orderByDesc(sortData.getProperty());
+            } else {
+                queryWrapper.orderByAsc(sortData.getProperty());
+            }
+        }
+        return PageData.from(ywWarehouseMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public long count(YwWarehouse ywWarehouse) {
+        QueryWrapper<YwWarehouse> wrapper = new QueryWrapper<>(ywWarehouse);
+        return ywWarehouseMapper.selectCount(wrapper);
+    }
+}

--
Gitblit v1.9.3