lc/lc123/cloud/app/api/controller/FWInvQueryController.java

160 lines
7.1 KiB
Java

package tqq9.lc123.cloud.app.api.controller;
import com.drew.lang.annotations.NotNull;
import kd.bos.algo.DataSet;
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;
import kd.bos.openapi.common.custom.annotation.ApiPostMapping;
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;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@ApiController(value = "FWInvQueryController", desc = "泛微查询库存接口")
public class FWInvQueryController {
@ApiPostMapping(value = "/FWInvQuery", desc = "泛微查询物料库存api接口")
public CustomApiResult<FWInvQueryResult> invQuery
(@NotNull @ApiParam(value = "入参", example = "") FWInvQueryModel model) {
FWInvQueryResult resultExt = new FWInvQueryResult();
List<FWInvQueryResult.ResultBean> resultBeanList = new ArrayList<>();
int failCount = 0;//失败数量
List<FWInvQueryModel.QueryModel> queryModels = model.getQueryModels();
for (FWInvQueryModel.QueryModel queryModel : queryModels) {
String materialNumber = queryModel.getMaterialNumber();
String lot = queryModel.getLot();
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<>();
List<QFilter> ylList = new ArrayList<>();
QFilter qf0 = new QFilter("material.number", QCP.equals, materialNumber);
QFilter qf1 = new QFilter("org.number", QCP.equals, orgNumber);
list.add(qf0);
list.add(qf1);
QFilter ylf0 = new QFilter("s_materiel.number", QCP.equals, materialNumber);
QFilter ylf1 = new QFilter("s_org.number", QCP.equals, orgNumber);
ylList.add(ylf0);
ylList.add(ylf1);
if(StringUtils.isNotBlank(lot)){
QFilter qf2 = new QFilter("lotnum", QCP.equals, lot);
list.add(qf2);
QFilter ylf2 = new QFilter("s_lotnum", QCP.equals, lot);
ylList.add(ylf2);
existLot = true;
}
if(StringUtils.isNotBlank(warehouseNumber)){
QFilter qf3 = new QFilter("warehouse.number", QCP.equals, warehouseNumber);
list.add(qf3);
QFilter ylf3 = new QFilter("s_warehouse.number", QCP.equals, warehouseNumber);
ylList.add(ylf3);
existWh = true;
}
if(producedate != null){
QFilter qf4 = new QFilter("producedate", QCP.equals, producedate);
list.add(qf4);
}
if(expirydate != null){
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);
QFilter[] ylFilterArr = new QFilter[ylList.size()];
ylFilterArr = ylList.toArray(ylFilterArr);
//查询即时库存余额表
DataSet dataSet = QueryServiceHelper.queryDataSet(this.getClass().getName(), "im_inv_realbalance",
"id,qty,"+groupbyStr, filterArr, null);
//查询预留记录
DataSet ylDataSet = QueryServiceHelper.queryDataSet(this.getClass().getName(), "msmod_reserve_record",
"bal_id,qty as qty1", ylFilterArr, null);
//汇总预留记录
DataSet ylGroupbyDataSet = ylDataSet.groupBy(new String[]{"bal_id"}).sum("qty1").finish();
//即时库存余额表 关联 预留记录
DataSet joinDataSet = dataSet.leftJoin(ylGroupbyDataSet).on("id", "bal_id")
.select(("qty,"+groupbyStr).split(","), new String[]{"qty1"}).finish();
//汇总关联后的数据
DataSet groupbyDataSet = joinDataSet.groupBy(groupbyStr.split(",")).sum("qty").sum("qty1").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");
qty = qty != null?qty:BigDecimal.ZERO;
BigDecimal qty1 = row.getBigDecimal("qty1");
qty1 = qty1 != null?qty1:BigDecimal.ZERO;
if(qty.compareTo(qty1) == 0){
continue;
}
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.subtract(qty1));
resultBeanList.add(resultBean);
}
}
resultExt.setFailCount(failCount);
resultExt.setSuccessCount(queryModels.size() - failCount);
resultExt.setResult(resultBeanList);
return CustomApiResult.success(resultExt);
}
}