增加现存量查询的api-EIP-v0

This commit is contained in:
mzr 2025-07-18 17:53:18 +08:00
parent d705484810
commit 17898b3e6e
3 changed files with 161 additions and 34 deletions

View File

@ -4,6 +4,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import nc.bs.framework.common.NCLocator;
import nc.itf.ic.onhand.OnhandResService;
import nc.vo.ic.onhand.entity.OnhandDimVO;
@ -36,7 +38,7 @@ public class APIOnhandQueryIpml implements IAPIOnhandQuery {
public OnhandVO[] queryOnhandVOByDims(Map<String, Object> paramMap) throws BusinessException {
//±<EFBFBD><EFBFBD>ה<EFBFBD>מ¼ל²י
// 必输项检查
this.requiredFieldCheck(requiredField, paramMap);
// ·­Òë
paramMap = TransferCodeToPKTool.doTranslateFields(jsonParamMapping, paramMap);
@ -57,7 +59,7 @@ public class APIOnhandQueryIpml implements IAPIOnhandQuery {
@Override
public OnhandVO[] queryOnhandVOByDims(List<Map<String, Object>> paramMapList) throws Exception {
//±<EFBFBD><EFBFBD>ה<EFBFBD>מ¼ל²י
// 必输项检查
try {
List<OnhandDimVO> onhandDimVOS = new ArrayList<>();
for (Map<String, Object> paramMap : paramMapList) {
@ -78,6 +80,25 @@ public class APIOnhandQueryIpml implements IAPIOnhandQuery {
}
}
@Override
public OnhandVO[] queryOnhandVOByCondition(Map<String, Object> paramMap) throws Exception {
this.requiredFieldCheck1(paramMap);
// 翻译
paramMap = TransferCodeToPKTool.doTranslateFields(jsonParamMapping, paramMap);
OnhandDataSupplement dataSupplement = new OnhandDataSupplement();
OnhandDimVO onhandDimVO = new OnhandDimVO();
try {
onhandDimVO = dataSupplement.process(paramMap);
} catch (Exception e) {
ExceptionUtils.marsh(e);
}
OnhandVO[] onhandVOs = NCLocator.getInstance().lookup(OnhandResService.class)
.queryOnhandVOByDims(new OnhandDimVO[]{onhandDimVO});
return onhandVOs;
}
// ±ØÊäÏîУÑé
private void requiredFieldCheck(String[] requiredField, Map<String, Object> paramMap) {
for (String field : requiredField) {
@ -88,4 +109,16 @@ public class APIOnhandQueryIpml implements IAPIOnhandQuery {
}
}
private void requiredFieldCheck1(Map<String, Object> paramMap) {
Object orgValue = paramMap.get("pk_org");
if (ObjectUtil.isEmpty(orgValue)) {
ExceptionUtils.wrappBusinessException("组织字段为必输项!");
}
Object cmaterialoid = paramMap.get("cmaterialoid");
Object cwarehouseid = paramMap.get("cwarehouseid");
if (ObjectUtil.isEmpty(cmaterialoid) && ObjectUtil.isEmpty(cwarehouseid)) {
ExceptionUtils.wrappBusinessException("仓库和物料字段不能都为空!");
}
}
}

View File

@ -8,11 +8,11 @@ import nc.vo.pub.BusinessException;
/**
* 现存量查询操作接口
* @Description:
*
* @author: shijkb
* @date: 2019年11月8日 下午2:49:51
* @version NCC1909
* @Description:
* @author: shijkb
* @date: 2019年11月8日 下午2:49:51
*/
public interface IAPIOnhandQuery {
@ -35,4 +35,13 @@ public interface IAPIOnhandQuery {
* @throws Exception 当查询操作失败时抛出的异常
*/
OnhandVO[] queryOnhandVOByDims(List<Map<String, Object>> paramMap) throws Exception;
/**
* 根据查询条件查询现存量信息
*
* @param paramMap 参数映射列表每个映射包含一组查询条件
* @return OnhandVO[] 查询到的现存量信息数组
* @throws Exception 当查询操作失败时抛出的异常
*/
OnhandVO[] queryOnhandVOByCondition(Map<String, Object> paramMap) throws Exception;
}

View File

@ -12,9 +12,12 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import nc.bs.dao.BaseDAO;
import nc.bs.dao.DAOException;
import nc.bs.uapbd.util.MyHelper;
import nc.impl.pubapp.pattern.database.SqlBuilderUtil;
import nc.jdbc.framework.processor.MapProcessor;
import nc.vo.bd.material.MaterialVO;
import nc.vo.bd.stordoc.StordocVO;
import nc.vo.cmp.util.StringUtils;
import nc.vo.pub.BusinessException;
import nc.vo.pubapp.pattern.pub.SqlBuilder;
import org.json.JSONString;
@ -28,11 +31,11 @@ import nccloud.api.rest.utils.ResultMessageUtil;
/**
* 现存量信息查询资源类
* @Description:
*
* @author: shijkb
* @date: 2019年11月8日 下午2:42:47
* @version NCC1909
* @Description:
* @author: shijkb
* @date: 2019年11月8日 下午2:42:47
*/
@Path("ic/onhand")
public class OnhandResource {
@ -45,22 +48,22 @@ public class OnhandResource {
@Path("onhandQuery")
@Consumes("application/json")
@Produces("application/json")
public JSONString onhandQuery(Map<String, Object> paramMap){
public JSONString onhandQuery(Map<String, Object> paramMap) {
if (paramMap == null) {
return ResultMessageUtil.exceptionToJSON("传入参数错误,组织、单据日期条件必输", APIErrCodeEnum.BUSINESSEXCCODE.getCode());
}
try {
OnhandVO[] onhandVOs = NCLocator.getInstance().lookup(IAPIOnhandQuery.class)
.queryOnhandVOByDims(paramMap) ;
//对数据进行整合组装,返回数量
.queryOnhandVOByDims(paramMap);
// 对数据进行整合组装,返回数量
UFDouble onhandNum = UFDouble.ZERO_DBL;
if(null != onhandVOs && onhandVOs.length > 0){
if (null != onhandVOs && onhandVOs.length > 0) {
for (OnhandVO onhandVO : onhandVOs) {
onhandNum = onhandNum.add(onhandVO.getNonhandnum());
}
}
return ResultMessageUtil.toJSON(onhandNum, "现存量查询成功!");
}catch(Exception e){
} catch (Exception e) {
return ResultMessageUtil.exceptionToJSON(e);
}
}
@ -72,66 +75,118 @@ public class OnhandResource {
@Path("onhandsQuery")
@Consumes("application/json")
@Produces("application/json")
public JSONString onhandsQuery(List<Map<String, Object>> paramMapList){
public JSONString onhandsQuery(List<Map<String, Object>> paramMapList) {
if (paramMapList == null) {
return ResultMessageUtil.exceptionToJSON("传入参数错误,组织、单据日期条件必输", APIErrCodeEnum.BUSINESSEXCCODE.getCode());
}
try {
OnhandVO[] onhandVOs = NCLocator.getInstance().lookup(IAPIOnhandQuery.class)
.queryOnhandVOByDims(paramMapList) ;
//对数据进行整合组装,返回物料+仓库+数量
.queryOnhandVOByDims(paramMapList);
// 对数据进行整合组装,返回物料+仓库+数量
if(null != onhandVOs && onhandVOs.length > 0){
//提炼出onhandVOs里的物料和仓库
if (null != onhandVOs && onhandVOs.length > 0) {
// 提炼出onhandVOs里的物料和仓库
Set<String> materialPkSet = Arrays.stream(onhandVOs)
.map(onhandVO -> onhandVO.getCmaterialvid())
.collect(Collectors.toSet());
Set<String> warehousePkSet = Arrays.stream(onhandVOs)
.map(onhandVO -> onhandVO.getCwarehouseid())
.collect(Collectors.toSet());
Map<String, String> materialPKCodeMap=queryPK2CodeMap("pk_material",materialPkSet,"bd_material");
Map<String, String> warehousePKCodeMap=queryPK2CodeMap("pk_stordoc",warehousePkSet,"bd_stordoc");
if(materialPKCodeMap==null ||materialPKCodeMap.isEmpty()){
Map<String, String> materialPKCodeMap = queryPK2CodeMap("pk_material", materialPkSet, "bd_material");
Map<String, String> warehousePKCodeMap = queryPK2CodeMap("pk_stordoc", warehousePkSet, "bd_stordoc");
if (materialPKCodeMap == null || materialPKCodeMap.isEmpty()) {
throw new BusinessException("queryOnhand end : materialPKCodeMap is null");
}
if(warehousePKCodeMap==null ||warehousePKCodeMap.isEmpty()){
if (warehousePKCodeMap == null || warehousePKCodeMap.isEmpty()) {
throw new BusinessException("queryOnhand end : warehousePKCodeMap is null");
}
// 根据物料和仓库分组
Map<String, List<OnhandVO>> groupedOnhand = Arrays.stream(onhandVOs)
.collect(Collectors.groupingBy(onhandVO -> onhandVO.getPk_org()+"_"+onhandVO.getCmaterialvid() + "_" + onhandVO.getCwarehouseid()));
.collect(Collectors.groupingBy(onhandVO -> onhandVO.getPk_org() + "_" + onhandVO.getCmaterialvid() + "_" + onhandVO.getCwarehouseid()));
Set<String> keys = groupedOnhand.keySet();
JSONArray reArray = new JSONArray();
for (String dimkey : keys){
for (String dimkey : keys) {
List<OnhandVO> onhandVOList = groupedOnhand.get(dimkey);
JSONObject jsonObject = new JSONObject();
UFDouble onhandNum = UFDouble.ZERO_DBL;
jsonObject.put("materialpk", onhandVOList.get(0).getCmaterialvid());
jsonObject.put("materialCode", materialPKCodeMap.getOrDefault(onhandVOList.get(0).getCmaterialvid(), ""));
jsonObject.put("warehousepk", onhandVOList.get(0).getCwarehouseid());
jsonObject.put("warehouseCOde", warehousePKCodeMap.getOrDefault(onhandVOList.get(0).getCwarehouseid(), ""));
for(OnhandVO onhandVO:onhandVOList){
jsonObject.put("warehousepk", onhandVOList.get(0).getCwarehouseid());
jsonObject.put("warehouseCOde", warehousePKCodeMap.getOrDefault(onhandVOList.get(0).getCwarehouseid(), ""));
for (OnhandVO onhandVO : onhandVOList) {
onhandNum = onhandNum.add(onhandVO.getNonhandnum());
}
jsonObject.put("onhandnum", onhandNum);
jsonObject.put("onhandnum", onhandNum);
reArray.add(jsonObject);
}
return ResultMessageUtil.toJSON(reArray, "现存量查询成功!");
}else{
} else {
return ResultMessageUtil.toJSON(null, "现存量查询成功,无数据!");
}
}catch(Exception e){
} catch (Exception e) {
return ResultMessageUtil.exceptionToJSON(e);
}
}
private Map<String, String> queryPK2CodeMap(String pkname, Set<String> pks,String tablename) throws DAOException {
/**
* 根据条件批量查询现存量
*
* @author mzr
* @date 2025/7/16
*/
@POST
@Path("onhandQueryByCondition")
@Consumes("application/json")
@Produces("application/json")
public JSONString onhandQueryByCondition(Map<String, Object> paramMap) {
if (paramMap == null) {
return ResultMessageUtil.exceptionToJSON("传入参数错误,组织条件必输", APIErrCodeEnum.BUSINESSEXCCODE.getCode());
}
try {
OnhandVO[] onhandVOs = NCLocator.getInstance().lookup(IAPIOnhandQuery.class)
.queryOnhandVOByCondition(paramMap);
// 对数据进行整合组装
if (null != onhandVOs && onhandVOs.length > 0) {
JSONArray resArr = new JSONArray();
for (OnhandVO onhandVO : onhandVOs) {
String cmaterialvid = onhandVO.getCmaterialvid();
String cwarehouseid = onhandVO.getCwarehouseid();
Map<String, Object> goodsMap = this.getMaterialInfo(cmaterialvid);
String selectFields = StordocVO.CODE + "," + StordocVO.NAME;
Map<String, Object> stordocMap = this.transferFields(StordocVO.getDefaultTableName(), selectFields, StordocVO.PK_STORDOC, cwarehouseid);
JSONObject oneJson = new JSONObject();
oneJson.put("pk_material", cmaterialvid);
oneJson.put("materialCode", goodsMap.getOrDefault(MaterialVO.CODE, ""));// 物料编码
oneJson.put("materialName", goodsMap.getOrDefault(MaterialVO.NAME, ""));// 物料名称
oneJson.put("materialtype", goodsMap.getOrDefault(MaterialVO.MATERIALTYPE, "")); // 型号
oneJson.put("materialspec", goodsMap.getOrDefault(MaterialVO.MATERIALSPEC, "")); // // 规格
oneJson.put("unitcode", goodsMap.getOrDefault("unitcode", "")); // // 计量单位编码
oneJson.put("unitname", goodsMap.getOrDefault("unitname", "")); // // 计量单位名称
oneJson.put("warehousePk", onhandVO.getCwarehouseid());
oneJson.put("warehouseCode", stordocMap.getOrDefault(StordocVO.CODE, ""));// 仓库编码
oneJson.put("warehouseName", stordocMap.getOrDefault(StordocVO.NAME, ""));// 仓库名称
oneJson.put("vbatchcode", onhandVO.getVbatchcode());// 批次号
oneJson.put("onhandnum", onhandVO.getNonhandnum());
resArr.add(oneJson);
}
return ResultMessageUtil.toJSON(resArr, "现存量查询成功!");
} else {
return ResultMessageUtil.toJSON(null, "现存量查询成功,无数据!");
}
} catch (Exception e) {
return ResultMessageUtil.exceptionToJSON(e);
}
}
private Map<String, String> queryPK2CodeMap(String pkname, Set<String> pks, String tablename) throws DAOException {
SqlBuilderUtil SqlBuilderUtil = new SqlBuilderUtil();
SqlBuilder sql =new SqlBuilder();
sql.append(" select code,"+pkname +" from "+tablename+" where ");
sql.append(pkname,pks.toArray(new String[0]));
SqlBuilder sql = new SqlBuilder();
sql.append(" select code," + pkname + " from " + tablename + " where ");
sql.append(pkname, pks.toArray(new String[0]));
List<Map<String, Object>> remain = (List<Map<String, Object>>) new BaseDAO().executeQuery(sql.toString(), new nc.jdbc.framework.processor.MapListProcessor());
if (remain == null || remain.isEmpty()) {
return null;
@ -149,4 +204,34 @@ public class OnhandResource {
}
return pkCodeMap;
}
public Map<String, Object> transferFields(String tableName, String selectFields, String pkField, String pk) throws Exception {
if (StringUtils.isEmpty(pk)) {
return null;
}
SqlBuilder sqlBuilder = new SqlBuilder();
sqlBuilder.append(" select " + selectFields);
sqlBuilder.append(" from " + tableName);
sqlBuilder.append(" where dr = 0 ");
sqlBuilder.append(" and ");
sqlBuilder.append(pkField, pk);
Map<String, Object> result = (Map<String, Object>) new BaseDAO().executeQuery(sqlBuilder.toString(), new MapProcessor());
if (result == null || result.isEmpty()) {
result = new HashMap<>();
}
return result;
}
private Map getMaterialInfo(String pkMaterial) throws BusinessException {
String sql = " select a.code, a.name, a.materialtype, a.materialspec, a.pk_measdoc, c.code unitcode, c.name unitname " +
"from bd_material a " +
"left join bd_materialconvert b on a.pk_material = b.pk_material " +
"left join bd_measdoc c on a.pk_measdoc = c.pk_measdoc " +
"where a.pk_material = '" + pkMaterial + "' ";
Map map = (Map) new BaseDAO().executeQuery(sql, new MapProcessor());
return map;
}
}