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

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;
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<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);
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,51 +77,51 @@ 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<String, BigDecimal> 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");
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(map.size() > 0){
for (String s : map.keySet()) {
String[] split = s.split("<>");
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();
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));
Long orgId = row.getLong("org");
DynamicObject org = BusinessDataServiceHelper.loadSingle(orgId, "bos_org");
BigDecimal qty = row.getBigDecimal("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(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);
}
}
}
}
resultExt.setFailCount(failCount);
resultExt.setSuccessCount(queryModels.size() - failCount);

View File

@ -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;
}
}
}

View File

@ -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<ResultBean> getResult() {
return result;
}
// public List<List<ResultBean>> getResult() {
// return result;
// }
public void setResult(List<ResultBean> result) {
this.result = result;
}
// public void setResult(List<List<ResultBean>> 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;
}
}