From 756afff77eac927b31014db53131fc031672fb72 Mon Sep 17 00:00:00 2001 From: maolei Date: Mon, 12 May 2025 09:46:07 +0800 Subject: [PATCH] =?UTF-8?q?feat(api):=20=E4=BF=AE=E6=94=B9=E7=89=A9?= =?UTF-8?q?=E6=96=99=E5=88=86=E7=B1=BB=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=B9=B6=E4=BC=98=E5=8C=96=E4=BB=93=E5=BA=93=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=20-=20=E4=BF=AE=E6=94=B9=E7=89=A9=E6=96=99?= =?UTF-8?q?=E5=88=86=E7=B1=BB=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3,?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E4=BC=A0=E5=85=A5code=E5=92=8Cname=E6=95=B0?= =?UTF-8?q?=E7=BB=84=20-=20=E4=BC=98=E5=8C=96=E5=AD=98=E5=82=A8=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E6=9F=A5=E8=AF=A2=E5=8A=9F=E8=83=BD=20StordocManageRe?= =?UTF-8?q?source=20-=20=E6=9B=B4=E6=96=B0=20.gitignore=20=E6=96=87?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E5=BF=BD=E7=95=A5=20.project=20=E6=96=87?= =?UTF-8?q?=E4=BB=B6=20-=20=E4=BF=AE=E5=A4=8D=E7=89=A9=E6=96=99=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E4=B8=AD=E7=A9=BA=E6=9D=A1=E4=BB=B6=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E7=9A=84=20SQL=20=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 +- .../MaterialClassQueryResources.java | 68 +++++++++++++++++ .../material/MaterialManageMaterial.java | 26 ++++--- .../storedoc/StordocManageResource.java | 75 ++++++++++++++++--- 4 files changed, 151 insertions(+), 23 deletions(-) create mode 100644 uapbd/src/public/nccloud/api/uapbd/material/materialclass/MaterialClassQueryResources.java diff --git a/.gitignore b/.gitignore index c11d6f9..ab947f0 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ /out/ /.idea/ /taikai2312.iml -.project .classpath -.settings \ No newline at end of file +.settings +# 忽略任意目录下的 .project +**/.project \ No newline at end of file diff --git a/uapbd/src/public/nccloud/api/uapbd/material/materialclass/MaterialClassQueryResources.java b/uapbd/src/public/nccloud/api/uapbd/material/materialclass/MaterialClassQueryResources.java new file mode 100644 index 0000000..a6f8f49 --- /dev/null +++ b/uapbd/src/public/nccloud/api/uapbd/material/materialclass/MaterialClassQueryResources.java @@ -0,0 +1,68 @@ +package nccloud.api.uapbd.material.materialclass; + + +import nc.bs.framework.common.NCLocator; +import nc.itf.bd.material.marbasclass.IMaterialBasClassQueryService; +import nc.vo.bd.material.marbasclass.MarBasClassVO; +import nccloud.api.rest.utils.ApiResourceParamUtils; +import nccloud.api.rest.utils.IJsonForAPI; +import nccloud.api.rest.utils.JsonFactoryForAPI; +import nccloud.api.rest.utils.ResultMessageUtil; +import nccloud.api.rest.utils.vo.ApiDataVO; +import nccloud.api.rest.utils.vo.ApiQueryParam; +import nccloud.api.rest.utils.vo.PageInfo; +import nccloud.ws.rest.resource.AbstractNCCRestResource; +import org.json.JSONString; + +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import java.util.List; +import java.util.Map; + +@Path("/uapbd/materialclass") +public class MaterialClassQueryResources extends AbstractNCCRestResource { + + public String getModule() { + return "uapbd"; + } + + @POST + @Path("query") + @Consumes({"application/json"}) + @Produces({"application/json"}) + public JSONString query(JSONString json) { + IJsonForAPI iJsonForAPI = JsonFactoryForAPI.create(); + ApiQueryParam apiQueryParam = (ApiQueryParam) iJsonForAPI.fromJson(json.toJSONString(), ApiQueryParam.class); + String sender = apiQueryParam.getUfinterface().getSender(); + ApiDataVO apiDataVO = apiQueryParam.getUfinterface().getData(); + PageInfo pageInfo = apiQueryParam.getUfinterface().getPageInfo(); + Map param = apiDataVO.getParamdata(); + if (param.containsKey("name") && param.get("name") != null) { + List names = (List) param.get("name"); + if (!names.isEmpty()) { + param.put("name", names.toArray(new String[0])); + } else { + param.remove("name"); + } + } + if (param.containsKey("code") && param.get("code") != null) { + List codes = (List) param.get("code"); + if (!codes.isEmpty()) { + param.put("code", codes.toArray(new String[0])); + } else { + param.remove("code"); + } + } + + try { + String querycondition = (new ApiResourceParamUtils()).parseParmToSqlByCode(new MarBasClassVO(), param); + MarBasClassVO[] vos = NCLocator.getInstance().lookup(IMaterialBasClassQueryService.class).queryMaterialClassByCondition(null, querycondition); + return vos != null && vos.length > 0 ? ResultMessageUtil.toJSON(vos) : null; + } catch (Exception ex) { + return ResultMessageUtil.exceptionToJSON(ex); + } + } + +} diff --git a/uapbd/src/public/nccloud/api/uapbd/materialmanage/material/MaterialManageMaterial.java b/uapbd/src/public/nccloud/api/uapbd/materialmanage/material/MaterialManageMaterial.java index 2ed2d0d..dbbdba9 100644 --- a/uapbd/src/public/nccloud/api/uapbd/materialmanage/material/MaterialManageMaterial.java +++ b/uapbd/src/public/nccloud/api/uapbd/materialmanage/material/MaterialManageMaterial.java @@ -1,28 +1,22 @@ package nccloud.api.uapbd.materialmanage.material; + import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import javax.ws.rs.Consumes; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; import nc.bs.dao.BaseDAO; -import nc.ws.opm.pub.utils.result.APIErrCodeEnum; import nc.bs.dao.DAOException; import nc.bs.framework.common.NCLocator; import nc.bs.framework.core.util.ObjectCreator; import nc.impl.pubapp.pattern.database.SqlBuilderUtil; import nc.itf.bd.material.assign.IMaterialAssignService; import nc.jdbc.framework.processor.ColumnListProcessor; +import nc.jdbc.framework.processor.MapListProcessor; import nc.vo.bd.material.MaterialVO; import nc.vo.bd.material.prod.MaterialProdVO; import nc.vo.bd.material.sale.MaterialSaleVO; import nc.vo.bd.material.stock.MaterialStockVO; +import nc.ws.opm.pub.utils.result.APIErrCodeEnum; import nccloud.api.baseapp.exchange.convert.IOpenApiJsonConvertToExChangeXmlService; import nccloud.api.baseapp.exchange.convert.OpenApiConvertDataObject; import nccloud.api.baseapp.exchange.convert.OpenApiConvertDataResult; @@ -32,10 +26,18 @@ import nccloud.api.rest.utils.OpenApiPageInfo; import nccloud.api.rest.utils.ResultMessageUtil; import nccloud.api.uapbd.common.utils.OpenApiPagenationUtils; import nccloud.commons.lang.StringUtils; -import nc.jdbc.framework.processor.MapListProcessor; import nccloud.ws.rest.resource.AbstractNCCRestResource; import org.json.JSONString; +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** * 物料接口适配2312 */ @@ -171,6 +173,10 @@ public class MaterialManageMaterial extends AbstractNCCRestResource { ApiResourceParamUtils.addTranslatorMap("pk_org", IParamTranslator); String condition = ApiResourceParamUtils.parseParmToSqlByCode(new MaterialVO(), param); + if (condition.isBlank()) { + condition = "1=1";// 没有条件就拼接个1=1,防止sql报错 + } + String sql = "select pk_material from bd_material where " + condition; List allPks = (List) (new BaseDAO()).executeQuery(sql, new ColumnListProcessor()); OpenApiPageInfo openApiPageInfo = new OpenApiPageInfo(); diff --git a/uapbd/src/public/nccloud/api/uapbd/stordocmanage/storedoc/StordocManageResource.java b/uapbd/src/public/nccloud/api/uapbd/stordocmanage/storedoc/StordocManageResource.java index bf366db..a0715ed 100644 --- a/uapbd/src/public/nccloud/api/uapbd/stordocmanage/storedoc/StordocManageResource.java +++ b/uapbd/src/public/nccloud/api/uapbd/stordocmanage/storedoc/StordocManageResource.java @@ -5,9 +5,8 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import nc.bs.dao.BaseDAO; -import nc.impl.pubapp.pattern.database.SqlBuilderUtil; import nc.jdbc.framework.processor.ColumnListProcessor; -import nc.vo.bd.stordoc.StordocVO; +import nc.jdbc.framework.processor.MapListProcessor; import nccloud.api.rest.utils.OpenApiPageInfo; import nccloud.api.rest.utils.ResultMessageUtil; import nccloud.api.uapbd.common.utils.OpenApiPagenationUtils; @@ -219,7 +218,6 @@ public class StordocManageResource extends AbstractNCCRestResource { } } - // 使用自定义方法替代工具类 String condition = buildCondition(paramMap); if (StringUtils.isNotBlank(condition)) { condition = "dr = 0 and " + condition; @@ -233,16 +231,71 @@ public class StordocManageResource extends AbstractNCCRestResource { String[] currPks = OpenApiPagenationUtils.getCurrentPagePksAndPageInfo(allPks, pageInfoJson, openApiPageInfo); if (currPks == null || currPks.length == 0) { - return ResultMessageUtil.toJSONByPage(new StordocVO[0], openApiPageInfo, false); + return ResultMessageUtil.toJSONByPage(new JSONObject[0], openApiPageInfo, false); + } + StringJoiner stringJoiner = new StringJoiner(","); + for (String pk : currPks) { + stringJoiner.add("'" + pk + "'"); + } + String pks = stringJoiner.toString(); + + String mainSql = "SELECT sd.*, " + + "so.code AS org_code, so.name AS org_name, " + + "og.code AS group_code, og.name AS group_name, " + + "ad.code AS address_code, ad.name AS address_name, " + + "ba.code AS storaddr_code " + + "FROM bd_stordoc sd " + + "LEFT JOIN org_stockorg so ON sd.pk_org = so.pk_stockorg " + + "LEFT JOIN org_group og ON sd.pk_group = og.pk_group " + + "LEFT JOIN bd_addressdoc ad ON sd.pk_address = ad.pk_addressdoc " + + "LEFT JOIN bd_address ba ON sd.storaddr = ba.pk_address " + + "WHERE sd.pk_stordoc IN (" + pks + ")"; + + @SuppressWarnings("unchecked") + List> rows = (List>) BASE_DAO.executeQuery(mainSql, new MapListProcessor()); + + List resultList = new ArrayList<>(); + for (Map row : rows) { + JSONObject stordocJson = new JSONObject(true); // 使用有序Map + + for (Map.Entry entry : row.entrySet()) { + String key = entry.getKey().toLowerCase(); + if ("org_code".equals(key) || "org_name".equals(key) || + "group_code".equals(key) || "group_name".equals(key) || + "address_code".equals(key) || "address_name".equals(key) || + "storaddr_code".equals(key)) { + continue; + } + stordocJson.put(entry.getKey(), entry.getValue()); + } + + JSONObject pkOrgDetailsJson = new JSONObject(true); + pkOrgDetailsJson.put("pk_org", row.get("pk_org")); + pkOrgDetailsJson.put("code", row.get("org_code")); + pkOrgDetailsJson.put("name", row.get("org_name")); + stordocJson.put("pk_org", pkOrgDetailsJson); + + JSONObject pkGroupDetailsJson = new JSONObject(true); + pkGroupDetailsJson.put("pk_group", row.get("pk_group")); + pkGroupDetailsJson.put("code", row.get("group_code")); + pkGroupDetailsJson.put("name", row.get("group_name")); + stordocJson.put("pk_group", pkGroupDetailsJson); + + JSONObject pkAddressDetailsJson = new JSONObject(true); + pkAddressDetailsJson.put("pk_address", row.get("pk_address")); + pkAddressDetailsJson.put("code", row.get("address_code")); + pkAddressDetailsJson.put("name", row.get("address_name")); + stordocJson.put("pk_address", pkAddressDetailsJson); + + JSONObject storaddrDetailsJson = new JSONObject(true); + storaddrDetailsJson.put("pk_address", row.get("storaddr")); + storaddrDetailsJson.put("code", row.get("storaddr_code")); + stordocJson.put("storaddr", storaddrDetailsJson); + + resultList.add(stordocJson); } - SqlBuilderUtil sqlBuilderUtil = new SqlBuilderUtil(); - String wherePartForRetrieve = sqlBuilderUtil.buildSQL("pk_stordoc", currPks, null); - - StordocVO[] vos = (StordocVO[]) BASE_DAO.retrieveByClause(StordocVO.class, wherePartForRetrieve) - .toArray(new StordocVO[0]); - - return ResultMessageUtil.toJSONByPage(vos, openApiPageInfo, false); + return ResultMessageUtil.toJSONByPage(resultList.toArray(new JSONObject[0]), openApiPageInfo, false); } catch (Exception e) { return ResultMessageUtil.exceptionToJSON(e);