consum-base/src/main/java/com/consum/base/service/LWhGoodsService.java
@@ -1,141 +1,59 @@
package com.consum.base.service;
import com.walker.infrastructure.utils.CollectionUtils;
import com.walker.jdbc.service.BaseServiceImpl;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import com.consum.base.pojo.dto.GoodsInfoDTO;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import com.consum.base.pojo.dto.GoodsModelCountDTO;
import com.walker.jdbc.service.BaseService;
import java.util.Set;
/**
 * @ClassName LWhGoodsService
 * @Author cy
 * @Date 2023/10/24
 * @Description
 * @Version 1.0
 * LWhGoodsService
 *
 * @author asus
 * @version 2023/12/05 13:52
 **/
@Service
public class LWhGoodsService extends BaseServiceImpl {
public interface LWhGoodsService extends BaseService {
    int queryGoodsModelNum(Integer warehouseType, List<Long> warehouseId, Long baseGoodsModelsId, Integer states,
        Integer buyType);
    int queryGoodsModelInWareHouseNum(Integer warehouseType, List<Long> warehouseId, Long baseGoodsModelsId,
        Integer states, Integer buyType);
    List<Map<String, Object>> queryOutGoods(Integer warehouseType, Long warehouseId, Long baseGoodsModelsId,
        Integer states, Integer buyType, Integer goodsModelNum);
    List<Long> queryOutGoodsId(Integer warehouseType, Long warehouseId, Long baseGoodsModelsId, Integer states,
        Integer buyType, Integer goodsModelNum);
    long queryGoodsPriceById(List<Long> goodsIds);
    List<Map<String, Object>> queryScrappedGoods(Integer warehouseType, Long warehouseId, Long transBusinessId,
        String nowUserName, Long baseGoodsModelsId, Short states, Integer goodsModelNum);
    List<Long> queryScrappedGoodsIds(Integer warehouseType, Long warehouseId, Long transBusinessId, String nowUserName,
        Long baseGoodsModelsId, Short states, Integer goodsModelNum);
    int modGoodsTransfering(List<Long> whGoods, Integer warehouseType, Long toWarehouseId, String toWarehouseName,
        Integer states);
    // 按机构统计物品价值、数量/金额等
    List<Map<String, Object>> getGoodsNumPrice(Long agencyId);
    // 按机构统计物品价值、数量/金额等
    List<Map<String, Object>> getGoodsNumByMonth(Long agencyId);
    /**
     * @param warehouseId       所属仓库仓库编号
     * @param baseGoodsModelsId 规格型号编号
     * @param states            (0=在途调拨;1=入库未分发;2=已下发;3=报废)
     * @param buyType 采购方式(1:集采;2=自采)
     * @return 查询某个型号在仓库中的数量
     */
    private static String query_Goods_Model_Num = "SELECT COUNT(1) from L_WH_GOODS where 1=1";
    public int queryGoodsModelNum(Long warehouseId, Long baseGoodsModelsId, Short states, Short buyType) {
        StringBuilder sql = new StringBuilder(query_Goods_Model_Num);
        Map<String, Object> paramts = new HashMap<>();
        if (warehouseId != null) {
            sql.append(" and WAREHOUSE_ID=:warehouseId");
            paramts.put("warehouseId", warehouseId);
        }
        if (baseGoodsModelsId != null) {
            sql.append(" and BASE_GOODS_MODELS_ID=:baseGoodsModelsId");
            paramts.put("baseGoodsModelsId", baseGoodsModelsId);
        }
        if (states != null) {
            sql.append(" and STATES=:states");
            paramts.put("states", states);
        }
        if (buyType != null) {
            sql.append(" and BUY_TYPE=:buyType");
            paramts.put("buyType", buyType);
        }
        return queryForInt(sql.toString(), paramts);
    }
    /**
     * 出库时候,先入库的先出库,同时入库的,按价格高的先出库
     *
     * @param warehouseId       所属仓库仓库编号
     * @param baseGoodsModelsId 规格型号编号
     * @param states            状态(0=在途调拨;1=入库未分发;2=已下发;3=报废)
     * @param buyType           采购方式(1:集采;2=自采)
     * @param goodsModelNum 取出的数量
     * 根据型号查询商品总价
     *
     * @param baseGoodsModelsId
     * @param type <br>
     *            状态(0=在途调拨;1=入库未分发;2=已下发;3=报废 4 零星出库
     * @return
     */
    private static String QUERY_OUT_GOODS_ID = "SELECT*FROM L_WH_GOODS WHERE 1=1";
    GoodsModelCountDTO queryGoodsAmount(Long baseGoodsModelsId, Integer type);
    public List<Map<String, Object>> queryOutGoods(Long warehouseId, Long baseGoodsModelsId, Short states, Short buyType, Integer goodsModelNum) {
        StringBuilder sql = new StringBuilder(QUERY_OUT_GOODS_ID);
        Map<String, Object> paramts = new HashMap<>();
        if (warehouseId != null) {
            sql.append(" and WAREHOUSE_ID=:warehouseId");
            paramts.put("warehouseId", warehouseId);
        }
        if (baseGoodsModelsId != null) {
            sql.append(" and BASE_GOODS_TEMPLATE_ID=:baseGoodsModelsId");
            paramts.put("baseGoodsModelsId", baseGoodsModelsId);
        }
        if (states != null) {
            sql.append(" and STATES=:STATES");
            paramts.put("states", states);
        }
        if (buyType != null) {
            sql.append(" and BUY_TYPE=:buyType");
            paramts.put("buyType", buyType);
        }
        return select(sql.append(" limit").append(goodsModelNum).toString(), paramts);
    }
    /**
     * 出库时候,先入库的先出库,同时入库的,按价格高的先出库
     *
     * @param warehouseId       所属仓库仓库编号
     * @param baseGoodsModelsId 规格型号编号
     * @param states            状态(0=在途调拨;1=入库未分发;2=已下发;3=报废)
     * @param buyType           采购方式(1:集采;2=自采)
     * @param goodsModelNum     取出的数量
     * @return
     */
    public List<Long> queryOutGoodsId(Long warehouseId, Long baseGoodsModelsId, Short states, Short buyType, Integer goodsModelNum) {
        List<Map<String, Object>> outGoods = queryOutGoods(warehouseId, baseGoodsModelsId, states, buyType, goodsModelNum);
        if (CollectionUtils.isEmpty(outGoods)) {
            return null;
        }
        List<Long> whGoodsIds = outGoods.stream().map(map -> (Long) map.get("id")).collect(Collectors.toList());
        return whGoodsIds;
    }
    /**
     * 设置物品状态为调拨中
     *
     * @param whGoods
     * @param toWarehouseId
     * @param toWarehouseName
     * @return
     */
    private static String MOD_GOODS_TRANSFERING_PREFIX = "update L_WH_GOODS set";
    public int modGoodsTransfering(List<Long> whGoods, Long toWarehouseId, String toWarehouseName, Short states) {
        StringBuilder sql = new StringBuilder(MOD_GOODS_TRANSFERING_PREFIX);
        ArrayList<Object> params = new ArrayList<>();
        if (toWarehouseId != null) {
            sql.append(", WAREHOUSE_ID=?");
            params.add(toWarehouseId);
        }
        if (toWarehouseName != null) {
            sql.append(", WAREHOUSE_NAME=?");
            params.add(toWarehouseName);
        }
        if (states != null) {
            sql.append(", STATES=?");
            params.add(states);
        }
        sql.deleteCharAt(22);
        sql.append(" where id in(?)");
        params.add(whGoods);
        return update(sql.toString(), params.toArray());
    }
    List<GoodsInfoDTO> queryGoodsInfo(Set<Long> baseModelIds, Set<Long> wareHouseIds, Integer buyType);
}