Преглед на файлове

分库,库存查询页面开发,出入库流水页面功能开发

ControlDream преди 2 години
родител
ревизия
b95ef5cddf
променени са 41 файла, в които са добавени 1515 реда и са изтрити 0 реда
  1. 10 0
      hx-admin/pom.xml
  2. 4 0
      hx-admin/src/main/resources/application-dev.yml
  3. 2 0
      hx-common/src/main/java/com/fjhx/common/constant/SourceConstant.java
  4. 1 0
      hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductInfoServiceImpl.java
  5. 15 0
      hx-wms/pom.xml
  6. 73 0
      hx-wms/src/main/java/com/fjhx/wms/controller/stock/StockController.java
  7. 71 0
      hx-wms/src/main/java/com/fjhx/wms/controller/stock/StockJournalController.java
  8. 73 0
      hx-wms/src/main/java/com/fjhx/wms/controller/stock/StockJournalDetailsController.java
  9. 71 0
      hx-wms/src/main/java/com/fjhx/wms/controller/warehouse/WarehouseController.java
  10. 23 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockDto.java
  11. 17 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockJournalDetailsDto.java
  12. 17 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockJournalDetailsSelectDto.java
  13. 17 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockJournalDto.java
  14. 29 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockJournalSelectDto.java
  15. 17 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockSelectDto.java
  16. 39 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/Stock.java
  17. 32 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/StockJournal.java
  18. 39 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/StockJournalDetails.java
  19. 26 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/vo/StockJournalDetailsVo.java
  20. 32 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/vo/StockJournalVo.java
  21. 23 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/vo/StockVo.java
  22. 17 0
      hx-wms/src/main/java/com/fjhx/wms/entity/warehouse/dto/WarehouseDto.java
  23. 20 0
      hx-wms/src/main/java/com/fjhx/wms/entity/warehouse/dto/WarehouseSelectDto.java
  24. 37 0
      hx-wms/src/main/java/com/fjhx/wms/entity/warehouse/po/Warehouse.java
  25. 17 0
      hx-wms/src/main/java/com/fjhx/wms/entity/warehouse/vo/WarehouseVo.java
  26. 27 0
      hx-wms/src/main/java/com/fjhx/wms/mapper/stock/StockJournalDetailsMapper.java
  27. 27 0
      hx-wms/src/main/java/com/fjhx/wms/mapper/stock/StockJournalMapper.java
  28. 26 0
      hx-wms/src/main/java/com/fjhx/wms/mapper/stock/StockMapper.java
  29. 26 0
      hx-wms/src/main/java/com/fjhx/wms/mapper/warehouse/WarehouseMapper.java
  30. 48 0
      hx-wms/src/main/java/com/fjhx/wms/service/stock/StockJournalDetailsService.java
  31. 46 0
      hx-wms/src/main/java/com/fjhx/wms/service/stock/StockJournalService.java
  32. 49 0
      hx-wms/src/main/java/com/fjhx/wms/service/stock/StockService.java
  33. 87 0
      hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockJournalDetailsServiceImpl.java
  34. 91 0
      hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockJournalServiceImpl.java
  35. 166 0
      hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockServiceImpl.java
  36. 46 0
      hx-wms/src/main/java/com/fjhx/wms/service/warehouse/WarehouseService.java
  37. 58 0
      hx-wms/src/main/java/com/fjhx/wms/service/warehouse/impl/WarehouseServiceImpl.java
  38. 18 0
      hx-wms/src/main/resources/mapper/stock/StockJournalDetailsMapper.xml
  39. 42 0
      hx-wms/src/main/resources/mapper/stock/StockJournalMapper.xml
  40. 18 0
      hx-wms/src/main/resources/mapper/stock/StockMapper.xml
  41. 18 0
      hx-wms/src/main/resources/mapper/warehouse/WarehouseMapper.xml

+ 10 - 0
hx-admin/pom.xml

@@ -34,6 +34,16 @@
             <artifactId>hx-iot</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.fjhx</groupId>
+            <artifactId>hx-wms</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.fjhx</groupId>
+            <artifactId>hx-wms</artifactId>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 4 - 0
hx-admin/src/main/resources/application-dev.yml

@@ -5,6 +5,10 @@ spring:
             strict: true
             driver-class-name: com.mysql.cj.jdbc.Driver
             datasource:
+                wms:
+                    url: jdbc:mysql://36.134.91.96:17330/bytesailing_wms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    username: fjhx2012mysql
+                    password: 3PN-Mzn#vnP&q6d
                 item:
                     url: jdbc:mysql://36.134.91.96:17330/bytesailing_item?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                     username: fjhx2012mysql

+ 2 - 0
hx-common/src/main/java/com/fjhx/common/constant/SourceConstant.java

@@ -8,4 +8,6 @@ public interface SourceConstant {
 
     String IOT = "iot";
 
+    String WMS = "wms";
+
 }

+ 1 - 0
hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductInfoServiceImpl.java

@@ -27,6 +27,7 @@ import org.springframework.transaction.annotation.Transactional;
  * @author zlj
  * @since 2023-03-17
  */
