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
|
* @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<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 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());
|
}
|
|
}
|