【物料库存查询】 动态汇总

This commit is contained in:
tanfengling@x-ri.com 2025-12-17 17:58:19 +08:00
parent d31b0452ae
commit 8df8d20e4c
3 changed files with 96 additions and 46 deletions

View File

@ -1,6 +1,9 @@
package tqq9.lc123.cloud.app.api.controller; package tqq9.lc123.cloud.app.api.controller;
import com.drew.lang.annotations.NotNull; 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.dataentity.entity.DynamicObject;
import kd.bos.openapi.common.custom.annotation.ApiController; import kd.bos.openapi.common.custom.annotation.ApiController;
import kd.bos.openapi.common.custom.annotation.ApiParam; 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.QCP;
import kd.bos.orm.query.QFilter; import kd.bos.orm.query.QFilter;
import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.BusinessDataServiceHelper;
import kd.bos.servicehelper.QueryServiceHelper;
import oadd.org.apache.commons.lang3.StringUtils; import oadd.org.apache.commons.lang3.StringUtils;
import tqq9.lc123.cloud.app.api.model.FWInvQueryModel; import tqq9.lc123.cloud.app.api.model.FWInvQueryModel;
import tqq9.lc123.cloud.app.api.result.FWInvQueryResult; import tqq9.lc123.cloud.app.api.result.FWInvQueryResult;
@ -33,17 +37,37 @@ public class FWInvQueryController {
String warehouseNumber = queryModel.getWarehouseNumber(); String warehouseNumber = queryModel.getWarehouseNumber();
Date producedate = queryModel.getProducedate(); Date producedate = queryModel.getProducedate();
Date expirydate = queryModel.getExpirydate(); 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<QFilter> list = new ArrayList<>(); List<QFilter> 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); list.add(qf1);
if(StringUtils.isNotBlank(lot)){ if(StringUtils.isNotBlank(lot)){
QFilter qf2 = new QFilter("lotnum", QCP.equals, lot); QFilter qf2 = new QFilter("lotnum", QCP.equals, lot);
list.add(qf2); list.add(qf2);
existLot = true;
} }
if(StringUtils.isNotBlank(warehouseNumber)){ if(StringUtils.isNotBlank(warehouseNumber)){
QFilter qf3 = new QFilter("warehouse.number", QCP.equals, warehouseNumber); QFilter qf3 = new QFilter("warehouse.number", QCP.equals, warehouseNumber);
list.add(qf3); list.add(qf3);
existWh = true;
} }
if(producedate != null){ if(producedate != null){
QFilter qf4 = new QFilter("producedate", QCP.equals, producedate); QFilter qf4 = new QFilter("producedate", QCP.equals, producedate);
@ -53,49 +77,49 @@ public class FWInvQueryController {
QFilter qf5 = new QFilter("expirydate", QCP.equals, expirydate); QFilter qf5 = new QFilter("expirydate", QCP.equals, expirydate);
list.add(qf5); 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()]; QFilter[] filterArr = new QFilter[list.size()];
filterArr = list.toArray(filterArr); filterArr = list.toArray(filterArr);
DynamicObject[] realbalances = BusinessDataServiceHelper.load("im_inv_realbalance", DataSet dataSet = QueryServiceHelper.queryDataSet(this.getClass().getName(), "im_inv_realbalance",
"id,material,org,warehouse,lotnum,avbbaseqty,qty", filterArr); "qty,"+groupbyStr, filterArr, null);
if(realbalances != null && realbalances.length > 0){ DataSet groupbyDataSet = dataSet.groupBy(groupbyStr.split(",")).count("qty").finish();
Map<String, BigDecimal> map = new HashMap<>(); for (Row row : groupbyDataSet) {
for (DynamicObject realbalance : realbalances) { FWInvQueryResult.ResultBean resultBean = new FWInvQueryResult.ResultBean();
//获取数量 Long orgId = row.getLong("org");
BigDecimal qty = realbalance.getBigDecimal("qty"); DynamicObject org = BusinessDataServiceHelper.loadSingle(orgId, "bos_org");
//获取组织数据 BigDecimal qty = row.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");
String key = orgCode+"<>"+orgName+"<>"+warehouseCode+"<>"+warehouseName+"<>"+lotnum+"<>"+materialNumber; if(existLot){
if(map.containsKey(key)){ String lotnum = row.getString("lotnum");
BigDecimal sl = map.get(key); Date producedate1 = row.getDate("producedate");
map.put(key, qty.add(sl)); Date expirydate1 = row.getDate("expirydate");
}else{
map.put(key, qty);
}
resultBean.setLot(lotnum);
resultBean.setProducedate(producedate1);
resultBean.setExpirydate(expirydate1);
} }
if(map.size() > 0){ if(existWh){
for (String s : map.keySet()) { Long warehouseId = row.getLong("warehouse");
String[] split = s.split("<>"); DynamicObject warehouse = BusinessDataServiceHelper.loadSingle(warehouseId, "bd_warehouse");
FWInvQueryResult.ResultBean resultBean = new FWInvQueryResult.ResultBean(); resultBean.setWarehouseCode(warehouse.getString("number"));
resultBean.setOrgCode(split[0]); resultBean.setWarehouseName(warehouse.getString("name"));
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);
}
} }
resultBean.setOrgCode(orgNumber);
resultBean.setOrgName(org.getString("name"));
resultBean.setNumber(materialNumber);
resultBean.setQty(qty);
resultBeanList.add(resultBean);
} }
} }