+@DS(SourceConstant.ITEM)
 @Service
 public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, ProductInfo> implements ProductInfoService {
 

+ 15 - 0
hx-wms/pom.xml

@@ -11,6 +11,21 @@
     </parent>
 
     <artifactId>hx-wms</artifactId>
+    <dependencies>
+        <dependency>
+            <groupId>com.fjhx</groupId>
+            <artifactId>hx-base</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.fjhx</groupId>
+            <artifactId>hx-common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fjhx</groupId>
+            <artifactId>hx-item</artifactId>
+        </dependency>
+    </dependencies>
 
 
 </project>

+ 73 - 0
hx-wms/src/main/java/com/fjhx/wms/controller/stock/StockController.java

@@ -0,0 +1,73 @@
+package com.fjhx.wms.controller.stock;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.wms.entity.stock.dto.StockSelectDto;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.wms.entity.stock.vo.StockVo;
+import com.fjhx.wms.entity.stock.dto.StockDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.wms.service.stock.StockService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 库存 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+@DS(SourceConstant.WMS)
+@RestController
+@RequestMapping("/stock")
+public class StockController {
+
+    @Autowired
+    private StockService stockService;
+
+    /**
+     * 库存分页
+     */
+    @PostMapping("/page")
+    public Page<StockVo> page(@RequestBody StockSelectDto dto) {
+        return stockService.getPage(dto);
+    }
+
+    /**
+     * 库存明细
+     */
+    @PostMapping("/detail")
+    public List<StockVo> detail(@RequestBody BaseSelectDto dto) {
+        return stockService.detail(dto);
+    }
+
+    /**
+     * 手动入库添加
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody StockDto stockDto) {
+        stockService.add(stockDto);
+    }
+
+    /**
+     * 库存编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody StockDto stockDto) {
+        stockService.edit(stockDto);
+    }
+
+    /**
+     * 库存删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        stockService.delete(dto.getId());
+    }
+
+}

+ 71 - 0
hx-wms/src/main/java/com/fjhx/wms/controller/stock/StockJournalController.java

@@ -0,0 +1,71 @@
+package com.fjhx.wms.controller.stock;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.wms.entity.stock.dto.StockJournalDto;
+import com.fjhx.wms.entity.stock.dto.StockJournalSelectDto;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.wms.entity.stock.vo.StockJournalVo;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.wms.service.stock.StockJournalService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 出入库记录 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+@DS(SourceConstant.WMS)
+@RestController
+@RequestMapping("/stockJournal")
+public class StockJournalController {
+
+    @Autowired
+    private StockJournalService stockJournalService;
+
+    /**
+     * 出入库记录分页
+     */
+    @PostMapping("/page")
+    public Page<StockJournalVo> page(@RequestBody StockJournalSelectDto dto) {
+        return stockJournalService.getPage(dto);
+    }
+
+    /**
+     * 出入库记录明细
+     */
+    @PostMapping("/detail")
+    public StockJournalVo detail(@RequestBody BaseSelectDto dto) {
+        return stockJournalService.detail(dto.getId());
+    }
+
+    /**
+     * 出入库记录新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody StockJournalDto stockJournalDto) {
+        stockJournalService.add(stockJournalDto);
+    }
+
+    /**
+     * 出入库记录编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody StockJournalDto stockJournalDto) {
+        stockJournalService.edit(stockJournalDto);
+    }
+
+    /**
+     * 出入库记录删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        stockJournalService.delete(dto.getId());
+    }
+
+}

+ 73 - 0
hx-wms/src/main/java/com/fjhx/wms/controller/stock/StockJournalDetailsController.java

@@ -0,0 +1,73 @@
+package com.fjhx.wms.controller.stock;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.wms.entity.stock.dto.StockJournalDetailsDto;
+import com.fjhx.wms.entity.stock.dto.StockJournalDetailsSelectDto;
+import com.fjhx.wms.entity.stock.dto.StockJournalSelectDto;
+import com.fjhx.wms.entity.stock.vo.StockJournalVo;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.wms.entity.stock.vo.StockJournalDetailsVo;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.wms.service.stock.StockJournalDetailsService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 出入库记录明细 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+@DS(SourceConstant.WMS)
+@RestController
+@RequestMapping("/stockJournalDetails")
+public class StockJournalDetailsController {
+
+    @Autowired
+    private StockJournalDetailsService stockJournalDetailsService;
+
+    /**
+     * 出入库记录明细分页
+     */
+    @PostMapping("/page")
+    public Page<StockJournalDetailsVo> page(@RequestBody StockJournalSelectDto dto) {
+        return stockJournalDetailsService.getPage(dto);
+    }
+
+    /**
+     * 出入库记录明细明细
+     */
+    @PostMapping("/detail")
+    public StockJournalDetailsVo detail(@RequestBody BaseSelectDto dto) {
+        return stockJournalDetailsService.detail(dto.getId());
+    }
+
+    /**
+     * 出入库记录明细新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody StockJournalDetailsDto stockJournalDetailsDto) {
+        stockJournalDetailsService.add(stockJournalDetailsDto);
+    }
+
+    /**
+     * 出入库记录明细编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody StockJournalDetailsDto stockJournalDetailsDto) {
+        stockJournalDetailsService.edit(stockJournalDetailsDto);
+    }
+
+    /**
+     * 出入库记录明细删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        stockJournalDetailsService.delete(dto.getId());
+    }
+
+}

+ 71 - 0
hx-wms/src/main/java/com/fjhx/wms/controller/warehouse/WarehouseController.java

@@ -0,0 +1,71 @@
+package com.fjhx.wms.controller.warehouse;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.fjhx.common.constant.SourceConstant;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.wms.entity.warehouse.vo.WarehouseVo;
+import com.fjhx.wms.entity.warehouse.dto.WarehouseSelectDto;
+import com.fjhx.wms.entity.warehouse.dto.WarehouseDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.wms.service.warehouse.WarehouseService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 仓库 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+@DS(SourceConstant.WMS)
+@RestController
+@RequestMapping("/warehouse")
+public class WarehouseController {
+
+    @Autowired
+    private WarehouseService warehouseService;
+
+    /**
+     * 仓库分页
+     */
+    @PostMapping("/page")
+    public Page<WarehouseVo> page(@RequestBody WarehouseSelectDto dto) {
+        return warehouseService.getPage(dto);
+    }
+
+    /**
+     * 仓库明细
+     */
+    @PostMapping("/detail")
+    public WarehouseVo detail(@RequestBody BaseSelectDto dto) {
+        return warehouseService.detail(dto.getId());
+    }
+
+    /**
+     * 仓库新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody WarehouseDto warehouseDto) {
+        warehouseService.add(warehouseDto);
+    }
+
+    /**
+     * 仓库编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody WarehouseDto warehouseDto) {
+        warehouseService.edit(warehouseDto);
+    }
+
+    /**
+     * 仓库删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        warehouseService.delete(dto.getId());
+    }
+
+}

+ 23 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockDto.java

@@ -0,0 +1,23 @@
+package com.fjhx.wms.entity.stock.dto;
+
+import com.fjhx.wms.entity.stock.po.Stock;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 库存新增编辑入参实体
+ *
+ * @author
+ * @since 2023-03-20
+ */
+@Getter
+@Setter
+public class StockDto extends Stock {
+
+    /**
+     * 添加库存商品列表
+     */
+    private List<Stock> list;
+}

+ 17 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockJournalDetailsDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.wms.entity.stock.dto;
+
+import com.fjhx.wms.entity.stock.po.StockJournalDetails;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 出入库记录明细新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+@Getter
+@Setter
+public class StockJournalDetailsDto extends StockJournalDetails {
+
+}

+ 17 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockJournalDetailsSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.wms.entity.stock.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 出入库记录明细列表查询入参实体
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+@Getter
+@Setter
+public class StockJournalDetailsSelectDto extends BaseSelectDto {
+
+}

+ 17 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockJournalDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.wms.entity.stock.dto;
+
+import com.fjhx.wms.entity.stock.po.StockJournal;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 出入库记录新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+@Getter
+@Setter
+public class StockJournalDto extends StockJournal {
+
+}

+ 29 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockJournalSelectDto.java

@@ -0,0 +1,29 @@
+package com.fjhx.wms.entity.stock.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 出入库记录列表查询入参实体
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+@Getter
+@Setter
+public class StockJournalSelectDto extends BaseSelectDto {
+
+    /**搜索关键字*/
+    private String keywords;
+
+    /**记录类型 1为手动入库 2为手动出库*/
+    private Integer type;
+
+    /**仓库id*/
+    private String warehouseId;
+
+    /**商品id*/
+    private String productId;
+
+}

+ 17 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.wms.entity.stock.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 库存列表查询入参实体
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+@Getter
+@Setter
+public class StockSelectDto extends BaseSelectDto {
+
+}

+ 39 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/Stock.java

@@ -0,0 +1,39 @@
+package com.fjhx.wms.entity.stock.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 库存
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+@Getter
+@Setter
+@TableName("stock")
+public class Stock extends BasePo {
+
+    /**
+     * 仓库id
+     */
+    private Long warehouseId;
+
+    /**
+     * 产品id
+     */
+    private Long productId;
+
+    /**
+     * 库存数量
+     */
+    private BigDecimal quantity;
+
+}

+ 32 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/StockJournal.java

@@ -0,0 +1,32 @@
+package com.fjhx.wms.entity.stock.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 出入库记录
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+@Getter
+@Setter
+@TableName("stock_journal")
+public class StockJournal extends BasePo {
+
+    /**
+     * 操作类型 1手动入库
+     */
+    private Integer type;
+
+    /**
+     * 仓库id
+     */
+    private Long warehouseId;
+
+}

+ 39 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/StockJournalDetails.java

@@ -0,0 +1,39 @@
+package com.fjhx.wms.entity.stock.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 出入库记录明细
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+@Getter
+@Setter
+@TableName("stock_journal_details")
+public class StockJournalDetails extends BasePo {
+
+    /**
+     * 出入库记录id
+     */
+    private Long stockJournalId;
+
+    /**
+     * 商品id
+     */
+    private Long productId;
+
+    /**
+     * 数量
+     */
+    private BigDecimal quantity;
+
+}

+ 26 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/vo/StockJournalDetailsVo.java

@@ -0,0 +1,26 @@
+package com.fjhx.wms.entity.stock.vo;
+
+import com.fjhx.wms.entity.stock.po.StockJournalDetails;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 出入库记录明细列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+@Getter
+@Setter
+public class StockJournalDetailsVo extends StockJournalDetails {
+
+    /**商品名称*/
+    private String productName;
+
+    /**仓库名称*/
+    private String warehouseName;
+
+    /**操作类型*/
+    private Integer type;
+
+}

+ 32 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/vo/StockJournalVo.java

@@ -0,0 +1,32 @@
+package com.fjhx.wms.entity.stock.vo;
+
+import com.fjhx.wms.entity.stock.po.StockJournal;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 出入库记录列表查询返回值实体
+ *
+ * @author
+ * @since 2023-03-20
+ */
+@Getter
+@Setter
+public class StockJournalVo extends StockJournal {
+
+    /**
+     * 仓库名称
+     */
+    private String warehouseName;
+
+    /**
+     * 操作人名称
+     */
+    private String userName;
+
+    /**手动入库商品明细*/
+    private List<StockVo> list;
+
+}

+ 23 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/vo/StockVo.java

@@ -0,0 +1,23 @@
+package com.fjhx.wms.entity.stock.vo;
+
+import com.fjhx.wms.entity.stock.po.Stock;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 库存列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+@Getter
+@Setter
+public class StockVo extends Stock {
+
+    /**产品名称*/
+    private String productName;
+
+    /**产品类型*/
+    private Integer type;
+
+}

+ 17 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/warehouse/dto/WarehouseDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.wms.entity.warehouse.dto;
+
+import com.fjhx.wms.entity.warehouse.po.Warehouse;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 仓库新增编辑入参实体
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+@Getter
+@Setter
+public class WarehouseDto extends Warehouse {
+
+}

+ 20 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/warehouse/dto/WarehouseSelectDto.java

@@ -0,0 +1,20 @@
+package com.fjhx.wms.entity.warehouse.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 仓库列表查询入参实体
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+@Getter
+@Setter
+public class WarehouseSelectDto extends BaseSelectDto {
+
+    /**搜索关键字*/
+    private String keywords;
+
+}

+ 37 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/warehouse/po/Warehouse.java

@@ -0,0 +1,37 @@
+package com.fjhx.wms.entity.warehouse.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 仓库
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+@Getter
+@Setter
+@TableName("warehouse")
+public class Warehouse extends BasePo {
+
+    /**
+     * 仓库名称
+     */
+    private String name;
+
+    /**
+     * 仓库类型
+     */
+    private Integer type;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 17 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/warehouse/vo/WarehouseVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.wms.entity.warehouse.vo;
+
+import com.fjhx.wms.entity.warehouse.po.Warehouse;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 仓库列表查询返回值实体
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+@Getter
+@Setter
+public class WarehouseVo extends Warehouse {
+
+}

+ 27 - 0
hx-wms/src/main/java/com/fjhx/wms/mapper/stock/StockJournalDetailsMapper.java

@@ -0,0 +1,27 @@
+package com.fjhx.wms.mapper.stock;
+
+import com.fjhx.wms.entity.stock.po.StockJournalDetails;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.wms.entity.stock.vo.StockJournalDetailsVo;
+import com.fjhx.wms.entity.stock.vo.StockJournalVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 出入库记录明细 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+public interface StockJournalDetailsMapper extends BaseMapper<StockJournalDetails> {
+
+    /**
+     * 出入库记录明细分页
+     */
+    Page<StockJournalDetailsVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<StockJournalDetails> wrapper);
+
+}

+ 27 - 0
hx-wms/src/main/java/com/fjhx/wms/mapper/stock/StockJournalMapper.java

@@ -0,0 +1,27 @@
+package com.fjhx.wms.mapper.stock;
+
+import com.fjhx.wms.entity.stock.po.StockJournal;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.wms.entity.stock.vo.StockJournalVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 出入库记录 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+public interface StockJournalMapper extends BaseMapper<StockJournal> {
+
+    /**
+     * 出入库记录分页
+     */
+    Page<StockJournalVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<StockJournal> wrapper);
+
+    StockJournalVo detail(@Param("ew") IWrapper<StockJournal> wrapper);
+}

+ 26 - 0
hx-wms/src/main/java/com/fjhx/wms/mapper/stock/StockMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.wms.mapper.stock;
+
+import com.fjhx.wms.entity.stock.po.Stock;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.wms.entity.stock.vo.StockVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 库存 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+public interface StockMapper extends BaseMapper<Stock> {
+
+    /**
+     * 库存分页
+     */
+    Page<StockVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<Stock> wrapper);
+
+}

