From 39363e9edaf0b6961e9ed6777a19aa929a4fba7d Mon Sep 17 00:00:00 2001
From: zhangherong <571457620@qq.com>
Date: 星期一, 30 六月 2025 17:59:22 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/main/java/org/jeecg/modules/lsw/controller/LswMaterialInboundController.java      |  161 ++++++
 src/main/java/org/jeecg/modules/lsw/entity/LswMaterialOutbound.java                   |   92 +++
 src/main/java/org/jeecg/modules/lsw/mapper/LswMaterialMapper.java                     |   14 
 src/main/java/org/jeecg/modules/lsw/service/impl/LswMaterialInboundServiceImpl.java   |   18 
 src/main/java/org/jeecg/modules/lsw/mapper/xml/LswMaterialMapper.xml                  |    5 
 src/main/java/org/jeecg/modules/lsw/entity/LswMaterialInbound.java                    |   92 +++
 src/main/java/org/jeecg/modules/lsw/vo/LswMaterialPage.java                           |   78 +++
 src/main/java/org/jeecg/modules/lsw/mapper/xml/LswMaterialInboundMapper.xml           |    5 
 src/main/java/org/jeecg/modules/lsw/controller/LswMaterialInventoryController.java    |  161 ++++++
 src/main/java/org/jeecg/modules/lsw/service/ILswMaterialService.java                  |   49 +
 src/main/java/org/jeecg/modules/lsw/service/ILswMaterialInboundService.java           |   14 
 src/main/java/org/jeecg/modules/lsw/mapper/LswMaterialInventoryMapper.java            |   32 +
 src/main/java/org/jeecg/modules/lsw/controller/LswMaterialOutboundController.java     |  161 ++++++
 src/main/java/org/jeecg/modules/lsw/mapper/LswMaterialOutboundMapper.java             |   14 
 src/main/java/org/jeecg/modules/lsw/mapper/LswMaterialInboundMapper.java              |   14 
 src/main/java/org/jeecg/modules/lsw/entity/LswMaterial.java                           |   79 +++
 src/main/java/org/jeecg/modules/lsw/service/impl/LswMaterialOutboundServiceImpl.java  |   18 
 src/main/java/org/jeecg/modules/lsw/controller/LswMaterialController.java             |  260 ++++++++++
 src/main/java/org/jeecg/modules/lsw/service/ILswMaterialInventoryService.java         |   23 
 src/main/java/org/jeecg/modules/lsw/mapper/xml/LswMaterialOutboundMapper.xml          |    5 
 src/main/java/org/jeecg/modules/lsw/mapper/xml/LswMaterialInventoryMapper.xml         |   16 
 src/main/java/org/jeecg/modules/lsw/entity/LswMaterialInventory.java                  |   71 ++
 src/main/java/org/jeecg/modules/lsw/service/impl/LswMaterialInventoryServiceImpl.java |   28 +
 src/main/java/org/jeecg/modules/lsw/service/ILswMaterialOutboundService.java          |   14 
 src/main/java/org/jeecg/modules/lsw/service/impl/LswMaterialServiceImpl.java          |   78 +++
 25 files changed, 1,502 insertions(+), 0 deletions(-)

