Processing...

Suggested case list:

Using timer to refresh a grid

383guest172.69.33.12125nk0uiMay 7, 2020 7:23:47 AMlink

user model to move item to another listbox

120guest162.158.193.148d0n3krApr 2, 2020 5:28:28 AMlink

Disabled list item row passed to VM-1981

296fatih123160.83.36.13025nk0uiFeb 13, 2018 4:25:44 PMlink

Disabled list item row passed to VM-1981

295fatih123160.83.36.13025nk0uiFeb 13, 2018 4:25:16 PMlink

Disabled list item row passed to VM-1981

294fatih123160.83.36.13225nk0uiFeb 13, 2018 3:30:44 PMlink

grid sample with ListModel/RowRenderer

816guest80.82.2.1312vah9ajFeb 21, 2017 11:42:21 AMlink

grid sample with ListModel/RowRenderer

809guest175.98.113.1622vah9ajJan 26, 2017 9:19:33 AMlink

grid sample with ListModel/RowRenderer

196guest79.185.142.402vah9ajApr 26, 2014 10:53:57 PMlink

grid sample with ListModel/RowRenderer

195guest79.185.142.402vah9ajApr 26, 2014 10:53:54 PMlink

grid sample with ListModel/RowRenderer

194guest79.185.142.402vah9ajApr 26, 2014 10:53:51 PMlink

grid sample with ListModel/RowRenderer

193guest79.185.142.402vah9ajApr 26, 2014 10:53:48 PMlink

grid sample with ListModel/RowRenderer

192guest79.185.142.402vah9ajApr 26, 2014 10:53:44 PMlink

grid sample with ListModel/RowRenderer

191guest79.185.142.402vah9ajApr 26, 2014 10:53:40 PMlink

Hierarchy table without using ZK PE/EE

1aaknai151.28.135.2131s871daJul 29, 2013 11:02:46 PMlink

grid sample with ListModel/RowRenderer

128aaknai151.28.135.2132vah9ajJul 29, 2013 7:20:00 PMlink

user model to move item to another listbox

1TonyQ114.25.109.94d0n3krApr 21, 2012 10:43:27 AMlink

Using timer to refresh a grid

1TonyQ220.133.44.3725nk0uiFeb 17, 2012 3:17:34 AMlink

Fire a event from child iframe

1TonyQ220.133.44.372eupjotFeb 3, 2012 5:04:52 AMlink

Textbox input restriction sample

1TonyQ72.21.245.2431b3nlr0Dec 20, 2011 10:09:10 AMlink

Test web core taglib in ZUL

1TonyQ198.203.175.175ofqkemDec 17, 2011 3:36:08 AMlink

Latest 10 Fiddles :

constraint binding textbox

3guest172.68.151.16220peldaDec 5, 2025 5:08:19 PMlink

Another new ZK fiddle

2guest172.68.151.16320peldaDec 5, 2025 5:07:51 PMlink

Another new ZK fiddle

1guest172.68.151.16220peldaDec 5, 2025 5:07:32 PMlink

Another new ZK fiddle

1peggypeng172.71.154.99364f4neDec 5, 2025 9:24:31 AMlink

tooltip example

2guest104.22.23.13rc1ntoDec 4, 2025 2:23:45 PMlink

Another new ZK fiddle

1guest172.69.134.2277t7602Dec 4, 2025 1:40:46 PMlink

Another new ZK fiddle

1peggypeng104.22.17.1802df6e3oDec 4, 2025 8:41:29 AMlink

onClose

1peggypeng172.68.87.248j8kd8aDec 3, 2025 4:10:26 AMlink

Another new ZK fiddle

1peggypeng172.69.134.2271rm7f4eNov 26, 2025 3:31:24 AMlink

ZK-5912-Suggestion

2rebeccalai104.22.20.1442qrmiiuNov 26, 2025 2:07:15 AMlink

combobox

3guest172.68.87.24036kt95hAug 4, 2025 3:54:20 AMlink

resources

