feat(ic): 增加思普PLM现存量查询接口

This commit is contained in:
mzr 2025-07-25 08:50:41 +08:00
parent de5aeadcb9
commit c00533afea
1 changed files with 83 additions and 0 deletions

View File

@ -129,6 +129,89 @@ public class OnhandResource {
}
}
/**
* 查询现存量-思普PLM
*
* @author mzr
* @date 2025/7/24
*/
@POST
@Path("onhandQuerySp")
@Consumes("application/json")
@Produces("application/json")
public JSONString onhandQuerySp(Map<String, Object> paramMap) {
if (paramMap == null) {
return ResultMessageUtil.exceptionToJSON("传入参数错误,组织条件必输", APIErrCodeEnum.BUSINESSEXCCODE.getCode());
}
try {
OnhandVO[] onhandVOs = NCLocator.getInstance().lookup(IAPIOnhandQuery.class)
.queryOnhandVOByDims(paramMap);
// 对数据进行整合组装,返回物料+仓库+数量
if (null != onhandVOs && onhandVOs.length > 0) {
// 收集所有物料和仓库ID
Set<String> materialIds = Arrays.stream(onhandVOs)
.map(OnhandVO::getCmaterialvid)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
Set<String> warehouseIds = Arrays.stream(onhandVOs)
.map(OnhandVO::getCwarehouseid)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
// 批量查询物料和仓库信息
Map<String, Map<String, Object>> materialInfoMap = new HashMap<>();
Map<String, Map<String, Object>> warehouseInfoMap = new HashMap<>();
String materialSelectFields = MaterialVO.CODE + "," + MaterialVO.NAME;
String warehouseSelectFields = StordocVO.CODE + "," + StordocVO.NAME;
for (String materialId : materialIds) {
Map<String, Object> materialMap = this.transferFields(
MaterialVO.getDefaultTableName(), materialSelectFields, MaterialVO.PK_MATERIAL, materialId);
materialInfoMap.put(materialId, materialMap != null ? materialMap : new HashMap<>());
}
for (String warehouseId : warehouseIds) {
Map<String, Object> warehouseMap = this.transferFields(
StordocVO.getDefaultTableName(), warehouseSelectFields, StordocVO.PK_STORDOC, warehouseId);
warehouseInfoMap.put(warehouseId, warehouseMap != null ? warehouseMap : new HashMap<>());
}
// 根据物料和仓库分组
Map<String, List<OnhandVO>> groupedOnhand = Arrays.stream(onhandVOs)
.collect(Collectors.groupingBy(onhandVO -> onhandVO.getPk_org() + "_" + onhandVO.getCmaterialvid() + "_" + onhandVO.getCwarehouseid()));
Set<String> keys = groupedOnhand.keySet();
JSONArray reArray = new JSONArray();
for (String dimkey : keys) {
List<OnhandVO> onhandVOList = groupedOnhand.get(dimkey);
JSONObject jsonObject = new JSONObject();
UFDouble onhandNum = UFDouble.ZERO_DBL;
String cmaterialvid = onhandVOList.get(0).getCmaterialvid();
String cwarehouseid = onhandVOList.get(0).getCwarehouseid();
Map<String, Object> goodsMap = materialInfoMap.getOrDefault(cmaterialvid, Collections.emptyMap());
Map<String, Object> stordocMap = warehouseInfoMap.getOrDefault(cwarehouseid, Collections.emptyMap());
jsonObject.put("materialPk", cmaterialvid);
jsonObject.put("materialCode", goodsMap.getOrDefault(MaterialVO.CODE, ""));// 物料编码
jsonObject.put("materialName", goodsMap.getOrDefault(MaterialVO.NAME, ""));// 物料名称
jsonObject.put("warehousePk", cwarehouseid);
jsonObject.put("warehouseCode", stordocMap.getOrDefault(StordocVO.CODE, ""));// 仓库编码
jsonObject.put("warehouseName", stordocMap.getOrDefault(StordocVO.NAME, ""));// 仓库名称
for (OnhandVO onhandVO : onhandVOList) {
onhandNum = onhandNum.add(onhandVO.getNonhandnum());
}
jsonObject.put("onhandnum", onhandNum);
reArray.add(jsonObject);
}
return ResultMessageUtil.toJSON(reArray, "现存量查询成功!");
} else {
return ResultMessageUtil.toJSON(null, "现存量查询成功,无数据!");
}
} catch (Exception e) {
return ResultMessageUtil.exceptionToJSON(e);
}
}
/**
* 根据条件批量查询现存量
*