| | |
| | | package com.consum.base.service; |
| | | |
| | | import com.consum.base.core.utils.MapperUtil; |
| | | 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 |
| | | * @Author cy |
| | | * @Date 2023/10/24 |
| | | * @Description |
| | | * @Version 1.0 |
| | |
| | | |
| | | |
| | | /** |
| | | * @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 = ""; |
| | | 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) { |
| | | public int queryGoodsModelNum(Integer warehouseType, Long warehouseId, Long baseGoodsModelsId, Integer states, Integer buyType) { |
| | | StringBuilder sql = new StringBuilder(query_Goods_Model_Num); |
| | | Map<String, Object> paramts = new HashMap<>(); |
| | | |
| | | |
| | | return 0; |
| | | 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<Map<String, Object>> queryOutGoods(Integer warehouseType, Long warehouseId, Long baseGoodsModelsId, Integer states, Integer buyType, |
| | | Integer goodsModelNum) { |
| | | StringBuilder sql = new StringBuilder(QUERY_OUT_GOODS_ID); |
| | | Map<String, Object> 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<Long> queryOutGoodsId(Integer warehouseType, Long warehouseId, Long baseGoodsModelsId, Integer states, Integer buyType, Integer goodsModelNum) { |
| | | List<Map<String, Object>> outGoods = queryOutGoods(warehouseType, 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; |
| | | } |
| | | |
| | | private static String QUERY_GOODS_PRICE_BY_ID = "SELECT sum(PRICE)totalPrice from L_WH_GOODS goods where 1=1"; |
| | | |
| | | public long queryGoodsPriceById(List<Long> goodsIds) { |
| | | StringBuilder sql = new StringBuilder(QUERY_GOODS_PRICE_BY_ID); |
| | | Map<String, Object> paramts = new HashMap<>(); |
| | | if (!CollectionUtils.isEmpty(goodsIds)) { |
| | | sql.append(" and id in(:goodsIds)"); |
| | | paramts.put("goodsIds", goodsIds); |
| | | } |
| | | List<Map<String, Object>> 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<Map<String, Object>> 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<String, Object> 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<Long> queryScrappedGoodsIds(Integer warehouseType, |
| | | Long warehouseId, |
| | | Long transBusinessId, |
| | | String nowUserName, |
| | | Long baseGoodsModelsId, |
| | | Short states, |
| | | Integer goodsModelNum) { |
| | | List<Map<String, Object>> outGoods = queryScrappedGoods(warehouseType, warehouseId, transBusinessId, nowUserName, baseGoodsModelsId, states, |
| | | 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, Integer warehouseType, Long toWarehouseId, String toWarehouseName, Integer states) { |
| | | StringBuilder sql = new StringBuilder(MOD_GOODS_TRANSFERING_PREFIX); |
| | | ArrayList<Object> 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()); |
| | | } |
| | | |
| | | private static String GOODS_NUM_PRICE = "SELECT t.tenantId,count(id) total_Num,count(CASE WHEN STATES=2 THEN 1 END) xia_fa_num,IFNULL(round(sum(PRICE)/1000000,2),0) total_price,IFNULL(ROUND(count(CASE WHEN STATES=2 THEN 1 END)/count(id),4),0)*100 AS zhan_you_percent,count(CASE COST_TYPE WHEN 1 THEN 1 END) a_total_Num,count(CASE COST_TYPE WHEN 2 THEN 1 END) b_total_Num,count(CASE COST_TYPE WHEN 3 THEN 1 END) c_total_Num FROM (SELECT tCangKu.tenantId,tKuCun.id,tKuCun.STATES,tKuCun.COST_TYPE,tKuCun.price FROM (SELECT tenant.id tenantId,tenant.NAME AS org_name,ware.*FROM fin_sys_tenant tenant RIGHT JOIN ( SELECT 0 WAREHOUSE_TYPE,id,AGENCY_ID,WAREHOUSE_NAME FROM BASE_WAREHOUSE UNION ALL SELECT 1 WAREHOUSE_TYPE,id,TENANT_ID AGENCY_ID,`NAME` WAREHOUSE_NAME FROM fin_sys_tenant_department) ware ON tenant.id=ware.AGENCY_ID WHERE 1=1 "; |
| | | private static String GOODS_NUM_PRICE_END = ") tCangKu LEFT JOIN L_WH_GOODS tKuCun ON tCangKu.WAREHOUSE_TYPE=tKuCun.WAREHOUSE_TYPE AND tCangKu.id=tKuCun.WAREHOUSE_ID AND tKuCun.STATES BETWEEN 1 AND 2) t GROUP BY t.tenantId"; |
| | | |
| | | //机构 |
| | | public List<Map<String, Object>> getGoodsNumPrice(Long agencyId) { |
| | | StringBuilder sql = new StringBuilder(GOODS_NUM_PRICE); |
| | | Map<String, Object> paramts = new HashMap<>(); |
| | | sql.append(" and tenant.id=:agencyId"); |
| | | paramts.put("agencyId", agencyId); |
| | | return select(sql.append(GOODS_NUM_PRICE_END).toString(), paramts, new MapperUtil()); |
| | | } |
| | | |
| | | } |