index.zulzul<?page title="" contentType="text/html;charset=UTF-8"?> <zk> <dynaWindow id="H0051DynaWindow" apply="com.miwbs.client.typeH.controller.H0051Controller" style="background-color: transparent"> <vlayout style="overflow-x:hidden;overflow-y: scroll;" height="560px"> <groupbox id="queryGbx" visible="true"> <grid> <columns> <column width="10%" /> <column width="40%" /> <column width="8%" /> <column width="42%" /> </columns> <rows> <row> <label value="欲查詢 QUEUE"/> <dynaCodeComboBox id="queue" kind="P_H0003" cols="40" sclass="mfCombobox" autodrop="true"/> <label value="電文種類"/> <cell style="combine"> <dynaCodeComboBox kind="P_H0031" id="mx" showKey="false" cols="4" /> - <extTextbox id="mt" disabled="false" cols="3" maxlength="3" checkNumberWord="true"/> </cell> </row> <row> <extTextbox visible="false" /> <extTextbox visible="false" /> <extTextbox visible="false" /> <extTextbox visible="false" /> </row> </rows> </grid> </groupbox> <groupbox title="查詢結果" id="resultGbx" visible="false"> <grid id="resultGrid" mold="paging" pageSize="50"> <auxhead> <auxheader id="resultCount" label="總筆數: " colspan="10" rowspan="1" style="text-align:right;" /> </auxhead> <columns> <column label="TRN Ref No" align="left" width="12%"/> <column label="SWIFT RecordID" align="left" width="12%"/> <column label="QUEUE Status" align="left" width="12%"/> <column label="TimeStamp" align="left" width="12%"/> <column label="EntryTeller" align="center"/> <column label="AlterTeller" align="center"/> <column label="VerifyTeller" align="center"/> <column label="ReleaseTeller" align="center" width="10%"/> <column label="RTGS Flag" align="center" width="8%"/> <column label="RTGSRSP Flag" align="center" width="10%"/> </columns> </grid> <paging id="paging" pageSize="50" detailed="true"/> </groupbox> <groupbox title="查詢結果" id="resultGbx2" visible="false"> <grid> <columns> <column/> </columns> <rows> <row style="text-align: right; width: 100%;"> <checkbox id="selectPageCheckbox2" label="刪除本頁" /> </row> </rows> </grid> <grid id="resultGrid2" mold="paging" pageSize="50"> <auxhead> <auxheader label="Copy QUEUE" colspan="2" rowspan="1" style="text-align: left;" /> <auxheader id="resultCount2" label="總筆數: " colspan="5" rowspan="1" style="text-align:right;" /> </auxhead> <columns> <column label="檢視" align="center" width="7%"/> <column label="取件" align="center" width="7%"/> <column label="電文種類" align="center" width="15%"/> <column label="複製電文名稱" align="center" width="29%"/> <column label="建立日期" align="center" width="15%"/> <column label="RTGS記號" align="center" width="15%"/> <column label="刪除" align="center" width="7%"/> </columns> </grid> <paging id="paging2" pageSize="50" detailed="true"/> </groupbox> </vlayout> </dynaWindow> </zk>TestComposer.javajavapackage com.miwbs.client.typeH.controller; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; import com.miwbs.client.typeH.common.controller.PreviewFullNameController; import com.miwbs.model.common.bo.PageInfoH0051; import com.miwbs.model.common.bo.PageInfoSWTSfoutm; import com.miwbs.model.mx.bo.MxMessage; import com.miwbs.model.swift.mx.util.SwiftMxUtils; import com.miwbs.webservice.IWSSwtBusinessService; import org.apache.commons.beanutils.DynaBean; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.NumberUtils; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.Executions; import org.zkoss.zk.ui.event.CheckEvent; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; import org.zkoss.zk.ui.event.ForwardEvent; import org.zkoss.zk.ui.util.Clients; import org.zkoss.zkplus.spring.SpringUtil; import org.zkoss.zul.Auxheader; import org.zkoss.zul.Checkbox; import org.zkoss.zul.Column; import org.zkoss.zul.Grid; import org.zkoss.zul.Groupbox; import org.zkoss.zul.ListModelList; import org.zkoss.zul.Messagebox; import org.zkoss.zul.Paging; import org.zkoss.zul.Row; import org.zkoss.zul.Window; import org.zkoss.zul.event.PagingEvent; import com.mitac.tms.ElkLog; import com.miwbs.client.Args; import com.miwbs.client.CommonController; import com.miwbs.client.common.controller.MainPortalController; import com.miwbs.client.doc.utils.DocUtils; import com.miwbs.client.typeH.renderer.H0051Renderer; import com.miwbs.client.utility.ComponentTool; import com.miwbs.client.zkComp2.component.common.DynaCodeComboBox; import com.miwbs.client.zkComp2.component.common.DynaWindow; import com.miwbs.client.zkComp2.component.common.ExtTextbox; import com.miwbs.constant.CommonConstant; import com.miwbs.exception.WebOSException; import com.miwbs.model.common.bo.ActionInfo; import com.miwbs.model.common.bo.H0051; import com.miwbs.model.common.bo.JournalInfo; import com.miwbs.model.common.bo.SWTSfcpym; import com.miwbs.model.common.bo.SWTSfoutm; import com.miwbs.model.raa.bo.FunctionInfo; import com.miwbs.model.wosa.WosaUtils; import com.miwbs.utility.DynaCodeUtil; import com.miwbs.webservice.IWSSwtEnquiryService; import miwbs.util.DateUtil; import miwbs.util.StringUtil; @SuppressWarnings({ "unchecked", "rawtypes" }) public class H0051Controller extends CommonController { private static final long serialVersionUID = 1L; private DynaWindow H0051DynaWindow; private DynaCodeComboBox queue, mx; private ExtTextbox mt; private Groupbox queryGbx, resultGbx, resultGbx2; private Grid resultGrid, resultGrid2; private Auxheader resultCount, resultCount2; private boolean ecFlag = false; private IWSSwtEnquiryService iWSSwtEnquiryService = (IWSSwtEnquiryService) SpringUtil.getBean("iWSSwtEnquiryService"); private IWSSwtBusinessService iWSSwtBusinessService = (IWSSwtBusinessService) SpringUtil.getBean("iWSSwtBusinessService"); List<SWTSfoutm> outList = new ArrayList<>(); List<H0051> cpyList = new ArrayList<H0051>(); List H0051print = new ArrayList(); // 查詢參數 private SWTSfoutm swtfoutm = null; private SWTSfcpym swtsfcpym = null; private Paging paging, paging2; private int totalSize, totalSize2; private Checkbox selectPageCheckbox2; // resultGbx2 刪除本頁 private Set<Long> selectedSfcpymSeqs = new HashSet<>(); private List<String> selectedSfcpymReckeys = new ArrayList<>(); public void onCreate() { // 存下列印 savePrintData(); // 按鍵走訪 createSendBtnForward((Component) spaceOwner); ComponentTool.setShowButton(queryBTN, exitBTN); // 註冊事件 DynaBean bo; // 更正交易 if (arg.get(Args.EC_FLAG) != null) { ecFlag = (boolean) arg.get(Args.EC_FLAG); bo = (DynaBean) arg.get(Args.CASE_BO); ComponentTool.bo2UI(self, bo); ecEvent(); } addComponentTabEvent(queue, "onBlurQueue", this); // queue.addForward(Events.ON_FOCUS, queue, "onFocusQueue"); addComponentTabEvent(mx, "onBlurMX", this); addComponentTabEvent(mt, "onBlurMT", this); // queryBTN.addForward(Events.ON_FOCUS, queryBTN, "onFocusQueryBTN"); // queue.focus(); paging.addEventListener("onPaging", this::onPaging); // #14339 H0051_調整Select *寫法 // paging2.addEventListener("onPaging", this::onPaging2); paging2.addEventListener("onPaging", createPaging2Listener()); selectPageCheckbox2.addEventListener(Events.ON_CHECK, createSelectPageCheckbox2Listener()); } private void ecEvent() { disabledAllComponent(self, true); sendBTN.setDisabled(true); } public void onExit() throws Exception { clearPrintData(); portalController.closeWindow(); Clients.clearBusy(); } public void onBack() throws Exception { this.onClear(); } private void savePrintData() { desktop.setAttribute(this.getClass().getSimpleName() + this.getActionInfoForQuery().getUuid(), this); } private void clearPrintData() { desktop.setAttribute(this.getClass().getSimpleName() + this.getActionInfoForQuery().getUuid(), null); } public void onBlurQueue() { //this.showMsg(getQueue()); ElkLog.info(logger, this.getTeller(), "into onBlurQueue"); mx.setValue(StringUtils.EMPTY); mx.setDisabled(true); mt.setValue(StringUtils.EMPTY); mt.setDisabled(true); if(queue.getSelectedKey() != null) { if(8 == getQueue()){ ElkLog.info(logger, this.getTeller(), "8 == getQueue()"); mx.setDisabled(false); mx.focus(); mt.setDisabled(false); // mt.focus(); }else { ElkLog.info(logger, this.getTeller(), "8 != getQueue()"); queryBTN.setDisabled(false); queryBTN.focus(); } } else { ElkLog.info(logger, this.getTeller(), "queue.getSelectedKey() == null"); queryBTN.setDisabled(true); queue.focus(); } queue.setOpen(false); ElkLog.info(logger, this.getTeller(), "end onBlurQueue"); } public void onFocusQueryBTN() throws Exception{ ComponentTool.clearComponentValue(mt); } public void onBlurMX() { // if(StringUtils.isBlank(mx.getValue())) { // mx.setValue(StringUtils.leftPad("", mx.getMaxlength(), "0")); // } else if(!mx.getValue().matches("0[0123]|9[89]")) { // this.showMsg("限輸入0, 1, 2, 3, 98, 99"); // mx.focus(); // return; // } this.clearMessage(); if (StringUtils.isNotBlank(mx.getValue()) && mx.getSelectedItem() == null) { showMsg("輸入值必須為下拉選項"); mx.focus(); } } public void onBlurMT() { if(StringUtils.isBlank(mt.getValue()) || mt.getMaxlength() > mt.getValue().length()) { mt.setValue(StringUtils.leftPad(mt.getValue(), mt.getMaxlength(), "0")); } } // 查詢結果換頁時查詢換頁資料後刷新 public void onPaging(Event event) throws WebOSException { int activePage = ((PagingEvent) event).getActivePage(); totalSize = 0; paging.setVisible(true); if (swtfoutm != null) { PageInfoSWTSfoutm pageInfoSWTSfoutm = iWSSwtEnquiryService.getSWTSfoutmsByH0051(activePage + 1, resultGrid.getPageSize(), swtfoutm); outList = pageInfoSWTSfoutm.getList(); outList.stream().forEach(e -> e.setQueue(noNullString(queue.getSelectedKey()))); adjustColumnWidth(); resultGrid.setModel(new ListModelList<SWTSfoutm>(outList)); resultGrid.setRowRenderer(new H0051Renderer()); totalSize = (int) pageInfoSWTSfoutm.getTotal(); resultCount.setLabel(CommonConstant.GRID_COUNT + totalSize + CommonConstant.GRID_COUNT_UINT); paging.setTotalSize(totalSize); paging.setActivePage(pageInfoSWTSfoutm.getPageNum()>0 ? pageInfoSWTSfoutm.getPageNum()-1 : 0); } } public void doQuery() throws Exception { this.clearMessage(); outList.clear(); cpyList.clear(); queue.setOpen(false); resultGbx.setVisible(false); queryGbx.invalidate(); resultGbx2.setVisible(false); // #14339 H0051_調整Select *寫法 swtfoutm = null; swtsfcpym = null; PageInfoSWTSfoutm pageInfoSWTSfoutm= null; PageInfoH0051 pageInfoH0051= null; int activePage = 0; // 分頁第一頁 activePage 為 0 totalSize = totalSize2 = 0; paging.setVisible(false); paging2.setVisible(false); H0051print.clear(); selectPageCheckbox2.setChecked(false); selectedSfcpymSeqs.clear(); selectedSfcpymReckeys.clear(); switch(getQueue()) { case 0: swtfoutm = new SWTSfoutm(); swtfoutm.setFromH0051(true); swtfoutm.setBrno(this.getActionInfoForQuery().getBranchCode()); //outList = iWSSwtEnquiryService.getSWTSfoutms(swtfoutm); pageInfoSWTSfoutm = iWSSwtEnquiryService.getSWTSfoutmsByH0051(activePage + 1, resultGrid.getPageSize(), swtfoutm); outList = pageInfoSWTSfoutm.getList(); break; case 5: swtfoutm = new SWTSfoutm(); swtfoutm.setFromH0051(true); swtfoutm.setBrno(this.getActionInfoForQuery().getBranchCode()); swtfoutm.setStatus("03"); swtfoutm.setAckfg("01"); //outList = iWSSwtEnquiryService.getSWTSfoutms(swtfoutm); pageInfoSWTSfoutm = iWSSwtEnquiryService.getSWTSfoutmsByH0051(activePage + 1, resultGrid.getPageSize(), swtfoutm); outList = pageInfoSWTSfoutm.getList(); break; case 6: swtfoutm = new SWTSfoutm(); swtfoutm.setFromH0051(true); swtfoutm.setBrno(this.getActionInfoForQuery().getBranchCode()); swtfoutm.setStatus("03"); swtfoutm.setAckfg("02"); //outList = iWSSwtEnquiryService.getSWTSfoutms(swtfoutm); pageInfoSWTSfoutm = iWSSwtEnquiryService.getSWTSfoutmsByH0051(activePage + 1, resultGrid.getPageSize(), swtfoutm); outList = pageInfoSWTSfoutm.getList(); break; case 11: swtfoutm = new SWTSfoutm(); swtfoutm.setFromH0051(true); swtfoutm.setBrno(this.getActionInfoForQuery().getBranchCode()); swtfoutm.setStatus("03"); swtfoutm.setAckfg("03"); //outList = iWSSwtEnquiryService.getSWTSfoutms(swtfoutm); pageInfoSWTSfoutm = iWSSwtEnquiryService.getSWTSfoutmsByH0051(activePage + 1, resultGrid.getPageSize(), swtfoutm); outList = pageInfoSWTSfoutm.getList(); break; case 3: swtfoutm = new SWTSfoutm(); swtfoutm.setFromH0051(true); swtfoutm.setBrno(this.getActionInfoForQuery().getBranchCode()); swtfoutm.setStatus("03"); swtfoutm.setAckfg("00"); //outList = iWSSwtEnquiryService.getSWTSfoutms(swtfoutm); pageInfoSWTSfoutm = iWSSwtEnquiryService.getSWTSfoutmsByH0051(activePage + 1, resultGrid.getPageSize(), swtfoutm); outList = pageInfoSWTSfoutm.getList(); break; case 8: swtsfcpym = new SWTSfcpym(); swtsfcpym.setStatus("1"); swtsfcpym.setBrno(this.getActionInfoForQuery().getBranchCode()); // if(!"00".equals(mx.getValue())) { // swtsfcpym.setMx(mx.getValue()); // } // #14339 H0051_調整Select *寫法 //swtsfcpym.setMx(StringUtil.valueOfStringForBlank(mx.getSelectedKey())); String businessType = SwiftMxUtils.getMxBusinessType(StringUtil.valueOfStringForBlank(mx.getSelectedKey())); if (StringUtils.isNotBlank(businessType)) { swtsfcpym.setMx(businessType); } else { swtsfcpym.setMx(StringUtil.valueOfStringForBlank(mx.getSelectedKey())); } if(!"000".equals(mt.getValue())) { swtsfcpym.setReckey(mt.getValue()); } // cpyList = iWSSwtEnquiryService.getSWTSfcpymsByH0051(swtsfcpym); pageInfoH0051 = iWSSwtEnquiryService.getSWTSfcpymsByH0051WithMyBatis(activePage + 1, resultGrid2.getPageSize(), swtsfcpym); cpyList = pageInfoH0051.getList(); break; case 1: case 2: case 4: case 7: case 9: swtfoutm = new SWTSfoutm(); swtfoutm.setFromH0051(true); swtfoutm.setBrno(this.getActionInfoForQuery().getBranchCode()); swtfoutm.setStatus(String.format("%02d", getQueue())); // outList = iWSSwtEnquiryService.getSWTSfoutms(swtfoutm); pageInfoSWTSfoutm = iWSSwtEnquiryService.getSWTSfoutmsByH0051(activePage + 1, resultGrid.getPageSize(), swtfoutm); outList = pageInfoSWTSfoutm.getList(); break; } // 處理交易日誌 ActionInfo actionInfo = this.getActionInfoForQuery(); Integer kinbr = actionInfo.getBranchCode() != null ? Integer.valueOf(actionInfo.getBranchCode()) : null; Integer trmseq = actionInfo.getTerminalCode() != null ? Integer.valueOf(actionInfo.getTerminalCode()) : null; String txtno = iWSBaseMiddleService.getTxtnoSeq(actionInfo, kinbr, trmseq); // 產出查詢結果UI if (CollectionUtils.isNotEmpty(outList)) { queryGbx.setVisible(false); resultGbx.setVisible(true); // #13671 outList.stream().forEach(e -> e.setQueue(noNullString(queue.getSelectedKey()))); adjustColumnWidth(); this.SendTxnLog(txtno, null, null, null, null, JournalInfo.TXN_STATUS_SUCCESS1, null, ecFlag, desktop, spaceOwner); resultGrid.setModel(new ListModelList<SWTSfoutm>(outList)); resultGrid.setRowRenderer(new H0051Renderer()); // #14339 H0051_調整Select *寫法 //resultCount.setLabel(CommonConstant.GRID_COUNT + resultGrid.getModel().getSize() + CommonConstant.GRID_COUNT_UINT); totalSize = (int) (pageInfoSWTSfoutm != null ? pageInfoSWTSfoutm.getTotal() : 0); resultCount.setLabel(CommonConstant.GRID_COUNT + totalSize + CommonConstant.GRID_COUNT_UINT); paging.setTotalSize(totalSize); paging.setActivePage(activePage); paging.setVisible(true); // H0051print = outList; ComponentTool.setShowButton(backBTN, exitBTN); backBTN.focus(); } else if (CollectionUtils.isNotEmpty(cpyList)) { queryGbx.setVisible(false); resultGbx2.setVisible(true); this.SendTxnLog(txtno, null, null, null, null, JournalInfo.TXN_STATUS_SUCCESS1, null, ecFlag, desktop, spaceOwner); setGrid2AndPaging2(activePage, pageInfoH0051 != null ? pageInfoH0051.getTotal() : 0); // H0051print = cpyList; ComponentTool.setShowButton(sendBTN, backBTN, exitBTN); sendBTN.setDisabled(true); backBTN.focus(); } else { queryGbx.setVisible(true); this.SendTxnLog(txtno, null, null, null, null, JournalInfo.TXN_STATUS_FAILURE, null, ecFlag, desktop, spaceOwner); errMsg(DynaCodeUtil.getCodeNameByP_SYS0002("EE00074"), queue); return; } } /** * #14914 H0051若查無資料時,游標未回到「欲查詢 QUEUE」欄位 * @throws Exception */ @Override public void onQuery() throws Exception{ try { doQuery(); }catch(Exception e) { throw e; }finally { // queryBTN.focus(); Clients.clearBusy(); } } public void printReport(Object tota) { clearMessage(); Clients.clearBusy(); Clients.evalJavaScript(WosaUtils.getInstance().getConnectCMD()); if (!resultGbx.isVisible() && !resultGbx2.isVisible()) { ElkLog.info(logger,this.getTeller(),"printReport 解析列印 H5100 start"); DocUtils.printPage(this, spaceOwner, Arrays.asList("queryGbx"), "H0051", getActionInfoForQuery().getPrintType(), PrintPaper.PORT); ElkLog.info(logger,this.getTeller(),"printReport 解析列印 END"); }else { List<Map> printList = new ArrayList<>(); // xfs欄位設定 List<String> swiftkey = new ArrayList<>(); List<String> status = new ArrayList<>(); List<String> timestamp = new ArrayList<>(); List<String> tlrno = new ArrayList<>(); List<String> altno = new ArrayList<>(); List<String> vryno = new ArrayList<>(); List<String> relno = new ArrayList<>(); List<String> trn = new ArrayList<>(); List<String> rtgs = new ArrayList<>(); List<String> rtgsrsp = new ArrayList<>(); List<String> msgType = new ArrayList<>(); List<String> copySwiftName = new ArrayList<>(); List<String> createdate = new ArrayList<>(); List<String> delete = new ArrayList<>(); try { if (CollectionUtils.size(H0051print) == 0) { if (swtfoutm != null) { H0051print = iWSSwtEnquiryService.getSWTSfoutmsByH0051(1, totalSize, swtfoutm).getList(); } else if (swtsfcpym != null){ H0051print = iWSSwtEnquiryService.getSWTSfcpymsByH0051WithMyBatis(1, totalSize2, swtsfcpym).getList(); } } } catch (Exception e) { this.showMsg(e.getMessage()); return; } // 整理報表資料 if(CollectionUtils.isEmpty(H0051print)) { Map<String, Object> subMap = new HashMap(); initTitle(subMap); printList.add(subMap); if (swtfoutm != null) { this.sendToPrinter("A4_LAND", "H0051", "H0051A", printList, false, this.getActionInfoForQuery().getPrintType(), PrintPaper.LAND); } else if (swtsfcpym != null) { this.sendToPrinter("A4_LAND", "H0051", "H0051Copy", printList, false, this.getActionInfoForQuery().getPrintType(), PrintPaper.LAND); } } else { for (Object o : H0051print) { if (o instanceof SWTSfoutm) { SWTSfoutm swt = (SWTSfoutm) o; swiftkey.add(String.format("%s-%s-%s-%s", swt.getBrno(), swt.getMmdd(), swt.getMt(), swt.getSrno())); status.add(getStatus(swt.getStatus(), getRejectCode(swt.getData()), swt.getAckfg())); timestamp.add(toTimestamp(swt.getSfoutm_date(), swt.getSfoutm_time())); tlrno.add(swt.getTlrno()); altno.add(swt.getAltno()); vryno.add(swt.getVryno()); relno.add(swt.getRelno()); trn.add(swt.getTrn()); rtgs.add(swt.getRtgs()); rtgsrsp.add(swt.getRtgsrsp()); } else if (o instanceof H0051) { H0051 swt = (H0051) o; if (StringUtils.isNotBlank(swt.getMx())) { msgType.add(String.format("%s-%s", StringUtils.defaultString(swt.getMx()), StringUtils.substring(StringUtils.defaultString(swt.getReckey()), 0, 3))); } else { msgType.add(StringUtils.substring(StringUtils.defaultString(swt.getReckey()), 0, 3)); } copySwiftName.add(StringUtils.substring(StringUtils.defaultString(swt.getReckey()), 3)); createdate.add(DateUtil.formatACDateTime2(swt.getCreatedate())); rtgs.add("1".equals(swt.getRtgs()) ? "1 : 是" : "0 : 否"); delete.add(selectedSfcpymSeqs.contains(swt.getSwtSfcpymSeq()) ? "V" : ""); } } if (swtfoutm != null) { // 切割資料 List<List<String>> swiftkeySplit = DocUtils.splitList(swiftkey, 30, 30); List<List<String>> statusSplit = DocUtils.splitList(status, 30, 30); List<List<String>> timestampSplit = DocUtils.splitList(timestamp, 30, 30); List<List<String>> tlrnoSplit = DocUtils.splitList(tlrno, 30, 30); List<List<String>> altnoSplit = DocUtils.splitList(altno, 30, 30); List<List<String>> vrynoSplit = DocUtils.splitList(vryno, 30, 30); List<List<String>> relnoSplit = DocUtils.splitList(relno, 30, 30); List<List<String>> trnSplit = DocUtils.splitList(trn, 30, 30); List<List<String>> rtgsSplit = DocUtils.splitList(rtgs, 30, 30); List<List<String>> rtgsrspSplit = DocUtils.splitList(rtgsrsp, 30, 30); for (int i = 0; i < swiftkeySplit.size(); i++) { Map<String, Object> subMap = new HashMap(); if (i == 0) { subMap.put("total", noNullString1(resultCount.getLabel())); } initTitle(subMap); subMap.put("swiftkey", swiftkeySplit.get(i)); subMap.put("status", statusSplit.get(i)); subMap.put("timestamp", timestampSplit.get(i)); subMap.put("tlrno", tlrnoSplit.get(i)); subMap.put("altno", altnoSplit.get(i)); subMap.put("vryno", vrynoSplit.get(i)); subMap.put("relno", relnoSplit.get(i)); subMap.put("trn", trnSplit.get(i)); subMap.put("rtgs", rtgsSplit.get(i)); subMap.put("rtgsrsp", rtgsrspSplit.get(i)); printList.add(subMap); } this.sendToPrinter("A4_LAND", "H0051", "H0051A", printList, false, this.getActionInfoForQuery().getPrintType(), PrintPaper.LAND); } else if (swtsfcpym != null) { // 切割資料 List<List<String>> msgTypeSplit = DocUtils.splitList(msgType, 30, 30); List<List<String>> copySwiftNameSplit = DocUtils.splitList(copySwiftName, 30, 30); List<List<String>> createdateSplit = DocUtils.splitList(createdate, 30, 30); List<List<String>> rtgsSplit = DocUtils.splitList(rtgs, 30, 30); List<List<String>> deleteSplit = DocUtils.splitList(delete, 30, 30); for (int i = 0; i < msgTypeSplit.size(); i++) { Map<String, Object> subMap = new HashMap(); if (i == 0) { subMap.put("total", noNullString1(resultCount2.getLabel())); } initTitle(subMap); subMap.put("msgType", msgTypeSplit.get(i)); subMap.put("copySwiftName", copySwiftNameSplit.get(i)); subMap.put("createdate", createdateSplit.get(i)); subMap.put("rtgs", rtgsSplit.get(i)); subMap.put("delete", deleteSplit.get(i)); printList.add(subMap); } this.sendToPrinter("A4_LAND", "H0051", "H0051Copy", printList, false, this.getActionInfoForQuery().getPrintType(), PrintPaper.LAND); } } Clients.clearBusy(); backBTN.focus(); } } private void initTitle(Map<String, Object> subMap) { subMap.put("label_brno", "分行別"); subMap.put("brno", this.getActionInfoForQuery().getBranchCode()); subMap.put("label_trm", "櫃員機"); subMap.put("trm", this.getActionInfoForQuery().getTerminalCode()); subMap.put("label_agentid", "櫃員編號"); subMap.put("agentid", this.getActionInfoForQuery().getAgentId()); subMap.put("label_printDate", "交易日期"); subMap.put("txdate", DateUtil.formatTWDate(getBusinessDate())); subMap.put("label_printTime", "交易時間"); subMap.put("printTime", DateUtil.formatTime()); if (swtfoutm != null) { subMap.put("label_swiftkey", "SWIFT RecordID"); subMap.put("label_status", "QUEUE Status"); subMap.put("label_timestamp", "TimeStamp"); subMap.put("label_tlrno", "EntryTeller"); subMap.put("label_altno", "AlterTeller"); subMap.put("label_vryno", "VerifyTeller"); subMap.put("label_relno", "ReleaseTeller"); subMap.put("label_trn", "TRN Ref No"); subMap.put("label_rtgs", "RTGS Flag"); subMap.put("label_rtgsrsp", "RTGSRSP Flag"); } else if (swtsfcpym != null) { subMap.put("label_msgType", "電文種類"); subMap.put("label_copySwiftName", "複製電文名稱"); subMap.put("label_createdate", "建立日期"); subMap.put("label_rtgs", "RTGS記號"); subMap.put("label_delete", "刪除"); } } private String getRejectCode(String data) { return StringUtils.substring(data, 0, StringUtils.indexOf(data, "{")); } private String getStatus(String status, String rejectCode, String ackfg) { String stat = ""; if(StringUtils.isNotBlank(status)) switch(status) { case "00": stat = ""; break; case "01": stat = "Alter QUEUE"; break; case "02": stat = "Verify QUEUE"; break; case "03": if(StringUtils.isNotBlank(ackfg)) { switch(ackfg) { case "00": stat = "Already Sent to Host"; break; case "01": stat = getStatus("05", "", ""); break; case "02": stat = getStatus("06", rejectCode, ""); break; case "03": stat = getStatus("11", "", ""); break; } }else { stat = ""; } break; case "04": stat = "Release QUEUE"; break; case "05": stat = "SWIFT ACK "; break; case "06": stat = "NAK: " + rejectCode; break; case "07": stat = "Batch QUEUE"; break; case "08": stat = "Copy QUEUE"; break; case "09": stat = "Cancel QUEUE"; break; case "10": case "11": stat = "SWIFT ERROR"; break; default: stat = ""; } return stat; } private String toTimestamp(String date, String time) { if(StringUtils.isBlank(date) && StringUtils.isBlank(time)) { return "0000/00/00 00:00:00"; } SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss"); SimpleDateFormat sf1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); String timestamp = ""; try { timestamp = sf1.format(sf.parse(date+time)); } catch (ParseException e) { e.printStackTrace(); } return timestamp; } private Integer getQueue() { String status = queue.getSelectedKey().toString(); switch(queue.getSelectedKey().toString()){ case "3": status="4"; break; case "4": status="7"; break; case "5": status="3"; break; case "6": status="5"; break; case "7": status="6"; break; default: status=queue.getSelectedKey().toString(); } return NumberUtils.toInt(status); } /** * 取件按鍵點擊事件 * */ public void onPickUp(ForwardEvent fe) throws Exception { SWTSfoutm sWTSfoutm = Optional.ofNullable(fe) .map(ForwardEvent::getData) .filter(SWTSfoutm.class::isInstance) .map(SWTSfoutm.class::cast) .orElse(null); if(sWTSfoutm == null) { ElkLog.info(logger, this.getTeller(), "@@@ H0051取件去電為空"); return; } // MX電文暫禁 if(queue.getSelectedIndex() == 2) { // 選到放行queue才需要檢查 if (SwiftMxUtils.isMxSend() && "0".contentEquals(sWTSfoutm.getRtgs()) && StringUtils.isNotBlank(sWTSfoutm.getMx())) { showMsg("MX去電(CBPR+)暫停使用。"); return; } if (SwiftMxUtils.isMxRtgsSend() && "1".contentEquals(sWTSfoutm.getRtgs()) && StringUtils.isNotBlank(sWTSfoutm.getMx())) { showMsg("MX去電(RTGS)暫停使用。"); return; } } Map<String, Object> map = new HashMap<>(); map.put(Args.SPACE_OWNER, spaceOwner); map.put(Args.ORG_FUNC, arg.get(Args.ORG_FUNC)); String funcCode = ""; boolean isMx = StringUtils.isNotBlank(sWTSfoutm.getMx()); /* * (1)在查詢條件1、2、3、7等4種狀態增加【取件】按鈕及連動交易,連動交易規則如下 * QUEUE Status: Alter QUEUE,MT電文連動到H3100 ; * QUEUE Status: Verify QUEUE, MT電文連動到H1900 ; * QUEUE Status: Release QUEUE, MT電文連動到H1800。 * QUEUE Status: NAK QUEUE, MT電文連動到H3200。 * */ if("01".equals(sWTSfoutm.getStatus())) { funcCode = (isMx ? "HX" : "H") + "3100"; } else if("02".equals(sWTSfoutm.getStatus())) { funcCode = (isMx ? "HX" : "H") + "1900"; } else if("04".equals(sWTSfoutm.getStatus())) { funcCode = (isMx ? "HX" : "H") + "1800"; } else if("03".equals(sWTSfoutm.getStatus())) { funcCode = (isMx ? "HX" : "H") + "3200"; } FunctionInfo functionInfo = getFunctionInfo().get(funcCode); if(functionInfo == null) { ElkLog.info(logger, this.getTeller(), "@@@ H0051取件去電狀態為 " + sWTSfoutm.getStatus() + ", 無對應的交易功能"); return; } map.put(Args.WINDOW_TITLE, functionInfo.getWindowTitle()); map.put(Args.FUNCTION_CODE, functionInfo.getFuncCode()); map.put(Args.FUNCTION_URL, functionInfo.getFuncUrl()); map.put(Args.BUZ_CODE, functionInfo.getBusinessType().getBuzCode()); map.put("h0051PickUp", sWTSfoutm); MainPortalController mainPortalController = (MainPortalController) desktop.getAttribute(MainPortalController.class.getSimpleName()); if(mainPortalController == null) { ElkLog.info(logger, this.getTeller(), "@@@ H0051取件失敗, mainPortalController為空 "); return; } String msg = isMx ? String.format("@@@ H0051取件 %s開啟%s-%s-%s-%s-%s去電", funcCode, sWTSfoutm.getBrno(), sWTSfoutm.getMmdd(), sWTSfoutm.getMx(), sWTSfoutm.getMt(), sWTSfoutm.getSrno()) : String.format("@@@ H0051取件 %s開啟%s-%s-%s-%s去電", funcCode, sWTSfoutm.getBrno(), sWTSfoutm.getMmdd(), sWTSfoutm.getMt(), sWTSfoutm.getSrno()); ElkLog.info(logger, this.getTeller(), msg); mainPortalController.openNewFunction(map); } /** * #13671 * 調整增加取件按鍵後欄位寬度 * */ public void adjustColumnWidth() { if(StringUtil.in(queue.getSelectedKey(), "1", "2", "3", "7")) { List<Column> columns = resultGrid.getColumns().getChildren().stream() .filter(Column.class::isInstance) .map(Column.class::cast) .collect(Collectors.toList()); if(columns.size() == 10) { columns.get(2).setWidth("10%"); columns.get(4).setWidth("7%"); columns.get(5).setWidth("7%"); columns.get(6).setWidth("8%"); columns.get(7).setWidth("9%"); resultCount.setColspan(11); Column column = new Column(); column.setAlign("center"); column.setWidth("5%"); // 取件按鍵插入第一欄 resultGrid.getColumns().insertBefore(column, resultGrid.getColumns().getChildren().get(0)); } } } /** * Copy queue 查詢結果頁面刪除單筆勾選 * @param fe */ public void onCheckSfcpym(ForwardEvent fe) { this.clearMessage(); H0051 h0051 = Optional.ofNullable(fe.getOrigin()) .map(Event::getTarget) .map(Component::getParent) .filter(Row.class::isInstance).map(Row.class::cast) .map(Row::getValue) .filter(H0051.class::isInstance).map(H0051.class::cast) .orElse(null); if(h0051 != null) { boolean isChecked = Optional.ofNullable(fe.getOrigin()) .filter(CheckEvent.class::isInstance).map(CheckEvent.class::cast) .map(CheckEvent::isChecked) .orElse(false); h0051.setChecked(isChecked); if (isChecked) { if (!selectedSfcpymSeqs.contains(h0051.getSwtSfcpymSeq())) { addToSelections(h0051); } if (!selectPageCheckbox2.isChecked()) { boolean isAllChecked = Optional.ofNullable(cpyList) .filter(list -> !list.isEmpty()) .map(list -> list.stream().allMatch(H0051::isChecked)) .orElse(false); if (isAllChecked) { selectPageCheckbox2.setChecked(true); } } } else { if (selectedSfcpymSeqs.contains(h0051.getSwtSfcpymSeq())) { removeFromSelections(h0051); } if (selectPageCheckbox2.isChecked()) { selectPageCheckbox2.setChecked(false); } } selectPageCheckbox2.invalidate(); setSendOrBackBTNFocus(); } } public String renderedReckey(String mx, String reckey) { List<String> list = new ArrayList<>(); String renderedReckey = ""; if (StringUtils.isNotBlank(mx)) { list.add(String.format("%s-%s", StringUtils.defaultString(mx), StringUtils.substring(StringUtils.defaultString(reckey), 0, 3))); } else { list.add(StringUtils.substring(StringUtils.defaultString(reckey), 0, 3)); } list.add(StringUtils.substring(StringUtils.defaultString(reckey), 3)); return String.join(" ", list); } private void addToSelections(H0051 h0051) { selectedSfcpymSeqs.add(h0051.getSwtSfcpymSeq()); selectedSfcpymReckeys.add(renderedReckey(h0051.getMx(), h0051.getReckey())); } private void removeFromSelections(H0051 h0051) { selectedSfcpymSeqs.remove(h0051.getSwtSfcpymSeq()); selectedSfcpymReckeys.remove(renderedReckey(h0051.getMx(), h0051.getReckey())); } /** * Copy Queue 查詢結果點擊換頁 * @return */ private EventListener<PagingEvent> createPaging2Listener() { return pagingEvent -> { this.clearMessage(); totalSize2 = 0; selectPageCheckbox2.setChecked(false); if(swtsfcpym != null){ PageInfoH0051 pageInfoH0051 = iWSSwtEnquiryService.getSWTSfcpymsByH0051WithMyBatis(pagingEvent.getActivePage() + 1, resultGrid2.getPageSize(), swtsfcpym); cpyList = pageInfoH0051.getList(); for(H0051 h0051 : cpyList){ if (selectedSfcpymSeqs.contains(h0051.getSwtSfcpymSeq())) { h0051.setChecked(true); } } boolean isAllChecked = Optional.ofNullable(cpyList) .filter(list -> !list.isEmpty()) .map(list -> list.stream().allMatch(H0051::isChecked)) .orElse(false); if (isAllChecked) { selectPageCheckbox2.setChecked(true); } selectPageCheckbox2.invalidate(); setGrid2AndPaging2(pageInfoH0051.getPageNum()>0 ? pageInfoH0051.getPageNum()-1 : 0, pageInfoH0051.getTotal()); setSendOrBackBTNFocus(); } }; } /** * Copy Queue 查詢結果點擊刪除本頁Checkbox * @return */ private EventListener<CheckEvent> createSelectPageCheckbox2Listener() { return checkEvent -> { this.clearMessage(); for (H0051 h0051 : cpyList) { if (h0051 == null) { continue; } boolean isChecked = checkEvent.isChecked(); if (isChecked) { if (!h0051.isChecked() && !selectedSfcpymSeqs.contains(h0051.getSwtSfcpymSeq())) { addToSelections(h0051); } } else { if (h0051.isChecked() && selectedSfcpymSeqs.contains(h0051.getSwtSfcpymSeq())) { removeFromSelections(h0051); } } h0051.setChecked(isChecked); } resultGrid2.setModel(new ListModelList<>(cpyList)); setSendOrBackBTNFocus(); }; } /** * Copy Queue 查詢結果點擊預覽 * @param fe */ public void onPreviewMsg(ForwardEvent fe) { String previewMsg = Optional.ofNullable(fe.getOrigin()) .map(Event::getTarget) .map(Component::getParent) .filter(Row.class::isInstance).map(Row.class::cast) .map(Row::getValue) .filter(H0051.class::isInstance).map(H0051.class::cast) .map(e -> { try { SWTSfcpym sWTSfcpym = new SWTSfcpym(); sWTSfcpym.setSwtSfcpymSeq(e.getSwtSfcpymSeq()); List<SWTSfcpym> swtSfcpyms = iWSSwtEnquiryService.getSWTSfcpyms(sWTSfcpym); if (swtSfcpyms == null || swtSfcpyms.isEmpty()) { return null; } sWTSfcpym = swtSfcpyms.get(0); if (StringUtils.isBlank(sWTSfcpym.getMx())) { return sWTSfcpym.getData(); } else { return Optional.ofNullable(sWTSfcpym.getData()) .map(MxMessage::fromJson) .map(MxMessage::toPreviewMsg) .orElse(null); } } catch (Exception ex) { return null; } }) .orElse(null); if (StringUtils.isBlank(previewMsg)) { this.showMsg("此電文資料異常"); return; } Map<String, Object> map = new HashMap<>(); map.put("swiftData", previewMsg); Window win = (Window) Executions.createComponents(PreviewFullNameController.URL, null, map); win.doModal(); setSendOrBackBTNFocus(); } /** * Copy Queue 查詢結果點擊取件 * @param fe * @throws Exception */ public void onPickUpCopyQueue(ForwardEvent fe) throws Exception { H0051 h0051 = Optional.ofNullable(fe.getOrigin()) .map(Event::getTarget) .map(Component::getParent) .filter(Row.class::isInstance).map(Row.class::cast) .map(Row::getValue) .filter(H0051.class::isInstance).map(H0051.class::cast) .orElse(null); if(h0051 == null) { showMsg("此電文資料異常"); return; } Map<String, Object> map = new HashMap<>(); map.put(Args.SPACE_OWNER, spaceOwner); map.put(Args.ORG_FUNC, arg.get(Args.ORG_FUNC)); String funcCode = (StringUtils.isNotBlank(h0051.getMx()) ? "HX" : "H") + "3300"; FunctionInfo functionInfo = getFunctionInfo().get(funcCode); if(functionInfo == null) { showMsg("FunctionInfo 異常"); return; } map.put(Args.WINDOW_TITLE, functionInfo.getWindowTitle()); map.put(Args.FUNCTION_CODE, functionInfo.getFuncCode()); map.put(Args.FUNCTION_URL, functionInfo.getFuncUrl()); map.put(Args.BUZ_CODE, functionInfo.getBusinessType().getBuzCode()); map.put("h0051PickUp", h0051); MainPortalController mainPortalController = (MainPortalController) desktop.getAttribute(MainPortalController.class.getSimpleName()); if(mainPortalController == null) { showMsg("MainPortalController 為空"); return; } mainPortalController.openNewFunction(map); } /** * Copy Queue 查詢結果刪除勾選後送出 * @throws Exception */ public void doSave() throws Exception { Clients.clearBusy(); StringBuilder sb = new StringBuilder(); sb.append("請確認是否刪除 ").append(selectedSfcpymSeqs.size()).append(" 筆"); // .append(System.lineSeparator()); // int count = 0; // for (String reckey : selectedSfcpymReckeys) { // if (count >= 50) { // sb.append(" ..."); // break; // } // sb.append(System.lineSeparator()).append(reckey); // count++; // } int confirmNum = Messagebox.show(sb.toString(), "警示訊息", Messagebox.YES | Messagebox.NO, Messagebox.QUESTION); if(confirmNum == Messagebox.YES) { try { int deleteCount = iWSSwtBusinessService.deleteBatchSWTSfcpym(selectedSfcpymSeqs); showMsg("刪除成功"); } catch (Exception e) { showMsg("刪除失敗, error: " + e.getMessage()); return; } selectedSfcpymSeqs.clear(); selectedSfcpymReckeys.clear(); selectPageCheckbox2.setChecked(false); selectPageCheckbox2.invalidate(); sendBTN.setDisabled(true); backBTN.focus(); // 處理交易日誌 ActionInfo actionInfo = this.getActionInfoForQuery(); Integer kinbr = actionInfo.getBranchCode() != null ? Integer.valueOf(actionInfo.getBranchCode()) : null; Integer trmseq = actionInfo.getTerminalCode() != null ? Integer.valueOf(actionInfo.getTerminalCode()) : null; String txtno = iWSBaseMiddleService.getTxtnoSeq(actionInfo, kinbr, trmseq); this.SendTxnLog(txtno, null, null, null, null, JournalInfo.TXN_STATUS_SUCCESS1, null, ecFlag, desktop, spaceOwner); PageInfoH0051 pageInfoH0051 = iWSSwtEnquiryService.getSWTSfcpymsByH0051WithMyBatis(paging2.getActivePage() + 1, resultGrid2.getPageSize(), swtsfcpym); cpyList = pageInfoH0051.getList(); setGrid2AndPaging2(pageInfoH0051.getPageNum() > 0 ? pageInfoH0051.getPageNum()-1 : 0, pageInfoH0051.getTotal()); } } public void setGrid2AndPaging2(int activePage, long total) { resultGrid2.setModel(new ListModelList<H0051>(cpyList)); resultGrid2.setRowRenderer(new H0051Renderer()); totalSize2 = Long.hashCode(total); resultCount2.setLabel(CommonConstant.GRID_COUNT + totalSize2 + CommonConstant.GRID_COUNT_UINT); paging2.setVisible(true); paging2.setTotalSize(totalSize2); paging2.setActivePage(activePage); } public void setSendOrBackBTNFocus() { boolean isNoneChecked = CollectionUtils.isEmpty(selectedSfcpymSeqs); sendBTN.setDisabled(isNoneChecked); if (isNoneChecked) { backBTN.focus(); } else { sendBTN.focus(); } } }