+ 26 - 0
hx-wms/src/main/java/com/fjhx/wms/mapper/warehouse/WarehouseMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.wms.mapper.warehouse;
+
+import com.fjhx.wms.entity.warehouse.po.Warehouse;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.wms.entity.warehouse.vo.WarehouseVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 仓库 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+public interface WarehouseMapper extends BaseMapper<Warehouse> {
+
+    /**
+     * 仓库分页
+     */
+    Page<WarehouseVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<Warehouse> wrapper);
+
+}

+ 48 - 0
hx-wms/src/main/java/com/fjhx/wms/service/stock/StockJournalDetailsService.java

@@ -0,0 +1,48 @@
+package com.fjhx.wms.service.stock;
+
+import com.fjhx.wms.entity.stock.dto.StockJournalSelectDto;
+import com.fjhx.wms.entity.stock.po.StockJournalDetails;
+import com.fjhx.wms.entity.stock.dto.StockJournalDetailsDto;
+import com.fjhx.wms.entity.stock.dto.StockJournalDetailsSelectDto;
+import com.fjhx.wms.entity.stock.vo.StockJournalDetailsVo;
+import com.fjhx.wms.entity.stock.vo.StockJournalVo;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+
+/**
+ * <p>
+ * 出入库记录明细 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+public interface StockJournalDetailsService extends BaseService<StockJournalDetails> {
+
+    /**
+     * 出入库记录明细分页
+     */
+    Page<StockJournalDetailsVo> getPage(StockJournalSelectDto dto);
+
+    /**
+     * 出入库记录明细明细
+     */
+    StockJournalDetailsVo detail(Long id);
+
+    /**
+     * 出入库记录明细新增
+     */
+    void add(StockJournalDetailsDto stockJournalDetailsDto);
+
+    /**
+     * 出入库记录明细编辑
+     */
+    void edit(StockJournalDetailsDto stockJournalDetailsDto);
+
+    /**
+     * 出入库记录明细删除
+     */
+    void delete(Long id);
+
+}

