现存量查询同步其它仓库的代码

This commit is contained in:
mzr 2025-09-21 17:14:02 +08:00
parent 734b0d7aac
commit 24713f6670
3 changed files with 462 additions and 0 deletions

View File

@ -56,6 +56,29 @@ public class APIOnhandQueryIpml implements IAPIOnhandQuery {
return onhandVOs;
}
public OnhandVO[] queryOnhandVOByDimsNoTrans(List<Map<String, Object>> paramMapList) throws BusinessException {
//±ØÊäÏî¼ì²é
try {
List<OnhandDimVO> onhandDimVOS = new ArrayList<>();
for (Map<String, Object> paramMap : paramMapList) {
this.requiredFieldCheck(requiredField, paramMap);
// ·­Òë
// paramMap = TransferCodeToPKTool.doTranslateFields(jsonParamMapping, paramMap);
OnhandDataSupplement dataSupplement = new OnhandDataSupplement();
OnhandDimVO onhandDimVO = new OnhandDimVO();
onhandDimVO = dataSupplement.process(paramMap);
onhandDimVOS.add(onhandDimVO);
}
OnhandVO[] onhandVOs = NCLocator.getInstance().lookup(OnhandResService.class)
.queryOnhandVOByDims(onhandDimVOS.toArray(new OnhandDimVO[0]));
return onhandVOs;
} catch (Exception e) {
ExceptionUtils.marsh(e);
return null;
}
}
@Override
public OnhandVO[] queryOnhandVOByDims(List<Map<String, Object>> paramMapList) throws Exception {
// ±ØÊäÏî¼ì²é

View File

@ -26,6 +26,8 @@ public interface IAPIOnhandQuery {
*/
OnhandVO[] queryOnhandVOByDims(Map<String, Object> paramMap) throws BusinessException;
OnhandVO[] queryOnhandVOByDimsNoTrans(List<Map<String, Object>> paramMapList) throws BusinessException;
/**
* 根据多个维度查询现存量信息
* 此方法接收一个参数映射列表每个映射包含一组查询条件用于批量查询

View File

@ -17,6 +17,8 @@ import nc.vo.pubapp.pattern.pub.SqlBuilder;
import nc.ws.opm.pub.utils.result.APIErrCodeEnum;
import nccloud.api.ic.onhand.IAPIOnhandQuery;
import nccloud.api.rest.utils.ResultMessageUtil;
import nccloud.openapi.ic.onhand.mapping.OnhandMapping;
import nccloud.openapi.scmpub.pub.TransferCodeToPKTool;
import org.json.JSONString;
import javax.ws.rs.Consumes;
@ -319,4 +321,439 @@ public class OnhandResource {
Map map = (Map) new BaseDAO().executeQuery(sql, new MapProcessor());
return map;
}
/**
* 现存量查询 WMS富勒
* 支持库存组织+仓库+批次+辅助属性+项目+供应商+生产厂商+客户等条件查询
*
* @param paramMap 查询参数
* - pk_org: 库存组织
* - cwarehouseid: 仓库
* - vbatchcode: 批次号
* - cmaterialoid: 物料
* - cprojectid: 项目
* - cvendorid: 供应商
* - cproductorid: 生产厂商
* - casscustid: 客户
*/
@POST
@Path("onhandWmsQuery")
@Consumes("application/json")
@Produces("application/json")
public JSONString onhandQueryWms(Map<String, Object> paramMap) {
if (paramMap == null) {
return ResultMessageUtil.exceptionToJSON("传入参数错误", APIErrCodeEnum.BUSINESSEXCCODE.getCode());
}
try {
String orgCode = (String) paramMap.get("pk_org");
// 构建动态SQL查询现存量
paramMap = TransferCodeToPKTool.doTranslateFields(new OnhandMapping(), this.deleteUnNessaryField(paramMap));
String sql = buildOnhandQuerySql(paramMap);
// 执行SQL查询
List<Map<String, Object>> onhandList = (List<Map<String, Object>>) new BaseDAO()
.executeQuery(sql, new nc.jdbc.framework.processor.MapListProcessor());
if (onhandList != null && !onhandList.isEmpty()) {
// 收集所有相关ID用于批量查询
Set<String> materialIds = new HashSet<>();
Set<String> warehouseIds = new HashSet<>();
Set<String> projectIds = new HashSet<>();
Set<String> vendorIds = new HashSet<>();
Set<String> producerIds = new HashSet<>();
Set<String> customerIds = new HashSet<>();
for (Map<String, Object> onhandData : onhandList) {
if (onhandData.get("cmaterialvid") != null) {
materialIds.add(onhandData.get("cmaterialvid").toString());
}
if (onhandData.get("cwarehouseid") != null) {
warehouseIds.add(onhandData.get("cwarehouseid").toString());
}
if (onhandData.get("cprojectid") != null) {
projectIds.add(onhandData.get("cprojectid").toString());
}
if (onhandData.get("cvendorid") != null) {
vendorIds.add(onhandData.get("cvendorid").toString());
}
if (onhandData.get("cproductorid") != null) {
producerIds.add(onhandData.get("cproductorid").toString());
}
if (onhandData.get("casscustid") != null) {
customerIds.add(onhandData.get("casscustid").toString());
}
}
// 批量查询相关信息
Map<String, Map<String, Object>> materialInfoMap = new HashMap<>();
Map<String, Map<String, Object>> warehouseInfoMap = new HashMap<>();
Map<String, Map<String, Object>> projectInfoMap = new HashMap<>();
Map<String, Map<String, Object>> vendorInfoMap = new HashMap<>();
Map<String, Map<String, Object>> producerInfoMap = new HashMap<>();
Map<String, Map<String, Object>> customerInfoMap = new HashMap<>();
// 物料信息
for (String materialId : materialIds) {
Map<String, Object> materialMap = this.getMaterialInfo(materialId);
materialInfoMap.put(materialId, materialMap != null ? materialMap : new HashMap<>());
}
// 仓库信息
String warehouseSelectFields = StordocVO.CODE + "," + StordocVO.NAME;
for (String warehouseId : warehouseIds) {
Map<String, Object> warehouseMap = this.transferFields(
StordocVO.getDefaultTableName(), warehouseSelectFields, StordocVO.PK_STORDOC, warehouseId);
warehouseInfoMap.put(warehouseId, warehouseMap != null ? warehouseMap : new HashMap<>());
}
// 项目信息
for (String projectId : projectIds) {
Map<String, Object> projectMap = this.transferFields(
"bd_project", "project_code,project_name", "pk_project", projectId);
projectInfoMap.put(projectId, projectMap != null ? projectMap : new HashMap<>());
}
// 供应商信息
for (String vendorId : vendorIds) {
Map<String, Object> vendorMap = this.transferFields(
"bd_supplier", "code,name", "pk_supplier", vendorId);
vendorInfoMap.put(vendorId, vendorMap != null ? vendorMap : new HashMap<>());
}
// 生产厂商信息
for (String producerId : producerIds) {
Map<String, Object> producerMap = this.transferFields(
"bd_defdoc", "code,name", "pk_defdoc", producerId);
producerInfoMap.put(producerId, producerMap != null ? producerMap : new HashMap<>());
}
// 客户信息
for (String customerId : customerIds) {
Map<String, Object> customerMap = this.transferFields(
"bd_customer", "code,name", "pk_customer", customerId);
customerInfoMap.put(customerId, customerMap != null ? customerMap : new HashMap<>());
}
JSONArray reArray = new JSONArray();
for (Map<String, Object> onhandData : onhandList) {
JSONObject jsonObject = new JSONObject();
// 基本信息
JSONObject baseInfo = new JSONObject();
baseInfo.put("pk_org", onhandData.get("pk_org"));
baseInfo.put("onhandnum", onhandData.get("nonhandnum"));
baseInfo.put("vbatchcode", onhandData.get("vbatchcode"));
baseInfo.put("orgcode", orgCode);
jsonObject.put("baseInfo", baseInfo);
// 物料信息
JSONObject materialInfoDetail = new JSONObject();
String cmaterialvid = onhandData.get("cmaterialvid") != null ? onhandData.get("cmaterialvid").toString() : null;
Map<String, Object> materialInfo = materialInfoMap.getOrDefault(cmaterialvid, Collections.emptyMap());
materialInfoDetail.put("materialPk", cmaterialvid);
materialInfoDetail.put("materialCode", materialInfo.getOrDefault(MaterialVO.CODE, ""));
materialInfoDetail.put("materialName", materialInfo.getOrDefault(MaterialVO.NAME, ""));
materialInfoDetail.put("materialtype", materialInfo.getOrDefault(MaterialVO.MATERIALTYPE, ""));
materialInfoDetail.put("materialspec", materialInfo.getOrDefault(MaterialVO.MATERIALSPEC, ""));
materialInfoDetail.put("unitcode", materialInfo.getOrDefault("unitcode", ""));
materialInfoDetail.put("unitname", materialInfo.getOrDefault("unitname", ""));
jsonObject.put("materialInfo", materialInfoDetail);
// 仓库信息
String cwarehouseid = onhandData.get("cwarehouseid") != null ? onhandData.get("cwarehouseid").toString() : null;
JSONObject warehouseInfoDetail = new JSONObject();
Map<String, Object> warehouseInfo = warehouseInfoMap.getOrDefault(cwarehouseid, Collections.emptyMap());
warehouseInfoDetail.put("warehousePk", cwarehouseid);
warehouseInfoDetail.put("warehouseCode", warehouseInfo.getOrDefault(StordocVO.CODE, ""));
warehouseInfoDetail.put("warehouseName", warehouseInfo.getOrDefault(StordocVO.NAME, ""));
jsonObject.put("warehouseInfo", warehouseInfoDetail);
// 项目信息
String cprojectid = onhandData.get("cprojectid") != null ? onhandData.get("cprojectid").toString() : null;
JSONObject projectInfoDetail = new JSONObject();
Map<String, Object> projectInfo = projectInfoMap.getOrDefault(cprojectid, Collections.emptyMap());
projectInfoDetail.put("projectPk", cprojectid);
projectInfoDetail.put("projectCode", projectInfo.getOrDefault("project_code", ""));
projectInfoDetail.put("projectName", projectInfo.getOrDefault("project_name", ""));
jsonObject.put("projectInfo", projectInfoDetail);
// 供应商信息
String cvendorid = onhandData.get("cvendorid") != null ? onhandData.get("cvendorid").toString() : null;
JSONObject venderInfoDetail = new JSONObject();
Map<String, Object> vendorInfo = vendorInfoMap.getOrDefault(cvendorid, Collections.emptyMap());
venderInfoDetail.put("vendorPk", cvendorid);
venderInfoDetail.put("vendorCode", vendorInfo.getOrDefault("code", ""));
venderInfoDetail.put("vendorName", vendorInfo.getOrDefault("name", ""));
jsonObject.put("venderInfo", venderInfoDetail);
// 生产厂商信息
String cproductorid = onhandData.get("cproductorid") != null ? onhandData.get("cproductorid").toString() : null;
JSONObject producerInfoDetail = new JSONObject();
Map<String, Object> producerInfo = producerInfoMap.getOrDefault(cproductorid, Collections.emptyMap());
producerInfoDetail.put("producerPk", cproductorid);
producerInfoDetail.put("producerCode", producerInfo.getOrDefault("code", ""));
producerInfoDetail.put("producerName", producerInfo.getOrDefault("name", ""));
jsonObject.put("producerInfo", producerInfoDetail);
// 客户信息
String casscustid = onhandData.get("casscustid") != null ? onhandData.get("casscustid").toString() : null;
JSONObject customerInfoDetail = new JSONObject();
Map<String, Object> customerInfo = customerInfoMap.getOrDefault(casscustid, Collections.emptyMap());
customerInfoDetail.put("customerPk", casscustid);
customerInfoDetail.put("customerCode", customerInfo.getOrDefault("code", ""));
customerInfoDetail.put("customerName", customerInfo.getOrDefault("name", ""));
jsonObject.put("customerInfo", customerInfoDetail);
// 辅助属性信息物料自由属性
jsonObject.put("vfree1", onhandData.get("vfree1"));
jsonObject.put("vfree2", onhandData.get("vfree2"));
jsonObject.put("vfree3", onhandData.get("vfree3"));
jsonObject.put("vfree4", onhandData.get("vfree4"));
jsonObject.put("vfree5", onhandData.get("vfree5"));
jsonObject.put("vfree6", onhandData.get("vfree6"));
jsonObject.put("vfree7", onhandData.get("vfree7"));
jsonObject.put("vfree8", onhandData.get("vfree8"));
jsonObject.put("vfree9", onhandData.get("vfree9"));
jsonObject.put("vfree10", onhandData.get("vfree10"));
reArray.add(jsonObject);
}
return ResultMessageUtil.toJSON(reArray, "现存量查询成功!");
} else {
return ResultMessageUtil.toJSON(null, "现存量查询成功,无数据!");
}
} catch (Exception e) {
return ResultMessageUtil.exceptionToJSON(e);
}
}
private Map<String, Object> deleteUnNessaryField(Map<String, Object> paramMap) {
Map<String, Object> newParamMap = new HashMap<>();
// 然后校验如果非必填项有传递空或者null 手动删除属性
for (String field : paramMap.keySet()) {
Object keyValue = paramMap.get(field);
if (null == keyValue || "".equals(keyValue)) {
continue;
}
newParamMap.put(field, keyValue);
}
return newParamMap;
}
/**
* 构建现存量查询SQL
*
* @param paramMap 查询参数
* @return 动态构建的SQL语句
*/
private String buildOnhandQuerySql(Map<String, Object> paramMap) {
StringBuilder sql = new StringBuilder();
// 基础SQL结构
sql.append("select onhand.pk_org pk_org, ");
sql.append("onhand.cmaterialoid cmaterialoid, ");
sql.append("meta.pk_material cmaterialvid, ");
sql.append("meta.pk_measdoc cunitid, ");
sql.append("sum(onhand.nonhandnum) nonhandnum, ");
sql.append("sum(onhand.nonhandastnum) nonhandastnum, ");
sql.append("sum(onhand.ngrossnum) ngrossnum, ");
sql.append("sum(onhand.nnum1) nnum1, ");
sql.append("sum(onhand.nastnum1) nastnum1, ");
sql.append("sum(onhand.ngrossnum1) ngrossnum1, ");
sql.append("sum(onhand.nnum2) nnum2, ");
sql.append("sum(onhand.nastnum2) nastnum2, ");
sql.append("sum(onhand.ngrossnum2) ngrossnum2, ");
sql.append("sum(onhand.nlocknum) nlocknum, ");
sql.append("sum(onhand.nlockastnum) nlockastnum, ");
sql.append("sum(onhand.nlockgrossnum) nlockgrossnum, ");
sql.append("sum(onhand.nrsnum) nrsnum, ");
sql.append("sum(onhand.nrsastnum) nrsastnum, ");
sql.append("sum(onhand.nrsgrossnum) nrsgrossnum, ");
sql.append("sum(onhand.nonhandnumrpt) nonhandnumrpt, ");
sql.append("sum(onhand.nonhandastnumrpt) nonhandastnumrpt, ");
sql.append("sum(onhand.ngrossnumrpt) ngrossnumrpt, ");
sql.append("sum(onhand.nlocknumrpt) nlocknumrpt, ");
sql.append("sum(onhand.nlockastnumrpt) nlockastnumrpt, ");
sql.append("sum(onhand.nlockgrossnumrpt) nlockgrossnumrpt, ");
sql.append("sum(onhand.nvmionhandnum) nvmionhandnum, ");
sql.append("sum(onhand.nvmionhandastnum) nvmionhandastnum, ");
sql.append("sum(onhand.nvmilocknum) nvmilocknum, ");
sql.append("sum(onhand.nvmilockastnum) nvmilockastnum, ");
sql.append("sum(onhand.ntplonhandnum) ntplonhandnum, ");
sql.append("sum(onhand.ntplonhandastnum) ntplonhandastnum, ");
sql.append("sum(onhand.ntpllocknum) ntpllocknum, ");
sql.append("sum(onhand.ntpllockastnum) ntpllockastnum, ");
sql.append("onhand.cwarehouseid, ");
sql.append("onhand.vbatchcode, ");
sql.append("onhand.cvendorid, ");
sql.append("onhand.cprojectid, ");
sql.append("onhand.casscustid, ");
sql.append("onhand.cproductorid, ");
sql.append("onhand.vfree1, ");
sql.append("onhand.vfree2, ");
sql.append("onhand.vfree3, ");
sql.append("onhand.vfree4, ");
sql.append("onhand.vfree5, ");
sql.append("onhand.vfree6, ");
sql.append("onhand.vfree7, ");
sql.append("onhand.vfree8, ");
sql.append("onhand.vfree9, ");
sql.append("onhand.vfree10 ");
sql.append("from (select hand.nonhandnum nonhandnumrpt, ");
sql.append("hand.nonhandastnum nonhandastnumrpt, ");
sql.append("hand.ngrossnum ngrossnumrpt, ");
sql.append("hand.nlocknum nlocknumrpt, ");
sql.append("hand.nlockastnum nlockastnumrpt, ");
sql.append("hand.nlockgrossnum nlockgrossnumrpt, ");
sql.append("CASE WHEN nvl(hand.cvmivenderid, '~') = '~' THEN 0.0 ELSE hand.nonhandnum END nvmionhandnum, ");
sql.append("CASE WHEN nvl(hand.ctplcustomerid, '~') = '~' THEN 0.0 ELSE hand.nonhandnum END ntplonhandnum, ");
sql.append("CASE WHEN nvl(hand.cvmivenderid, '~') = '~' THEN 0.0 ELSE hand.nlocknum END nvmilocknum, ");
sql.append("CASE WHEN nvl(hand.ctplcustomerid, '~') = '~' THEN 0.0 ELSE hand.nlocknum END ntpllocknum, ");
sql.append("CASE WHEN nvl(hand.cvmivenderid, '~') = '~' THEN 0.0 ELSE hand.nonhandastnum END nvmionhandastnum, ");
sql.append("CASE WHEN nvl(hand.ctplcustomerid, '~') = '~' THEN 0.0 ELSE hand.nonhandastnum END ntplonhandastnum, ");
sql.append("CASE WHEN nvl(hand.cvmivenderid, '~') = '~' THEN 0.0 ELSE hand.nlockastnum END nvmilockastnum, ");
sql.append("CASE WHEN nvl(hand.ctplcustomerid, '~') = '~' THEN 0.0 ELSE hand.nlockastnum END ntpllockastnum, ");
sql.append("hand.pk_group, hand.pk_org, hand.cwarehouseid, hand.cmaterialvid, hand.cmaterialoid, ");
sql.append("hand.castunitid, hand.clocationid, hand.pk_batchcode, hand.vbatchcode, hand.vchangerate, ");
sql.append("hand.cvmivenderid, hand.ctplcustomerid, hand.cstateid, hand.cvendorid, hand.cprojectid, ");
sql.append("hand.casscustid, hand.cproductorid, hand.cffileid, hand.vfree1, hand.vfree2, hand.vfree3, ");
sql.append("hand.vfree4, hand.vfree5, hand.vfree6, hand.vfree7, hand.vfree8, hand.vfree9, hand.vfree10, ");
sql.append("'~' pk_marbasclass, hand.nonhandnum, hand.nonhandastnum, hand.ngrossnum, hand.nnum1, ");
sql.append("hand.nastnum1, hand.ngrossnum1, hand.nnum2, hand.nastnum2, hand.ngrossnum2, hand.nlocknum, ");
sql.append("hand.nlockastnum, hand.nlockgrossnum, hand.nrsnum, hand.nrsastnum, hand.nrsgrossnum ");
sql.append("from (select handdim.pk_group, handdim.pk_org, handdim.cwarehouseid, handdim.cmaterialvid, ");
sql.append("handdim.cmaterialoid, handdim.castunitid, handdim.clocationid, handdim.pk_batchcode, ");
sql.append("handdim.vbatchcode, handdim.vchangerate, handdim.cvmivenderid, handdim.ctplcustomerid, ");
sql.append("handdim.cstateid, handdim.cvendorid, handdim.cprojectid, handdim.casscustid, ");
sql.append("handdim.cproductorid, handdim.cffileid, handdim.vfree1, handdim.vfree2, handdim.vfree3, ");
sql.append("handdim.vfree4, handdim.vfree5, handdim.vfree6, handdim.vfree7, handdim.vfree8, ");
sql.append("handdim.vfree9, handdim.vfree10, ic_onhandnum.nonhandnum, ic_onhandnum.nonhandastnum, ");
sql.append("ic_onhandnum.ngrossnum, ic_onhandnum.nnum1, ic_onhandnum.nastnum1, ic_onhandnum.ngrossnum1, ");
sql.append("ic_onhandnum.nnum2, ic_onhandnum.nastnum2, ic_onhandnum.ngrossnum2, ic_onhandnum.nlocknum, ");
sql.append("ic_onhandnum.nlockastnum, ic_onhandnum.nlockgrossnum, ic_onhandnum.nrsnum, ");
sql.append("ic_onhandnum.nrsastnum, ic_onhandnum.nrsgrossnum ");
sql.append("from ic_onhandnum ic_onhandnum ");
sql.append("INNER JOIN ic_onhanddim handdim ON (ic_onhandnum.pk_onhanddim = handdim.pk_onhanddim) ");
sql.append("LEFT outer JOIN scm_batchcode scm_batchcode ON (handdim.pk_batchcode = scm_batchcode.pk_batchcode) ");
sql.append("INNER JOIN bd_stordoc bd_stordoc ON (handdim.cwarehouseid = bd_stordoc.pk_stordoc) ");
sql.append("where 1 = 1 AND ic_onhandnum.dr = 0 ");
// 动态添加查询条件
sql.append("AND handdim.pk_group = '").append("0001A110000000000677").append("' ");
// 组织条件必输- 处理可能是数组的情况
String pk_org = getStringValue(paramMap.get("pk_org"));
if (pk_org != null && !pk_org.trim().isEmpty()) {
sql.append("AND handdim.pk_org = '").append(pk_org).append("' ");
}
// 仓库条件
String cwarehouseid = getStringValue(paramMap.get("cwarehouseid"));
if (cwarehouseid != null && !cwarehouseid.trim().isEmpty()) {
sql.append("AND handdim.cwarehouseid = '").append(cwarehouseid).append("' ");
}
// 批次条件
String vbatchcode = getStringValue(paramMap.get("vbatchcode"));
if (vbatchcode != null && !vbatchcode.trim().isEmpty()) {
sql.append("AND handdim.vbatchcode = '").append(vbatchcode).append("' ");
}
// 物料条件
String cmaterialoid = getStringValue(paramMap.get("cmaterialoid"));
if (cmaterialoid != null && !cmaterialoid.trim().isEmpty()) {
sql.append("AND handdim.cmaterialoid = '").append(cmaterialoid).append("' ");
}
// 项目条件
String cprojectid = getStringValue(paramMap.get("cprojectid"));
if (cprojectid != null && !cprojectid.trim().isEmpty()) {
sql.append("AND handdim.cprojectid = '").append(cprojectid).append("' ");
}
// 供应商条件
String cvendorid = getStringValue(paramMap.get("cvendorid"));
if (cvendorid != null && !cvendorid.trim().isEmpty()) {
sql.append("AND handdim.cvendorid = '").append(cvendorid).append("' ");
}
// 生产厂商条件
String cproductorid = getStringValue(paramMap.get("cproductorid"));
if (cproductorid != null && !cproductorid.trim().isEmpty()) {
sql.append("AND handdim.cproductorid = '").append(cproductorid).append("' ");
}
// 客户条件
String casscustid = getStringValue(paramMap.get("casscustid"));
if (casscustid != null && !casscustid.trim().isEmpty()) {
sql.append("AND handdim.casscustid = '").append(casscustid).append("' ");
}
// 仓库相关条件
sql.append("AND bd_stordoc.gubflag = 'N' ");
// 不差虚拟仓
sql.append("AND (bd_stordoc.def1 = '~' or bd_stordoc.def1 = 'Y' or bd_stordoc.def1 IS NULL) ");
sql.append("AND (nvl(ic_onhandnum.nonhandnum, 0) <> 0 OR nvl(ic_onhandnum.nonhandastnum, 0) <> 0 OR ");
sql.append("nvl(ic_onhandnum.ngrossnum, 0) <> 0 OR nvl(ic_onhandnum.nnum1, 0) <> 0 OR ");
sql.append("nvl(ic_onhandnum.nastnum1, 0) <> 0 OR nvl(ic_onhandnum.ngrossnum1, 0) <> 0 OR ");
sql.append("nvl(ic_onhandnum.nnum2, 0) <> 0 OR nvl(ic_onhandnum.nastnum2, 0) <> 0 OR ");
sql.append("nvl(ic_onhandnum.ngrossnum2, 0) <> 0 OR nvl(ic_onhandnum.nlocknum, 0) <> 0 OR ");
sql.append("nvl(ic_onhandnum.nlockastnum, 0) <> 0 OR nvl(ic_onhandnum.nlockgrossnum, 0) <> 0 OR ");
sql.append("nvl(ic_onhandnum.nrsnum, 0) <> 0 OR nvl(ic_onhandnum.nrsastnum, 0) <> 0 OR ");
sql.append("nvl(ic_onhandnum.nrsgrossnum, 0) <> 0)) hand) onhand ");
sql.append("LEFT outer JOIN bd_material_v meta ON onhand.cmaterialoid = meta.pk_source ");
sql.append("LEFT outer JOIN org_stockorg meta_1 ON onhand.pk_org = meta_1.pk_stockorg ");
sql.append("LEFT outer JOIN bd_material meta_2 ON onhand.cmaterialvid = meta_2.pk_material ");
sql.append("where 1 = 1 ");
// 如果有组织条件添加到最终查询条件中
if (pk_org != null && !pk_org.trim().isEmpty()) {
sql.append("AND onhand.pk_org = '").append(pk_org).append("' ");
}
sql.append("GROUP BY onhand.pk_org, onhand.cmaterialoid, meta.pk_material, meta.pk_measdoc, ");
sql.append("onhand.cwarehouseid, onhand.vbatchcode, onhand.cvendorid, onhand.cprojectid, ");
sql.append("onhand.casscustid, onhand.cproductorid, onhand.vfree1, onhand.vfree2, onhand.vfree3, ");
sql.append("onhand.vfree4, onhand.vfree5, onhand.vfree6, onhand.vfree7, onhand.vfree8, ");
sql.append("onhand.vfree9, onhand.vfree10");
return sql.toString();
}
/**
* 获取字符串值处理可能的数组情况
*
* @param value 参数值可能是字符串或数组
* @return 字符串值如果是数组则取第一个元素
*/
private String getStringValue(Object value) {
if (value == null) {
return null;
}
if (value instanceof String) {
return (String) value;
}
if (value instanceof String[]) {
String[] arr = (String[]) value;
return arr.length > 0 ? arr[0] : null;
}
if (value instanceof List) {
List<?> list = (List<?>) value;
return list.size() > 0 && list.get(0) != null ? list.get(0).toString() : null;
}
return value.toString();
}
}