Ver Fonte

库存快照

yzc há 1 ano atrás
pai
commit
b16c959a31
22 ficheiros alterados com 660 adições e 3 exclusões
  1. 3 3
      code/src/test/java/WmsDataSource.java
  2. 37 0
      hx-wms/src/main/java/com/fjhx/wms/controller/stock/StockSnapshotController.java
  3. 37 0
      hx-wms/src/main/java/com/fjhx/wms/controller/stock/StockSnapshotDetailsController.java
  4. 5 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockSelectDto.java
  5. 17 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockSnapshotDetailsDto.java
  6. 44 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockSnapshotDetailsSelectDto.java
  7. 17 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockSnapshotDto.java
  8. 17 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockSnapshotSelectDto.java
  9. 28 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/StockSnapshot.java
  10. 58 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/StockSnapshotDetails.java
  11. 24 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/vo/StockSnapshotDetailsVo.java
  12. 17 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/vo/StockSnapshotVo.java
  13. 13 0
      hx-wms/src/main/java/com/fjhx/wms/entity/stock/vo/StockVo.java
  14. 26 0
      hx-wms/src/main/java/com/fjhx/wms/mapper/stock/StockSnapshotDetailsMapper.java
  15. 26 0
      hx-wms/src/main/java/com/fjhx/wms/mapper/stock/StockSnapshotMapper.java
  16. 25 0
      hx-wms/src/main/java/com/fjhx/wms/service/stock/StockSnapshotDetailsService.java
  17. 25 0
      hx-wms/src/main/java/com/fjhx/wms/service/stock/StockSnapshotService.java
  18. 6 0
      hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockServiceImpl.java
  19. 105 0
      hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockSnapshotDetailsServiceImpl.java
  20. 80 0
      hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockSnapshotServiceImpl.java
  21. 35 0
      hx-wms/src/main/resources/mapper/stock/StockSnapshotDetailsMapper.xml
  22. 15 0
      hx-wms/src/main/resources/mapper/stock/StockSnapshotMapper.xml

+ 3 - 3
code/src/test/java/WmsDataSource.java

