From c00533afea83f7cdd07083ea71e6561546c06870 Mon Sep 17 00:00:00 2001 From: mzr Date: Fri, 25 Jul 2025 08:50:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(ic):=20=E5=A2=9E=E5=8A=A0=E6=80=9D?= =?UTF-8?q?=E6=99=AEPLM=E7=8E=B0=E5=AD=98=E9=87=8F=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../openapi/ic/onhand/OnhandResource.java | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/ic/src/public/nccloud/openapi/ic/onhand/OnhandResource.java b/ic/src/public/nccloud/openapi/ic/onhand/OnhandResource.java index 7e4d91b..6c843bb 100644 --- a/ic/src/public/nccloud/openapi/ic/onhand/OnhandResource.java +++ b/ic/src/public/nccloud/openapi/ic/onhand/OnhandResource.java @@ -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 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 materialIds = Arrays.stream(onhandVOs) + .map(OnhandVO::getCmaterialvid) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + Set warehouseIds = Arrays.stream(onhandVOs) + .map(OnhandVO::getCwarehouseid) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + + // 批量查询物料和仓库信息 + Map> materialInfoMap = new HashMap<>(); + Map> warehouseInfoMap = new HashMap<>(); + + String materialSelectFields = MaterialVO.CODE + "," + MaterialVO.NAME; + String warehouseSelectFields = StordocVO.CODE + "," + StordocVO.NAME; + + for (String materialId : materialIds) { + Map materialMap = this.transferFields( + MaterialVO.getDefaultTableName(), materialSelectFields, MaterialVO.PK_MATERIAL, materialId); + materialInfoMap.put(materialId, materialMap != null ? materialMap : new HashMap<>()); + } + + for (String warehouseId : warehouseIds) { + Map warehouseMap = this.transferFields( + StordocVO.getDefaultTableName(), warehouseSelectFields, StordocVO.PK_STORDOC, warehouseId); + warehouseInfoMap.put(warehouseId, warehouseMap != null ? warehouseMap : new HashMap<>()); + } + // 根据物料和仓库分组 + Map> groupedOnhand = Arrays.stream(onhandVOs) + .collect(Collectors.groupingBy(onhandVO -> onhandVO.getPk_org() + "_" + onhandVO.getCmaterialvid() + "_" + onhandVO.getCwarehouseid())); + Set keys = groupedOnhand.keySet(); + JSONArray reArray = new JSONArray(); + for (String dimkey : keys) { + List 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 goodsMap = materialInfoMap.getOrDefault(cmaterialvid, Collections.emptyMap()); + Map 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); + } + } + /** * 根据条件批量查询现存量 *