View File

@ -28,6 +28,9 @@ public class FWInvQueryModel implements Serializable {
@ApiParam(value = "物料编码", example = "WL001", required = true) @ApiParam(value = "物料编码", example = "WL001", required = true)
private String materialNumber; private String materialNumber;
@ApiParam(value = "业务归属编码", example = "SHLC", required = true)
private String orgNumber;
@ApiParam(value = "批次号", example = "20250101") @ApiParam(value = "批次号", example = "20250101")
private String lot; private String lot;
@ -79,5 +82,13 @@ public class FWInvQueryModel implements Serializable {
public void setExpirydate(Date expirydate) { public void setExpirydate(Date expirydate) {
this.expirydate = expirydate; this.expirydate = expirydate;
} }
public String getOrgNumber() {
return orgNumber;
}
public void setOrgNumber(String orgNumber) {
this.orgNumber = orgNumber;
}
} }
} }

View File

@ -5,6 +5,7 @@ import kd.bos.openapi.common.custom.annotation.ApiParam;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date;
import java.util.List; import java.util.List;
@ApiModel @ApiModel
@ -39,16 +40,10 @@ public class FWInvQueryResult implements Serializable {
public List<ResultBean> getResult() { public List<ResultBean> getResult() {
return result; return result;
} }
// public List<List<ResultBean>> getResult() {
// return result;
// }
public void setResult(List<ResultBean> result) { public void setResult(List<ResultBean> result) {
this.result = result; this.result = result;
} }
// public void setResult(List<List<ResultBean>> result) {
// this.result = result;
// }
@ApiModel @ApiModel
public static class ResultBean implements Serializable { public static class ResultBean implements Serializable {
@ -66,14 +61,18 @@ public class FWInvQueryResult implements Serializable {
@ApiParam("仓库名称") @ApiParam("仓库名称")
private String warehouseName; private String warehouseName;
@ApiParam("物料编码") @ApiParam("物料编码")
private String number; private String number;
@ApiParam("批号") @ApiParam("批号")
private String lot; private String lot;
@ApiParam("生产日期")
private Date producedate;
@ApiParam("有效期至")
private Date expirydate;
@ApiParam("可用库存数量") @ApiParam("可用库存数量")
private BigDecimal qty; private BigDecimal qty;
@ -132,6 +131,22 @@ public class FWInvQueryResult implements Serializable {
public void setLot(String lot) { public void setLot(String lot) {
this.lot = 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;
}
} }