diff --git a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/PaymentProcessingBillPlugin.java b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/PaymentProcessingBillPlugin.java index d5328b5..b3e60cf 100644 --- a/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/PaymentProcessingBillPlugin.java +++ b/sys/shkd-sys-sys/src/main/java/shkd/sys/sys/plugin/form/PaymentProcessingBillPlugin.java @@ -1,21 +1,44 @@ package shkd.sys.sys.plugin.form; +import dm.jdbc.util.StringUtil; import kd.bos.bill.AbstractBillPlugIn; +import kd.bos.data.BusinessDataReader; import kd.bos.dataentity.entity.DynamicObject; +import kd.bos.dataentity.entity.DynamicObjectCollection; +import kd.bos.dataentity.metadata.IDataEntityType; +import kd.bos.entity.botp.ConvertBill; +import kd.bos.entity.botp.ConvertOpType; +import kd.bos.entity.botp.ConvertRuleCache; +import kd.bos.entity.botp.ConvertRuleElement; +import kd.bos.entity.botp.runtime.ConvertOpParameter; +import kd.bos.entity.botp.runtime.ConvertOpRule; +import kd.bos.entity.botp.runtime.ConvertOperationResult; +import kd.bos.entity.botp.runtime.DrawArgs; +import kd.bos.entity.datamodel.IBillModel; +import kd.bos.entity.datamodel.IRefrencedataProvider; +import kd.bos.entity.datamodel.ListSelectedRow; +import kd.bos.entity.datamodel.ListSelectedRowCollection; import kd.bos.entity.datamodel.events.ChangeData; import kd.bos.entity.datamodel.events.PropertyChangedArgs; import kd.bos.entity.operate.result.OperationResult; -import kd.bos.ext.fi.bei.util.EmptyUtil; +import kd.bos.form.IPageCache; import kd.bos.form.control.Toolbar; import kd.bos.form.control.events.ItemClickEvent; -import kd.bos.i18n.mservice.I18nServiceHelper; -import kd.bos.i18n.mservice.utils.AmountConvertResult; +import kd.bos.form.events.BeforeDoOperationEventArgs; +import kd.bos.form.field.RefBillEdit; +import kd.bos.form.field.events.BeforeF7SelectEvent; +import kd.bos.form.field.events.BeforeF7SelectListener; +import kd.bos.form.operate.AbstractOperate; +import kd.bos.form.operate.botp.Push; +import kd.bos.list.ListShowParameter; import kd.bos.logging.Log; import kd.bos.logging.LogFactory; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.servicehelper.BusinessDataServiceHelper; +import kd.bos.servicehelper.botp.ConvertServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; +import kd.fi.cas.util.EmptyUtil; import kd.sdk.plugin.Plugin; import shkd.sys.sys.mservice.ApiService; @@ -26,13 +49,17 @@ import static kd.bos.servicehelper.workflow.WorkflowServiceHelper.abandonByBusie /** * 单据界面插件 */ -public class PaymentProcessingBillPlugin extends AbstractBillPlugIn implements Plugin { +public class PaymentProcessingBillPlugin extends AbstractBillPlugIn implements Plugin, BeforeF7SelectListener { private static final Log logger = LogFactory.getLog(PaymentProcessingBillPlugin.class); @Override public void registerListener(EventObject e) { Toolbar tbmain = this.getView().getControl("tbmain"); tbmain.addItemClickListener(this); + + RefBillEdit shkd_ywcl = this.getView().getControl("shkd_ywcl");//业务处理 + shkd_ywcl.addBeforeF7SelectListener(this); + } @Override @@ -90,7 +117,6 @@ public class PaymentProcessingBillPlugin extends AbstractBillPlugIn implements P } } - public void propertyChanged(PropertyChangedArgs e) { String key = e.getProperty().getName(); ChangeData[] changeData = e.getChangeSet(); @@ -98,13 +124,13 @@ public class PaymentProcessingBillPlugin extends AbstractBillPlugIn implements P Object oldValue = changeData[0].getOldValue(); DynamicObject settleType; Object value = this.getModel().getValue("settletype"); - settleType = value != null ? (DynamicObject) value : null; + settleType=value != null ? (DynamicObject)value : null; if (newValue != oldValue) { DynamicObject applyDo; switch (key) { case "settletype": if (EmptyUtil.isNoEmpty(settleType)) { - if ("电汇".equals(settleType.getString("name"))) { + if ("电汇".equals(settleType.getString("name"))){ this.getView().setVisible(true, new String[]{"settletnumber"}); this.getView().setVisible(true, new String[]{"draftbill"}); } @@ -112,38 +138,190 @@ public class PaymentProcessingBillPlugin extends AbstractBillPlugIn implements P break; case "paymentchannel": if (EmptyUtil.isNoEmpty(settleType)) { - if ("电汇".equals(settleType.getString("name"))) { + if ("电汇".equals(settleType.getString("name"))){ this.getView().setVisible(true, new String[]{"settletnumber"}); this.getView().setVisible(true, new String[]{"draftbill"}); } } break; - case "actpayamt": - // 将 newValue 转换为字符串 - String valueStr = newValue.toString(); + } + } - String formattedValue = String.format("%.2f", Double.parseDouble(valueStr)); + if ("shkd_ywcl".equals(key)){ + if (newValue != oldValue&&newValue!=null) { + DynamicObject dynamicObject=(DynamicObject)newValue; + IPageCache iPageCache =this.getPageCache(); + iPageCache.put("shkd_ywclid",dynamicObject.getString("id")); + this.getView().invokeOperation("drawauto"); - AmountConvertResult amountConvertResult = I18nServiceHelper.amountConvertUppercase( - "ZH", "CNY", formattedValue, "false"); - - if (amountConvertResult.isSuccess()) { - this.getModel().setValue("shkd_zwamount", amountConvertResult.getResult()); - break; - } } } } - public void afterBindData(EventObject e) { DynamicObject settleType; Object value = this.getModel().getValue("settletype"); - settleType = value != null ? (DynamicObject) value : null; + settleType=value != null ? (DynamicObject)value : null; if (EmptyUtil.isNoEmpty(settleType)) { - if ("电汇".equals(settleType.getString("name"))) { + if ("电汇".equals(settleType.getString("name"))){ this.getView().setVisible(true, new String[]{"settletnumber"}); this.getView().setVisible(true, new String[]{"draftbill"}); } } + + } + + @Override + public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) { + String name = beforeF7SelectEvent.getProperty().getName(); + if (name.equals("shkd_ywcl")) { + ListShowParameter showParameter = (ListShowParameter) beforeF7SelectEvent.getFormShowParameter(); + DynamicObject dataEntity = this.getModel().getDataEntity(); + DynamicObject org = dataEntity.getDynamicObject("org");//付款人(公司) + QFilter qFilter = new QFilter("company.id", QFilter.equals, org.getLong("id")); + qFilter.and(new QFilter("tradetype", QFilter.equals, "redeem")); + showParameter.getListFilterParameter().setFilter(qFilter); + } + } + + @Override + public void beforeDoOperation(BeforeDoOperationEventArgs args) { + AbstractOperate draw = (AbstractOperate)args.getSource(); + if("drawauto".equals(draw.getOperateKey())){ + ConvertOpParameter convertOpParameter = buildParameter(draw); + ListSelectedRowCollection srcRows = new ListSelectedRowCollection(); + DynamicObject shkd_ywcl = (DynamicObject) this.getModel().getValue("shkd_ywcl"); + if(shkd_ywcl==null){ + return; + } + ListSelectedRow row = new ListSelectedRow(shkd_ywcl.get("id"), true); + DynamicObject dynamicObject = BusinessDataServiceHelper.loadSingle(shkd_ywcl.get("id"), "cdm_drafttradebill"); + String billno = dynamicObject.getString("billno"); + String status = dynamicObject.getString("status"); + Long org = dynamicObject.getLong("org"); + row.setBillNo(billno);//单据编号 + row.setBillStatus(status);//单据状态 + row.setMainOrgId(org);//组织ID + row.setBillTypeID(0L); + row.setRowKey(0); + row.setPageIndex(0); + srcRows.add(row); + doDraw(convertOpParameter,srcRows); + args.setCancel(true); + } + + } + + public void doDraw(ConvertOpParameter opParameter, ListSelectedRowCollection srcRows) { + if (srcRows != null && srcRows.size() != 0) { + String sourceEntityNumber = opParameter.getDefSourceBill(); + String ruleId = opParameter.getDefRuleId(); + DrawArgs args = new DrawArgs(); + args.setSourceEntityNumber(sourceEntityNumber); + args.setTargetEntityNumber(opParameter.getEntityNumber()); + args.addCustomParam("botp_requiredatamutex", String.valueOf(true)); + args.getSelectedRows().addAll(srcRows); + args.setTargetPageId(opParameter.getTargetBillPageId()); + args.setRuleId(ruleId); + args.setBuildConvReport(true); + args.getClearEntrys().addAll(opParameter.getClearEntrys()); + args.getCustomParams().putAll(opParameter.getCustomParams()); + ConvertOperationResult result = ConvertServiceHelper.draw(args); + if (result.isSuccess() && result.getCachePageIds().size() != 0) { + IPageCache iPageCache =this.getPageCache(); + IRefrencedataProvider refProvider = new IRefrencedataProvider() { + @Override + public void fillReferenceData(Object[] dataEntitys, IDataEntityType type) { + BusinessDataReader.loadRefence(dataEntitys, type); + } + }; + List dataEntitys = result.loadTargetDataObjects(refProvider,this.getView().getModel().getDataEntityType()); + DynamicObject dynamicObject = dataEntitys.get(0); + if (!StringUtil.isEmpty(iPageCache.get("shkd_ywclid"))){ + DynamicObject cdm_drafttradebill = BusinessDataServiceHelper.loadSingle(Long.parseLong(iPageCache.get("shkd_ywclid")), "cdm_drafttradebill"); + dynamicObject.set("shkd_ywcl",cdm_drafttradebill); + } + ((IBillModel)this.getView().getModel()).push(dynamicObject); + DynamicObjectCollection entry = (DynamicObjectCollection) this.getView().getModel().getValue("entry"); + if (entry.size()>1){ + this.getView().getModel().deleteEntryRow("entry", 1); + } + DynamicObjectCollection cas_draftinfo = (DynamicObjectCollection) this.getView().getModel().getValue("cas_draftinfo"); + if (cas_draftinfo.size()>1){ + this.getView().getModel().deleteEntryRow("cas_draftinfo", 0); + } + this.getView().updateView(); + + result.release(refProvider, this.getView().getModel().getDataEntityType()); + SaveServiceHelper.save(new DynamicObject[]{this.getView().getModel().getDataEntity()}); + } else { + Push.showReport(this.getView(), args, result); + this.getView().getModel().setValue("shkd_ywcl",null); + } + + } + } + + /** + * 构建下推操作参数 + * @return + */ + protected ConvertOpParameter buildParameter(AbstractOperate draw){ + + ConvertOpParameter opParameter = new ConvertOpParameter(); + opParameter.setOpType(ConvertOpType.Draw); + + String entityNumber = this.getView().getEntityId(); + opParameter.setEntityNumber(entityNumber); + opParameter.setTargetBillPageId(this.getView().getPageId()); + + opParameter.setDefSourceBill("cdm_drafttradebill"); + opParameter.setDefRuleId("2236252254296354816"); + opParameter.getClearEntrys().addAll(new ArrayList()); + + // 直接选单,跳过选单界面:判断指定的源单、规则是否存在、启用 + List rules = this.loadRules("cdm_drafttradebill", entityNumber); + ConvertRuleElement defRule = null; + for(ConvertRuleElement rule : rules) { + if (!rule.isEnabled()) { + continue; + } + if ("2236252254296354816".equals(rule.getId())) { + defRule = rule; + break; + } + } + if (defRule != null) { + ConvertBill bill = new ConvertBill(); + bill.setEntityNumber("cdm_drafttradebill"); + bill.setEntityName("cdm_drafttradebill"); + + ConvertOpRule opRule = new ConvertOpRule(); + opRule.setRuleId(defRule.getId()); + bill.getRules().add(opRule); + + opParameter.getBills().add(bill); + } + + // 自定义参数 + if (draw.getOption() != null) { + opParameter.getCustomParams().putAll(draw.getOption().getVariables()); + } + + return opParameter; + } + + private List loadRules(String sourceEntityNumber, String targetEntityNumber) { + List rules = ConvertRuleCache.loadRules(sourceEntityNumber, targetEntityNumber); + List enableRules = new ArrayList(); + Iterator var5 = rules.iterator(); + + while(var5.hasNext()) { + ConvertRuleElement rule = (ConvertRuleElement)var5.next(); + if (rule.isEnabled()) { + enableRules.add(rule); + } + } + + return enableRules; } } \ No newline at end of file