package com.consum.base.service; import com.walker.infrastructure.utils.CollectionUtils; import com.walker.jdbc.service.BaseServiceImpl; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @ClassName LWhGoodsService * @Date 2023/10/24 * @Description * @Version 1.0 **/ @Service public class LWhGoodsService extends BaseServiceImpl { /** * @param warehouseType 仓库类型0机构1部门 * @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(Integer warehouseType, Long warehouseId, Long baseGoodsModelsId, Integer states, Integer buyType) { StringBuilder sql = new StringBuilder(query_Goods_Model_Num); Map paramts = new HashMap<>(); if (warehouseType != null) { sql.append(" and WAREHOUSE_TYPE=:warehouseType"); paramts.put("warehouseType", warehouseType); } 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 取出的数量 * @return */ private static String QUERY_OUT_GOODS_ID = "SELECT * FROM L_WH_GOODS WHERE 1=1"; public List> queryOutGoods(Integer warehouseType, Long warehouseId, Long baseGoodsModelsId, Integer states, Integer buyType, Integer goodsModelNum) { StringBuilder sql = new StringBuilder(QUERY_OUT_GOODS_ID); Map paramts = new HashMap<>(); if (warehouseType != null) { sql.append(" and WAREHOUSE_TYPE=:warehouseType"); paramts.put("warehouseType", warehouseType); } 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 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 queryOutGoodsId(Integer warehouseType, Long warehouseId, Long baseGoodsModelsId, Integer states, Integer buyType, Integer goodsModelNum) { List> outGoods = queryOutGoods(warehouseType, warehouseId, baseGoodsModelsId, states, buyType, goodsModelNum); if (CollectionUtils.isEmpty(outGoods)) { return null; } List whGoodsIds = outGoods.stream().map(map -> (Long) map.get("id")).collect(Collectors.toList()); return whGoodsIds; } private static String QUERY_GOODS_PRICE_BY_ID = "SELECT sum(PRICE)totalPrice from L_WH_GOODS goods where 1=1"; public long queryGoodsPriceById(List goodsIds) { StringBuilder sql = new StringBuilder(QUERY_GOODS_PRICE_BY_ID); Map paramts = new HashMap<>(); if (!CollectionUtils.isEmpty(goodsIds)) { sql.append(" and id in(:goodsIds)"); paramts.put("goodsIds", goodsIds); } List> map = this.select(sql.toString(), paramts); if (CollectionUtils.isEmpty(map)) { return 0; } BigDecimal totalPrice = (BigDecimal) map.get(0).get("totalPrice"); return totalPrice.longValue(); } /** * 查询报废物品 默认优先报废最高价的物品 * * @param warehouseType * @param warehouseId * @param transBusinessId 调拨单号 * @param nowUserName 使用人姓名 * @param baseGoodsModelsId 物品型号 * @param states 状态(0=在途调拨;1=入库未分发;2=已下发;3=报废 4 零星出库) * @param goodsModelNum 取出的数量 * @return */ private static String QUERY_SCRAPPED_GOODS_PREFIX_1 = "SELECT goods.id FROM L_WH_GOODS goods LEFT JOIN L_GOODS_USER_RECORD useRecord ON goods.id=useRecord.WH_GOODS_ID AND useRecord.LAST_RECORD=1 WHERE 1=1 "; private static String QUERY_SCRAPPED_GOODS_PREFIX_2 = " AND goods.id IN (SELECT lwgrd.WH_GOODS_ID FROM L_WAREHOUSE_FLOW flow LEFT JOIN L_WH_GOODS_RECORD lwgr ON lwgr.WAREHOUSE_FLOW_ID=flow.id LEFT JOIN L_WH_GOODS_RECORD_DETAILS lwgrd ON lwgrd.WH_GOODS_RECORD_ID=lwgr.id WHERE flow.THIS_TYPE=4 AND flow.BUSINESS_FORM_ID=:transBusinessId)"; private static String QUERY_SCRAPPED_GOODS_END = " ORDER BY goods.PRICE DESC,goods.PROCURE_DATE ASC,goods.id"; public List> queryScrappedGoods(Integer warehouseType, Long warehouseId, Long transBusinessId, String nowUserName, Long baseGoodsModelsId, Short states, Integer goodsModelNum) { if (warehouseType == null) { warehouseType = 0; } StringBuilder sql = new StringBuilder(QUERY_SCRAPPED_GOODS_PREFIX_1); Map paramts = new HashMap<>(); if (warehouseType != null) { sql.append(" AND goods.WAREHOUSE_TYPE=:warehouseType"); paramts.put("warehouseType", warehouseType); } if (warehouseId != null) { sql.append(" AND goods.WAREHOUSE_ID=:warehouseId"); paramts.put("warehouseId", warehouseId); } if (StringUtils.isNotEmpty(nowUserName)) { sql.append(" AND useRecord.NOW_USER_NAME=:nowUserName"); paramts.put("nowUserName", nowUserName); } if (baseGoodsModelsId != null) { sql.append(" AND goods.BASE_GOODS_MODELS_ID=:baseGoodsModelsId"); paramts.put("baseGoodsModelsId", baseGoodsModelsId); } if (states != null) { sql.append(" AND goods.STATES=:states"); paramts.put("states", states); } if (transBusinessId != null) { sql.append(QUERY_SCRAPPED_GOODS_PREFIX_2); paramts.put("transBusinessId", transBusinessId); } sql.append(QUERY_SCRAPPED_GOODS_END); if (goodsModelNum != null) { sql.append(" limit").append(goodsModelNum); } return select(sql.toString(), paramts); } /** * 查询报废物品 默认优先报废最高价的物品 * * @param warehouseType * @param warehouseId * @param transBusinessId 调拨单号 * @param nowUserName 使用人姓名 * @param baseGoodsModelsId 物品型号 * @param states 状态(0=在途调拨;1=入库未分发;2=已下发;3=报废 4 零星出库) * @param goodsModelNum 取出的数量 * @return */ public List queryScrappedGoodsIds(Integer warehouseType, Long warehouseId, Long transBusinessId, String nowUserName, Long baseGoodsModelsId, Short states, Integer goodsModelNum) { List> outGoods = queryScrappedGoods(warehouseType, warehouseId, transBusinessId, nowUserName, baseGoodsModelsId, states, goodsModelNum); if (CollectionUtils.isEmpty(outGoods)) { return null; } List 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 whGoods, Integer warehouseType, Long toWarehouseId, String toWarehouseName, Integer states) { StringBuilder sql = new StringBuilder(MOD_GOODS_TRANSFERING_PREFIX); ArrayList params = new ArrayList<>(); if (toWarehouseId != null) { sql.append(", WAREHOUSE_TYPE=?"); params.add(warehouseType); } 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(").append(StringUtils.join(whGoods, ",")).append(")"); return update(sql.toString(), params.toArray()); } }