From c960746a00f86582a03f570a32e2166db0396f1a Mon Sep 17 00:00:00 2001 From: mzr Date: Wed, 22 Oct 2025 23:44:16 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AE=B1=E5=8F=98-=E5=90=AF=E6=BA=90-=E9=94=80?= =?UTF-8?q?=E5=94=AE=E8=AE=A2=E5=8D=95=E6=8E=A8=E9=80=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../action/SaleOrderToQmsAction.java | 94 +++++++++++++------ .../so/saleorder/config/action/saleorder.xml | 2 +- .../AfterApprovingSynchronizeRuleQMS.java | 60 +++++++++--- 3 files changed, 113 insertions(+), 43 deletions(-) diff --git a/so/src/client/nccloud/web/so/saleorder/action/SaleOrderToQmsAction.java b/so/src/client/nccloud/web/so/saleorder/action/SaleOrderToQmsAction.java index 8b43bff5..77a8ec46 100644 --- a/so/src/client/nccloud/web/so/saleorder/action/SaleOrderToQmsAction.java +++ b/so/src/client/nccloud/web/so/saleorder/action/SaleOrderToQmsAction.java @@ -17,6 +17,7 @@ import nc.bs.trade.business.HYSuperDMO; import nc.bs.uapbd.util.MyHelper; import nc.bs.uapbd.util.ThirdPartyPostRequestUtil; import nc.jdbc.framework.processor.ColumnProcessor; +import nc.jdbc.framework.processor.MapListProcessor; import nc.jdbc.framework.processor.MapProcessor; import nc.vo.bd.defdoc.DefdocVO; import nc.vo.org.OrgVO; @@ -25,69 +26,79 @@ import nc.vo.pubapp.pattern.exception.ExceptionUtils; import nc.vo.so.m30.entity.SaleOrderBVO; import nc.vo.so.m30.entity.SaleOrderHVO; import nc.vo.so.m30.entity.SaleOrderVO; +import nccloud.api.rest.utils.ResultMessageUtil; import nccloud.baseapp.core.log.NCCForUAPLogger; -import nccloud.dto.so.saleorder.entity.QueryInfo; -import nccloud.framework.core.json.IJson; import nccloud.framework.service.ServiceLocator; import nccloud.framework.web.action.itf.ICommonAction; import nccloud.framework.web.container.IRequest; import nccloud.framework.web.json.JsonFactory; -import nccloud.framework.web.ui.pattern.billcard.BillCardOperator; import nccloud.pubitf.so.saleorder.service.ISaleOrderQueryWebService; -import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; public class SaleOrderToQmsAction implements ICommonAction { + private static final BaseDAO dao = new BaseDAO(); private static final String LOG_INFO_NAME = "qyMesLog"; private static final Log logger = Log.getInstance(LOG_INFO_NAME); private static final String reqUrl = "/IF_QyErpApi.ashx?action=addxsht"; private Map configParams; + public SaleOrderToQmsAction() { } public Object doAction(IRequest request) { try { - String read = request.read(); - IJson json = JsonFactory.create(); - QueryInfo info = (QueryInfo)json.fromJson(read, QueryInfo.class); - ISaleOrderQueryWebService service = (ISaleOrderQueryWebService)ServiceLocator.find(ISaleOrderQueryWebService.class); - BillCardOperator operator = new BillCardOperator(info.getPageid()); - SaleOrderVO saleorderVO = service.querySaleOrderVObyId(info.getPk()); + String json = request.read(); + logger.error("SaleOrderToQmsAction-Param:" + json); + Map paraMap = (Map) JsonFactory.create().fromJson(json, Map.class); + List pkList = (List) paraMap.get("pk"); + if (pkList == null || pkList.isEmpty()) { + throw new BusinessException("销售订单传值为空"); + } + ISaleOrderQueryWebService service = ServiceLocator.find(ISaleOrderQueryWebService.class); + SaleOrderVO saleorderVO = service.querySaleOrderVObyId(pkList.get(0)); + if (saleorderVO == null) { + throw new BusinessException("未查询到对应的销售订单"); + } configParams = MyHelper.getConfigParams("xb-config", null); if (configParams.isEmpty()) { throw new BusinessException("箱变的QMS接口缺少配置"); } - return buildSyncData(new SaleOrderVO[]{saleorderVO}); + buildSyncData(new SaleOrderVO[]{saleorderVO}); + return ResultMessageUtil.toJSON(true, "推送成功"); } catch (BusinessException e) { ExceptionUtils.wrappException(e); return null; } } + /** * 构建同步数据 - * - * @return */ - private List> buildSyncData(SaleOrderVO[] useVOs) throws BusinessException { + private void buildSyncData(SaleOrderVO[] useVOs) throws BusinessException { BaseDAO baseDAO = new BaseDAO(); - List> requestList = new ArrayList<>(); Date now = new Date(); HYPubBO hybo = new HYPubBO(); for (SaleOrderVO vo : useVOs) { + SaleOrderHVO pmoHeadVO = vo.getParentVO(); + SaleOrderBVO[] itemVOS = vo.getChildrenVO(); + String csaleorderid = pmoHeadVO.getCsaleorderid(); // 判断业务单元是否是箱变公司,不是则跳过 String pkOrg = vo.getParentVO().getPk_org(); String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg); if (checkIfOrg(orgCode, configParams)) { - continue; + throw new BusinessException("当前组织非箱变,无法推送"); + } + String billType = pmoHeadVO.getVtrantypecode(); + if (checkBillType(billType)) { + throw new BusinessException("当前单据类型非推送类型,无法推送"); } // 组装数据 JSONObject singleObj = new JSONObject(); + String vbillcode = pmoHeadVO.getVbillcode(); - SaleOrderHVO pmoHeadVO = vo.getParentVO(); - SaleOrderBVO[] itemVOS = vo.getChildrenVO(); singleObj.put("batchid", now); String vdef6 = pmoHeadVO.getVdef6(); String contractNum = getDefCode("zdy-001", vdef6); @@ -118,12 +129,6 @@ public class SaleOrderToQmsAction implements ICommonAction { JSONArray contentArray = new JSONArray(); for (SaleOrderBVO item : itemVOS) { JSONObject itemObj = new JSONObject(); -// itemObj.put("sgdh", item.getSgdh()); -// itemObj.put("xshth", item.getVdef1()); -// itemObj.put("htqdxh", item.getHtqdxh()); -// Object no = hybo.findColValue("bd_material", "code", "pk_material = '"+item.getCmaterialvid()+"' "); -// -// Object name = hybo.findColValue("bd_material", "name", "pk_material = '"+item.getCmaterialvid()+"' "); String wlsql = " select code,name,materialspec,materialtype from bd_material where pk_material = '" + item.getCmaterialvid() + "' "; Map mrlmap = (Map) baseDAO.executeQuery(wlsql, new MapProcessor()); @@ -140,12 +145,30 @@ public class SaleOrderToQmsAction implements ICommonAction { itemObj.put("jhrq", ""); } itemObj.put("bz", item.getVrownote()); - Object project_name = hybo.findColValue("bd_project", "project_name", " project_name = '" + item.getCprojectid() + "' "); - itemObj.put("xmmc", project_name); - + itemObj.put("xsddh", vbillcode);// 销售订单号 + itemObj.put("qdhh", item.getCrowno());// 行号 + itemObj.put("jqbz", 0);// 结清标志 contentArray.add(itemObj); } - + if (itemVOS.length > 0) { + SaleOrderBVO itemVO = itemVOS[0]; + // 项目名称 + Object project_name = hybo.findColValue("bd_project", "project_name", " pk_project = '" + itemVO.getCprojectid() + "' "); + singleObj.put("xmmc", project_name); + } + // 查询删除的子表 + String delSql = " select crowno,csaleorderid from so_saleorder_b where csaleorderid = '" + csaleorderid + "' and dr = 1 "; + List> delList = (List>) dao.executeQuery(delSql, new MapListProcessor()); + if (delList != null && !delList.isEmpty()) { + for (Map delMap : delList) { + JSONObject delObj = new JSONObject(); + delObj.put("xsddh", vbillcode);// 销售订单号 + delObj.put("qdhh", delMap.get("crowno"));// 行号 + delObj.put("jqbz", 1);// 结清标志 + delObj.put("dhsl", 0);// 订货数量 + contentArray.add(delObj); + } + } singleObj.put("Content", contentArray); /* @@ -177,7 +200,6 @@ public class SaleOrderToQmsAction implements ICommonAction { */ pushData(singleObj); } - return requestList; } /** @@ -219,6 +241,20 @@ public class SaleOrderToQmsAction implements ICommonAction { return true; } + private boolean checkBillType(String code) throws BusinessException { + String targetCode = configParams.get("soBillType"); + if (targetCode == null || nc.vo.am.common.util.StringUtils.isEmpty(targetCode)) { + throw new BusinessException("未配置单据类型参数"); + } + String[] types = targetCode.split(","); + for (String type : types) { + if (!type.isEmpty() && type.equals(code)) { + return true; + } + } + return false; + } + private String getDefCode(String code, String pk_defdoc) { String res = ""; diff --git a/so/src/client/yyconfig/modules/so/saleorder/config/action/saleorder.xml b/so/src/client/yyconfig/modules/so/saleorder/config/action/saleorder.xml index e1211caf..a4b3eded 100644 --- a/so/src/client/yyconfig/modules/so/saleorder/config/action/saleorder.xml +++ b/so/src/client/yyconfig/modules/so/saleorder/config/action/saleorder.xml @@ -391,7 +391,7 @@ nccloud.web.so.ref.SaleorderGridReferAction - so.refer.SaleOrderToQms + so.saleorder.SaleOrderToQms nccloud.web.so.saleorder.action.SaleOrderToQmsAction diff --git a/so/src/private/nc/bs/so/m30/rule/approve/AfterApprovingSynchronizeRuleQMS.java b/so/src/private/nc/bs/so/m30/rule/approve/AfterApprovingSynchronizeRuleQMS.java index 688dce5c..d79de0f0 100644 --- a/so/src/private/nc/bs/so/m30/rule/approve/AfterApprovingSynchronizeRuleQMS.java +++ b/so/src/private/nc/bs/so/m30/rule/approve/AfterApprovingSynchronizeRuleQMS.java @@ -13,6 +13,7 @@ import nc.bs.uapbd.util.MyHelper; import nc.bs.uapbd.util.ThirdPartyPostRequestUtil; import nc.impl.pubapp.pattern.rule.IRule; import nc.jdbc.framework.processor.ColumnProcessor; +import nc.jdbc.framework.processor.MapListProcessor; import nc.jdbc.framework.processor.MapProcessor; import nc.vo.bd.defdoc.DefdocVO; import nc.vo.org.OrgVO; @@ -24,6 +25,7 @@ import nc.vo.so.m30.entity.SaleOrderVO; import nccloud.baseapp.core.log.NCCForUAPLogger; import java.util.Date; +import java.util.List; import java.util.Map; /** @@ -34,7 +36,7 @@ public class AfterApprovingSynchronizeRuleQMS implements IRule { private static final Log logger = Log.getInstance(LOG_INFO_NAME); private static final String reqUrl = "/IF_QyErpApi.ashx?action=addxsht"; private Map configParams; - + private static final BaseDAO dao = new BaseDAO(); public AfterApprovingSynchronizeRuleQMS() { } @@ -63,17 +65,23 @@ public class AfterApprovingSynchronizeRuleQMS implements IRule { Date now = new Date(); HYPubBO hybo = new HYPubBO(); for (SaleOrderVO vo : useVOs) { + SaleOrderHVO pmoHeadVO = vo.getParentVO(); + SaleOrderBVO[] itemVOS = vo.getChildrenVO(); + String csaleorderid = pmoHeadVO.getCsaleorderid(); // 判断业务单元是否是箱变公司,不是则跳过 String pkOrg = vo.getParentVO().getPk_org(); String orgCode = MyHelper.transferField(OrgVO.getDefaultTableName(), OrgVO.CODE, OrgVO.PK_ORG, pkOrg); if (checkIfOrg(orgCode, configParams)) { continue; } + String billType = pmoHeadVO.getVtrantypecode(); + if (checkBillType(billType)){ + continue; + } // 组装数据 JSONObject singleObj = new JSONObject(); + String vbillcode = pmoHeadVO.getVbillcode(); - SaleOrderHVO pmoHeadVO = vo.getParentVO(); - SaleOrderBVO[] itemVOS = vo.getChildrenVO(); singleObj.put("batchid", now); String vdef6 = pmoHeadVO.getVdef6(); String contractNum = getDefCode("zdy-001", vdef6); @@ -104,12 +112,6 @@ public class AfterApprovingSynchronizeRuleQMS implements IRule { JSONArray contentArray = new JSONArray(); for (SaleOrderBVO item : itemVOS) { JSONObject itemObj = new JSONObject(); -// itemObj.put("sgdh", item.getSgdh()); -// itemObj.put("xshth", item.getVdef1()); -// itemObj.put("htqdxh", item.getHtqdxh()); -// Object no = hybo.findColValue("bd_material", "code", "pk_material = '"+item.getCmaterialvid()+"' "); -// -// Object name = hybo.findColValue("bd_material", "name", "pk_material = '"+item.getCmaterialvid()+"' "); String wlsql = " select code,name,materialspec,materialtype from bd_material where pk_material = '" + item.getCmaterialvid() + "' "; Map mrlmap = (Map) baseDAO.executeQuery(wlsql, new MapProcessor()); @@ -126,12 +128,30 @@ public class AfterApprovingSynchronizeRuleQMS implements IRule { itemObj.put("jhrq", ""); } itemObj.put("bz", item.getVrownote()); - Object project_name = hybo.findColValue("bd_project", "project_name", " project_name = '" + item.getCprojectid() + "' "); - itemObj.put("xmmc", project_name); - + itemObj.put("xsddh", vbillcode);// 销售订单号 + itemObj.put("qdhh", item.getCrowno());// 行号 + itemObj.put("jqbz", 0);// 结清标志 contentArray.add(itemObj); } - + if (itemVOS.length > 0) { + SaleOrderBVO itemVO = itemVOS[0]; + // 项目名称 + Object project_name = hybo.findColValue("bd_project", "project_name", " pk_project = '" + itemVO.getCprojectid() + "' "); + singleObj.put("xmmc", project_name); + } + // 查询删除的子表 + String delSql = " select crowno,csaleorderid from so_saleorder_b where csaleorderid = '" + csaleorderid + "' and dr = 1 "; + List> delList = (List>) dao.executeQuery(delSql, new MapListProcessor()); + if (delList != null && !delList.isEmpty()) { + for (Map delMap : delList) { + JSONObject delObj = new JSONObject(); + delObj.put("xsddh", vbillcode);// 销售订单号 + delObj.put("qdhh", delMap.get("crowno"));// 行号 + delObj.put("jqbz", 1);// 结清标志 + delObj.put("dhsl", 0);// 订货数量 + contentArray.add(delObj); + } + } singleObj.put("Content", contentArray); /* @@ -204,6 +224,20 @@ public class AfterApprovingSynchronizeRuleQMS implements IRule { return true; } + private boolean checkBillType(String code) throws BusinessException { + String targetCode = configParams.get("soBillType"); + if (targetCode == null || nc.vo.am.common.util.StringUtils.isEmpty(targetCode)) { + throw new BusinessException("未配置单据类型参数"); + } + String[] types = targetCode.split(","); + for (String type : types) { + if (!type.isEmpty() && type.equals(code)) { + return true; + } + } + return false; + } + private String getDefCode(String code, String pk_defdoc) { String res = "";