From 15f1caf561ae1259829b9866386264363df2872b Mon Sep 17 00:00:00 2001 From: xuhaihui <2098865055@qq.com> Date: Fri, 6 Jun 2025 15:55:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=A5=E5=BA=93=E5=8D=95=E5=8F=91=E7=A5=A8?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...aterialInbFinaceConfirmeInvoicePlugin.java | 126 ++++++++++-------- 1 file changed, 70 insertions(+), 56 deletions(-) diff --git a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/MaterialInbFinaceConfirmeInvoicePlugin.java b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/MaterialInbFinaceConfirmeInvoicePlugin.java index dd59167..395a79f 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/MaterialInbFinaceConfirmeInvoicePlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-pr/src/main/java/zcgj/zcdev/zcdev/pr/plugin/form/MaterialInbFinaceConfirmeInvoicePlugin.java @@ -44,16 +44,17 @@ import java.util.stream.Collectors; */ public class MaterialInbFinaceConfirmeInvoicePlugin extends AbstractBillPlugIn implements Plugin { private static final Log log = LogFactory.getLog(MaterialInbFinaceConfirmeInvoicePlugin.class); + @Override public void beforeDoOperation(BeforeDoOperationEventArgs args) { super.beforeDoOperation(args); - FormOperate operate = (FormOperate)args.getSource(); + FormOperate operate = (FormOperate) args.getSource(); String key = operate.getOperateKey(); if (StringUtils.equals(key, "newsubentry")) { //选择发票 this.beforeNewSubEntry(args); - } else if (StringUtils.equals(key, "selectinvoice")) { //导入发票 + } else if (StringUtils.equals(key, "selectinvoice")) { //导入发票 this.showInvoiceImport(args); - }else if (key.equals("deletesubentry")) { + } else if (key.equals("deletesubentry")) { this.beforeDeleteSubEntry(args); } } @@ -65,7 +66,7 @@ public class MaterialInbFinaceConfirmeInvoicePlugin extends AbstractBillPlugIn i //returnData = "{\"invoiceData\":[{\"xbrlName\":\"\",\"fileName\":\"\",\"specialTypeMark\":\"\",\"downloadUrl\":\"/dev/2170355234897924096/202505/5b96f486f0de44d4a437a482e830cf95/扬尚发票103417.6.pdf\",\"invoiceAmount\":\"91520\",\"needCheck\":\"1\",\"personFlag\":false,\"type\":\"0\",\"authenticateFlag\":1,\"isElectricInvoice\":\"1\",\"payee\":\"\",\"taxOfdUrl\":\"\",\"salerTaxNo\":\"91320117MADRMAMU8L\",\"invoiceType\":\"27\",\"orgNumber\":\"10006834\",\"invoiceNo\":\"25322000000224247311\",\"salerType\":\"\",\"area\":\"\",\"orgName\":\"南京矿山江苏溧水分公司\",\"buyerTaxNo\":\"913201176867400458\",\"resource\":\"发票助手\",\"selectTime\":\"\",\"originalState\":\"0\",\"companySeal\":\"0\",\"originalInvoiceNo\":\"\",\"xbrlType\":\"\",\"serialNo\":\"c2108f40b42046a986c5891cb59d65cc0\",\"xmlUrl\":\"\",\"checkFlag\":1,\"errorLevel\":\"3\",\"totalAmount\":\"103417.6\",\"xbrlUrl\":\"\",\"salerAddressPhone\":\"江苏省南京市溧水区溧水区晶桥镇枫香岭村配件小区16号 13305141166\",\"checkTime\":\"\",\"authenticateTime\":\"\",\"recordedPurpose\":\"\",\"salelistSum\":0,\"isRevise\":\"1\",\"region\":\"\",\"totalTaxAmount\":\"11897.6\",\"taxAmount\":\"11897.6\",\"recordedTime\":\"\",\"items\":[{\"unitPrice\":\"400\",\"num\":\"228.8\",\"preferentialPolicy\":\"\",\"zeroTaxRateFlag\":\"\",\"taxRate\":\"0.13\",\"unit\":\"时\",\"vatException\":\"\",\"versionNo\":\"\",\"detailAmount\":\"91520\",\"specModel\":\"\",\"discountType\":\"0\",\"goodsCode\":\"3040502019900000000\",\"taxAmount\":\"11897.6\",\"goodsName\":\"*经营租赁*挖机租赁费\",\"seq\":\"0\"}],\"originalInvoiceCode\":\"\",\"deductionFlag\":\"1\",\"salerName\":\"南京扬尚机械租赁有限公司\",\"taxPeriod\":\"\",\"uploadSeq\":1747898704052000000,\"destArea\":\"\",\"proxyMark\":\"0\",\"remark\":\"购方开户银行:中国农业银行股份有限公司南京晶桥支行 银行账号:10127901040003185销方开户银行:中国工商银行股份有限公司南京珍珠南路支行 银行账号:4301031809100080341\",\"delete\":\"1\",\"billCreateTime\":\"2025-05-22 10:45:53\",\"invoice_info\":\"ty_27,st_0,ex_1,ch_1,or_0,au_0,\",\"checkStatus\":\"1\",\"availableAmount\":\"103417.6\",\"imageUrl\":\"/dev/2170355234897924096/202505/rim/22/snap/f4f68a6c6cb84255a3a4e6b35fe710d60.jpg\",\"taxPdfUrl\":\"\",\"pixel\":\"\",\"recordedPeriod\":\"\",\"effectiveTaxAmount\":\"11897.6\",\"invoiceRiskLevel\":\"\",\"buyerAddressPhone\":\"南京市溧水区晶桥镇 18551696115\",\"originalFileName\":\"扬尚发票103417.6.pdf\",\"originalGraphUrl\":\"/dev/2170355234897924096/202505/5b96f486f0de44d4a437a482e830cf95/扬尚发票103417.6.pdf\",\"salerAccount\":\"销方开户银行:中国工商银行股份有限公司南京珍珠南路支行 银行账号:4301031809100080341\",\"amount\":\"91520\",\"fileIndex\":\"\",\"validateMessage\":\"合规性校验通过\",\"drawer\":\"\",\"verifyResult\":[],\"updateTime\":\"2025-05-22 15:24:42\",\"reviewer\":\"\",\"invoiceDate\":\"2025-05-19\",\"buyerName\":\"中国非金属材料南京矿山工程有限公司溧水分公司\",\"invalidDate\":\"\",\"invoiceSource\":\"\",\"pdfurl\":\"/dev/2170355234897924096/202505/5b96f486f0de44d4a437a482e830cf95/扬尚发票103417.6.pdf\",\"sourceArea\":\"\",\"salelistComplete\":\"1\",\"buyerAccount\":\"购方开户银行:中国农业银行股份有限公司南京晶桥支行 银行账号:10127901040003185\",\"rotationAngle\":\"0\",\"recordedStatus\":\"01\",\"snapshotUrl\":\"/dev/2170355234897924096/202505/rim/22/snap/f4f68a6c6cb84255a3a4e6b35fe710d60.jpg\",\"invoiceStatus\":\"0\",\"isModify\":\"0\",\"deductionPurpose\":\"\",\"expendStatus\":\"1\",\"fileType\":\"1\",\"expenseStatus\":\"1\",\"taxXmlUrl\":\"\"}],\"attachData\":[]}"; if (actionId.toLowerCase().startsWith("zcgj_entryentity") && returnData != null) { this.invoiceCloseCallBack(event); - } else if (actionId.toLowerCase().startsWith("selectinvoice") && returnData != null) { + } else if (actionId.toLowerCase().startsWith("selectinvoice") && returnData != null) { this.importInvoiceCallBack(returnData); } } @@ -82,8 +83,14 @@ public class MaterialInbFinaceConfirmeInvoicePlugin extends AbstractBillPlugIn i } private void showInvoice(String entryType) { - long currencyId = ((DynamicObject)this.getModel().getValue("zcgj_currency")).getLong("id"); - long orgId = ((DynamicObject)this.getModel().getValue("zcgj_invoice_org")).getLong("id"); + Boolean ismulticurrency = (Boolean) this.getModel().getValue("ismulticurrency");//多币别 + long currencyId = 0L; + if (ismulticurrency) { + currencyId = ((DynamicObject) this.getModel().getValue("currency")).getLong("id");//签约币别 + } else { + currencyId = ((DynamicObject) this.getModel().getValue("stdcurrency")).getLong("id");//本位币别 + } + long orgId = ((DynamicObject) this.getModel().getValue("fiaccountorg")).getLong("id");//财务记账组织 QFilter filter = new QFilter("org", "=", orgId); filter.and(new QFilter("isclaimed", "=", false)); filter.and(new QFilter("billstatus", "=", "C")); @@ -92,38 +99,38 @@ public class MaterialInbFinaceConfirmeInvoicePlugin extends AbstractBillPlugIn i filter.and(new QFilter("unapplyamount", ">", BigDecimal.ZERO)); QFilter filter1 = new QFilter("isclaimed", "=", true); filter1.and(new QFilter("billstatus", "=", "C")); - DynamicObject contract = (DynamicObject)this.getModel().getValue("zcgj_contract"); - if (contract != null) { - long contractId = contract.getLong("id"); - filter1.and(new QFilter("contract", "=", contractId)); - filter1.and(new QFilter("unapplyamount", ">", BigDecimal.ZERO)); - DynamicObjectCollection contInvEntryCol = this.getModel().getEntryEntity("zcgj_entryentity"); - if (contInvEntryCol.size() > 0) { - List selectedInvIds = new ArrayList(8); +// DynamicObject contract = (DynamicObject) this.getModel().getValue("zcgj_contract"); +// if (contract != null) { +// long contractId = contract.getLong("id"); +// filter1.and(new QFilter("contract", "=", contractId)); + filter1.and(new QFilter("unapplyamount", ">", BigDecimal.ZERO)); + DynamicObjectCollection contInvEntryCol = this.getModel().getEntryEntity("zcgj_entryentity"); + if (contInvEntryCol.size() > 0) { + List selectedInvIds = new ArrayList(8); - for(DynamicObject contInvEntryObj : contInvEntryCol) { - DynamicObject invoice = contInvEntryObj.getDynamicObject("zcgj_invoice"); - selectedInvIds.add(invoice.getLong("id")); - } - - filter1.and(new QFilter("id", "not in", selectedInvIds)); + for (DynamicObject contInvEntryObj : contInvEntryCol) { + DynamicObject invoice = contInvEntryObj.getDynamicObject("zcgj_invoice"); + selectedInvIds.add(invoice.getLong("id")); } - ListShowParameter param = ShowFormHelper.createShowListForm("ec_in_invoice_f7", true); - param.getListFilterParameter().setFilter(filter.or(filter1)); - param.setMultiSelect(true); - param.setCloseCallBack(new CloseCallBack(this, entryType)); - param.getOpenStyle().setShowType(ShowType.Modal); - this.getView().showForm(param); + filter1.and(new QFilter("id", "not in", selectedInvIds)); } + + ListShowParameter param = ShowFormHelper.createShowListForm("ec_in_invoice_f7", true); + param.getListFilterParameter().setFilter(filter.or(filter1)); + param.setMultiSelect(true); + param.setCloseCallBack(new CloseCallBack(this, entryType)); + param.getOpenStyle().setShowType(ShowType.Modal); + this.getView().showForm(param); +// } } protected void invoiceCloseCallBack(ClosedCallBackEvent event) { - ListSelectedRowCollection rows = (ListSelectedRowCollection)event.getReturnData(); + ListSelectedRowCollection rows = (ListSelectedRowCollection) event.getReturnData(); DynamicObject[] invArr = new DynamicObject[rows.size()]; int index = 0; - DynamicObject upContract = (DynamicObject)this.getModel().getValue("zcgj_contract"); - for(ListSelectedRow row : rows) { + DynamicObject upContract = (DynamicObject) this.getModel().getValue("zcgj_contract"); + for (ListSelectedRow row : rows) { Object invoicePk = row.getPrimaryKeyValue().toString(); int rowIndex = this.getModel().createNewEntryRow("zcgj_entryentity"); this.getModel().setValue("zcgj_invoice", invoicePk.toString(), rowIndex); @@ -138,7 +145,7 @@ public class MaterialInbFinaceConfirmeInvoicePlugin extends AbstractBillPlugIn i invArr[index++] = invoice; invoice.set("isclaimed", true); invoice.set("contract", upContract); - invoice.set("project", (DynamicObject)this.getModel().getValue("zcgj_project")); + invoice.set("project", (DynamicObject) this.getModel().getValue("zcgj_project")); invoice.set("connecttype", "contract"); } SaveServiceHelper.save(invArr); @@ -149,8 +156,8 @@ public class MaterialInbFinaceConfirmeInvoicePlugin extends AbstractBillPlugIn i int rowCount = this.getModel().getEntryRowCount(entryId); BigDecimal totalAmount = BigDecimal.ZERO; - for(int i = 0; i < rowCount; ++i) { - BigDecimal amount = (BigDecimal)this.getModel().getValue(columnId, i); + for (int i = 0; i < rowCount; ++i) { + BigDecimal amount = (BigDecimal) this.getModel().getValue(columnId, i); amount = amount == null ? BigDecimal.ZERO : amount; totalAmount = totalAmount.add(amount); } @@ -163,16 +170,16 @@ public class MaterialInbFinaceConfirmeInvoicePlugin extends AbstractBillPlugIn i protected void showInvoiceImport(BeforeDoOperationEventArgs args) { String billId = this.getModel().getDataEntity().getPkValue().toString(); if (!billId.equals("0") && "A".equals(this.getModel().getValue("billstatus"))) { - if (this.getModel().getValue("zcgj_invoice_org") == null) { + if (this.getModel().getValue("fiaccountorg") == null) { this.getView().showTipNotification(ResManager.loadKDString("发票企业名称不能为空", "PaymentApplyEditUI_18", "ec-contract-formplugin", new Object[0])); args.setCancel(true); } else { if (!ImportInvoiceUtils.isXhInvoiceCloud()) { args.setCancel(true); ImportInvoiceUtils.showImportView(this); - }else{ + } else { args.setCancel(true); - DynamicObject org = (DynamicObject) this.getModel().getValue("zcgj_invoice_org"); + DynamicObject org = (DynamicObject) this.getModel().getValue("fiaccountorg"); InvoiceCollectHelper.showSelectInvoice(this, org); } } @@ -183,11 +190,18 @@ public class MaterialInbFinaceConfirmeInvoicePlugin extends AbstractBillPlugIn i } protected void importInvoiceCallBack(Object returnData) { - DynamicObject org = (DynamicObject)this.getModel().getValue("zcgj_invoice_org"); + DynamicObject org = (DynamicObject) this.getModel().getValue("fiaccountorg"); //List invoiceVOList = InvoiceDataHandleHelper.parseXhInvoiceCloudReturnData(returnData); List invoiceVOList = CustomInvoiceDataHandleHelper.parseXhInvoiceCloudReturnData(returnData); + Boolean ismulticurrency = (Boolean) this.getModel().getValue("ismulticurrency");//多币别 + DynamicObject currency = null; + if (ismulticurrency) { + currency = (DynamicObject) this.getModel().getValue("currency");//签约币别 + } else { + currency = (DynamicObject) this.getModel().getValue("stdcurrency");//本位币别 + } Map> invoiceMap = InvoiceDataHandleHelper.processInvoiceVO(invoiceVOList, RequestContext.get().getCurrUserId(), - org.getLong("id"), new Date(), "ec_in_invoice", (DynamicObject)this.getModel().getValue("zcgj_currency"), true); + org.getLong("id"), new Date(), "ec_in_invoice", currency, true); ImportInvoiceUtils invoiceUtils = new ImportInvoiceUtils(this.getView(), this.getPageCache()); this.addInvoiceToEntry(invoiceUtils, invoiceMap); } @@ -196,11 +210,11 @@ public class MaterialInbFinaceConfirmeInvoicePlugin extends AbstractBillPlugIn i if (invoiceMap.isEmpty()) { this.getView().showTipNotification(ResManager.loadKDString("导入发票为空。", "PaymentApplyEditUI_19", "ec-contract-formplugin", new Object[0])); } else { - long orgId = (Long)((DynamicObject)this.getModel().getValue("zcgj_invoice_org")).getPkValue(); - Set newInvoices = (Set)invoiceMap.get(Boolean.TRUE); - Set existInvoices = (Set)invoiceMap.get(Boolean.FALSE); + long orgId = (Long) ((DynamicObject) this.getModel().getValue("fiaccountorg")).getPkValue(); + Set newInvoices = (Set) invoiceMap.get(Boolean.TRUE); + Set existInvoices = (Set) invoiceMap.get(Boolean.FALSE); if (newInvoices != null && !newInvoices.isEmpty()) { - for(DynamicObject newInvoice : newInvoices) { + for (DynamicObject newInvoice : newInvoices) { DynamicObject buyerOrg = newInvoice.getDynamicObject("buyer"); if (buyerOrg != null && buyerOrg.getLong("id") != orgId) { this.getView().showErrorNotification(ResManager.loadKDString("导入失败:当前发票购买方不为当前财务记账组织,请确认信息。", "PaymentApplyEditUI_20", "ec-contract-formplugin", new Object[0])); @@ -211,7 +225,7 @@ public class MaterialInbFinaceConfirmeInvoicePlugin extends AbstractBillPlugIn i this.saveInvoiceData(invoiceUtils, newInvoices, existInvoices); } else if (existInvoices != null) { DynamicObjectCollection contInvEntryCol = this.getModel().getEntryEntity("zcgj_entryentity"); - Map entryMap = (Map)contInvEntryCol.stream().collect(Collectors.toMap(this::getInvoicePK, this::getInvoicePK)); + Map entryMap = (Map) contInvEntryCol.stream().collect(Collectors.toMap(this::getInvoicePK, this::getInvoicePK)); this.initSubEntryEntity(existInvoices, entryMap); } @@ -224,21 +238,21 @@ public class MaterialInbFinaceConfirmeInvoicePlugin extends AbstractBillPlugIn i newInvoices.addAll(existInvoices); } - this.initSubEntryEntity(newInvoices, (Map)null); + this.initSubEntryEntity(newInvoices, (Map) null); } protected void initSubEntryEntity(Set invoices, Map entryMap) { if (invoices != null) { List invArr = new ArrayList(invoices.size()); - for(DynamicObject invoice : invoices) { + for (DynamicObject invoice : invoices) { if (entryMap != null && entryMap.get(invoice.getPkValue()) != null) { this.getView().showTipNotification(String.format(ResManager.loadKDString("发票号码%s,已存在分录行", "PaymentApplyEditUI_22", "ec-contract-formplugin", new Object[0]), invoice.getString("invoiceno"))); } else { BigDecimal unApplyAmount = invoice.getBigDecimal("unapplyamount"); - if (unApplyAmount != null && unApplyAmount.doubleValue() <= (double)0.0F) { + if (unApplyAmount != null && unApplyAmount.doubleValue() <= (double) 0.0F) { this.getView().showTipNotification(String.format(ResManager.loadKDString("发票号码%s,金额已经被关联完毕,不可重复使用", "PaymentApplyEditUI_23", "ec-contract-formplugin", new Object[0]), invoice.getString("invoiceno"))); } else { - DynamicObject upContract = (DynamicObject)this.getModel().getValue("zcgj_contract"); + DynamicObject upContract = (DynamicObject) this.getModel().getValue("zcgj_contract"); int rowIndex = this.getModel().createNewEntryRow("zcgj_entryentity"); this.getModel().setValue("zcgj_invoice", invoice.getPkValue(), rowIndex); this.getModel().setValue("zcgj_invoicecurrency", invoice.getDynamicObject("currency") == null ? Long.valueOf("0") : invoice.getDynamicObject("currency").getPkValue(), rowIndex); @@ -250,7 +264,7 @@ public class MaterialInbFinaceConfirmeInvoicePlugin extends AbstractBillPlugIn i this.getModel().setValue("zcgj_applyinvoftaxamt", invoice.getBigDecimal("unapplyamount"), rowIndex); invoice.set("isclaimed", true); invoice.set("contract", upContract); - invoice.set("project", (DynamicObject)this.getModel().getValue("zcgj_project")); + invoice.set("project", (DynamicObject) this.getModel().getValue("zcgj_project")); invoice.set("connecttype", "contract"); invArr.add(invoice); } @@ -258,7 +272,7 @@ public class MaterialInbFinaceConfirmeInvoicePlugin extends AbstractBillPlugIn i } if (invArr.size() > 0) { - SaveServiceHelper.save((DynamicObject[])invArr.toArray(new DynamicObject[invoices.size()])); + SaveServiceHelper.save((DynamicObject[]) invArr.toArray(new DynamicObject[invoices.size()])); } this.getView().invokeOperation("invoicesave"); } @@ -271,7 +285,7 @@ public class MaterialInbFinaceConfirmeInvoicePlugin extends AbstractBillPlugIn i //删除发票 开始 protected void beforeDeleteSubEntry(BeforeDoOperationEventArgs args) { - EntryGrid subGrid = (EntryGrid)this.getControl("zcgj_entryentity"); + EntryGrid subGrid = (EntryGrid) this.getControl("zcgj_entryentity"); int[] selRows = subGrid.getEntryState().getSelectedRows(); if (selRows.length == 0) { this.getView().showMessage(ResManager.loadKDString("请选择发票。", "PaymentApplyEditUI_3", "ec-contract-formplugin", new Object[0])); @@ -281,11 +295,11 @@ public class MaterialInbFinaceConfirmeInvoicePlugin extends AbstractBillPlugIn i Set updateInvoicePks = new HashSet(selRows.length); DynamicObjectCollection subEntryEntityCol = this.getModel().getEntryEntity("zcgj_entryentity"); - for(int i = selRows.length - 1; i >= 0; --i) { + for (int i = selRows.length - 1; i >= 0; --i) { int rowIndex = selRows[i]; - DynamicObject invoice = (DynamicObject)this.getModel().getValue("zcgj_invoice", rowIndex); + DynamicObject invoice = (DynamicObject) this.getModel().getValue("zcgj_invoice", rowIndex); updateInvoicePks.add(invoice.getPkValue()); - delPks[i] = ((DynamicObject)subEntryEntityCol.get(selRows[i])).getPkValue(); + delPks[i] = ((DynamicObject) subEntryEntityCol.get(selRows[i])).getPkValue(); this.getModel().deleteEntryRow("zcgj_entryentity", rowIndex); } @@ -297,7 +311,7 @@ public class MaterialInbFinaceConfirmeInvoicePlugin extends AbstractBillPlugIn i filter.and("id", "!=", this.getModel().getDataEntity().getPkValue()); DynamicObjectCollection invoiceApplyEntries = QueryServiceHelper.query("zcgj_ecma_materialinb_ext", "zcgj_entryentity.zcgj_invoice", new QFilter[]{filter}); if (invoiceApplyEntries != null && !invoiceApplyEntries.isEmpty()) { - for(DynamicObject subEntry : invoiceApplyEntries) { + for (DynamicObject subEntry : invoiceApplyEntries) { updateInvoicePks.remove(subEntry.get("zcgj_entryentity.zcgj_invoice")); } } @@ -306,11 +320,11 @@ public class MaterialInbFinaceConfirmeInvoicePlugin extends AbstractBillPlugIn i DynamicObject[] invoices = BusinessDataServiceHelper.load("ec_in_invoice", "isinvoiceclaim,isclaimed,contract,project,connecttype", new QFilter[]{new QFilter("id", "in", updateInvoicePks)}); - for(DynamicObject invoice : invoices) { + for (DynamicObject invoice : invoices) { if (!invoice.getBoolean("isinvoiceclaim")) { invoice.set("isclaimed", false); - invoice.set("contract", (Object)null); - invoice.set("project", (Object)null); + invoice.set("contract", (Object) null); + invoice.set("project", (Object) null); invoice.set("connecttype", "null"); } }