diff --git a/src/main/java/org/jeecg/modules/lsw/controller/LswMaterialController.java b/src/main/java/org/jeecg/modules/lsw/controller/LswMaterialController.java
new file mode 100644
index 0000000..a9c9e20
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/controller/LswMaterialController.java
@@ -0,0 +1,260 @@
+package org.jeecg.modules.lsw.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.lsw.entity.LswMaterial;
+import org.jeecg.modules.lsw.entity.LswMaterialInventory;
+import org.jeecg.modules.lsw.service.ILswMaterialInventoryService;
+import org.jeecg.modules.lsw.service.ILswMaterialService;
+import org.jeecg.modules.lsw.vo.LswMaterialPage;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+* @Description: 绾胯竟搴撶墿鏂欎俊鎭�
+* @Author: jeecg-boot
+* @Date:   2025-06-30
+* @Version: V1.0
+*/
+@Api(tags="绾胯竟搴撶墿鏂欎俊鎭�")
+@RestController
+@RequestMapping("/lswmaterial/lswMaterial")
+@Slf4j
+public class LswMaterialController {
+   @Autowired
+   private ILswMaterialService lswMaterialService;
+   @Autowired
+   private ILswMaterialInventoryService lswMaterialInventoryService;
+
+   /**
+    * 鍒嗛〉鍒楄〃鏌ヨ
+    *
+    * @param lswMaterial
+    * @param pageNo
+    * @param pageSize
+    * @param req
+    * @return
+    */
+   //@AutoLog(value = "绾胯竟搴撶墿鏂欎俊鎭�-鍒嗛〉鍒楄〃鏌ヨ")
+   @ApiOperation(value="绾胯竟搴撶墿鏂欎俊鎭�-鍒嗛〉鍒楄〃鏌ヨ", notes="绾胯竟搴撶墿鏂欎俊鎭�-鍒嗛〉鍒楄〃鏌ヨ")
+   @GetMapping(value = "/list")
+   public Result<IPage<LswMaterial>> queryPageList(LswMaterial lswMaterial,
+                                  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+                                  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+                                  HttpServletRequest req) {
+       QueryWrapper<LswMaterial> queryWrapper = QueryGenerator.initQueryWrapper(lswMaterial, req.getParameterMap());
+       Page<LswMaterial> page = new Page<LswMaterial>(pageNo, pageSize);
+       IPage<LswMaterial> pageList = lswMaterialService.page(page, queryWrapper);
+       return Result.OK(pageList);
+   }
+
+   /**
+    *   娣诲姞
+    *
+    * @param lswMaterialPage
+    * @return
+    */
+   @AutoLog(value = "绾胯竟搴撶墿鏂欎俊鎭�-娣诲姞")
+   @ApiOperation(value="绾胯竟搴撶墿鏂欎俊鎭�-娣诲姞", notes="绾胯竟搴撶墿鏂欎俊鎭�-娣诲姞")
+   //@RequiresPermissions("org.jeecg.modules:lsw_material:add")
+   @PostMapping(value = "/add")
+   public Result<String> add(@RequestBody LswMaterialPage lswMaterialPage) {
+       LswMaterial lswMaterial = new LswMaterial();
+       BeanUtils.copyProperties(lswMaterialPage, lswMaterial);
+       lswMaterialService.saveMain(lswMaterial, lswMaterialPage.getLswMaterialInventoryList());
+       return Result.OK("娣诲姞鎴愬姛锛�");
+   }
+
+   /**
+    *  缂栬緫
+    *
+    * @param lswMaterialPage
+    * @return
+    */
+   @AutoLog(value = "绾胯竟搴撶墿鏂欎俊鎭�-缂栬緫")
+   @ApiOperation(value="绾胯竟搴撶墿鏂欎俊鎭�-缂栬緫", notes="绾胯竟搴撶墿鏂欎俊鎭�-缂栬緫")
+   //@RequiresPermissions("org.jeecg.modules:lsw_material:edit")
+   @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+   public Result<String> edit(@RequestBody LswMaterialPage lswMaterialPage) {
+       LswMaterial lswMaterial = new LswMaterial();
+       BeanUtils.copyProperties(lswMaterialPage, lswMaterial);
+       LswMaterial lswMaterialEntity = lswMaterialService.getById(lswMaterial.getId());
+       if(lswMaterialEntity==null) {
+           return Result.error("鏈壘鍒板搴旀暟鎹�");
+       }
+       lswMaterialService.updateMain(lswMaterial, lswMaterialPage.getLswMaterialInventoryList());
+       return Result.OK("缂栬緫鎴愬姛!");
+   }
+
+   /**
+    *   閫氳繃id鍒犻櫎
+    *
+    * @param id
+    * @return
+    */
+   @AutoLog(value = "绾胯竟搴撶墿鏂欎俊鎭�-閫氳繃id鍒犻櫎")
+   @ApiOperation(value="绾胯竟搴撶墿鏂欎俊鎭�-閫氳繃id鍒犻櫎", notes="绾胯竟搴撶墿鏂欎俊鎭�-閫氳繃id鍒犻櫎")
+   //@RequiresPermissions("org.jeecg.modules:lsw_material:delete")
+   @DeleteMapping(value = "/delete")
+   public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+       lswMaterialService.delMain(id);
+       return Result.OK("鍒犻櫎鎴愬姛!");
+   }
+
+   /**
+    *  鎵归噺鍒犻櫎
+    *
+    * @param ids
+    * @return
+    */
+   @AutoLog(value = "绾胯竟搴撶墿鏂欎俊鎭�-鎵归噺鍒犻櫎")
+   @ApiOperation(value="绾胯竟搴撶墿鏂欎俊鎭�-鎵归噺鍒犻櫎", notes="绾胯竟搴撶墿鏂欎俊鎭�-鎵归噺鍒犻櫎")
+   //@RequiresPermissions("org.jeecg.modules:lsw_material:deleteBatch")
+   @DeleteMapping(value = "/deleteBatch")
+   public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+       this.lswMaterialService.delBatchMain(Arrays.asList(ids.split(",")));
+       return Result.OK("鎵归噺鍒犻櫎鎴愬姛锛�");
+   }
+
+   /**
+    * 閫氳繃id鏌ヨ
+    *
+    * @param id
+    * @return
+    */
+   //@AutoLog(value = "绾胯竟搴撶墿鏂欎俊鎭�-閫氳繃id鏌ヨ")
+   @ApiOperation(value="绾胯竟搴撶墿鏂欎俊鎭�-閫氳繃id鏌ヨ", notes="绾胯竟搴撶墿鏂欎俊鎭�-閫氳繃id鏌ヨ")
+   @GetMapping(value = "/queryById")
+   public Result<LswMaterial> queryById(@RequestParam(name="id",required=true) String id) {
+       LswMaterial lswMaterial = lswMaterialService.getById(id);
+       if(lswMaterial==null) {
+           return Result.error("鏈壘鍒板搴旀暟鎹�");
+       }
+       return Result.OK(lswMaterial);
+
+   }
+
+   /**
+    * 閫氳繃id鏌ヨ
+    *
+    * @param id
+    * @return
+    */
+   //@AutoLog(value = "鐗╂枡搴撳瓨淇℃伅閫氳繃涓昏〃ID鏌ヨ")
+   @ApiOperation(value="鐗╂枡搴撳瓨淇℃伅涓昏〃ID鏌ヨ", notes="鐗╂枡搴撳瓨淇℃伅-閫氫富琛↖D鏌ヨ")
+   @GetMapping(value = "/queryLswMaterialInventoryByMainId")
+   public Result<List<LswMaterialInventory>> queryLswMaterialInventoryListByMainId(@RequestParam(name="id",required=true) String id) {
+       List<LswMaterialInventory> lswMaterialInventoryList = lswMaterialInventoryService.selectByMainId(id);
+       return Result.OK(lswMaterialInventoryList);
+   }
+
+   /**
+   * 瀵煎嚭excel
+   *
+   * @param request
+   * @param lswMaterial
+   */
+   //@RequiresPermissions("org.jeecg.modules:lsw_material:exportXls")
+   @RequestMapping(value = "/exportXls")
+   public ModelAndView exportXls(HttpServletRequest request, LswMaterial lswMaterial) {
+     // Step.1 缁勮鏌ヨ鏉′欢鏌ヨ鏁版嵁
+     QueryWrapper<LswMaterial> queryWrapper = QueryGenerator.initQueryWrapper(lswMaterial, request.getParameterMap());
+     LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+     //閰嶇疆閫変腑鏁版嵁鏌ヨ鏉′欢
+     String selections = request.getParameter("selections");
+     if(oConvertUtils.isNotEmpty(selections)) {
+        List<String> selectionList = Arrays.asList(selections.split(","));
+        queryWrapper.in("id",selectionList);
+     }
+     //Step.2 鑾峰彇瀵煎嚭鏁版嵁
+     List<LswMaterial> lswMaterialList = lswMaterialService.list(queryWrapper);
+
+     // Step.3 缁勮pageList
+     List<LswMaterialPage> pageList = new ArrayList<LswMaterialPage>();
+     for (LswMaterial main : lswMaterialList) {
+         LswMaterialPage vo = new LswMaterialPage();
+         BeanUtils.copyProperties(main, vo);
+         List<LswMaterialInventory> lswMaterialInventoryList = lswMaterialInventoryService.selectByMainId(main.getId());
+         vo.setLswMaterialInventoryList(lswMaterialInventoryList);
+         pageList.add(vo);
+     }
+
+     // Step.4 AutoPoi 瀵煎嚭Excel
+     ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+     mv.addObject(NormalExcelConstants.FILE_NAME, "绾胯竟搴撶墿鏂欎俊鎭垪琛�");
+     mv.addObject(NormalExcelConstants.CLASS, LswMaterialPage.class);
+     mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("绾胯竟搴撶墿鏂欎俊鎭暟鎹�", "瀵煎嚭浜�:"+sysUser.getRealname(), "绾胯竟搴撶墿鏂欎俊鎭�"));
+     mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+     return mv;
+   }
+
+   /**
+   * 閫氳繃excel瀵煎叆鏁版嵁
+   *
+   * @param request
+   * @param response
+   * @return
+   */
+   //@RequiresPermissions("org.jeecg.modules:lsw_material:importExcel")
+   @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+   public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+     MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+     Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
+     for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
+         // 鑾峰彇涓婁紶鏂囦欢瀵硅薄
+         MultipartFile file = entity.getValue();
+         ImportParams params = new ImportParams();
+         params.setTitleRows(2);
+         params.setHeadRows(1);
+         params.setNeedSave(true);
+         try {
+             List<LswMaterialPage> list = ExcelImportUtil.importExcel(file.getInputStream(), LswMaterialPage.class, params);
+             for (LswMaterialPage page : list) {
+                 LswMaterial po = new LswMaterial();
+                 BeanUtils.copyProperties(page, po);
+                 lswMaterialService.saveMain(po, page.getLswMaterialInventoryList());
+             }
+             return Result.OK("鏂囦欢瀵煎叆鎴愬姛锛佹暟鎹鏁�:" + list.size());
+         } catch (Exception e) {
+             log.error(e.getMessage(),e);
+             return Result.error("鏂囦欢瀵煎叆澶辫触:"+e.getMessage());
+         } finally {
+             try {
+                 file.getInputStream().close();
+             } catch (IOException e) {
+                 e.printStackTrace();
+             }
+         }
+     }
+     return Result.OK("鏂囦欢瀵煎叆澶辫触锛�");
+   }
+
+}
diff --git a/src/main/java/org/jeecg/modules/lsw/controller/LswMaterialInboundController.java b/src/main/java/org/jeecg/modules/lsw/controller/LswMaterialInboundController.java
new file mode 100644
index 0000000..c8e69a5
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/controller/LswMaterialInboundController.java
@@ -0,0 +1,161 @@
+package org.jeecg.modules.lsw.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.lsw.entity.LswMaterialInbound;
+import org.jeecg.modules.lsw.service.ILswMaterialInboundService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+
+/**
+* @Description: 鐗╂枡鍏ュ簱鍗�
+* @Author: jeecg-boot
+* @Date:   2025-06-30
+* @Version: V1.0
+*/
+@Api(tags="鐗╂枡鍏ュ簱鍗�")
+@RestController
+@RequestMapping("/lswmaterialinbound/lswMaterialInbound")
+@Slf4j
+public class LswMaterialInboundController extends JeecgController<LswMaterialInbound, ILswMaterialInboundService> {
+   @Autowired
+   private ILswMaterialInboundService lswMaterialInboundService;
+
+   /**
+    * 鍒嗛〉鍒楄〃鏌ヨ
+    *
+    * @param lswMaterialInbound
+    * @param pageNo
+    * @param pageSize
+    * @param req
+    * @return
+    */
+   //@AutoLog(value = "鐗╂枡鍏ュ簱鍗�-鍒嗛〉鍒楄〃鏌ヨ")
+   @ApiOperation(value="鐗╂枡鍏ュ簱鍗�-鍒嗛〉鍒楄〃鏌ヨ", notes="鐗╂枡鍏ュ簱鍗�-鍒嗛〉鍒楄〃鏌ヨ")
+   @GetMapping(value = "/list")
+   public Result<IPage<LswMaterialInbound>> queryPageList(LswMaterialInbound lswMaterialInbound,
+                                  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+                                  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+                                  HttpServletRequest req) {
+       QueryWrapper<LswMaterialInbound> queryWrapper = QueryGenerator.initQueryWrapper(lswMaterialInbound, req.getParameterMap());
+       Page<LswMaterialInbound> page = new Page<LswMaterialInbound>(pageNo, pageSize);
+       IPage<LswMaterialInbound> pageList = lswMaterialInboundService.page(page, queryWrapper);
+       return Result.OK(pageList);
+   }
+
+   /**
+    *   娣诲姞
+    *
+    * @param lswMaterialInbound
+    * @return
+    */
+   @AutoLog(value = "鐗╂枡鍏ュ簱鍗�-娣诲姞")
+   @ApiOperation(value="鐗╂枡鍏ュ簱鍗�-娣诲姞", notes="鐗╂枡鍏ュ簱鍗�-娣诲姞")
+   //@RequiresPermissions("org.jeecg.modules:lsw_material_inbound:add")
+   @PostMapping(value = "/add")
+   public Result<String> add(@RequestBody LswMaterialInbound lswMaterialInbound) {
+       lswMaterialInboundService.save(lswMaterialInbound);
+       return Result.OK("娣诲姞鎴愬姛锛�");
+   }
+
+   /**
+    *  缂栬緫
+    *
+    * @param lswMaterialInbound
+    * @return
+    */
+   @AutoLog(value = "鐗╂枡鍏ュ簱鍗�-缂栬緫")
+   @ApiOperation(value="鐗╂枡鍏ュ簱鍗�-缂栬緫", notes="鐗╂枡鍏ュ簱鍗�-缂栬緫")
+   //@RequiresPermissions("org.jeecg.modules:lsw_material_inbound:edit")
+   @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+   public Result<String> edit(@RequestBody LswMaterialInbound lswMaterialInbound) {
+       lswMaterialInboundService.updateById(lswMaterialInbound);
+       return Result.OK("缂栬緫鎴愬姛!");
+   }
+
+   /**
+    *   閫氳繃id鍒犻櫎
+    *
+    * @param id
+    * @return
+    */
+   @AutoLog(value = "鐗╂枡鍏ュ簱鍗�-閫氳繃id鍒犻櫎")
+   @ApiOperation(value="鐗╂枡鍏ュ簱鍗�-閫氳繃id鍒犻櫎", notes="鐗╂枡鍏ュ簱鍗�-閫氳繃id鍒犻櫎")
+   //@RequiresPermissions("org.jeecg.modules:lsw_material_inbound:delete")
+   @DeleteMapping(value = "/delete")
+   public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+       lswMaterialInboundService.removeById(id);
+       return Result.OK("鍒犻櫎鎴愬姛!");
+   }
+
+   /**
+    *  鎵归噺鍒犻櫎
+    *
+    * @param ids
+    * @return
+    */
+   @AutoLog(value = "鐗╂枡鍏ュ簱鍗�-鎵归噺鍒犻櫎")
+   @ApiOperation(value="鐗╂枡鍏ュ簱鍗�-鎵归噺鍒犻櫎", notes="鐗╂枡鍏ュ簱鍗�-鎵归噺鍒犻櫎")
+   //@RequiresPermissions("org.jeecg.modules:lsw_material_inbound:deleteBatch")
+   @DeleteMapping(value = "/deleteBatch")
+   public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+       this.lswMaterialInboundService.removeByIds(Arrays.asList(ids.split(",")));
+       return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
+   }
+
+   /**
+    * 閫氳繃id鏌ヨ
+    *
+    * @param id
+    * @return
+    */
+   //@AutoLog(value = "鐗╂枡鍏ュ簱鍗�-閫氳繃id鏌ヨ")
+   @ApiOperation(value="鐗╂枡鍏ュ簱鍗�-閫氳繃id鏌ヨ", notes="鐗╂枡鍏ュ簱鍗�-閫氳繃id鏌ヨ")
+   @GetMapping(value = "/queryById")
+   public Result<LswMaterialInbound> queryById(@RequestParam(name="id",required=true) String id) {
+       LswMaterialInbound lswMaterialInbound = lswMaterialInboundService.getById(id);
+       if(lswMaterialInbound==null) {
+           return Result.error("鏈壘鍒板搴旀暟鎹�");
+       }
+       return Result.OK(lswMaterialInbound);
+   }
+
+   /**
+   * 瀵煎嚭excel
+   *
+   * @param request
+   * @param lswMaterialInbound
+   */
+   //@RequiresPermissions("org.jeecg.modules:lsw_material_inbound:exportXls")
+   @RequestMapping(value = "/exportXls")
+   public ModelAndView exportXls(HttpServletRequest request, LswMaterialInbound lswMaterialInbound) {
+       return super.exportXls(request, lswMaterialInbound, LswMaterialInbound.class, "鐗╂枡鍏ュ簱鍗�");
+   }
+
+   /**
+     * 閫氳繃excel瀵煎叆鏁版嵁
+   *
+   * @param request
+   * @param response
+   * @return
+   */
+   //@RequiresPermissions("lsw_material_inbound:importExcel")
+   @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+   public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+       return super.importExcel(request, response, LswMaterialInbound.class);
+   }
+
+}
diff --git a/src/main/java/org/jeecg/modules/lsw/controller/LswMaterialInventoryController.java b/src/main/java/org/jeecg/modules/lsw/controller/LswMaterialInventoryController.java
new file mode 100644
index 0000000..2a2f162
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/controller/LswMaterialInventoryController.java
@@ -0,0 +1,161 @@
+package org.jeecg.modules.lsw.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.lsw.entity.LswMaterialInventory;
+import org.jeecg.modules.lsw.service.ILswMaterialInventoryService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+
+/**
+* @Description: 鐗╂枡搴撳瓨淇℃伅
+* @Author: jeecg-boot
+* @Date:   2025-06-30
+* @Version: V1.0
+*/
+@Api(tags="鐗╂枡搴撳瓨淇℃伅")
+@RestController
+@RequestMapping("/lswmaterialinventory/lswMaterialInventory")
+@Slf4j
+public class LswMaterialInventoryController extends JeecgController<LswMaterialInventory, ILswMaterialInventoryService> {
+   @Autowired
+   private ILswMaterialInventoryService lswMaterialInventoryService;
+
+   /**
+    * 鍒嗛〉鍒楄〃鏌ヨ
+    *
+    * @param lswMaterialInventory
+    * @param pageNo
+    * @param pageSize
+    * @param req
+    * @return
+    */
+   //@AutoLog(value = "鐗╂枡搴撳瓨淇℃伅-鍒嗛〉鍒楄〃鏌ヨ")
+   @ApiOperation(value="鐗╂枡搴撳瓨淇℃伅-鍒嗛〉鍒楄〃鏌ヨ", notes="鐗╂枡搴撳瓨淇℃伅-鍒嗛〉鍒楄〃鏌ヨ")
+   @GetMapping(value = "/list")
+   public Result<IPage<LswMaterialInventory>> queryPageList(LswMaterialInventory lswMaterialInventory,
+                                  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+                                  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+                                  HttpServletRequest req) {
+       QueryWrapper<LswMaterialInventory> queryWrapper = QueryGenerator.initQueryWrapper(lswMaterialInventory, req.getParameterMap());
+       Page<LswMaterialInventory> page = new Page<LswMaterialInventory>(pageNo, pageSize);
+       IPage<LswMaterialInventory> pageList = lswMaterialInventoryService.page(page, queryWrapper);
+       return Result.OK(pageList);
+   }
+
+   /**
+    *   娣诲姞
+    *
+    * @param lswMaterialInventory
+    * @return
+    */
+   @AutoLog(value = "鐗╂枡搴撳瓨淇℃伅-娣诲姞")
+   @ApiOperation(value="鐗╂枡搴撳瓨淇℃伅-娣诲姞", notes="鐗╂枡搴撳瓨淇℃伅-娣诲姞")
+   //@RequiresPermissions("org.jeecg.modules:lsw_material_inventory:add")
+   @PostMapping(value = "/add")
+   public Result<String> add(@RequestBody LswMaterialInventory lswMaterialInventory) {
+       lswMaterialInventoryService.save(lswMaterialInventory);
+       return Result.OK("娣诲姞鎴愬姛锛�");
+   }
+
+   /**
+    *  缂栬緫
+    *
+    * @param lswMaterialInventory
+    * @return
+    */
+   @AutoLog(value = "鐗╂枡搴撳瓨淇℃伅-缂栬緫")
+   @ApiOperation(value="鐗╂枡搴撳瓨淇℃伅-缂栬緫", notes="鐗╂枡搴撳瓨淇℃伅-缂栬緫")
+   //@RequiresPermissions("org.jeecg.modules:lsw_material_inventory:edit")
+   @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+   public Result<String> edit(@RequestBody LswMaterialInventory lswMaterialInventory) {
+       lswMaterialInventoryService.updateById(lswMaterialInventory);
+       return Result.OK("缂栬緫鎴愬姛!");
+   }
+
+   /**
+    *   閫氳繃id鍒犻櫎
+    *
+    * @param id
+    * @return
+    */
+   @AutoLog(value = "鐗╂枡搴撳瓨淇℃伅-閫氳繃id鍒犻櫎")
+   @ApiOperation(value="鐗╂枡搴撳瓨淇℃伅-閫氳繃id鍒犻櫎", notes="鐗╂枡搴撳瓨淇℃伅-閫氳繃id鍒犻櫎")
+   //@RequiresPermissions("org.jeecg.modules:lsw_material_inventory:delete")
+   @DeleteMapping(value = "/delete")
+   public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+       lswMaterialInventoryService.removeById(id);
+       return Result.OK("鍒犻櫎鎴愬姛!");
+   }
+
+   /**
+    *  鎵归噺鍒犻櫎
+    *
+    * @param ids
+    * @return
+    */
+   @AutoLog(value = "鐗╂枡搴撳瓨淇℃伅-鎵归噺鍒犻櫎")
+   @ApiOperation(value="鐗╂枡搴撳瓨淇℃伅-鎵归噺鍒犻櫎", notes="鐗╂枡搴撳瓨淇℃伅-鎵归噺鍒犻櫎")
+   //@RequiresPermissions("org.jeecg.modules:lsw_material_inventory:deleteBatch")
+   @DeleteMapping(value = "/deleteBatch")
+   public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+       this.lswMaterialInventoryService.removeByIds(Arrays.asList(ids.split(",")));
+       return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
+   }
+
+   /**
+    * 閫氳繃id鏌ヨ
+    *
+    * @param id
+    * @return
+    */
+   //@AutoLog(value = "鐗╂枡搴撳瓨淇℃伅-閫氳繃id鏌ヨ")
+   @ApiOperation(value="鐗╂枡搴撳瓨淇℃伅-閫氳繃id鏌ヨ", notes="鐗╂枡搴撳瓨淇℃伅-閫氳繃id鏌ヨ")
+   @GetMapping(value = "/queryById")
+   public Result<LswMaterialInventory> queryById(@RequestParam(name="id",required=true) String id) {
+       LswMaterialInventory lswMaterialInventory = lswMaterialInventoryService.getById(id);
+       if(lswMaterialInventory==null) {
+           return Result.error("鏈壘鍒板搴旀暟鎹�");
+       }
+       return Result.OK(lswMaterialInventory);
+   }
+
+   /**
+   * 瀵煎嚭excel
+   *
+   * @param request
+   * @param lswMaterialInventory
+   */
+   //@RequiresPermissions("org.jeecg.modules:lsw_material_inventory:exportXls")
+   @RequestMapping(value = "/exportXls")
+   public ModelAndView exportXls(HttpServletRequest request, LswMaterialInventory lswMaterialInventory) {
+       return super.exportXls(request, lswMaterialInventory, LswMaterialInventory.class, "鐗╂枡搴撳瓨淇℃伅");
+   }
+
+   /**
+     * 閫氳繃excel瀵煎叆鏁版嵁
+   *
+   * @param request
+   * @param response
+   * @return
+   */
+   //@RequiresPermissions("lsw_material_inventory:importExcel")
+   @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+   public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+       return super.importExcel(request, response, LswMaterialInventory.class);
+   }
+
+}
diff --git a/src/main/java/org/jeecg/modules/lsw/controller/LswMaterialOutboundController.java b/src/main/java/org/jeecg/modules/lsw/controller/LswMaterialOutboundController.java
new file mode 100644
index 0000000..b1d171b
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/controller/LswMaterialOutboundController.java
@@ -0,0 +1,161 @@
+package org.jeecg.modules.lsw.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.lsw.entity.LswMaterialOutbound;
+import org.jeecg.modules.lsw.service.ILswMaterialOutboundService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+
+/**
+* @Description: 鐗╂枡鍑哄簱鍗�
+* @Author: jeecg-boot
+* @Date:   2025-06-30
+* @Version: V1.0
+*/
+@Api(tags="鐗╂枡鍑哄簱鍗�")
+@RestController
+@RequestMapping("/lswmaterialoutbound/lswMaterialOutbound")
+@Slf4j
+public class LswMaterialOutboundController extends JeecgController<LswMaterialOutbound, ILswMaterialOutboundService> {
+   @Autowired
+   private ILswMaterialOutboundService lswMaterialOutboundService;
+
+   /**
+    * 鍒嗛〉鍒楄〃鏌ヨ
+    *
+    * @param lswMaterialOutbound
+    * @param pageNo
+    * @param pageSize
+    * @param req
+    * @return
+    */
+   //@AutoLog(value = "鐗╂枡鍑哄簱鍗�-鍒嗛〉鍒楄〃鏌ヨ")
+   @ApiOperation(value="鐗╂枡鍑哄簱鍗�-鍒嗛〉鍒楄〃鏌ヨ", notes="鐗╂枡鍑哄簱鍗�-鍒嗛〉鍒楄〃鏌ヨ")
+   @GetMapping(value = "/list")
+   public Result<IPage<LswMaterialOutbound>> queryPageList(LswMaterialOutbound lswMaterialOutbound,
+                                  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+                                  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+                                  HttpServletRequest req) {
+       QueryWrapper<LswMaterialOutbound> queryWrapper = QueryGenerator.initQueryWrapper(lswMaterialOutbound, req.getParameterMap());
+       Page<LswMaterialOutbound> page = new Page<LswMaterialOutbound>(pageNo, pageSize);
+       IPage<LswMaterialOutbound> pageList = lswMaterialOutboundService.page(page, queryWrapper);
+       return Result.OK(pageList);
+   }
+
+   /**
+    *   娣诲姞
+    *
+    * @param lswMaterialOutbound
+    * @return
+    */
+   @AutoLog(value = "鐗╂枡鍑哄簱鍗�-娣诲姞")
+   @ApiOperation(value="鐗╂枡鍑哄簱鍗�-娣诲姞", notes="鐗╂枡鍑哄簱鍗�-娣诲姞")
+   //@RequiresPermissions("org.jeecg.modules:lsw_material_outbound:add")
+   @PostMapping(value = "/add")
+   public Result<String> add(@RequestBody LswMaterialOutbound lswMaterialOutbound) {
+       lswMaterialOutboundService.save(lswMaterialOutbound);
+       return Result.OK("娣诲姞鎴愬姛锛�");
+   }
+
+   /**
+    *  缂栬緫
+    *
+    * @param lswMaterialOutbound
+    * @return
+    */
+   @AutoLog(value = "鐗╂枡鍑哄簱鍗�-缂栬緫")
+   @ApiOperation(value="鐗╂枡鍑哄簱鍗�-缂栬緫", notes="鐗╂枡鍑哄簱鍗�-缂栬緫")
+   //@RequiresPermissions("org.jeecg.modules:lsw_material_outbound:edit")
+   @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+   public Result<String> edit(@RequestBody LswMaterialOutbound lswMaterialOutbound) {
+       lswMaterialOutboundService.updateById(lswMaterialOutbound);
+       return Result.OK("缂栬緫鎴愬姛!");
+   }
+
+   /**
+    *   閫氳繃id鍒犻櫎
+    *
+    * @param id
+    * @return
+    */
+   @AutoLog(value = "鐗╂枡鍑哄簱鍗�-閫氳繃id鍒犻櫎")
+   @ApiOperation(value="鐗╂枡鍑哄簱鍗�-閫氳繃id鍒犻櫎", notes="鐗╂枡鍑哄簱鍗�-閫氳繃id鍒犻櫎")
+   //@RequiresPermissions("org.jeecg.modules:lsw_material_outbound:delete")
+   @DeleteMapping(value = "/delete")
+   public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+       lswMaterialOutboundService.removeById(id);
+       return Result.OK("鍒犻櫎鎴愬姛!");
+   }
+
+   /**
+    *  鎵归噺鍒犻櫎
+    *
+    * @param ids
+    * @return
+    */
+   @AutoLog(value = "鐗╂枡鍑哄簱鍗�-鎵归噺鍒犻櫎")
+   @ApiOperation(value="鐗╂枡鍑哄簱鍗�-鎵归噺鍒犻櫎", notes="鐗╂枡鍑哄簱鍗�-鎵归噺鍒犻櫎")
+   //@RequiresPermissions("org.jeecg.modules:lsw_material_outbound:deleteBatch")
+   @DeleteMapping(value = "/deleteBatch")
+   public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+       this.lswMaterialOutboundService.removeByIds(Arrays.asList(ids.split(",")));
+       return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
+   }
+
+   /**
+    * 閫氳繃id鏌ヨ
+    *
+    * @param id
+    * @return
+    */
+   //@AutoLog(value = "鐗╂枡鍑哄簱鍗�-閫氳繃id鏌ヨ")
+   @ApiOperation(value="鐗╂枡鍑哄簱鍗�-閫氳繃id鏌ヨ", notes="鐗╂枡鍑哄簱鍗�-閫氳繃id鏌ヨ")
+   @GetMapping(value = "/queryById")
+   public Result<LswMaterialOutbound> queryById(@RequestParam(name="id",required=true) String id) {
+       LswMaterialOutbound lswMaterialOutbound = lswMaterialOutboundService.getById(id);
+       if(lswMaterialOutbound==null) {
+           return Result.error("鏈壘鍒板搴旀暟鎹�");
+       }
+       return Result.OK(lswMaterialOutbound);
+   }
+
+   /**
+   * 瀵煎嚭excel
+   *
+   * @param request
+   * @param lswMaterialOutbound
+   */
+   //@RequiresPermissions("org.jeecg.modules:lsw_material_outbound:exportXls")
+   @RequestMapping(value = "/exportXls")
+   public ModelAndView exportXls(HttpServletRequest request, LswMaterialOutbound lswMaterialOutbound) {
+       return super.exportXls(request, lswMaterialOutbound, LswMaterialOutbound.class, "鐗╂枡鍑哄簱鍗�");
+   }
+
+   /**
+     * 閫氳繃excel瀵煎叆鏁版嵁
+   *
+   * @param request
+   * @param response
+   * @return
+   */
+   //@RequiresPermissions("lsw_material_outbound:importExcel")
+   @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+   public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+       return super.importExcel(request, response, LswMaterialOutbound.class);
+   }
+
+}
diff --git a/src/main/java/org/jeecg/modules/lsw/entity/LswMaterial.java b/src/main/java/org/jeecg/modules/lsw/entity/LswMaterial.java
new file mode 100644
index 0000000..b988d39
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/entity/LswMaterial.java
@@ -0,0 +1,79 @@
+package org.jeecg.modules.lsw.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecg.common.aspect.annotation.Dict;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 绾胯竟搴撶墿鏂欎俊鎭�
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+@ApiModel(value="lsw_material瀵硅薄", description="绾胯竟搴撶墿鏂欎俊鎭�")
+@Data
+@TableName("lsw_material")
+public class LswMaterial implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**涓婚敭*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+	/**鍒涘缓浜�*/
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    private String createBy;
+	/**鍒涘缓鏃ユ湡*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "鍒涘缓鏃ユ湡")
+    private Date createTime;
+	/**鏇存柊浜�*/
+    @ApiModelProperty(value = "鏇存柊浜�")
+    private String updateBy;
+	/**鏇存柊鏃ユ湡*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "鏇存柊鏃ユ湡")
+    private Date updateTime;
+	/**鎵�灞為儴闂�*/
+    @ApiModelProperty(value = "鎵�灞為儴闂�")
+    private String sysOrgCode;
+	/**鍒犻櫎鏍囪*/
+	@Excel(name = "鍒犻櫎鏍囪", width = 15)
+    @ApiModelProperty(value = "鍒犻櫎鏍囪")
+    @TableLogic
+    private Integer delFlag;
+	/**鐗╂枡缂栫爜*/
+	@Excel(name = "鐗╂枡缂栫爜", width = 15)
+    @ApiModelProperty(value = "鐗╂枡缂栫爜")
+    private String materialNumber;
+	/**鐗╂枡鍚嶇О*/
+	@Excel(name = "鐗╂枡鍚嶇О", width = 15)
+    @ApiModelProperty(value = "鐗╂枡鍚嶇О")
+    private String materialName;
+	/**鐗╂枡鍨嬪彿*/
+	@Excel(name = "鐗╂枡鍨嬪彿", width = 15)
+    @ApiModelProperty(value = "鐗╂枡鍨嬪彿")
+    private String materialModel;
+	/**鐗╂枡绫诲瀷*/
+	@Excel(name = "鐗╂枡绫诲瀷", width = 15, dicCode = "material_category")
+    @Dict(dicCode = "material_category")
+    @ApiModelProperty(value = "鐗╂枡绫诲瀷")
+    private String materialCategory;
+	/**鍗曚綅*/
+	@Excel(name = "鍗曚綅", width = 15)
+    @ApiModelProperty(value = "鍗曚綅")
+    private String materialUnit;
+}
diff --git a/src/main/java/org/jeecg/modules/lsw/entity/LswMaterialInbound.java b/src/main/java/org/jeecg/modules/lsw/entity/LswMaterialInbound.java
new file mode 100644
index 0000000..1b7f50c
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/entity/LswMaterialInbound.java
@@ -0,0 +1,92 @@
+package org.jeecg.modules.lsw.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 鐗╂枡鍏ュ簱鍗�
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+@Data
+@TableName("lsw_material_inbound")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="lsw_material_inbound瀵硅薄", description="鐗╂枡鍏ュ簱鍗�")
+public class LswMaterialInbound implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**涓婚敭*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+	/**鍒涘缓浜�*/
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    private String createBy;
+	/**鍒涘缓鏃ユ湡*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "鍒涘缓鏃ユ湡")
+    private Date createTime;
+	/**鏇存柊浜�*/
+    @ApiModelProperty(value = "鏇存柊浜�")
+    private String updateBy;
+	/**鏇存柊鏃ユ湡*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "鏇存柊鏃ユ湡")
+    private Date updateTime;
+	/**鍒犻櫎鏍囪*/
+	@Excel(name = "鍒犻櫎鏍囪", width = 15)
+    @ApiModelProperty(value = "鍒犻櫎鏍囪")
+    @TableLogic
+    private Integer delFlag;
+	/**浜х嚎ID*/
+	@Excel(name = "浜х嚎ID", width = 15)
+    @ApiModelProperty(value = "浜х嚎ID")
+    private String factoryId;
+	/**搴撳瓨鍦癐D*/
+	@Excel(name = "搴撳瓨鍦癐D", width = 15)
+    @ApiModelProperty(value = "搴撳瓨鍦癐D")
+    private String warehouseId;
+	/**鐗╂枡缂栫爜*/
+	@Excel(name = "鐗╂枡缂栫爜", width = 15)
+    @ApiModelProperty(value = "鐗╂枡缂栫爜")
+    private String materialNumber;
+	/**鐗╂枡鍚嶇О*/
+	@Excel(name = "鐗╂枡鍚嶇О", width = 15)
+    @ApiModelProperty(value = "鐗╂枡鍚嶇О")
+    private String materialName;
+	/**鎵规鍙�*/
+	@Excel(name = "鎵规鍙�", width = 15)
+    @ApiModelProperty(value = "鎵规鍙�")
+    private String batchNumber;
+	/**鍏ュ簱鏁伴噺*/
+	@Excel(name = "鍏ュ簱鏁伴噺", width = 15)
+    @ApiModelProperty(value = "鍏ュ簱鏁伴噺")
+    private Integer quantity;
+	/**鎺ユ敹浜�*/
+	@Excel(name = "鎺ユ敹浜�", width = 15)
+    @ApiModelProperty(value = "鎺ユ敹浜�")
+    private String receiver;
+	/**鎺ユ敹鏃堕棿*/
+	@Excel(name = "鎺ユ敹鏃堕棿", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "鎺ユ敹鏃堕棿")
+    private Date receiveTime;
+}
diff --git a/src/main/java/org/jeecg/modules/lsw/entity/LswMaterialInventory.java b/src/main/java/org/jeecg/modules/lsw/entity/LswMaterialInventory.java
new file mode 100644
index 0000000..ff35baa
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/entity/LswMaterialInventory.java
@@ -0,0 +1,71 @@
+package org.jeecg.modules.lsw.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 鐗╂枡搴撳瓨淇℃伅
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+@ApiModel(value="lsw_material_inventory瀵硅薄", description="鐗╂枡搴撳瓨淇℃伅")
+@Data
+@TableName("lsw_material_inventory")
+public class LswMaterialInventory implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**涓婚敭*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+	/**鍒涘缓浜�*/
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    private String createBy;
+	/**鍒涘缓鏃ユ湡*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "鍒涘缓鏃ユ湡")
+    private Date createTime;
+	/**鏇存柊浜�*/
+    @ApiModelProperty(value = "鏇存柊浜�")
+    private String updateBy;
+	/**鏇存柊鏃ユ湡*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "鏇存柊鏃ユ湡")
+    private Date updateTime;
+	/**鐗╂枡ID*/
+    @ApiModelProperty(value = "鐗╂枡ID")
+    private String materialId;
+	/**鎵规鍙�*/
+	@Excel(name = "鎵规鍙�", width = 15)
+    @ApiModelProperty(value = "鎵规鍙�")
+    private String batchNumber;
+	/**搴撳瓨绫诲瀷*/
+	@Excel(name = "搴撳瓨绫诲瀷", width = 15)
+    @ApiModelProperty(value = "搴撳瓨绫诲瀷")
+    private String inventoryCategory;
+	/**鏁伴噺*/
+	@Excel(name = "鏁伴噺", width = 15)
+    @ApiModelProperty(value = "鏁伴噺")
+    private String quantity;
+	/**搴撳瓨鍦癐D*/
+	@Excel(name = "搴撳瓨鍦癐D", width = 15)
+    @ApiModelProperty(value = "搴撳瓨鍦癐D")
+    private String warehouseId;
+	/**搴撳瓨鐘舵��*/
+	@Excel(name = "搴撳瓨鐘舵��", width = 15)
+    @ApiModelProperty(value = "搴撳瓨鐘舵��")
+    private String inventoryStatus;
+}
diff --git a/src/main/java/org/jeecg/modules/lsw/entity/LswMaterialOutbound.java b/src/main/java/org/jeecg/modules/lsw/entity/LswMaterialOutbound.java
new file mode 100644
index 0000000..9724b77
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/entity/LswMaterialOutbound.java
@@ -0,0 +1,92 @@
+package org.jeecg.modules.lsw.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 鐗╂枡鍑哄簱鍗�
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+@Data
+@TableName("lsw_material_outbound")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="lsw_material_outbound瀵硅薄", description="鐗╂枡鍑哄簱鍗�")
+public class LswMaterialOutbound implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**涓婚敭*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+	/**鍒涘缓浜�*/
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    private String createBy;
+	/**鍒涘缓鏃ユ湡*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "鍒涘缓鏃ユ湡")
+    private Date createTime;
+	/**鏇存柊浜�*/
+    @ApiModelProperty(value = "鏇存柊浜�")
+    private String updateBy;
+	/**鏇存柊鏃ユ湡*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "鏇存柊鏃ユ湡")
+    private Date updateTime;
+	/**鍒犻櫎鏍囪*/
+	@Excel(name = "鍒犻櫎鏍囪", width = 15)
+    @ApiModelProperty(value = "鍒犻櫎鏍囪")
+    @TableLogic
+    private Integer delFlag;
+	/**鐗╂枡缂栫爜*/
+	@Excel(name = "鐗╂枡缂栫爜", width = 15)
+    @ApiModelProperty(value = "鐗╂枡缂栫爜")
+    private String materialNumber;
+	/**鐗╂枡鍚嶇О*/
+	@Excel(name = "鐗╂枡鍚嶇О", width = 15)
+    @ApiModelProperty(value = "鐗╂枡鍚嶇О")
+    private String materialName;
+	/**浜х嚎ID*/
+	@Excel(name = "浜х嚎ID", width = 15)
+    @ApiModelProperty(value = "浜х嚎ID")
+    private String factoryId;
+	/**鎵规鍙�*/
+	@Excel(name = "鎵规鍙�", width = 15)
+    @ApiModelProperty(value = "鎵规鍙�")
+    private String batchNumber;
+	/**鍑哄簱浜�*/
+	@Excel(name = "鍑哄簱浜�", width = 15)
+    @ApiModelProperty(value = "鍑哄簱浜�")
+    private String outboundStaff;
+	/**鍑哄簱鏃堕棿*/
+	@Excel(name = "鍑哄簱鏃堕棿", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "鍑哄簱鏃堕棿")
+    private Date outboundTime;
+	/**鍑哄簱鏁伴噺*/
+	@Excel(name = "鍑哄簱鏁伴噺", width = 15)
+    @ApiModelProperty(value = "鍑哄簱鏁伴噺")
+    private String quantity;
+	/**宸ュ崟ID*/
+	@Excel(name = "宸ュ崟ID", width = 15)
+    @ApiModelProperty(value = "宸ュ崟ID")
+    private String workOrderId;
+}
diff --git a/src/main/java/org/jeecg/modules/lsw/mapper/LswMaterialInboundMapper.java b/src/main/java/org/jeecg/modules/lsw/mapper/LswMaterialInboundMapper.java
new file mode 100644
index 0000000..c784e80
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/mapper/LswMaterialInboundMapper.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.lsw.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.lsw.entity.LswMaterialInbound;
+
+/**
+ * @Description: 鐗╂枡鍏ュ簱鍗�
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+public interface LswMaterialInboundMapper extends BaseMapper<LswMaterialInbound> {
+
+}
diff --git a/src/main/java/org/jeecg/modules/lsw/mapper/LswMaterialInventoryMapper.java b/src/main/java/org/jeecg/modules/lsw/mapper/LswMaterialInventoryMapper.java
new file mode 100644
index 0000000..c715596
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/mapper/LswMaterialInventoryMapper.java
@@ -0,0 +1,32 @@
+package org.jeecg.modules.lsw.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.lsw.entity.LswMaterialInventory;
+
+import java.util.List;
+
+/**
+ * @Description: 鐗╂枡搴撳瓨淇℃伅
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+public interface LswMaterialInventoryMapper extends BaseMapper<LswMaterialInventory> {
+
+	/**
+	 * 閫氳繃涓昏〃id鍒犻櫎瀛愯〃鏁版嵁
+	 *
+	 * @param mainId 涓昏〃id
+	 * @return boolean
+	 */
+	public boolean deleteByMainId(@Param("mainId") String mainId);
+
+  /**
+   * 閫氳繃涓昏〃id鏌ヨ瀛愯〃鏁版嵁
+   *
+   * @param mainId 涓昏〃id
+   * @return List<LswMaterialInventory>
+   */
+	public List<LswMaterialInventory> selectByMainId(@Param("mainId") String mainId);
+}
diff --git a/src/main/java/org/jeecg/modules/lsw/mapper/LswMaterialMapper.java b/src/main/java/org/jeecg/modules/lsw/mapper/LswMaterialMapper.java
new file mode 100644
index 0000000..db4a787
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/mapper/LswMaterialMapper.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.lsw.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.lsw.entity.LswMaterial;
+
+/**
+ * @Description: 绾胯竟搴撶墿鏂欎俊鎭�
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+public interface LswMaterialMapper extends BaseMapper<LswMaterial> {
+
+}
diff --git a/src/main/java/org/jeecg/modules/lsw/mapper/LswMaterialOutboundMapper.java b/src/main/java/org/jeecg/modules/lsw/mapper/LswMaterialOutboundMapper.java
new file mode 100644
index 0000000..be73eee
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/mapper/LswMaterialOutboundMapper.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.lsw.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.lsw.entity.LswMaterialOutbound;
+
+/**
+ * @Description: 鐗╂枡鍑哄簱鍗�
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+public interface LswMaterialOutboundMapper extends BaseMapper<LswMaterialOutbound> {
+
+}
diff --git a/src/main/java/org/jeecg/modules/lsw/mapper/xml/LswMaterialInboundMapper.xml b/src/main/java/org/jeecg/modules/lsw/mapper/xml/LswMaterialInboundMapper.xml
new file mode 100644
index 0000000..1e6636c
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/mapper/xml/LswMaterialInboundMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.lsw.mapper.LswMaterialInboundMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/org/jeecg/modules/lsw/mapper/xml/LswMaterialInventoryMapper.xml b/src/main/java/org/jeecg/modules/lsw/mapper/xml/LswMaterialInventoryMapper.xml
new file mode 100644
index 0000000..6620c48
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/mapper/xml/LswMaterialInventoryMapper.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.lsw.mapper.LswMaterialInventoryMapper">
+
+	<delete id="deleteByMainId" parameterType="java.lang.String">
+		DELETE 
+		FROM  lsw_material_inventory 
+		WHERE
+			 material_id = #{mainId} 	</delete>
+	
+	<select id="selectByMainId" parameterType="java.lang.String" resultType="org.jeecg.modules.lsw.entity.LswMaterialInventory">
+		SELECT * 
+		FROM  lsw_material_inventory
+		WHERE
+			 material_id = #{mainId} 	</select>
+</mapper>
diff --git a/src/main/java/org/jeecg/modules/lsw/mapper/xml/LswMaterialMapper.xml b/src/main/java/org/jeecg/modules/lsw/mapper/xml/LswMaterialMapper.xml
new file mode 100644
index 0000000..35d5282
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/mapper/xml/LswMaterialMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.lsw.mapper.LswMaterialMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/org/jeecg/modules/lsw/mapper/xml/LswMaterialOutboundMapper.xml b/src/main/java/org/jeecg/modules/lsw/mapper/xml/LswMaterialOutboundMapper.xml
new file mode 100644
index 0000000..71f1ed6
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/mapper/xml/LswMaterialOutboundMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.lsw.mapper.LswMaterialOutboundMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/org/jeecg/modules/lsw/service/ILswMaterialInboundService.java b/src/main/java/org/jeecg/modules/lsw/service/ILswMaterialInboundService.java
new file mode 100644
index 0000000..6ec0b42
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/service/ILswMaterialInboundService.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.lsw.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.lsw.entity.LswMaterialInbound;
+
+/**
+ * @Description: 鐗╂枡鍏ュ簱鍗�
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+public interface ILswMaterialInboundService extends IService<LswMaterialInbound> {
+
+}
diff --git a/src/main/java/org/jeecg/modules/lsw/service/ILswMaterialInventoryService.java b/src/main/java/org/jeecg/modules/lsw/service/ILswMaterialInventoryService.java
new file mode 100644
index 0000000..3b49085
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/service/ILswMaterialInventoryService.java
@@ -0,0 +1,23 @@
+package org.jeecg.modules.lsw.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.lsw.entity.LswMaterialInventory;
+
+import java.util.List;
+
+/**
+ * @Description: 鐗╂枡搴撳瓨淇℃伅
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+public interface ILswMaterialInventoryService extends IService<LswMaterialInventory> {
+
+	/**
+	 * 閫氳繃涓昏〃id鏌ヨ瀛愯〃鏁版嵁
+	 *
+	 * @param mainId 涓昏〃id
+	 * @return List<LswMaterialInventory>
+	 */
+	public List<LswMaterialInventory> selectByMainId(String mainId);
+}
diff --git a/src/main/java/org/jeecg/modules/lsw/service/ILswMaterialOutboundService.java b/src/main/java/org/jeecg/modules/lsw/service/ILswMaterialOutboundService.java
new file mode 100644
index 0000000..150fa57
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/service/ILswMaterialOutboundService.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.lsw.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.lsw.entity.LswMaterialOutbound;
+
+/**
+ * @Description: 鐗╂枡鍑哄簱鍗�
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+public interface ILswMaterialOutboundService extends IService<LswMaterialOutbound> {
+
+}
diff --git a/src/main/java/org/jeecg/modules/lsw/service/ILswMaterialService.java b/src/main/java/org/jeecg/modules/lsw/service/ILswMaterialService.java
new file mode 100644
index 0000000..d3289f2
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/service/ILswMaterialService.java
@@ -0,0 +1,49 @@
+package org.jeecg.modules.lsw.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.lsw.entity.LswMaterial;
+import org.jeecg.modules.lsw.entity.LswMaterialInventory;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @Description: 绾胯竟搴撶墿鏂欎俊鎭�
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+public interface ILswMaterialService extends IService<LswMaterial> {
+
+	/**
+	 * 娣诲姞涓�瀵瑰
+	 *
+	 * @param lswMaterial
+	 * @param lswMaterialInventoryList
+	 */
+	public void saveMain(LswMaterial lswMaterial,List<LswMaterialInventory> lswMaterialInventoryList) ;
+	
+	/**
+	 * 淇敼涓�瀵瑰
+	 *
+   * @param lswMaterial
+   * @param lswMaterialInventoryList
+	 */
+	public void updateMain(LswMaterial lswMaterial,List<LswMaterialInventory> lswMaterialInventoryList);
+	
+	/**
+	 * 鍒犻櫎涓�瀵瑰
+	 *
+	 * @param id
+	 */
+	public void delMain (String id);
+	
+	/**
+	 * 鎵归噺鍒犻櫎涓�瀵瑰
+	 *
+	 * @param idList
+	 */
+	public void delBatchMain (Collection<? extends Serializable> idList);
+	
+}
diff --git a/src/main/java/org/jeecg/modules/lsw/service/impl/LswMaterialInboundServiceImpl.java b/src/main/java/org/jeecg/modules/lsw/service/impl/LswMaterialInboundServiceImpl.java
new file mode 100644
index 0000000..9acc70f
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/service/impl/LswMaterialInboundServiceImpl.java
@@ -0,0 +1,18 @@
+package org.jeecg.modules.lsw.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.lsw.entity.LswMaterialInbound;
+import org.jeecg.modules.lsw.mapper.LswMaterialInboundMapper;
+import org.jeecg.modules.lsw.service.ILswMaterialInboundService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Description: 鐗╂枡鍏ュ簱鍗�
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+@Service
+public class LswMaterialInboundServiceImpl extends ServiceImpl<LswMaterialInboundMapper, LswMaterialInbound> implements ILswMaterialInboundService {
+
+}
diff --git a/src/main/java/org/jeecg/modules/lsw/service/impl/LswMaterialInventoryServiceImpl.java b/src/main/java/org/jeecg/modules/lsw/service/impl/LswMaterialInventoryServiceImpl.java
new file mode 100644
index 0000000..dc8f786
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/service/impl/LswMaterialInventoryServiceImpl.java
@@ -0,0 +1,28 @@
+package org.jeecg.modules.lsw.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.lsw.entity.LswMaterialInventory;
+import org.jeecg.modules.lsw.mapper.LswMaterialInventoryMapper;
+import org.jeecg.modules.lsw.service.ILswMaterialInventoryService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Description: 鐗╂枡搴撳瓨淇℃伅
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+@Service
+public class LswMaterialInventoryServiceImpl extends ServiceImpl<LswMaterialInventoryMapper, LswMaterialInventory> implements ILswMaterialInventoryService {
+	
+	@Autowired
+	private LswMaterialInventoryMapper lswMaterialInventoryMapper;
+	
+	@Override
+	public List<LswMaterialInventory> selectByMainId(String mainId) {
+		return lswMaterialInventoryMapper.selectByMainId(mainId);
+	}
+}
diff --git a/src/main/java/org/jeecg/modules/lsw/service/impl/LswMaterialOutboundServiceImpl.java b/src/main/java/org/jeecg/modules/lsw/service/impl/LswMaterialOutboundServiceImpl.java
new file mode 100644
index 0000000..6ce2d72
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/service/impl/LswMaterialOutboundServiceImpl.java
@@ -0,0 +1,18 @@
+package org.jeecg.modules.lsw.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.lsw.entity.LswMaterialOutbound;
+import org.jeecg.modules.lsw.mapper.LswMaterialOutboundMapper;
+import org.jeecg.modules.lsw.service.ILswMaterialOutboundService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Description: 鐗╂枡鍑哄簱鍗�
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+@Service
+public class LswMaterialOutboundServiceImpl extends ServiceImpl<LswMaterialOutboundMapper, LswMaterialOutbound> implements ILswMaterialOutboundService {
+
+}
diff --git a/src/main/java/org/jeecg/modules/lsw/service/impl/LswMaterialServiceImpl.java b/src/main/java/org/jeecg/modules/lsw/service/impl/LswMaterialServiceImpl.java
new file mode 100644
index 0000000..28aaff6
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/service/impl/LswMaterialServiceImpl.java
@@ -0,0 +1,78 @@
+package org.jeecg.modules.lsw.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.lsw.entity.LswMaterial;
+import org.jeecg.modules.lsw.entity.LswMaterialInventory;
+import org.jeecg.modules.lsw.mapper.LswMaterialInventoryMapper;
+import org.jeecg.modules.lsw.mapper.LswMaterialMapper;
+import org.jeecg.modules.lsw.service.ILswMaterialService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.io.Serializable;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @Description: 绾胯竟搴撶墿鏂欎俊鎭�
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+@Service
+public class LswMaterialServiceImpl extends ServiceImpl<LswMaterialMapper, LswMaterial> implements ILswMaterialService {
+
+	@Autowired
+	private LswMaterialMapper lswMaterialMapper;
+	@Autowired
+	private LswMaterialInventoryMapper lswMaterialInventoryMapper;
+	
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void saveMain(LswMaterial lswMaterial, List<LswMaterialInventory> lswMaterialInventoryList) {
+		lswMaterialMapper.insert(lswMaterial);
+		if(lswMaterialInventoryList!=null && lswMaterialInventoryList.size()>0) {
+			for(LswMaterialInventory entity:lswMaterialInventoryList) {
+				//澶栭敭璁剧疆
+				entity.setMaterialId(lswMaterial.getId());
+				lswMaterialInventoryMapper.insert(entity);
+			}
+		}
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void updateMain(LswMaterial lswMaterial,List<LswMaterialInventory> lswMaterialInventoryList) {
+		lswMaterialMapper.updateById(lswMaterial);
+		
+		//1.鍏堝垹闄ゅ瓙琛ㄦ暟鎹�
+		lswMaterialInventoryMapper.deleteByMainId(lswMaterial.getId());
+		
+		//2.瀛愯〃鏁版嵁閲嶆柊鎻掑叆
+		if(lswMaterialInventoryList!=null && lswMaterialInventoryList.size()>0) {
+			for(LswMaterialInventory entity:lswMaterialInventoryList) {
+				//澶栭敭璁剧疆
+				entity.setMaterialId(lswMaterial.getId());
+				lswMaterialInventoryMapper.insert(entity);
+			}
+		}
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void delMain(String id) {
+		lswMaterialInventoryMapper.deleteByMainId(id);
+		lswMaterialMapper.deleteById(id);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void delBatchMain(Collection<? extends Serializable> idList) {
+		for(Serializable id:idList) {
+			lswMaterialInventoryMapper.deleteByMainId(id.toString());
+			lswMaterialMapper.deleteById(id);
+		}
+	}
+	
+}
diff --git a/src/main/java/org/jeecg/modules/lsw/vo/LswMaterialPage.java b/src/main/java/org/jeecg/modules/lsw/vo/LswMaterialPage.java
new file mode 100644
index 0000000..44d8f6c
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/lsw/vo/LswMaterialPage.java
@@ -0,0 +1,78 @@
+package org.jeecg.modules.lsw.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.jeecg.common.aspect.annotation.Dict;
+import org.jeecg.modules.lsw.entity.LswMaterialInventory;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecgframework.poi.excel.annotation.ExcelCollection;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description: 绾胯竟搴撶墿鏂欎俊鎭�
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+@Data
+@ApiModel(value="lsw_materialPage瀵硅薄", description="绾胯竟搴撶墿鏂欎俊鎭�")
+public class LswMaterialPage {
+
+	/**涓婚敭*/
+	@ApiModelProperty(value = "涓婚敭")
+    private String id;
+	/**鍒涘缓浜�*/
+	@ApiModelProperty(value = "鍒涘缓浜�")
+    private String createBy;
+	/**鍒涘缓鏃ユ湡*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "鍒涘缓鏃ユ湡")
+    private Date createTime;
+	/**鏇存柊浜�*/
+	@ApiModelProperty(value = "鏇存柊浜�")
+    private String updateBy;
+	/**鏇存柊鏃ユ湡*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty(value = "鏇存柊鏃ユ湡")
+    private Date updateTime;
+	/**鎵�灞為儴闂�*/
+	@ApiModelProperty(value = "鎵�灞為儴闂�")
+    private String sysOrgCode;
+	/**鍒犻櫎鏍囪*/
+	@Excel(name = "鍒犻櫎鏍囪", width = 15)
+	@ApiModelProperty(value = "鍒犻櫎鏍囪")
+    private Integer delFlag;
+	/**鐗╂枡缂栫爜*/
+	@Excel(name = "鐗╂枡缂栫爜", width = 15)
+	@ApiModelProperty(value = "鐗╂枡缂栫爜")
+    private String materialNumber;
+	/**鐗╂枡鍚嶇О*/
+	@Excel(name = "鐗╂枡鍚嶇О", width = 15)
+	@ApiModelProperty(value = "鐗╂枡鍚嶇О")
+    private String materialName;
+	/**鐗╂枡鍨嬪彿*/
+	@Excel(name = "鐗╂枡鍨嬪彿", width = 15)
+	@ApiModelProperty(value = "鐗╂枡鍨嬪彿")
+    private String materialModel;
+	/**鐗╂枡绫诲瀷*/
+	@Excel(name = "鐗╂枡绫诲瀷", width = 15, dicCode = "material_category")
+    @Dict(dicCode = "material_category")
+	@ApiModelProperty(value = "鐗╂枡绫诲瀷")
+    private String materialCategory;
+	/**鍗曚綅*/
+	@Excel(name = "鍗曚綅", width = 15)
+	@ApiModelProperty(value = "鍗曚綅")
+    private String materialUnit;
+
+	@ExcelCollection(name="鐗╂枡搴撳瓨淇℃伅")
+	@ApiModelProperty(value = "鐗╂枡搴撳瓨淇℃伅")
+	private List<LswMaterialInventory> lswMaterialInventoryList;
+
+}

--
Gitblit v1.9.3