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 invQuery (@NotNull @ApiParam(value = "入参", example = "") FWInvQueryModel model) { FWInvQueryResult resultExt = new FWInvQueryResult(); List resultBeanList = new ArrayList<>(); int failCount = 0;//失败数量 List 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 list = new ArrayList<>(); List 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); } }