From c112da9a0f7f326752c2ada1c32a8fade7ca42f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=AD=A3=40=E7=94=A8=E5=8F=8B?= Date: Fri, 6 Jun 2025 11:04:01 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=A7=94=E5=A4=96=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E5=8F=98=E6=9B=B4=E4=BB=A3=E7=A0=81=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sc/m61/referred/rule/pm/AfterApproceRuleSyncRZWMSProcess.java | 0 .../nc/impl/sc/m61/action/approve/SCOrderApproveAction.java | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename {arap => sc}/src/private/nc/bs/sc/m61/referred/rule/pm/AfterApproceRuleSyncRZWMSProcess.java (100%) rename {arap => sc}/src/private/nc/impl/sc/m61/action/approve/SCOrderApproveAction.java (100%) diff --git a/arap/src/private/nc/bs/sc/m61/referred/rule/pm/AfterApproceRuleSyncRZWMSProcess.java b/sc/src/private/nc/bs/sc/m61/referred/rule/pm/AfterApproceRuleSyncRZWMSProcess.java similarity index 100% rename from arap/src/private/nc/bs/sc/m61/referred/rule/pm/AfterApproceRuleSyncRZWMSProcess.java rename to sc/src/private/nc/bs/sc/m61/referred/rule/pm/AfterApproceRuleSyncRZWMSProcess.java diff --git a/arap/src/private/nc/impl/sc/m61/action/approve/SCOrderApproveAction.java b/sc/src/private/nc/impl/sc/m61/action/approve/SCOrderApproveAction.java similarity index 100% rename from arap/src/private/nc/impl/sc/m61/action/approve/SCOrderApproveAction.java rename to sc/src/private/nc/impl/sc/m61/action/approve/SCOrderApproveAction.java From 941dec1543344041466c5d995002bb5ab8ab7ceb Mon Sep 17 00:00:00 2001 From: maolei Date: Fri, 6 Jun 2025 11:13:04 +0800 Subject: [PATCH 2/5] =?UTF-8?q?mmpac=E7=94=9F=E4=BA=A7=E6=8A=A5=E5=91=8A:?= =?UTF-8?q?=20=E5=A2=9E=E5=8A=A0=20MES=20=E6=95=B0=E6=8D=AE=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 preProcessMesData 方法预处理 MES 数据 - 实现 processMESFields 方法自动赋值 MES 相关字段 - 添加 processWarehouseConversion 方法处理仓库转换逻辑 -优化 convertWarehouseCodeToPk 方法查询仓库主键 --- .../nccloud/openapi/mmpac/wr/WrResource.java | 186 ++++++++++++++++-- 1 file changed, 171 insertions(+), 15 deletions(-) diff --git a/mmpac/src/public/nccloud/openapi/mmpac/wr/WrResource.java b/mmpac/src/public/nccloud/openapi/mmpac/wr/WrResource.java index e291e10..7e640e9 100644 --- a/mmpac/src/public/nccloud/openapi/mmpac/wr/WrResource.java +++ b/mmpac/src/public/nccloud/openapi/mmpac/wr/WrResource.java @@ -1,18 +1,18 @@ package nccloud.openapi.mmpac.wr; + import nc.bs.dao.BaseDAO; +import nc.bs.framework.common.InvocationInfoProxy; import nc.bs.framework.common.NCLocator; import nc.bs.logging.Log; import nc.bs.uif2.validation.ValidationFailure; +import nc.jdbc.framework.SQLParameter; +import nc.jdbc.framework.processor.ColumnProcessor; import nc.util.mmf.framework.base.MMArrayUtil; import nc.util.mmf.framework.base.MMCollectionUtil; import nc.util.mmf.framework.base.MMNumberUtil; import nc.util.mmf.framework.base.MMValueCheck; -import nc.vo.mmpac.wr.entity.AggWrVO; -import nc.vo.mmpac.wr.entity.WrItemVO; -import nc.vo.mmpac.wr.entity.WrQualityVO; -import nc.vo.mmpac.wr.entity.WrSerialNoVO; -import nc.vo.mmpac.wr.entity.WrVO; +import nc.vo.mmpac.wr.entity.*; import nc.vo.mmpac.wr.enumeration.WrBillStatusEnum; import nc.vo.pub.BusinessException; import nc.vo.pub.VOStatus; @@ -31,14 +31,7 @@ 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.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; @Path("mmpac/wr") public class WrResource extends AbstractNCCRestResource { @@ -312,6 +305,9 @@ public class WrResource extends AbstractNCCRestResource { Map bodyInfo = (Map) paramMap.get(BODYTABLE); itemInfos.add(bodyInfo); } + + // ԤݣֿתMESֶ + preProcessMesData(headInfo, itemInfos, baseDAO); AggWrVO vo = new AggWrVO(); WrVO head = new WrVO(); head.setPk_group(AppContext.getInstance().getPkGroup()); @@ -577,9 +573,169 @@ public class WrResource extends AbstractNCCRestResource { } server.delete(deleteVos.toArray(new AggWrVO[0])); return ResultMessageUtil.toJSON(new String[0], "ɾɹ"); - } catch (Exception e) { - return ResultMessageUtil.exceptionToJSON(e); + } catch (Exception e) { return ResultMessageUtil.exceptionToJSON(e); } } + /** + * ԤݣֿתMESֶδ + * @param headInfo ͷϢ + * @param itemInfos Ϣб + * @param baseDAO ݿ + * @throws BusinessException ʧʱ׳쳣 + */ + private void preProcessMesData(Map headInfo, List> itemInfos, BaseDAO baseDAO) + throws BusinessException { + // Ϣеת + for (Map itemMap : itemInfos) { + // MESֶԶֵ + processMESFields(itemMap, baseDAO); + + // ϢеIJֿת + if (itemMap.containsKey(QUALITYTABLE)) { + List> qualityInfos = (List>) itemMap.get(QUALITYTABLE); + processWarehouseConversion(qualityInfos, baseDAO); + } + } + } + + /** + * MESֶԶֵ + * ûcodeMESôcbmoidֺvbsrcidһ£cbmobidֺvbsrcrowidһ + * vbmobillcodeݺţͨcbmoidѯvbillcode + * @param itemMap Ϣ + * @param baseDAO ݿ + * @throws BusinessException ѯʧʱ׳쳣 + */ + + private void processMESFields(Map itemMap, BaseDAO baseDAO) throws BusinessException { + // ǷҪMESֶ + // ͨġûϢʶж + // ʱͨǷضֶжMESû + boolean isMESUser = isMESUser(itemMap); + + if (!isMESUser) { + return; + } + + try { + // cbmoidֺvbsrcidһ + if (itemMap.containsKey("vbsrcid") && MMValueCheck.isNotEmpty(itemMap.get("vbsrcid"))) { + itemMap.put("cbmoid", itemMap.get("vbsrcid")); + } + + // cbmobidֺvbsrcrowidһ + if (itemMap.containsKey("vbsrcrowid") && MMValueCheck.isNotEmpty(itemMap.get("vbsrcrowid"))) { + itemMap.put("cbmobid", itemMap.get("vbsrcrowid")); + } + // ͨcbmoidѯvbillcode + if (itemMap.containsKey("cbmoid") && MMValueCheck.isNotEmpty(itemMap.get("cbmoid"))) { + String cbmoid = String.valueOf(itemMap.get("cbmoid")); + String sql = "SELECT vbillcode FROM mm_pmo WHERE cpmohid = ? AND dr = 0"; + SQLParameter param = new SQLParameter(); + param.addParam(cbmoid); + String vbillcode = (String) baseDAO.executeQuery(sql, param, new ColumnProcessor()); + + if (MMValueCheck.isEmpty(vbillcode)) { + throw new BusinessException("ͨ" + cbmoid + "ѯӦĵݺţ"); + } + + itemMap.put("vbmobillcode", vbillcode); + } + + } catch (Exception e) { + if (e instanceof BusinessException) { + throw e; + } + throw new BusinessException("MESֶʧܣ" + e.getMessage()); + } + } + /** + * жǷΪMESû + * ͨȡ߳еûжǷΪMESû + * @param itemMap ϢԱַǩһԣ + * @return ǷΪMESû + */ + + private boolean isMESUser(Map itemMap) { + try { + // ȡǰ߳еû + String userCode = InvocationInfoProxy.getInstance().getUserCode(); + + // жûǷΪMES + return "MES".equals(userCode); + + } catch (Exception e) { + // ȡûʧܣ¼־false + Log.getInstance("mm-mes").error("ȡûʧܣ" + e.getMessage(), e); + return false; + } + } + + /** + * ֿתԭеIJֿת߼װɶ + * @param qualityInfos Ϣб + * @param baseDAO ݿ + * @throws BusinessException תʧʱ׳쳣 + */ + private void processWarehouseConversion(List> qualityInfos, BaseDAO baseDAO) + throws BusinessException { + if (qualityInfos == null || qualityInfos.isEmpty()) { + return; + } + + for (Map qualityInfo : qualityInfos) { + if (qualityInfo.containsKey("cgwarehouseid") && MMValueCheck.isNotEmpty(qualityInfo.get("cgwarehouseid"))) { + String warehouseValue = String.valueOf(qualityInfo.get("cgwarehouseid")); + String warehousePk = convertWarehouseCodeToPk(warehouseValue, baseDAO); + qualityInfo.put("cgwarehouseid", warehousePk); + } + } + } + + /** + * תֿΪ + * ȼ贫ֵѯټDZвѯ + * @param warehouseValue ֵֿ룩 + * @param baseDAO ݿ + * @return ֿ + * @throws BusinessException ֿⲻ + */ + private String convertWarehouseCodeToPk(String warehouseValue, BaseDAO baseDAO) throws BusinessException { + if (MMValueCheck.isEmpty(warehouseValue)) { + return warehouseValue; + } + try { + // ȼֱӲѯ + String sql = "SELECT pk_stordoc FROM bd_stordoc WHERE pk_stordoc = ? AND dr = 0"; + SQLParameter param = new SQLParameter(); + param.addParam(warehouseValue); + String result = (String) baseDAO.executeQuery(sql, param, new ColumnProcessor()); + + if (MMValueCheck.isNotEmpty(result)) { + // ѯɹֱӷ + return warehouseValue; + } + + // ѯʧܣDZѯ + sql = "SELECT pk_stordoc FROM bd_stordoc WHERE code = ? AND dr = 0"; + param = new SQLParameter(); + param.addParam(warehouseValue); + result = (String) baseDAO.executeQuery(sql, param, new ColumnProcessor()); + + if (MMValueCheck.isNotEmpty(result)) { + // ѯɹ + return result; + } + + // ѯ׳쳣 + throw new BusinessException("ֿ⡾" + warehouseValue + "ڣֿ"); + + } catch (Exception e) { + if (e instanceof BusinessException) { + throw e; + } + throw new BusinessException("ѯֿϢʧܣ" + e.getMessage()); + } + } } From f5a8bd81c0e508979ab76570933dc59a8acf1ccf Mon Sep 17 00:00:00 2001 From: maolei Date: Fri, 6 Jun 2025 11:16:23 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E6=B5=81=E7=A8=8B=E7=94=9F=E4=BA=A7?= =?UTF-8?q?=E8=AE=A2=E5=8D=95:=20MES=E5=90=8C=E6=AD=A5orderNo=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E7=94=9F=E4=BA=A7=E8=AE=A2=E5=8D=95=E5=8F=B7+?= =?UTF-8?q?=E8=A1=8C=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将生产订单号和行号组合后作为 orderNo 传给 MES- 增加长度校验,确保组合后的长度不超过 18 位 - 优化错误提示信息,明确指出长度限制 --- .../pac0002/bp/rule/AfterApproveRuleSyncMes.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterApproveRuleSyncMes.java b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterApproveRuleSyncMes.java index 5435fad..6ca5fdb 100644 --- a/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterApproveRuleSyncMes.java +++ b/mmpac/src/private/nc/bs/mmpac/pmo/pac0002/bp/rule/AfterApproveRuleSyncMes.java @@ -196,16 +196,15 @@ public class AfterApproveRuleSyncMes implements IRule { private void syncOrderItemToMes(PMOHeadVO head, PMOItemVO item) throws BusinessException { JSONObject data = new JSONObject(); String vbillcode = head.getVbillcode(); // ݺ - String itemRow = item.getVrowno(); // к + String itemRow = item.getVrowno(); // к obmlog.info("ʼΪ " + vbillcode + " " + itemRow + " ͬMESݡ"); - obmlog.info("ʼΪ " + vbillcode + " " + itemRow + " ͬMESݡ"); - - // orderNo String vbillcode - if (vbillcode.length() > 18) { - throw new BusinessException("MESͬҪ: " + vbillcode + " " + itemRow + " ݺųȲܳ18λ"); + // orderNo String +к vbillcode+itemRow + String orderNoWithRow = vbillcode + itemRow; + if (orderNoWithRow.length() > 18) { + throw new BusinessException("MESͬҪ: " + vbillcode + " " + itemRow + " ݺ+кųȲܳ18λǰȣ" + orderNoWithRow.length()); } - data.put("orderNo", vbillcode); + data.put("orderNo", orderNoWithRow); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); From 3f135345dd1b723b00b7628a096a99785e97a96e Mon Sep 17 00:00:00 2001 From: mzr Date: Fri, 6 Jun 2025 11:25:32 +0800 Subject: [PATCH 4/5] =?UTF-8?q?fix(so):=20=E4=BF=AE=E5=A4=8D=E7=BA=A2?= =?UTF-8?q?=E5=AD=97=E5=8F=91=E7=A5=A8=E7=94=9F=E6=88=90=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../operator/IAPISaleInvMaitainImpl.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/so/src/public/nccloud/api/so/saleinvoice/operator/IAPISaleInvMaitainImpl.java b/so/src/public/nccloud/api/so/saleinvoice/operator/IAPISaleInvMaitainImpl.java index d9c2071..283af1c 100644 --- a/so/src/public/nccloud/api/so/saleinvoice/operator/IAPISaleInvMaitainImpl.java +++ b/so/src/public/nccloud/api/so/saleinvoice/operator/IAPISaleInvMaitainImpl.java @@ -204,7 +204,7 @@ public class IAPISaleInvMaitainImpl { Logger.error("=====================inv-red-audit-end==============="); // ѯɺ巢ƱϢ - String newPk = returnApproveSaleInvoiceVOs[0].getParentVO().getCsaleinvoiceid(); + String newPk = returnSaveSaleInvoiceVOs[0].getParentVO().getCsaleinvoiceid(); String[] idsNew = {newPk}; // String[] idsNew = {"1001A11000000FSB45YA"}; SaleInvoiceVO[] redVos = querySaleInvoiceByIds(idsNew); @@ -503,8 +503,10 @@ public class IAPISaleInvMaitainImpl { } // BIPͬƽ̨ӦBIP2312BIP2312 =*ϵ UFDouble nnum = new UFDouble(bipBvoJson.getString("nnum")); - newInvBVO.setNastnum(nnum.multiply(vchangerateNum).setScale(2, 4)); // + UFDouble nastnum = nnum.multiply(vchangerateNum).setScale(2, 4); + newInvBVO.setNastnum(nastnum); // newInvBVO.setNnum(nnum); // + newInvBVO.setNqtunitnum(nastnum); // newInvBVO.setNqtorigtaxprice(new UFDouble(bipBvoJson.getString("nqtorigtaxprice"))); // ˰ newInvBVO.setNqtorigprice(new UFDouble(bipBvoJson.getString("nqtorigprice"))); // ˰ newInvBVO.setNorigtaxprice(new UFDouble(bipBvoJson.getString("norigtaxprice"))); // ˰ @@ -528,11 +530,17 @@ public class IAPISaleInvMaitainImpl { newInvBVO.setNtaxmny(new UFDouble(bipBvoJson.getString("ntaxmny"))); // Ҽ˰ϼ newInvBVO.setNcaltaxmny(new UFDouble(bipBvoJson.getString("nmny"))); // ˰=˰ newInvBVO.setCopposesrcbid(bipBvoJson.getString("vbdef15")); // ԳԴӱid - newInvBVO.setNqtunitnum(null); // + newInvBVO.setCunitid(bipBvoJson.getString("castunitid"));// λ + newInvBVO.setCqtunitid(bipBvoJson.getString("castunitid"));// ۵λ + // ͨ ntaxrate ȡ taxcode + String taxcodeStr = getTaxcode(bipBvoJson.getString("ntaxrate")); + newInvBVO.setCtaxcodeid(taxcodeStr);// ˰ + newInvBVO.setCsaleinvoiceid(null); // Ʊid newInvBVO.setNtotalcostnum(null); // ۼƳɱ newInvBVO.setNtotalincomemny(null); // ۼȷӦս newInvBVO.setNtotalincomenum(null); // ۼȷӦ + newSaleInvoiceBVOs[i++] = newInvBVO; sumNum = sumNum.add(new UFDouble(bipBvoJson.getString("nnum"))); sumNtax = sumNtax.add(new UFDouble(bipBvoJson.getString("ntax"))); @@ -558,6 +566,8 @@ public class IAPISaleInvMaitainImpl { newSaleInvoiceHVO.setCopposesrcid(saleInvoiceHVO.getCsaleinvoiceid()); // ԳԴƱid newSaleInvoiceHVO.setApprover(null); // newSaleInvoiceHVO.setTaudittime(null); // + newSaleInvoiceHVO.setVdef13(null); // Ʊ + newSaleInvoiceHVO.setVdef17(bject.getString("vdef17")); // BIP뵥 // װVO saleInvoiceVO.setParentVO(newSaleInvoiceHVO); From 938d677f004a20095ce32be1dfa523d10f27e558 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=98=8E?= <125556714+Topfunplus@users.noreply.github.com> Date: Fri, 6 Jun 2025 12:32:11 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=8F=91=E7=A5=A8?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 重构了 ApplicationQryAction 和 IVApplicationQueryService 接口 - 新增 queryByInvoiceNumberAndAggPK 方法用于查询开票记录 -优化了分页查询逻辑,支持特殊查询条件下的手动分页- 调整了 SQL构建方式,提高了查询效率 --- .../impl/IVApplicationQueryServiceImpl.java | 167 +++++++----------- .../service/IVApplicationQueryService.java | 7 +- .../action/ApplicationQryAction.java | 62 +++++-- 3 files changed, 111 insertions(+), 125 deletions(-) diff --git a/sscivm/src/private/nccloud/itf/sscivm/ivsale/impl/IVApplicationQueryServiceImpl.java b/sscivm/src/private/nccloud/itf/sscivm/ivsale/impl/IVApplicationQueryServiceImpl.java index 16e87b3..16b21fa 100644 --- a/sscivm/src/private/nccloud/itf/sscivm/ivsale/impl/IVApplicationQueryServiceImpl.java +++ b/sscivm/src/private/nccloud/itf/sscivm/ivsale/impl/IVApplicationQueryServiceImpl.java @@ -9,6 +9,7 @@ import java.util.List; import java.util.Map; import nc.bs.dao.BaseDAO; +import nc.bs.dao.DAOException; import nc.bs.framework.common.InvocationInfoProxy; import nc.bs.sscivm.ivsale.bp.IVApplicationQueryBP; import nc.bs.sscivm.util.IVMSagaValidationUtils; @@ -117,53 +118,6 @@ public class IVApplicationQueryServiceImpl implements IVApplicationQueryService } } - // ĸʱ жɸѡ - @Override - public Map> queryApplicationPksBySchema(IQueryScheme queryscheme, String appcode, Boolean sgbzflag, List> extraParams) throws BusinessException { - if (queryscheme == null) { - return null; - } else { - String queryCondition = queryscheme.getWhereSQLOnly(); - Map> pkAndTsList = null; - if (!queryCondition.isEmpty()) { - String tradetype = this.getTradetypeByApp(appcode); - if ("SSCIVA-kpsq".equals(tradetype)) { - queryCondition = "(" + queryCondition + ")"; - } else { - queryCondition = "(" + queryCondition + " and sn.transtypecode = '" + tradetype + "')"; - } - - if (sgbzflag != null) { - if (sgbzflag) { - queryCondition = queryCondition + " and sn.sgbz ='Y' "; - } else { - queryCondition = queryCondition + " and (sn.sgbz='N' or isnull(sn.sgbz,'~')='~') "; - } - } - String sql = this.buildQuerySql(queryCondition, extraParams); - pkAndTsList = (Map) this.getBaseDAO().executeQuery(sql, new BaseProcessor() { - private static final long serialVersionUID = 1L; - Map> result = new HashMap(); - List pkList = new ArrayList(); - List tsList = new ArrayList(); - - public Object processResultSet(ResultSet paramResultSet) throws SQLException { - while (paramResultSet.next()) { - this.pkList.add((String) paramResultSet.getObject("pk_ivapplication")); - this.tsList.add((String) paramResultSet.getObject("ts")); - } - - this.result.put("pks", this.pkList); - this.result.put("ts", this.tsList); - return this.result; - } - }); - } - - return pkAndTsList; - } - } - private String buildQuerySql(String queryCondition) { StringBuilder sql = new StringBuilder("SELECT * "); sql.append("from " + IVApplicationHeadVO.getDefaultTableName() + " where "); @@ -171,64 +125,6 @@ public class IVApplicationQueryServiceImpl implements IVApplicationQueryService return var10000 + queryCondition + " and dr = 0 order by preparedate desc, billno desc"; } - // ˲ otherExtraQueryParams ڶIJѯ - private String buildQuerySql(String queryCondition, List> otherExtraQueryParams) { - String var10000 = "SELECT * " + "from " + IVApplicationHeadVO.getDefaultTableName() + - " sn " + - " left join " + IVApplogVO.getDefaultTableName() + - " sg " + - " on " + " sn." + IVApplicationHeadVO.PK_IVAPPLICATION + - " = " + " sg." + IVApplogVO.PK_IVAPPLOG + - " where 1=1 "; - StringBuilder extraSql = new StringBuilder(); - if (otherExtraQueryParams != null && !otherExtraQueryParams.isEmpty()) { - for (Map map : otherExtraQueryParams) { - if (map != null && !map.isEmpty()) { - Map value = (Map) map.get("value"); - String column = (String) map.get("field"); - String firstValue = value.get("firstvalue"); - String secondValue = value.get("secondvalue"); - String alias = " sn."; - String oprtype = (String) map.get("oprtype"); - if (column.equals("KPRQ")) { - alias = " sg."; - } - if (column.equals("pk_org") && oprtype.equals("=")) { - String[] pks = firstValue.split(","); - extraSql.append(" and (").append(alias).append("pk_org").append(" in ("); - for (int i = 0; i < pks.length; ++i) { - extraSql.append("'").append(pks[i]).append("'"); - if (i != pks.length - 1) { - extraSql.append(","); - } - } - extraSql.append(")"); - extraSql.append(")"); - continue; - } - switch (oprtype) { - case "between": { - extraSql.append(" and (").append(alias).append(column).append(" >= '").append(firstValue).append("' and ").append(alias).append(column).append(" <= '").append(secondValue).append("' )"); - break; - } - case "like": { - extraSql.append(" and (").append(alias).append(column).append(" like '%").append(firstValue).append("' )"); - break; - } - case "=": { - extraSql.append(" and (").append(alias).append(column).append(" = '").append(firstValue).append("' )"); - break; - } - default: { - break; - } - } - } - } - } - return var10000 + extraSql + " and sn.dr = 0 order by sn.preparedate desc, sn.billno desc"; - } - public String getDefaultOrgUnit() throws Exception { return OrgSettingAccessor.getDefaultOrgUnit(); } @@ -269,6 +165,48 @@ public class IVApplicationQueryServiceImpl implements IVApplicationQueryService } } + public List queryApplicationsBySchema(IQueryScheme queryscheme, String pageSize, String appcode, Boolean sgbzflag, Boolean pageControl) throws BusinessException { + if (queryscheme == null) { + return null; + } else { + StringBuilder sql = new StringBuilder(); + String queryCondition = queryscheme.getWhereSQLOnly(); + String tradetype = this.getTradetypeByApp(appcode); + if ("SSCIVA-kpsq".equals(tradetype)) { + queryCondition = "(" + queryCondition + ")"; + } else { + queryCondition = "(" + queryCondition + " and transtypecode = '" + tradetype + "')"; + } + + if (sgbzflag != null) { + if (sgbzflag) { + queryCondition = queryCondition + " and sgbz ='Y' "; + } else { + queryCondition = queryCondition + " and (sgbz='N' or isnull(sgbz,'~')='~') "; + } + } + + List applicationHeadVOList = null; + // pageControl Ϊfalse ô߷ҳ߼ + if (null != queryCondition && !queryCondition.isEmpty()) { + if (pageControl) { + LimitSQLBuilder limitSQLBuilder = SQLBuilderFactory.getInstance().createLimitSQLBuilder(this.getBaseDAO().getDBType()); + sql.append(limitSQLBuilder.build(this.buildQuerySql(queryCondition), 1, Integer.valueOf(pageSize))); + } + applicationHeadVOList = (List) this.getBaseDAO().executeQuery(this.buildQuerySql(queryCondition).toString(), new BeanListProcessor(IVApplicationHeadVO.class)); + } + + if (applicationHeadVOList != null && applicationHeadVOList.size() > Integer.parseInt(pageSize)) { + if (!pageControl) { + return applicationHeadVOList; + } + applicationHeadVOList = applicationHeadVOList.subList(0, Integer.parseInt(pageSize)); + } + + return applicationHeadVOList; + } + } + public IVApplicationHeadVO[] queryHeadVOsByFpdmFphm(String fpdm, String fphm) throws BusinessException { StringBuilder querySql = new StringBuilder("select DISTINCT " + IVApplicationHeadVO.getDefaultTableName() + ".* from "); String var10001 = IVApplogVO.getDefaultTableName(); @@ -284,6 +222,25 @@ public class IVApplicationQueryServiceImpl implements IVApplicationQueryService return ivApplicationHeadVOList != null && ivApplicationHeadVOList.size() != 0 ? (IVApplicationHeadVO[]) ivApplicationHeadVOList.toArray(new IVApplicationHeadVO[ivApplicationHeadVOList.size()]) : null; } + // ɸѡĿƱ뵥ѯƱ¼ + public List queryByInvoiceNumberAndAggPK(String[] pks, String[] invoiceDate, String[] invoiceNums) throws BusinessException { + StringBuilder sql = new StringBuilder("select lyid from " + IVApplogVO.getDefaultTableName() + " where 1=1"); + String invoiceDateStr, pkStr, invoiceNumStr; + if (pks != null && pks.length > 0) { + pkStr = SQLUtil.buildSqlForIn("lyid", pks); + sql.append(" and ").append(pkStr); + } + if (invoiceDate != null && invoiceDate.length > 0) { + invoiceDateStr = " KPRQ >= '" + invoiceDate[0] + "'" + " and KPRQ <=" + "'" + invoiceDate[1] + "'"; + sql.append(" and ").append(invoiceDateStr); + } + if (invoiceNums != null && invoiceNums.length > 0) { + invoiceNumStr = SQLUtil.buildSqlForIn("FPHM", invoiceNums); + sql.append(" and ").append(invoiceNumStr); + } + return (List) this.getBaseDAO().executeQuery(sql.toString(), new BeanListProcessor(IVApplogVO.class)); + } + public List queryHeadVOsByPks(String[] pks) throws BusinessException { List applicationHeadVOList = this.queryHeadVOsByPks(pks, (Boolean) null); return applicationHeadVOList; diff --git a/sscivm/src/private/nccloud/itf/sscivm/ivsale/service/IVApplicationQueryService.java b/sscivm/src/private/nccloud/itf/sscivm/ivsale/service/IVApplicationQueryService.java index 8cf8014..f6a27ae 100644 --- a/sscivm/src/private/nccloud/itf/sscivm/ivsale/service/IVApplicationQueryService.java +++ b/sscivm/src/private/nccloud/itf/sscivm/ivsale/service/IVApplicationQueryService.java @@ -9,6 +9,7 @@ import nc.vo.pub.BusinessException; import nc.vo.pub.lang.UFDouble; import nc.vo.sscivm.ivsale.IVApplicationAggVO; import nc.vo.sscivm.ivsale.IVApplicationHeadVO; +import nc.vo.sscivm.ivsale.IVApplogVO; public interface IVApplicationQueryService { IVApplicationAggVO queryByPK(String var1) throws BusinessException; @@ -27,10 +28,10 @@ public interface IVApplicationQueryService { Map> queryApplicationPksBySchema(IQueryScheme var1, String var2, Boolean var3) throws BusinessException; - Map> queryApplicationPksBySchema(IQueryScheme var1, String var2, Boolean var3, List> var4) throws BusinessException; - List queryApplicationsBySchema(IQueryScheme var1, String var2, String var3, Boolean var4) throws BusinessException; + List queryApplicationsBySchema(IQueryScheme var1, String var2, String var3, Boolean var4, Boolean var5) throws BusinessException; + String getDefaultOrgUnit() throws Exception; MeasdocVO[] queryMeasdocByPk(String var1) throws BusinessException; @@ -38,4 +39,6 @@ public interface IVApplicationQueryService { UFDouble queryTaxRateByMaterialPK(String var1) throws BusinessException; IVApplicationHeadVO[] queryHeadVOsByFpdmFphm(String var1, String var2) throws BusinessException; + + List queryByInvoiceNumberAndAggPK(String[] pks, String[] invoiceDate, String[] invoiceNums) throws BusinessException; } diff --git a/sscivm/src/private/nccloud/web/sscivm/ivsale/application/action/ApplicationQryAction.java b/sscivm/src/private/nccloud/web/sscivm/ivsale/application/action/ApplicationQryAction.java index fa54227..167da64 100644 --- a/sscivm/src/private/nccloud/web/sscivm/ivsale/application/action/ApplicationQryAction.java +++ b/sscivm/src/private/nccloud/web/sscivm/ivsale/application/action/ApplicationQryAction.java @@ -16,6 +16,7 @@ import nc.vo.pubapp.pattern.exception.ExceptionUtils; import nc.vo.pubapp.query2.sql.process.QueryCondition; import nc.vo.pubapp.query2.sql.process.QuerySchemeProcessor; import nc.vo.sscivm.ivsale.IVApplicationHeadVO; +import nc.vo.sscivm.ivsale.IVApplogVO; import nccloud.dto.baseapp.querytree.dataformat.QueryTreeFormatVO; import nccloud.framework.core.json.IJson; import nccloud.framework.service.ServiceLocator; @@ -64,31 +65,56 @@ public class ApplicationQryAction implements ICommonAction { if (info.getQuerycondition() != null) { INCCloudQueryService ncCloudQueryService = (INCCloudQueryService) ServiceLocator.find(INCCloudQueryService.class); IQueryScheme scheme = ncCloudQueryService.convertCondition(info); - - //TODOȡѯеHPRQFPHM (ƱںͷƱ) - Map queryMap = (Map) map.get("querycondition"); - List> customQueryContion = (List>) queryMap.get("conditions"); - List> filteredCondition = customQueryContion.stream() - .filter((queryItem) -> queryItem.get("field").equals("FPHM") || queryItem.get("field").equals("KPRQ")) - .collect(Collectors.toList()); - boolean isExtraQuery = filteredCondition != null && filteredCondition.size() > 0; - QuerySchemeProcessor processor = new QuerySchemeProcessor(scheme); - // TODO - - // Ƕѯ ߶IJѯ IJѯ - Map> pkAndTsList = - isExtraQuery ? queryService.queryApplicationPksBySchema(scheme, appcode, sgbzflag, customQueryContion) - : queryService.queryApplicationPksBySchema(scheme, appcode, sgbzflag); - + Map> pkAndTsList = queryService.queryApplicationPksBySchema(scheme, appcode, sgbzflag); String pageSize = (String) pageInfo.get("pageSize"); - allApplicationAggVOList = queryService.queryApplicationsBySchema(scheme, pageSize, appcode, sgbzflag); + // õallApplicationVOListеPK,ԼѯеFPHM ٲѯһݿ + boolean isSpcialQuery = false; + QuerySchemeProcessor processor = new QuerySchemeProcessor(scheme); + QueryCondition kprq = processor.getQueryCondition("KPRQ"); + QueryCondition fphm = processor.getQueryCondition("FPHM"); + if (kprq == null && fphm == null) { + allApplicationAggVOList = queryService.queryApplicationsBySchema(scheme, pageSize, appcode, sgbzflag); + } else { + allApplicationAggVOList = queryService.queryApplicationsBySchema(scheme, pageSize, appcode, sgbzflag, false); + isSpcialQuery = true; + } + // ѯݿ kprq fphm һΪ ôͲҳ ֶҳѯ + String[] invoiceDate = {}; + String[] invoiceNums = {}; + String[] filteredPks = {}; + if (isSpcialQuery) { + if (kprq != null) { + invoiceDate = kprq.getValues(); + } + if (fphm != null) { + invoiceNums = fphm.getValues(); + } + if (allApplicationAggVOList.size() != 0) { + List ivApplicationHeadVOS = allApplicationAggVOList.stream() + .map(IVApplicationHeadVO::getPk_ivapplication) + .collect(Collectors.toList()); + filteredPks = ivApplicationHeadVOS.toArray(new String[0]); + } + // д˷Ʊ ִд߼ + if (invoiceDate != null && invoiceDate.length > 0) { + List ivApplogVOS = queryService.queryByInvoiceNumberAndAggPK(filteredPks, invoiceDate, invoiceNums); + // allApplicationAggVOList ivApplogVOSÿһlyidǷ + allApplicationAggVOList = allApplicationAggVOList.stream() + .filter(aggVO -> ivApplogVOS.stream() + .anyMatch(logVO -> logVO.getLyid().equals(aggVO.getPk_ivapplication()))) + .collect(Collectors.toList()); + } + filteredPks = allApplicationAggVOList.stream() + .map(IVApplicationHeadVO::getPk_ivapplication) + .collect(Collectors.toList()).toArray(new String[0]); + } if (allApplicationAggVOList != null && allApplicationAggVOList.size() > 0) { invApplication = operator.toGrid(allApplicationAggVOList.toArray(new IVApplicationHeadVO[allApplicationAggVOList.size()])); invApplication.setPageid(pagecode); DataChangeLogic.setViewScala(invApplication); translator.translate(invApplication); result.put(areaid, invApplication); - result.put("pks", pkAndTsList.get("pks")); + result.put("pks", filteredPks.length > 0 ? filteredPks : pkAndTsList.get("pks")); result.put("ts", pkAndTsList.get("ts")); } } else {