Parcourir la source

商品库存增加列未出库数量

FengChaoYu il y a 2 semaines
Parent
commit
b3946ca73b

+ 19 - 0
mall-server-api/src/main/java/com/gree/mall/manager/bean/goods/GoodsMaterialUseStockBean.java

@@ -0,0 +1,19 @@
+package com.gree.mall.manager.bean.goods;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel
+public class GoodsMaterialUseStockBean {
+
+    @ApiModelProperty(value = "仓库id")
+    private String pickStorageId;
+
+    @ApiModelProperty(value = "物料id")
+    private String goodsMaterialId;
+
+    @ApiModelProperty(value = "数量")
+    private Integer num;
+}

+ 4 - 1
mall-server-api/src/main/java/com/gree/mall/manager/bean/goods/GoodsStockVO.java

@@ -103,8 +103,11 @@ public class GoodsStockVO    {
     @ApiModelProperty(value = "所在仓库")
     private String storageName;
 
-    @ApiModelProperty(value = "库存数量")
+    @ApiModelProperty(value = "可用库存数量")
     private Integer stockQty;
 
+    @ZfireField(isQuery = false, ignoreSelect = true)
+    @ApiModelProperty(value = "在库存数量")
+    private Integer useStockQty;
 
 }

+ 4 - 0
mall-server-api/src/main/java/com/gree/mall/manager/commonmapper/JxMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.gree.mall.manager.bean.goods.GoodsCodeAccVO;
+import com.gree.mall.manager.bean.goods.GoodsMaterialUseStockBean;
 import com.gree.mall.manager.bean.goods.GoodsSaleLedgerVO;
 import com.gree.mall.manager.bean.goods.GoodsStockVO;
 import com.gree.mall.manager.bean.trade.GoodsCategoryItemVO;
@@ -13,6 +14,7 @@ import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 @Mapper
 public interface JxMapper {
@@ -32,4 +34,6 @@ public interface JxMapper {
     @InterceptorIgnore(tenantLine = "1", blockAttack = "1", illegalSql = "1")
     IPage<GoodsCategoryOtherItemVO> listOther(Page page,@Param("ex")  ZfireParamBean zfireParam, @Param("companyWechatIds") List<String> companyWechatIds);
 
+    @InterceptorIgnore(tenantLine = "1", blockAttack = "1", illegalSql = "1")
+    List<GoodsMaterialUseStockBean> queryUseStock(@Param("companyWechatIds") List<String> companyWechatIds, @Param("ids") List<String> idList, @Param("storageIds") List<String> storageIds);
 }

+ 20 - 0
mall-server-api/src/main/java/com/gree/mall/manager/logic/goods/JxGoodsLogic.java

@@ -1,11 +1,13 @@
 package com.gree.mall.manager.logic.goods;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.convert.Convert;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.gree.mall.manager.bean.admin.AdminUserCom;
 import com.gree.mall.manager.bean.goods.GoodsCodeAccVO;
+import com.gree.mall.manager.bean.goods.GoodsMaterialUseStockBean;
 import com.gree.mall.manager.bean.goods.GoodsSaleLedgerVO;
 import com.gree.mall.manager.bean.goods.GoodsStockVO;
 import com.gree.mall.manager.commonmapper.JxMapper;
@@ -40,6 +42,7 @@ import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.Lock;
 import java.util.stream.Collectors;
@@ -133,6 +136,23 @@ public class JxGoodsLogic {
                         zfireParamBean.getPageSize()),
                 zfireParam, companyWechatIds);
 
+        if (CollectionUtil.isNotEmpty(stock.getRecords())) {
+            // 订单已使用库存
+            final List<String> idList = stock.getRecords().stream().map(GoodsStockVO::getGoodsMaterialId).collect(Collectors.toList());
+            final List<String> storageIds = stock.getRecords().stream().map(GoodsStockVO::getStorageId).collect(Collectors.toList());
+            List<GoodsMaterialUseStockBean> beanList = jxMapper.queryUseStock(adminUser.getCompanyWechatIds(), idList, storageIds);
+            if (CollectionUtil.isNotEmpty(beanList)) {
+                final Map<String, Integer> beanMap = beanList.stream().collect(Collectors.toMap(v -> v.getPickStorageId() + v.getGoodsMaterialId(), GoodsMaterialUseStockBean::getNum));
+                for (GoodsStockVO record : stock.getRecords()) {
+                    if (beanMap.containsKey(record.getStorageId() + record.getGoodsMaterialId())) {
+                        record.setUseStockQty(beanMap.get(record.getStorageId() + record.getGoodsMaterialId()));
+                    } else {
+                        record.setUseStockQty(0);
+                    }
+                }
+            }
+        }
+
         return stock;
 
     }

+ 29 - 0
mall-server-api/src/main/resources/mapper/JxMapper.xml

@@ -74,5 +74,34 @@
         </if>
         ${ex.orderBy}
     </select>
+    <select id="queryUseStock" resultType="com.gree.mall.manager.bean.goods.GoodsMaterialUseStockBean">
+        SELECT
+            a.pick_storage_id,
+            b.goods_material_id,
+            SUM(b.num) AS num
+        FROM
+             order_info a JOIN order_detail b ON a.order_id = b.order_id
+        WHERE
+        a.order_status IN ('DQR', 'DJH', 'JHZ', 'DPS', 'DFH', 'PSDZ')
+        <if test="companyWechatIds != null and companyWechatIds.size > 0">
+            AND a.company_wechat_id IN
+            <foreach item="item" index="index" collection="companyWechatIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="storageIds != null and storageIds.size > 0">
+            AND a.pick_storage_id IN
+            <foreach item="item" index="index" collection="storageIds" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="ids != null and ids.size > 0">
+            AND b.goods_material_id IN
+            <foreach item="item" index="index" collection="ids" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        GROUP BY a.pick_storage_id, b.goods_material_id
+    </select>
 
 </mapper>