From dd2003a1e2530ba3a2fcffd8373c5ba7dbada517 Mon Sep 17 00:00:00 2001 From: maolei Date: Tue, 3 Jun 2025 10:31:40 +0800 Subject: [PATCH] =?UTF-8?q?ic=E6=9D=90=E6=96=99=E5=87=BA=E5=BA=93:=20?= =?UTF-8?q?=E9=87=91=E6=80=9D=E7=BB=B4=E6=9D=90=E6=96=99=E5=87=BA=E5=BA=93?= =?UTF-8?q?=E6=97=B6=E8=A1=A5=E5=85=85=E6=9D=A5=E6=BA=90=E5=8D=95=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增检查特殊条件的方法,判断是否为C034组织 - 新增处理备料计划特殊逻辑的方法,补充来源相关数据 - 添加备料计划数据查询和处理相关方法 --- .../ic/m4d/APIMaterialOutMaintainImpl.java | 157 +++++++++++++++++- 1 file changed, 148 insertions(+), 9 deletions(-) diff --git a/ic/src/private/nccloud/api/impl/ic/m4d/APIMaterialOutMaintainImpl.java b/ic/src/private/nccloud/api/impl/ic/m4d/APIMaterialOutMaintainImpl.java index 000d3f4..d489b34 100644 --- a/ic/src/private/nccloud/api/impl/ic/m4d/APIMaterialOutMaintainImpl.java +++ b/ic/src/private/nccloud/api/impl/ic/m4d/APIMaterialOutMaintainImpl.java @@ -1,20 +1,15 @@ package nccloud.api.impl.ic.m4d; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.apache.commons.lang3.ArrayUtils; -import org.apache.commons.lang3.StringUtils; +import nc.bs.dao.BaseDAO; import nc.bs.framework.common.NCLocator; import nc.bs.scmpub.query.SCMBillQuery; import nc.itf.scmpub.reference.uap.pf.PfServiceScmUtil; +import nc.jdbc.framework.processor.ColumnProcessor; +import nc.jdbc.framework.processor.MapListProcessor; import nc.pubimpl.ic.api.maintain.BillMaintainTool; import nc.pubitf.ic.m4d.api.IMaterialOutMaintainAPI; +import nc.vo.bd.material.MaterialVO; import nc.vo.ic.general.define.ICBillFlag; import nc.vo.ic.general.define.ICBillHeadVO; import nc.vo.ic.general.util.ICLocationUtil; @@ -25,6 +20,7 @@ import nc.vo.ic.m4d.entity.MaterialOutVO; import nc.vo.ic.pub.define.ICPubMetaNameConst; import nc.vo.pub.BusinessException; import nc.vo.pub.VOStatus; +import nc.vo.pubapp.pattern.pub.SqlBuilder; import nc.vo.scmpub.check.billvalidate.BillVOsCheckRule; import nc.vo.scmpub.res.billtype.ICBillType; import nccloud.api.ic.m4d.IAPIMaterialOutMaintain; @@ -35,6 +31,10 @@ import nccloud.api.impl.ic.pub.check.CheckProhibitUpdateFields; import nccloud.openapi.ic.util.ICAPILocationVOUtils; import nccloud.openapi.scmpub.pub.TransferCodeToPKTool; import nccloud.openapi.scmpub.pub.TransferMapToVOTool; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.StringUtils; + +import java.util.*; /** * @@ -47,6 +47,8 @@ import nccloud.openapi.scmpub.pub.TransferMapToVOTool; public class APIMaterialOutMaintainImpl implements IAPIMaterialOutMaintain{ + private static final BaseDAO DAO = new BaseDAO(); + @Override public MaterialOutVO[] save(List> paramList) throws BusinessException { // MapListתۺVOList @@ -64,6 +66,12 @@ public class APIMaterialOutMaintainImpl implements IAPIMaterialOutMaintain{ aggVOList = TransferCodeToPKTool.transferAggVO(aggVOList); // λ ICAPILocationVOUtils.translate(vos); + + boolean isSpecialCase = checkSpecialCondition(paramList); + // жɹ˼άIJϳ⣬Դݲ + if (isSpecialCase) { + processPickingPlanSpecialLogic(vos); + } // new MaterialOutSaveFillValue().setDefaultValue(vos); @@ -269,4 +277,135 @@ public class APIMaterialOutMaintainImpl implements IAPIMaterialOutMaintain{ return materialOut.insertBills(vos); } + /** + * ǷC034֯ + */ + private boolean checkSpecialCondition(List> materialOutVOS) throws BusinessException { + + List aggVOList = + TransferMapToVOTool.transferMapToAggVO(materialOutVOS, MaterialOutVO.class); + MaterialOutVO[] vos = + aggVOList.toArray(new MaterialOutVO[aggVOList.size()]); + + if(Objects.isNull(materialOutVOS)){ + return false; + } + for (MaterialOutVO materialOutVO : vos) { + MaterialOutHeadVO head = materialOutVO.getHead(); + // ȡ֯ + String pkOrg = head.getPk_org(); + // code +// String orgCode = transferCodeByPk(StockOrgVO.getDefaultTableName(), StockOrgVO.CODE, StockOrgVO.PK_ORG, pkOrg); + // δģԭʼתģֱӱȽ + if("C034".equals(pkOrg)){ + return true; + } + } + return false; + } + + /** + * ϼƻ߼ + */ + private void processPickingPlanSpecialLogic(MaterialOutVO[] vos) throws BusinessException { + + for (MaterialOutVO vo : vos) { + MaterialOutBodyVO[] bodyVOs = vo.getBodys(); + if (bodyVOs != null) { + for (MaterialOutBodyVO bodyVO : bodyVOs) { + // ȡϱ + String materialCode = transferCodeByPk(MaterialVO.getDefaultTableName(), MaterialVO.CODE, MaterialVO.PK_MATERIAL, bodyVO.getCmaterialvid()); + if (StringUtils.isEmpty(materialCode)|| StringUtils.isEmpty(bodyVO.getCsourcebillbid())) { + continue; + } + // mmpickmviewͼѯϼƻ + String sql = buildPickingPlanQuery(materialCode,bodyVO.getCsourcebillbid()); + + try { + List> pickingPlanData = (List>) DAO.executeQuery(sql, new MapListProcessor()); + + // ΨһҲ⣬׳ + if(pickingPlanData==null || pickingPlanData.isEmpty()){ + throw new BusinessException("ϸϱȥѯbipмͼmmpickmviewҲݣ޷вϳֵ,SQL:"+sql); + } + + if(pickingPlanData.size()!=1){ + throw new BusinessException("ϸϱȥѯbipмͼmmpickmviewΨһ޷вϳֵ,SQL:"+sql); + } + + if (pickingPlanData != null && !pickingPlanData.isEmpty()) { + // ѯıϼƻ + processPickingPlanData(bodyVO, pickingPlanData); + } + + } catch (Exception e) { + throw new BusinessException("ѯϼƻʧ: " + e.getMessage(), e); + } + } + } + } + } + + /** + * ϼƻѯSQLmmpickmviewͼ + */ + private String buildPickingPlanQuery(String materialCode,String cpmohid) { + StringBuilder sql = new StringBuilder(); + sql.append("SELECT "); + sql.append(" CODE,"); // ϱ + sql.append(" PK_BILLTYPECODE,"); // ϼƻͱ + sql.append(" CPICKMID,"); // ϼƻ + sql.append(" CMOID,"); // + sql.append(" CPMOHID,"); // + sql.append(" VROWNO,"); // ϼƻϸк + sql.append(" CPICKM_BID "); // ϼƻϸ + sql.append("FROM MMPICKMVIEW "); + sql.append("WHERE CODE = '").append(materialCode).append("' AND ") + .append("cmoid ='").append(cpmohid).append("'"); + return sql.toString(); + } + + /** + * ϼƻ + */ + private void processPickingPlanData(MaterialOutBodyVO bodyVO, List> pickingPlanData) { + if (pickingPlanData == null || pickingPlanData.isEmpty()) { + return; + } + + Map firstRow = pickingPlanData.get(0); + + // ñϼƻֶ + if (firstRow.get("cpickmid") != null) { + bodyVO.setCsourcebillhid(firstRow.get("cpickmid").toString()); // ԴID + } + + if (firstRow.get("cpickm_bid") != null) { + bodyVO.setCsourcebillbid(firstRow.get("cpickm_bid").toString()); // ԴID + } + + if (firstRow.get("pk_billtypecode") != null) { + bodyVO.setCsourcetranstype(firstRow.get("pk_billtypecode").toString()); // ͱ + } + bodyVO.setCsourcetype("55A3"); + } + + /** + * ѯ + */ + private String transferCodeByPk(String tableName, String selectField, String pkField, String pk) throws BusinessException { + if (nc.vo.cmp.util.StringUtils.isEmpty(pk)) { + return null; + } + SqlBuilder sqlBuilder = new SqlBuilder(); + sqlBuilder.append(" select " + selectField); + sqlBuilder.append(" from " + tableName); + sqlBuilder.append(" where "); + sqlBuilder.append(pkField, pk); + Object o = DAO.executeQuery(sqlBuilder.toString(), new ColumnProcessor()); + if (o == null) { + throw new BusinessException("δѯϢsql" + sqlBuilder + ""); + } + return o.toString(); + } }