+ 46 - 0
hx-wms/src/main/java/com/fjhx/wms/service/stock/StockJournalService.java

@@ -0,0 +1,46 @@
+package com.fjhx.wms.service.stock;
+
+import com.fjhx.wms.entity.stock.po.StockJournal;
+import com.fjhx.wms.entity.stock.dto.StockJournalDto;
+import com.fjhx.wms.entity.stock.dto.StockJournalSelectDto;
+import com.fjhx.wms.entity.stock.vo.StockJournalVo;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+
+/**
+ * <p>
+ * 出入库记录 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+public interface StockJournalService extends BaseService<StockJournal> {
+
+    /**
+     * 出入库记录分页
+     */
+    Page<StockJournalVo> getPage(StockJournalSelectDto dto);
+
+    /**
+     * 出入库记录明细
+     */
+    StockJournalVo detail(Long id);
+
+    /**
+     * 出入库记录新增
+     */
+    void add(StockJournalDto stockJournalDto);
+
+    /**
+     * 出入库记录编辑
+     */
+    void edit(StockJournalDto stockJournalDto);
+
+    /**
+     * 出入库记录删除
+     */
+    void delete(Long id);
+
+}

+ 49 - 0
hx-wms/src/main/java/com/fjhx/wms/service/stock/StockService.java

