diff --git a/lc123/cloud/app/api/controller/FWInvQueryController.java b/lc123/cloud/app/api/controller/FWInvQueryController.java index af758f5..96a7144 100644 --- a/lc123/cloud/app/api/controller/FWInvQueryController.java +++ b/lc123/cloud/app/api/controller/FWInvQueryController.java @@ -1,6 +1,9 @@ package tqq9.lc123.cloud.app.api.controller; import com.drew.lang.annotations.NotNull; +import kd.bos.algo.DataSet; +import kd.bos.algo.GroupbyDataSet; +import kd.bos.algo.Row; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.openapi.common.custom.annotation.ApiController; import kd.bos.openapi.common.custom.annotation.ApiParam; @@ -9,6 +12,7 @@ import kd.bos.openapi.common.result.CustomApiResult; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.QueryServiceHelper; import oadd.org.apache.commons.lang3.StringUtils; import tqq9.lc123.cloud.app.api.model.FWInvQueryModel; import tqq9.lc123.cloud.app.api.result.FWInvQueryResult; @@ -33,17 +37,37 @@ public class FWInvQueryController { String warehouseNumber = queryModel.getWarehouseNumber(); Date producedate = queryModel.getProducedate(); Date expirydate = queryModel.getExpirydate(); + String orgNumber = queryModel.getOrgNumber(); + String orgName = ""; + if("SHLC".equals(orgNumber)){ + orgName = "上海励齿"; + }else if("BJLC".equals(orgNumber)){ + orgName = "北京励齿"; + }else if("GZLC".equals(orgNumber)){ + orgName = "广州励齿"; + }else{ + + } + + boolean existLot = false; + boolean existWh = false; + + String key = materialNumber; List list = new ArrayList<>(); - QFilter qf1 = new QFilter("material.number", QCP.equals, materialNumber); + QFilter qf0 = new QFilter("material.number", QCP.equals, materialNumber); + QFilter qf1 = new QFilter("org.number", QCP.equals, orgNumber); + list.add(qf0); list.add(qf1); if(StringUtils.isNotBlank(lot)){ QFilter qf2 = new QFilter("lotnum", QCP.equals, lot); list.add(qf2); + existLot = true; } if(StringUtils.isNotBlank(warehouseNumber)){ QFilter qf3 = new QFilter("warehouse.number", QCP.equals, warehouseNumber); list.add(qf3); + existWh = true; } if(producedate != null){ QFilter qf4 = new QFilter("producedate", QCP.equals, producedate); @@ -53,49 +77,49 @@ public class FWInvQueryController { QFilter qf5 = new QFilter("expirydate", QCP.equals, expirydate); list.add(qf5); } + + String groupbyStr = "material,org"; + if(existLot){ + groupbyStr = groupbyStr + ",lotnum,producedate,expirydate"; + } + if(existWh){ + groupbyStr = groupbyStr + ",warehouse"; + } + + + QFilter[] filterArr = new QFilter[list.size()]; filterArr = list.toArray(filterArr); - DynamicObject[] realbalances = BusinessDataServiceHelper.load("im_inv_realbalance", - "id,material,org,warehouse,lotnum,avbbaseqty,qty", filterArr); - if(realbalances != null && realbalances.length > 0){ - Map map = new HashMap<>(); - for (DynamicObject realbalance : realbalances) { - //获取数量 - BigDecimal qty = realbalance.getBigDecimal("qty"); - //获取组织数据 - DynamicObject org = realbalance.getDynamicObject("org"); - String orgCode = org.getString("number"); - String orgName = org.getString("name"); - //获取仓库数据 - DynamicObject warehouse = realbalance.getDynamicObject("warehouse"); - String warehouseCode = warehouse.getString("number"); - String warehouseName = warehouse.getString("name"); - //批号 - String lotnum = realbalance.getString("lotnum"); + DataSet dataSet = QueryServiceHelper.queryDataSet(this.getClass().getName(), "im_inv_realbalance", + "qty,"+groupbyStr, filterArr, null); + DataSet groupbyDataSet = dataSet.groupBy(groupbyStr.split(",")).count("qty").finish(); + for (Row row : groupbyDataSet) { + FWInvQueryResult.ResultBean resultBean = new FWInvQueryResult.ResultBean(); + Long orgId = row.getLong("org"); + DynamicObject org = BusinessDataServiceHelper.loadSingle(orgId, "bos_org"); + BigDecimal qty = row.getBigDecimal("qty"); - String key = orgCode+"<>"+orgName+"<>"+warehouseCode+"<>"+warehouseName+"<>"+lotnum+"<>"+materialNumber; - if(map.containsKey(key)){ - BigDecimal sl = map.get(key); - map.put(key, qty.add(sl)); - }else{ - map.put(key, qty); - } + if(existLot){ + String lotnum = row.getString("lotnum"); + Date producedate1 = row.getDate("producedate"); + Date expirydate1 = row.getDate("expirydate"); + resultBean.setLot(lotnum); + resultBean.setProducedate(producedate1); + resultBean.setExpirydate(expirydate1); } - if(map.size() > 0){ - for (String s : map.keySet()) { - String[] split = s.split("<>"); - FWInvQueryResult.ResultBean resultBean = new FWInvQueryResult.ResultBean(); - resultBean.setOrgCode(split[0]); - resultBean.setOrgName(split[1]); - resultBean.setWarehouseCode(split[2]); - resultBean.setWarehouseName(split[3]); - resultBean.setLot(split[4]); - resultBean.setNumber(split[5]); - resultBean.setQty(map.get(s)); - resultBeanList.add(resultBean); - } + if(existWh){ + Long warehouseId = row.getLong("warehouse"); + DynamicObject warehouse = BusinessDataServiceHelper.loadSingle(warehouseId, "bd_warehouse"); + resultBean.setWarehouseCode(warehouse.getString("number")); + resultBean.setWarehouseName(warehouse.getString("name")); } + + resultBean.setOrgCode(orgNumber); + resultBean.setOrgName(org.getString("name")); + resultBean.setNumber(materialNumber); + resultBean.setQty(qty); + resultBeanList.add(resultBean); } } diff --git a/lc123/cloud/app/api/model/FWInvQueryModel.java b/lc123/cloud/app/api/model/FWInvQueryModel.java index 0fae4b1..78cc425 100644 --- a/lc123/cloud/app/api/model/FWInvQueryModel.java +++ b/lc123/cloud/app/api/model/FWInvQueryModel.java @@ -28,6 +28,9 @@ public class FWInvQueryModel implements Serializable { @ApiParam(value = "物料编码", example = "WL001", required = true) private String materialNumber; + @ApiParam(value = "业务归属编码", example = "SHLC", required = true) + private String orgNumber; + @ApiParam(value = "批次号", example = "20250101") private String lot; @@ -79,5 +82,13 @@ public class FWInvQueryModel implements Serializable { public void setExpirydate(Date expirydate) { this.expirydate = expirydate; } + + public String getOrgNumber() { + return orgNumber; + } + + public void setOrgNumber(String orgNumber) { + this.orgNumber = orgNumber; + } } } diff --git a/lc123/cloud/app/api/result/FWInvQueryResult.java b/lc123/cloud/app/api/result/FWInvQueryResult.java index 1cf50f5..2b2ca34 100644 --- a/lc123/cloud/app/api/result/FWInvQueryResult.java +++ b/lc123/cloud/app/api/result/FWInvQueryResult.java @@ -5,6 +5,7 @@ import kd.bos.openapi.common.custom.annotation.ApiParam; import java.io.Serializable; import java.math.BigDecimal; +import java.util.Date; import java.util.List; @ApiModel @@ -39,16 +40,10 @@ public class FWInvQueryResult implements Serializable { public List getResult() { return result; } -// public List> getResult() { -// return result; -// } public void setResult(List result) { this.result = result; } -// public void setResult(List> result) { -// this.result = result; -// } @ApiModel public static class ResultBean implements Serializable { @@ -66,14 +61,18 @@ public class FWInvQueryResult implements Serializable { @ApiParam("仓库名称") private String warehouseName; - - @ApiParam("物料编码") private String number; @ApiParam("批号") private String lot; + @ApiParam("生产日期") + private Date producedate; + + @ApiParam("有效期至") + private Date expirydate; + @ApiParam("可用库存数量") private BigDecimal qty; @@ -132,6 +131,22 @@ public class FWInvQueryResult implements Serializable { public void setLot(String lot) { this.lot = lot; } + + public Date getProducedate() { + return producedate; + } + + public void setProducedate(Date producedate) { + this.producedate = producedate; + } + + public Date getExpirydate() { + return expirydate; + } + + public void setExpirydate(Date expirydate) { + this.expirydate = expirydate; + } }