@@ -4,9 +4,9 @@ public class WmsDataSource {
 
     public static void main(String[] args) {
         GeneratorApplication.builder()
-                .url("jdbc:mysql://36.134.91.96:12333/bytesailing_wms?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true")
-                .username("root")
-                .password("5fWD*oa^nso@kmKa")
+                .url(DataSourceInfo.URL)
+                .username(DataSourceInfo.USER_NAME)
+                .password(DataSourceInfo.PASSWORD)
                 .port(9989)
                 .module("hx-wms")
                 .parent("com.fjhx.wms")

+ 37 - 0
hx-wms/src/main/java/com/fjhx/wms/controller/stock/StockSnapshotController.java

@@ -0,0 +1,37 @@
+package com.fjhx.wms.controller.stock;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.wms.entity.stock.dto.StockSnapshotSelectDto;
+import com.fjhx.wms.entity.stock.vo.StockSnapshotVo;
+import com.fjhx.wms.service.stock.StockSnapshotService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * <p>
+ * 库存快照 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2024-01-17
+ */
+@RestController
+@RequestMapping("/stockSnapshot")
+public class StockSnapshotController {
+
+    @Autowired
+    private StockSnapshotService stockSnapshotService;
+
+    /**
+     * 库存快照分页
+     */
+    @PostMapping("/page")
+    public Page<StockSnapshotVo> page(@RequestBody StockSnapshotSelectDto dto) {
+        return stockSnapshotService.getPage(dto);
+    }
+
+}

+ 37 - 0
hx-wms/src/main/java/com/fjhx/wms/controller/stock/StockSnapshotDetailsController.java

@@ -0,0 +1,37 @@
+package com.fjhx.wms.controller.stock;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.wms.entity.stock.dto.StockSnapshotDetailsSelectDto;
+import com.fjhx.wms.entity.stock.vo.StockSnapshotDetailsVo;
+import com.fjhx.wms.service.stock.StockSnapshotDetailsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * <p>
+ * 库存快照明细 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2024-01-17
+ */
+@RestController
+@RequestMapping("/stockSnapshotDetails")
+public class StockSnapshotDetailsController {
+
+    @Autowired
+    private StockSnapshotDetailsService stockSnapshotDetailsService;
+
+    /**
+     * 库存快照明细分页
+     */
+    @PostMapping("/page")
+    public Page<StockSnapshotDetailsVo> page(@RequestBody StockSnapshotDetailsSelectDto dto) {
+        return stockSnapshotDetailsService.getPage(dto);
+    }
+
+}

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

@@ -31,4 +31,9 @@ public class StockSelectDto extends BaseSelectDto {
      */
     private Long companyId;
 
+    /**
+     * 产品归属归属id
+     */
+    private Long productClassifyId;
+
 }

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

@@ -0,0 +1,17 @@
+package com.fjhx.wms.entity.stock.dto;
+
+import com.fjhx.wms.entity.stock.po.StockSnapshotDetails;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 库存快照明细新增编辑入参实体
+ *
+ * @author
+ * @since 2024-01-17
+ */
+@Getter
+@Setter
+public class StockSnapshotDetailsDto extends StockSnapshotDetails {
+
+}

+ 44 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockSnapshotDetailsSelectDto.java

@@ -0,0 +1,44 @@
+package com.fjhx.wms.entity.stock.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 库存快照明细列表查询入参实体
+ *
+ * @author
+ * @since 2024-01-17
+ */
+@Getter
+@Setter
+public class StockSnapshotDetailsSelectDto extends BaseSelectDto {
+
+    /**
+     * 快照id
+     */
+    private Long snapshotId;
+
+    /**
+     * 根据产品id列表过滤
+     */
+    private List<Long> productIds;
+
+    /**
+     * 产品定义
+     */
+    private Integer definition;
+
+    /**
+     * 归属公司id
+     */
+    private Long companyId;
+
+    /**
+     * 产品归属归属id
+     */
+    private Long productClassifyId;
+
+}

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

@@ -0,0 +1,17 @@
+package com.fjhx.wms.entity.stock.dto;
+
+import com.fjhx.wms.entity.stock.po.StockSnapshot;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 库存快照新增编辑入参实体
+ *
+ * @author
+ * @since 2024-01-17
+ */
+@Getter
+@Setter
+public class StockSnapshotDto extends StockSnapshot {
+
+}

+ 17 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/dto/StockSnapshotSelectDto.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 2024-01-17
+ */
+@Getter
+@Setter
+public class StockSnapshotSelectDto extends BaseSelectDto {
+
+}

+ 28 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/StockSnapshot.java

@@ -0,0 +1,28 @@
+package com.fjhx.wms.entity.stock.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 库存快照
+ * </p>
+ *
+ * @author
+ * @since 2024-01-17
+ */
+@Getter
+@Setter
+@TableName("stock_snapshot")
+public class StockSnapshot extends BasePo {
+
+    /**
+     * 仓库id
+     */
+    private Date snapshotTime;
+
+}

+ 58 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/po/StockSnapshotDetails.java

@@ -0,0 +1,58 @@
+package com.fjhx.wms.entity.stock.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 库存快照明细
+ * </p>
+ *
+ * @author
+ * @since 2024-01-17
+ */
+@Getter
+@Setter
+@TableName("stock_snapshot_details")
+public class StockSnapshotDetails extends BasePo {
+
+    /**
+     * 原库存id
+     */
+    private Long stockId;
+
+    /**
+     * 快照id
+     */
+    private Long snapshotId;
+
+    /**
+     * 仓库id
+     */
+    private Long warehouseId;
+
+    /**
+     * 产品id
+     */
+    private Long productId;
+
+    /**
+     * 库存数量
+     */
+    private BigDecimal quantity;
+
+    /**
+     * 不在库库存数量
+     */
+    private BigDecimal outQuantity;
+
+    /**
+     * 归属公司id
+     */
+    private Long companyId;
+
+}

+ 24 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/vo/StockSnapshotDetailsVo.java

@@ -0,0 +1,24 @@
+package com.fjhx.wms.entity.stock.vo;
+
+import com.fjhx.wms.entity.stock.po.StockSnapshotDetails;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 库存快照明细列表查询返回值实体
+ *
+ * @author
+ * @since 2024-01-17
+ */
+@Getter
+@Setter
+public class StockSnapshotDetailsVo extends StockSnapshotDetails {
+
+    private Long productClassifyId;
+    private String productClassifyName;
+    private List<String> productClassifyNameGroup;
+    private String productClassifyNames;
+
+}

+ 17 - 0
hx-wms/src/main/java/com/fjhx/wms/entity/stock/vo/StockSnapshotVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.wms.entity.stock.vo;
+
+import com.fjhx.wms.entity.stock.po.StockSnapshot;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 库存快照列表查询返回值实体
+ *
+ * @author
+ * @since 2024-01-17
+ */
+@Getter
+@Setter
+public class StockSnapshotVo extends StockSnapshot {
+
+}

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

@@ -115,4 +115,17 @@ public class StockVo extends Stock {
      */
     private String productClassifyNames;
 
+    /**
+     * 产品长
+     */
+    private BigDecimal productLength;
+    /**
+     * 产品宽
+     */
+    private BigDecimal productWidth;
+    /**
+     * 产品高
+     */
+    private BigDecimal productHeight;
+
 }

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

@@ -0,0 +1,26 @@
+package com.fjhx.wms.mapper.stock;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.wms.entity.stock.po.StockSnapshotDetails;
+import com.fjhx.wms.entity.stock.vo.StockSnapshotDetailsVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 库存快照明细 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2024-01-17
+ */
+public interface StockSnapshotDetailsMapper extends BaseMapper<StockSnapshotDetails> {
+
+    /**
+     * 库存快照明细分页
+     */
+    Page<StockSnapshotDetailsVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<StockSnapshotDetails> wrapper);
+
+}

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

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

+ 25 - 0
hx-wms/src/main/java/com/fjhx/wms/service/stock/StockSnapshotDetailsService.java

@@ -0,0 +1,25 @@
+package com.fjhx.wms.service.stock;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.wms.entity.stock.dto.StockSnapshotDetailsSelectDto;
+import com.fjhx.wms.entity.stock.po.StockSnapshotDetails;
+import com.fjhx.wms.entity.stock.vo.StockSnapshotDetailsVo;
+import com.ruoyi.common.core.service.BaseService;
+
+
+/**
+ * <p>
+ * 库存快照明细 服务类
+ * </p>
+ *
+ * @author
+ * @since 2024-01-17
+ */
+public interface StockSnapshotDetailsService extends BaseService<StockSnapshotDetails> {
+
+    /**
+     * 库存快照明细分页
+     */
+    Page<StockSnapshotDetailsVo> getPage(StockSnapshotDetailsSelectDto dto);
+
+}

+ 25 - 0
hx-wms/src/main/java/com/fjhx/wms/service/stock/StockSnapshotService.java

@@ -0,0 +1,25 @@
+package com.fjhx.wms.service.stock;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.wms.entity.stock.dto.StockSnapshotSelectDto;
+import com.fjhx.wms.entity.stock.po.StockSnapshot;
+import com.fjhx.wms.entity.stock.vo.StockSnapshotVo;
+import com.ruoyi.common.core.service.BaseService;
+
+
+/**
+ * <p>
+ * 库存快照 服务类
+ * </p>
+ *
+ * @author
+ * @since 2024-01-17
+ */
+public interface StockSnapshotService extends BaseService<StockSnapshot> {
+
+    /**
+     * 库存快照分页
+     */
+    Page<StockSnapshotVo> getPage(StockSnapshotSelectDto dto);
+
+}

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

@@ -82,6 +82,8 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
         wrapper.in(Stock::getProductId, dto.getProductIds());
         wrapper.eq("pi.definition", dto.getDefinition());
 
+        wrapper.eq("pi.product_classify_id", dto.getProductClassifyId());
+
         //权限过滤:库存-子公司看自己的,总公司看全部
         Long companyId = SecurityUtils.getCompanyId();
         if (!Objects.equals(companyId, 100L)) {
@@ -103,6 +105,10 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
             item.setProductClassifyId(productInfo.getProductClassifyId());
             item.setProductDefinition(productInfo.getDefinition());
             item.setProductCustomCode(productInfo.getCustomCode());
+
+            item.setProductLength(productInfo.getLength());
+            item.setProductWidth(productInfo.getWidth());
+            item.setProductHeight(productInfo.getHeight());
         });
         //赋值产品分类
         productClassifyService.attributeAssign(stockVos, StockVo::getProductClassifyId, (item, productClassify) -> {

+ 105 - 0
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockSnapshotDetailsServiceImpl.java

@@ -0,0 +1,105 @@
+package com.fjhx.wms.service.stock.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.item.entity.product.po.ProductClassify;
+import com.fjhx.item.entity.product.po.ProductInfo;
+import com.fjhx.item.service.product.ProductClassifyService;
+import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.wms.entity.stock.dto.StockSnapshotDetailsSelectDto;
+import com.fjhx.wms.entity.stock.po.Stock;
+import com.fjhx.wms.entity.stock.po.StockSnapshotDetails;
+import com.fjhx.wms.entity.stock.vo.StockSnapshotDetailsVo;
+import com.fjhx.wms.mapper.stock.StockSnapshotDetailsMapper;
+import com.fjhx.wms.service.stock.StockSnapshotDetailsService;
+import com.ruoyi.common.core.domain.BaseIdPo;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+
+/**
+ * <p>
+ * 库存快照明细 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2024-01-17
+ */
+@Service
+public class StockSnapshotDetailsServiceImpl extends ServiceImpl<StockSnapshotDetailsMapper, StockSnapshotDetails> implements StockSnapshotDetailsService {
+
+    @Autowired
+    private ProductInfoService productInfoService;
+    @Autowired
+    private ProductClassifyService productClassifyService;
+
+    @Override
+    public Page<StockSnapshotDetailsVo> getPage(StockSnapshotDetailsSelectDto dto) {
+        IWrapper<StockSnapshotDetails> wrapper = getWrapper();
+
+        //快照id
+        wrapper.eq("ssd", StockSnapshotDetails::getSnapshotId, dto.getSnapshotId());
+
+        wrapper.eq(Stock::getWarehouseId, dto.getId());
+        String keyword = dto.getKeyword();
+        if (ObjectUtil.isNotEmpty(keyword)) {
+            //根据 库存数量 产品自定义编码 产品名称 过滤
+            List<Long> productIds = productInfoService.listObject(ProductInfo::getId,
+                    q -> q.like(ProductInfo::getCustomCode, keyword).or().like(ProductInfo::getName, keyword));
+            wrapper.and(q -> q.like(Stock::getQuantity, keyword).or().in(Stock::getProductId, productIds));
+        }
+        wrapper.in(Stock::getProductId, dto.getProductIds());
+        wrapper.eq("pi.definition", dto.getDefinition());
+
+        wrapper.eq("pi.product_classify_id", dto.getProductClassifyId());
+
+        //权限过滤:库存-子公司看自己的,总公司看全部
+        Long companyId = SecurityUtils.getCompanyId();
+        if (!Objects.equals(companyId, 100L)) {
+            wrapper.eq("ssd.company_id", companyId);
+        } else {
+            wrapper.eq("ssd.company_id", dto.getCompanyId());
+        }
+
+        wrapper.orderByDesc("ssd", StockSnapshotDetails::getId);
+        Page<StockSnapshotDetailsVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+
+        List<StockSnapshotDetailsVo> records = page.getRecords();
+
+        //赋值产品分类
+        productClassifyService.attributeAssign(records, StockSnapshotDetailsVo::getProductClassifyId, (item, productClassify) -> {
+            item.setProductClassifyName(productClassify.getName());
+        });
+        //赋值产品分类树
+        List<ProductClassify> productClassifyList = productClassifyService.list();
+        Map<Long, ProductClassify> productClassifyMap = productClassifyList.stream().collect(Collectors.toMap(BaseIdPo::getId, Function.identity()));
+        for (StockSnapshotDetailsVo vo : records) {
+            Long productClassifyId = vo.getProductClassifyId();
+            ProductClassify productClassify = productClassifyMap.get(productClassifyId);
+            if (productClassify == null) {
+                continue;
+            }
+            List<String> classifyNameGroup = new ArrayList<>();
+
+            while (productClassify != null) {
+                classifyNameGroup.add(0, productClassify.getName());
+                productClassify = productClassifyMap.get(productClassify.getParentId());
+            }
+            vo.setProductClassifyNameGroup(classifyNameGroup);
+            vo.setProductClassifyNames(classifyNameGroup.stream().collect(Collectors.joining(" / ")));
+        }
+
+        return page;
+    }
+
+}

+ 80 - 0
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockSnapshotServiceImpl.java

@@ -0,0 +1,80 @@
+package com.fjhx.wms.service.stock.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.wms.entity.stock.dto.StockSnapshotSelectDto;
+import com.fjhx.wms.entity.stock.po.Stock;
+import com.fjhx.wms.entity.stock.po.StockSnapshot;
+import com.fjhx.wms.entity.stock.po.StockSnapshotDetails;
+import com.fjhx.wms.entity.stock.vo.StockSnapshotVo;
+import com.fjhx.wms.mapper.stock.StockSnapshotMapper;
+import com.fjhx.wms.service.stock.StockService;
+import com.fjhx.wms.service.stock.StockSnapshotDetailsService;
+import com.fjhx.wms.service.stock.StockSnapshotService;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * <p>
+ * 库存快照 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2024-01-17
+ */
+@Service
+public class StockSnapshotServiceImpl extends ServiceImpl<StockSnapshotMapper, StockSnapshot> implements StockSnapshotService {
+
+    @Autowired
+    private StockService stockService;
+    @Autowired
+    private StockSnapshotDetailsService stockSnapshotDetailsService;
+
+    @Override
+    public Page<StockSnapshotVo> getPage(StockSnapshotSelectDto dto) {
+        IWrapper<StockSnapshot> wrapper = getWrapper();
+        wrapper.orderByDesc("ss", StockSnapshot::getId);
+        Page<StockSnapshotVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+    //    @PostConstruct
+    @Scheduled(cron = "0 0 0 * * ?")
+    @DSTransactional
+    public void stockSnapshot() {
+        DynamicDataSourceContextHolder.push(SourceConstant.BASE);
+        SecurityUtils.setTenantId("000000");
+
+        //获取前一天的结束时间
+        Date dateTime = DateUtil.endOfDay(DateUtil.yesterday());
+        StockSnapshot stockSnapshot = new StockSnapshot();
+        stockSnapshot.setSnapshotTime(dateTime);
+        this.save(stockSnapshot);
+
+        //快照库存
+        List<Stock> stockList = stockService.list();
+        List<StockSnapshotDetails> stockSnapshotDetails = BeanUtil.copyToList(stockList, StockSnapshotDetails.class);
+        for (StockSnapshotDetails stockSnapshotDetail : stockSnapshotDetails) {
+            stockSnapshotDetail.setSnapshotId(stockSnapshot.getId());
+            stockSnapshotDetail.setStockId(stockSnapshotDetail.getId());
+            stockSnapshotDetail.setId(null);
+        }
+        stockSnapshotDetailsService.saveBatch(stockSnapshotDetails);
+
+        SecurityUtils.clearTenantId();
+        DynamicDataSourceContextHolder.poll();
+    }
+
+}

+ 35 - 0
hx-wms/src/main/resources/mapper/stock/StockSnapshotDetailsMapper.xml

@@ -0,0 +1,35 @@
+<?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.StockSnapshotDetailsMapper">
+    <select id="getPage" resultType="com.fjhx.wms.entity.stock.vo.StockSnapshotDetailsVo">
+        SELECT ssd.id,
+               ssd.snapshot_id,
+               ssd.warehouse_id,
+               ssd.product_id,
+               ssd.quantity,
+               ssd.out_quantity,
+               ssd.company_id,
+               ssd.create_user,
+               ssd.create_time,
+               ssd.update_user,
+               ssd.update_time,
+               ssd.stock_id,
+               pi.`code`              AS productCode,
+               pi.unit                AS productUnit,
+               pi.type                AS productType,
+               pi.`name`              AS productName,
+               pi.spec                AS productSpec,
+               pi.product_classify_id AS productClassifyId,
+               pi.definition          AS productDefinition,
+               pi.custom_code         AS productCustomCode,
+               pi.length              AS productLength,
+               pi.width               AS productWidth,
+               pi.height              AS productHeight,
+               wa.`name`              AS warehouseName
+        FROM stock_snapshot_details ssd
+                 LEFT JOIN product_info pi ON ssd.product_id = pi.id
+                 LEFT JOIN warehouse wa ON ssd.warehouse_id = wa.id
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 15 - 0
hx-wms/src/main/resources/mapper/stock/StockSnapshotMapper.xml

@@ -0,0 +1,15 @@
+<?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.StockSnapshotMapper">
+    <select id="getPage" resultType="com.fjhx.wms.entity.stock.vo.StockSnapshotVo">
+        select ss.id,
+               ss.snapshot_time,
+               ss.create_user,
+               ss.create_time,
+               ss.update_user,
+               ss.update_time
+        from stock_snapshot ss
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>