@@ -0,0 +1,49 @@
+package com.fjhx.wms.service.stock;
+
+import com.fjhx.wms.entity.stock.po.Stock;
+import com.fjhx.wms.entity.stock.dto.StockSelectDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.wms.entity.stock.vo.StockVo;
+import com.fjhx.wms.entity.stock.dto.StockDto;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 库存 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+public interface StockService extends BaseService<Stock> {
+
+    /**
+     * 库存分页
+     */
+    Page<StockVo> getPage(StockSelectDto dto);
+
+    /**
+     * 库存明细
+     */
+    List<StockVo> detail(BaseSelectDto dto);
+
+    /**
+     * 库存新增
+     */
+    void add(StockDto stockDto);
+
+    /**
+     * 库存编辑
+     */
+    void edit(StockDto stockDto);
+
+    /**
+     * 库存删除
+     */
+    void delete(Long id);
+
+}

+ 87 - 0
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockJournalDetailsServiceImpl.java

@@ -0,0 +1,87 @@
+package com.fjhx.wms.service.stock.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.fjhx.item.entity.product.po.ProductInfo;
+import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.wms.entity.stock.dto.StockJournalSelectDto;
+import com.fjhx.wms.entity.stock.po.StockJournal;
+import com.fjhx.wms.entity.stock.po.StockJournalDetails;
+import com.fjhx.wms.entity.stock.vo.StockJournalVo;
+import com.fjhx.wms.mapper.stock.StockJournalDetailsMapper;
+import com.fjhx.wms.service.stock.StockJournalDetailsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.wms.entity.stock.dto.StockJournalDetailsDto;
+import com.fjhx.wms.entity.stock.dto.StockJournalDetailsSelectDto;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.wms.entity.stock.vo.StockJournalDetailsVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import cn.hutool.core.bean.BeanUtil;
+
+import javax.xml.ws.handler.PortInfo;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+
+/**
+ * <p>
+ * 出入库记录明细 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+@Service
+public class StockJournalDetailsServiceImpl extends ServiceImpl<StockJournalDetailsMapper, StockJournalDetails> implements StockJournalDetailsService {
+    @Autowired
+    ProductInfoService productInfoService;
+
+    @Override
+    public Page<StockJournalDetailsVo> getPage(StockJournalSelectDto dto) {
+        IWrapper<StockJournalDetails> wrapper = getWrapper();
+        wrapper.eq( StockJournal::getType,dto.getType());
+        wrapper.like("w.name",dto.getKeywords());
+        wrapper.eq("w.id",dto.getWarehouseId());
+        wrapper.eq("sjd.product_id",dto.getProductId());
+        Page<StockJournalDetailsVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        List<StockJournalDetailsVo> records = page.getRecords();
+        //获取商品id列表
+        List<Long> productIds = records.stream().map(StockJournalDetailsVo::getProductId).collect(Collectors.toList());
+        if(ObjectUtil.isNotEmpty(productIds)) {
+            List<ProductInfo> productInfos = productInfoService.listByIds(productIds);
+            Map<Long, ProductInfo> productInfoMap = productInfos.stream().collect(Collectors.groupingBy(ProductInfo::getId,
+                    Collectors.collectingAndThen(Collectors.toList(), value -> value.get(0))));
+            for (StockJournalDetailsVo stockJournalVo : records) {
+                ProductInfo productInfo = productInfoMap.get(stockJournalVo.getProductId());
+                stockJournalVo.setProductName(productInfo.getName());
+            }
+        }
+
+        return page;
+    }
+
+    @Override
+    public StockJournalDetailsVo detail(Long id) {
+        StockJournalDetails StockJournalDetails = this.getById(id);
+        StockJournalDetailsVo result = BeanUtil.toBean(StockJournalDetails, StockJournalDetailsVo.class);
+        return result;
+    }
+
+    @Override
+    public void add(StockJournalDetailsDto stockJournalDetailsDto) {
+        this.save(stockJournalDetailsDto);
+    }
+
+    @Override
+    public void edit(StockJournalDetailsDto stockJournalDetailsDto) {
+        this.updateById(stockJournalDetailsDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 91 - 0
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockJournalServiceImpl.java

@@ -0,0 +1,91 @@
+package com.fjhx.wms.service.stock.impl;
+
+import com.fjhx.item.entity.product.po.ProductInfo;
+import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.wms.entity.stock.po.StockJournal;
+import com.fjhx.wms.entity.stock.vo.StockVo;
+import com.fjhx.wms.mapper.stock.StockJournalMapper;
+import com.fjhx.wms.service.stock.StockJournalService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.wms.entity.stock.dto.StockJournalDto;
+import com.fjhx.wms.entity.stock.dto.StockJournalSelectDto;
+import com.obs.services.internal.ServiceException;
+import com.ruoyi.system.utils.UserUtil;
+import org.apache.ibatis.javassist.compiler.ast.Keyword;
+import org.apache.logging.log4j.core.util.Assert;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.wms.entity.stock.vo.StockJournalVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import cn.hutool.core.bean.BeanUtil;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+
+/**
+ * <p>
+ * 出入库记录 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-03-20
+ */
+@Service
+public class StockJournalServiceImpl extends ServiceImpl<StockJournalMapper, StockJournal> implements StockJournalService {
+
+    @Autowired
+    ProductInfoService productInfoService;
+
+    @Override
+    public Page<StockJournalVo> getPage(StockJournalSelectDto dto) {
+        IWrapper<StockJournal> wrapper = getWrapper();
+        wrapper.orderByDesc("sj", StockJournal::getId);
+        wrapper.eq("sj", StockJournal::getType, dto.getType());
+        wrapper.like("w", StockJournalSelectDto::getKeywords, dto.getKeywords());
+        Page<StockJournalVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        //根据id赋值操作人名称
+        UserUtil.assignmentNickName(page.getRecords(), StockJournalVo::getCreateUser, StockJournalVo::setUserName);
+        return page;
+    }
+
+    @Override
+    public StockJournalVo detail(Long id) {
+        IWrapper<StockJournal> wrapper = getWrapper();
+        wrapper.eq("sj",StockJournal::getId,id);
+        StockJournalVo result = baseMapper.detail(wrapper);
+        //查询商品信息
+        List<StockVo> stockVos = result.getList();
+        List<Long> productIds = stockVos.stream().map(StockVo::getProductId).collect(Collectors.toList());
+        List<ProductInfo> productInfos = productInfoService.listByIds(productIds);
+
+        Map<Long, ProductInfo> productInfoMap = productInfos.stream().collect(Collectors.groupingBy(ProductInfo::getId,
+                Collectors.collectingAndThen(Collectors.toList(), value -> value.get(0))));
+        for (StockVo stockVo: stockVos){
+            ProductInfo productInfo = productInfoMap.get(stockVo.getProductId());
+            if(productInfo==null){
+                throw new ServiceException("未知商品商品id->"+stockVo.getProductId());
+            }
+            stockVo.setProductName(productInfo.getName());
+        }
+        return result;
+    }
+
+    @Override
+    public void add(StockJournalDto stockJournalDto) {
+        this.save(stockJournalDto);
+    }
+
+    @Override
+    public void edit(StockJournalDto stockJournalDto) {
+        this.updateById(stockJournalDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 166 - 0
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockServiceImpl.java

@@ -0,0 +1,166 @@
+package com.fjhx.wms.service.stock.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.fjhx.item.entity.product.po.ProductInfo;
+import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.item.service.product.impl.ProductInfoServiceImpl;
+import com.fjhx.wms.entity.stock.dto.StockJournalDetailsDto;
+import com.fjhx.wms.entity.stock.po.Stock;
+import com.fjhx.wms.entity.stock.po.StockJournal;
+import com.fjhx.wms.entity.stock.po.StockJournalDetails;
+import com.fjhx.wms.mapper.stock.StockMapper;
+import com.fjhx.wms.service.stock.StockJournalDetailsService;
+import com.fjhx.wms.service.stock.StockJournalService;
+import com.fjhx.wms.service.stock.StockService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.wms.entity.stock.dto.StockSelectDto;
+import com.obs.services.internal.ServiceException;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import org.apache.logging.log4j.core.util.Assert;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.wms.entity.stock.vo.StockVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.wms.entity.stock.dto.StockDto;
+import cn.hutool.core.bean.BeanUtil;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+
+/**
+ * <p>
+ * 库存 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-03-20
+ */
+@Service
+public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements StockService {
+    @Autowired
+    StockJournalService stockJournalService;
+    @Autowired
+    StockJournalDetailsService stockJournalDetailsService;
+    @Autowired
+    ProductInfoService productInfoService;
+
+    @Override
+    public Page<StockVo> getPage(StockSelectDto dto) {
+        IWrapper<Stock> wrapper = getWrapper();
+        wrapper.orderByDesc("s", Stock::getId);
+        wrapper.eq(Stock::getWarehouseId,dto.getId());
+        wrapper.like(Stock::getQuantity,dto.getKeyword());
+
+        Page<StockVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        List<StockVo> stockVos = page.getRecords();
+        //获取产品id列表
+        List<Long> productIds = stockVos.stream().map(Stock::getProductId).collect(Collectors.toList());
+        List<ProductInfo> productInfos = productInfoService.listByIds(productIds);
+        Map<Long, ProductInfo> productInfoMap = productInfos.stream().collect(Collectors.groupingBy(ProductInfo::getId,
+                Collectors.collectingAndThen(Collectors.toList(), value -> value.get(0))));
+        for (StockVo stockVo : stockVos){
+            ProductInfo productInfo = productInfoMap.get(stockVo.getProductId());
+            stockVo.setType(productInfo.getType());
+            stockVo.setProductName(productInfo.getName());
+        }
+
+        return page;
+        //库存查询改到这
+    }
+
+    @Override
+    public List<StockVo> detail(BaseSelectDto dto) {
+        List<Stock> list = list(q->q.eq(ObjectUtil.isNotEmpty(dto.getId()),Stock::getWarehouseId,dto.getId()).like(ObjectUtil.isNotEmpty(dto.getKeyword()),Stock::getQuantity,dto.getKeyword()));
+        List<StockVo> stockVos = BeanUtil.copyToList(list, StockVo.class);
+        //获取产品id列表
+        List<Long> productIds = list.stream().map(Stock::getProductId).collect(Collectors.toList());
+        List<ProductInfo> productInfos = productInfoService.listByIds(productIds);
+        Map<Long, ProductInfo> productInfoMap = productInfos.stream().collect(Collectors.groupingBy(ProductInfo::getId,
+                Collectors.collectingAndThen(Collectors.toList(), value -> value.get(0))));
+        for (StockVo stockVo : stockVos){
+            ProductInfo productInfo = productInfoMap.get(stockVo.getProductId());
+            stockVo.setType(productInfo.getType());
+            stockVo.setProductName(productInfo.getName());
+        }
+        return stockVos;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void add(StockDto stockDto) {
+        ModifyInventory(1, stockDto);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void edit(StockDto stockDto) {
+        ModifyInventory(2, stockDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+    /**
+     * 操作库存通用方法
+     *
+     * @param type 1为手动入库操作 2为手动出库操作
+     */
+    public void ModifyInventory(int type, StockDto stockDto) {
+        //创建出入库记录
+        StockJournal stockJournal = new StockJournal();
+        stockJournal.setType(type);
+        stockJournal.setWarehouseId(stockDto.getWarehouseId());
+        stockJournalService.save(stockJournal);
+
+        //获取现有库存
+        List<Long> productIds = stockDto.getList().stream().map(Stock::getProductId).collect(Collectors.toList());
+        List<Stock> stockList = list(q->q.in(Stock::getProductId,productIds).eq(Stock::getWarehouseId,stockDto.getWarehouseId()));
+        Map<Long, Stock> stockMap = stockList.stream().collect(Collectors.groupingBy(Stock::getProductId,
+                Collectors.collectingAndThen(Collectors.toList(), value -> value.get(0))));
+
+        List<StockJournalDetails> stockJournalDetailsList = new ArrayList<>();
+        for (Stock stock : stockDto.getList()) {
+            stock.setWarehouseId(stockDto.getWarehouseId());
+
+            //合并库存数量
+            Stock oldStocks = stockMap.get(stock.getProductId());
+            if (ObjectUtil.isNotEmpty(oldStocks)) {
+                BigDecimal quantity = oldStocks.getQuantity();
+                if (type == 1) {
+                    //入库库存相加
+                    quantity = quantity.add(stock.getQuantity());
+                } else if (type == 2) {
+                    //出库库存相减
+                    quantity = quantity.subtract(stock.getQuantity());
+                    if (quantity.compareTo(BigDecimal.ZERO) < 0) {
+                        throw new ServiceException("库存不足无法出库");
+                    }
+                } else {
+                    throw new ServiceException("未知库存操作类型");
+                }
+                stock.setId(oldStocks.getId());
+                stock.setQuantity(quantity);
+            } else if (type == 2) {
+                throw new ServiceException("以下商品库存不存在,无法出库:" + stock.getProductId());
+            }
+            //创建出入库明细
+            StockJournalDetails stockJournalDetails = new StockJournalDetailsDto();
+            stockJournalDetails.setStockJournalId(stockJournal.getId());
+            stockJournalDetails.setProductId(stock.getProductId());
+            stockJournalDetails.setQuantity(stock.getQuantity());
+            stockJournalDetailsList.add(stockJournalDetails);
+        }
+        stockJournalDetailsService.saveBatch(stockJournalDetailsList);
+        //操作库存
+        saveOrUpdateBatch(stockDto.getList());
+    }
+
+}

+ 46 - 0
hx-wms/src/main/java/com/fjhx/wms/service/warehouse/WarehouseService.java

@@ -0,0 +1,46 @@
+package com.fjhx.wms.service.warehouse;
+
+import com.fjhx.wms.entity.warehouse.po.Warehouse;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.wms.entity.warehouse.vo.WarehouseVo;
+import com.fjhx.wms.entity.warehouse.dto.WarehouseSelectDto;
+import com.fjhx.wms.entity.warehouse.dto.WarehouseDto;
+
+
+/**
+ * <p>
+ * 仓库 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+public interface WarehouseService extends BaseService<Warehouse> {
+
+    /**
+     * 仓库分页
+     */
+    Page<WarehouseVo> getPage(WarehouseSelectDto dto);
+
+    /**
+     * 仓库明细
+     */
+    WarehouseVo detail(Long id);
+
+    /**
+     * 仓库新增
+     */
+    void add(WarehouseDto warehouseDto);
+
+    /**
+     * 仓库编辑
+     */
+    void edit(WarehouseDto warehouseDto);
+
+    /**
+     * 仓库删除
+     */
+    void delete(Long id);
+
+}

+ 58 - 0
hx-wms/src/main/java/com/fjhx/wms/service/warehouse/impl/WarehouseServiceImpl.java

@@ -0,0 +1,58 @@
+package com.fjhx.wms.service.warehouse.impl;
+
+import com.fjhx.wms.entity.warehouse.po.Warehouse;
+import com.fjhx.wms.mapper.warehouse.WarehouseMapper;
+import com.fjhx.wms.service.warehouse.WarehouseService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.wms.entity.warehouse.vo.WarehouseVo;
+import com.fjhx.wms.entity.warehouse.dto.WarehouseSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.wms.entity.warehouse.dto.WarehouseDto;
+import cn.hutool.core.bean.BeanUtil;
+
+
+/**
+ * <p>
+ * 仓库 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-03-20
+ */
+@Service
+public class WarehouseServiceImpl extends ServiceImpl<WarehouseMapper, Warehouse> implements WarehouseService {
+
+    @Override
+    public Page<WarehouseVo> getPage(WarehouseSelectDto dto) {
+        IWrapper<Warehouse> wrapper = getWrapper();
+        wrapper.orderByDesc("w", Warehouse::getId);
+        wrapper.like("w",WarehouseSelectDto::getKeywords,dto.getKeywords());
+        Page<WarehouseVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    @Override
+    public WarehouseVo detail(Long id) {
+        Warehouse Warehouse = this.getById(id);
+        WarehouseVo result = BeanUtil.toBean(Warehouse, WarehouseVo.class);
+        return result;
+    }
+
+    @Override
+    public void add(WarehouseDto warehouseDto) {
+        this.save(warehouseDto);
+    }
+
+    @Override
+    public void edit(WarehouseDto warehouseDto) {
+        this.updateById(warehouseDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 18 - 0
hx-wms/src/main/resources/mapper/stock/StockJournalDetailsMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.wms.mapper.stock.StockJournalDetailsMapper">
+    <select id="getPage" resultType="com.fjhx.wms.entity.stock.vo.StockJournalDetailsVo">
+        SELECT
+            sj.type,
+            w.`name` warehouseName,
+            sjd.product_id,
+            sjd.quantity,
+            sjd.create_time
+        FROM
+            stock_journal sj
+                JOIN stock_journal_details sjd ON sjd.stock_journal_id = sj.id
+                JOIN warehouse w ON sj.warehouse_id = w.id
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 42 - 0
hx-wms/src/main/resources/mapper/stock/StockJournalMapper.xml

@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.wms.mapper.stock.StockJournalMapper">
+    <select id="getPage" resultType="com.fjhx.wms.entity.stock.vo.StockJournalVo">
+        SELECT
+            sj.id,
+            sj.type,
+            sj.warehouse_id,
+            w.NAME warehouseName,
+            sj.create_user,
+            sj.create_time,
+            sj.update_user,
+            sj.update_time
+        FROM
+            stock_journal sj
+                JOIN warehouse w ON sj.warehouse_id = w.id
+            ${ew.customSqlSegment}
+    </select>
+    <resultMap id="detail" type="com.fjhx.wms.entity.stock.vo.StockJournalVo">
+        <id property="id" column="id"/>
+        <result property="warehouseName" column="warehouseName"/>
+        <collection property="list" javaType="java.util.ArrayList" ofType="com.fjhx.wms.entity.stock.vo.StockVo">
+            <id property="id" column="stockJournalDetailsId"/>
+            <result property="productId" column="product_id"/>
+            <result property="quantity" column="quantity"/>
+        </collection>
+    </resultMap>
+    <select id="detail" resultMap="detail">
+        SELECT
+            sj.id,
+            w.`name` warehouseName,
+            sjd.id stockJournalDetailsId,
+            sjd.product_id,
+            sjd.quantity
+        FROM
+            stock_journal sj
+                JOIN warehouse w ON sj.warehouse_id = w.id
+                JOIN stock_journal_details sjd ON sjd.stock_journal_id = sj.id
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 18 - 0
hx-wms/src/main/resources/mapper/stock/StockMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.wms.mapper.stock.StockMapper">
+    <select id="getPage" resultType="com.fjhx.wms.entity.stock.vo.StockVo">
+        select
+            s.id,
+            s.warehouse_id,
+            s.product_id,
+            s.quantity,
+            s.create_user,
+            s.create_time,
+            s.update_user,
+            s.update_time
+        from stock s
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 18 - 0
hx-wms/src/main/resources/mapper/warehouse/WarehouseMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.wms.mapper.warehouse.WarehouseMapper">
+    <select id="getPage" resultType="com.fjhx.wms.entity.warehouse.vo.WarehouseVo">
+        select
+            w.id,
+            w.name,
+            w.type,
+            w.remark,
+            w.create_user,
+            w.create_time,
+            w.update_user,
+            w.update_time
+        from warehouse w
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>