返回列表 上一筆 下一筆

📄 資料內容

/**
	 * 取得搜尋資料
	 * iftSid:
	 *   0 = content only
	 *   1 = content + attachments (attachments will be appended after content)
	 *   2 = attachments only   (here we still parse as SearchHitBean with sfq_name/ifq_sid if service returns them)
	 */
	public List<SearchHitBean> getSearchContent(Integer iftSid, String strTxt, String userType) throws RemoteException {
	    List<SearchHitBean> out = new ArrayList<>();

	    WsGetFullTextSearchResponseWsGetFullTextSearchResult result = null;
	    WsGetAttachSearchResponseWsGetAttachSearchResult attachResult = null;

	    switch (iftSid) {
	        case 0:
	            result = service.wsGetFullTextSearch(strValidCode, 1, channelMap.get(userType), 100, strTxt, 0, "fq_hit");
	            LOGGER.info(vaildLog("### method:getSearchContent, webservice:wsGetFullTextSearch"));
	            LOGGER.info(vaildLog("### req:" + "wsGetFullTextSearch(" + strValidCode + ", 1, "
	                    + channelMap.get(userType) + ", 100, " + strTxt + ", 0, fq_hit)"));
	            break;
	        case 1:
	            result = service.wsGetFullTextSearch(strValidCode, 1, channelMap.get(userType), 100, strTxt, 0, "fq_hit");
	            LOGGER.info(vaildLog("### method:getSearchContent, webservice:wsGetFullTextSearch"));
	            LOGGER.info(vaildLog("### req:" + "wsGetFullTextSearch(" + strValidCode + ", 1, "
	                    + channelMap.get(userType) + ", 100, " + strTxt + ", 0, fq_hit)"));

	            attachResult = service.wsGetAttachSearch(strValidCode, 1, channelMap.get(userType), 100, strTxt, 0);
	            LOGGER.info(vaildLog("### method:getSearchContent, webservice:wsGetAttachSearch"));
	            LOGGER.info(vaildLog("### req:" + "wsGetAttachSearch(" + strValidCode + ", 1, "
	                    + channelMap.get(userType) + ", 100, " + strTxt + ", 0)"));
	            break;
	        case 2:
	            attachResult = service.wsGetAttachSearch(strValidCode, 1, channelMap.get(userType), 100, strTxt, 0);
	            LOGGER.info(vaildLog("### method:getSearchContent, webservice:wsGetAttachSearch"));
	            LOGGER.info(vaildLog("### req:" + "wsGetAttachSearch(" + strValidCode + ", 1, "
	                    + channelMap.get(userType) + ", 100, " + strTxt + ", 0)"));
	            break;
	        default:
	            return out;
	    }

	    // Use a set to de-dup by ifq_sid (like your original "seen" map)
	    Set<String> seen = new HashSet<>();

	    // --- content results: iterate in REVERSE order (to mimic your previous UI ordering) ---
	    if (result != null) {
	        MessageElement[] anyArr = result.get_any();
	        LOGGER.info(vaildLog("### data:" + (anyArr != null && anyArr.length > 0 ? anyArr[0] : "null")));

	        Element diffgram = pickDiffgram(anyArr);
	        if (diffgram != null) {
	            Element dataRoot = firstChildElementByLocalName(diffgram, "IQKB");
	            if (dataRoot == null) dataRoot = diffgram;

	            NodeList rows = dataRoot.getElementsByTagName("FullTextSearch");
	            for (int i = rows.getLength() - 1; i >= 0; i--) { // reverse
	                Element row = (Element) rows.item(i);

	                String ifqSid   = getChildText(row, "ifq_sid");
	                if (ifqSid.isBlank() || seen.contains(ifqSid)) continue;

	                SearchHitBean hit = new SearchHitBean.Builder()
	                        .fqSid(ifqSid)
	                        .ftSid(getChildText(row, "ift_sid"))
	                        .ftName(getChildText(row, "sft_name"))
	                        .fqName(getChildText(row, "sfq_name"))
	                        .fqHit(parseIntOrNull(getChildText(row, "ifq_hits")))
	                        .initTime(parseDateTimeSafely(getChildText(row, "dinit_time")))
	                        .modiTime(parseDateTimeSafely(getChildText(row, "dmodi_time")))
	                        .build();

	                seen.add(ifqSid);
	                out.add(hit);
	            }
	        }
	    }

	    // --- attachment results (if required): normal order append ---
	    if (attachResult != null) {
	        MessageElement[] anyArr = attachResult.get_any();
	        Element diffgram = pickDiffgram(anyArr);
	        if (diffgram != null) {
	            Element dataRoot = firstChildElementByLocalName(diffgram, "IQKB");
	            if (dataRoot == null) dataRoot = diffgram;

	            // Some attach search responses also return <FullTextSearch>-like rows with ifq_sid/sfq_name
	            // If your schema differs, adjust the row tag & fields accordingly.
	            NodeList rows = dataRoot.getElementsByTagName("FullTextSearch");
	            for (int i = 0; i < rows.getLength(); i++) {
	                Element row = (Element) rows.item(i);

	                String ifqSid = getChildText(row, "ifq_sid");
	                if (ifqSid.isBlank() || seen.contains(ifqSid)) continue;

	                SearchHitBean hit = new SearchHitBean.Builder()
	                        .fqSid(ifqSid)
	                        .ftSid(getChildText(row, "ift_sid"))
	                        .ftName(getChildText(row, "sft_name"))
	                        .fqName(getChildText(row, "sfq_name"))
	                        .fqHit(parseIntOrNull(getChildText(row, "ifq_hits")))
	                        .initTime(parseDateTimeSafely(getChildText(row, "dinit_time")))
	                        .modiTime(parseDateTimeSafely(getChildText(row, "dmodi_time")))
	                        .build();

	                seen.add(ifqSid);
	                out.add(hit);
	            }
	        }
	    }

	    return out;
	}

🔐 Base64 編碼內容

LyoqCgkgKiDlj5blvpfmkJzlsIvos4fmlpkKCSAqIGlmdFNpZDoKCSAqICAgMCA9IGNvbnRlbnQgb25seQoJICogICAxID0gY29udGVudCArIGF0dGFjaG1lbnRzIChhdHRhY2htZW50cyB3aWxsIGJlIGFwcGVuZGVkIGFmdGVyIGNvbnRlbnQpCgkgKiAgIDIgPSBhdHRhY2htZW50cyBvbmx5ICAgKGhlcmUgd2Ugc3RpbGwgcGFyc2UgYXMgU2VhcmNoSGl0QmVhbiB3aXRoIHNmcV9uYW1lL2lmcV9zaWQgaWYgc2VydmljZSByZXR1cm5zIHRoZW0pCgkgKi8KCXB1YmxpYyBMaXN0PFNlYXJjaEhpdEJlYW4+IGdldFNlYXJjaENvbnRlbnQoSW50ZWdlciBpZnRTaWQsIFN0cmluZyBzdHJUeHQsIFN0cmluZyB1c2VyVHlwZSkgdGhyb3dzIFJlbW90ZUV4Y2VwdGlvbiB7CgkgICAgTGlzdDxTZWFyY2hIaXRCZWFuPiBvdXQgPSBuZXcgQXJyYXlMaXN0PD4oKTsKCgkgICAgV3NHZXRGdWxsVGV4dFNlYXJjaFJlc3BvbnNlV3NHZXRGdWxsVGV4dFNlYXJjaFJlc3VsdCByZXN1bHQgPSBudWxsOwoJICAgIFdzR2V0QXR0YWNoU2VhcmNoUmVzcG9uc2VXc0dldEF0dGFjaFNlYXJjaFJlc3VsdCBhdHRhY2hSZXN1bHQgPSBudWxsOwoKCSAgICBzd2l0Y2ggKGlmdFNpZCkgewoJICAgICAgICBjYXNlIDA6CgkgICAgICAgICAgICByZXN1bHQgPSBzZXJ2aWNlLndzR2V0RnVsbFRleHRTZWFyY2goc3RyVmFsaWRDb2RlLCAxLCBjaGFubmVsTWFwLmdldCh1c2VyVHlwZSksIDEwMCwgc3RyVHh0LCAwLCAiZnFfaGl0Iik7CgkgICAgICAgICAgICBMT0dHRVIuaW5mbyh2YWlsZExvZygiIyMjIG1ldGhvZDpnZXRTZWFyY2hDb250ZW50LCB3ZWJzZXJ2aWNlOndzR2V0RnVsbFRleHRTZWFyY2giKSk7CgkgICAgICAgICAgICBMT0dHRVIuaW5mbyh2YWlsZExvZygiIyMjIHJlcToiICsgIndzR2V0RnVsbFRleHRTZWFyY2goIiArIHN0clZhbGlkQ29kZSArICIsIDEsICIKCSAgICAgICAgICAgICAgICAgICAgKyBjaGFubmVsTWFwLmdldCh1c2VyVHlwZSkgKyAiLCAxMDAsICIgKyBzdHJUeHQgKyAiLCAwLCBmcV9oaXQpIikpOwoJICAgICAgICAgICAgYnJlYWs7CgkgICAgICAgIGNhc2UgMToKCSAgICAgICAgICAgIHJlc3VsdCA9IHNlcnZpY2Uud3NHZXRGdWxsVGV4dFNlYXJjaChzdHJWYWxpZENvZGUsIDEsIGNoYW5uZWxNYXAuZ2V0KHVzZXJUeXBlKSwgMTAwLCBzdHJUeHQsIDAsICJmcV9oaXQiKTsKCSAgICAgICAgICAgIExPR0dFUi5pbmZvKHZhaWxkTG9nKCIjIyMgbWV0aG9kOmdldFNlYXJjaENvbnRlbnQsIHdlYnNlcnZpY2U6d3NHZXRGdWxsVGV4dFNlYXJjaCIpKTsKCSAgICAgICAgICAgIExPR0dFUi5pbmZvKHZhaWxkTG9nKCIjIyMgcmVxOiIgKyAid3NHZXRGdWxsVGV4dFNlYXJjaCgiICsgc3RyVmFsaWRDb2RlICsgIiwgMSwgIgoJICAgICAgICAgICAgICAgICAgICArIGNoYW5uZWxNYXAuZ2V0KHVzZXJUeXBlKSArICIsIDEwMCwgIiArIHN0clR4dCArICIsIDAsIGZxX2hpdCkiKSk7CgoJICAgICAgICAgICAgYXR0YWNoUmVzdWx0ID0gc2VydmljZS53c0dldEF0dGFjaFNlYXJjaChzdHJWYWxpZENvZGUsIDEsIGNoYW5uZWxNYXAuZ2V0KHVzZXJUeXBlKSwgMTAwLCBzdHJUeHQsIDApOwoJICAgICAgICAgICAgTE9HR0VSLmluZm8odmFpbGRMb2coIiMjIyBtZXRob2Q6Z2V0U2VhcmNoQ29udGVudCwgd2Vic2VydmljZTp3c0dldEF0dGFjaFNlYXJjaCIpKTsKCSAgICAgICAgICAgIExPR0dFUi5pbmZvKHZhaWxkTG9nKCIjIyMgcmVxOiIgKyAid3NHZXRBdHRhY2hTZWFyY2goIiArIHN0clZhbGlkQ29kZSArICIsIDEsICIKCSAgICAgICAgICAgICAgICAgICAgKyBjaGFubmVsTWFwLmdldCh1c2VyVHlwZSkgKyAiLCAxMDAsICIgKyBzdHJUeHQgKyAiLCAwKSIpKTsKCSAgICAgICAgICAgIGJyZWFrOwoJICAgICAgICBjYXNlIDI6CgkgICAgICAgICAgICBhdHRhY2hSZXN1bHQgPSBzZXJ2aWNlLndzR2V0QXR0YWNoU2VhcmNoKHN0clZhbGlkQ29kZSwgMSwgY2hhbm5lbE1hcC5nZXQodXNlclR5cGUpLCAxMDAsIHN0clR4dCwgMCk7CgkgICAgICAgICAgICBMT0dHRVIuaW5mbyh2YWlsZExvZygiIyMjIG1ldGhvZDpnZXRTZWFyY2hDb250ZW50LCB3ZWJzZXJ2aWNlOndzR2V0QXR0YWNoU2VhcmNoIikpOwoJICAgICAgICAgICAgTE9HR0VSLmluZm8odmFpbGRMb2coIiMjIyByZXE6IiArICJ3c0dldEF0dGFjaFNlYXJjaCgiICsgc3RyVmFsaWRDb2RlICsgIiwgMSwgIgoJICAgICAgICAgICAgICAgICAgICArIGNoYW5uZWxNYXAuZ2V0KHVzZXJUeXBlKSArICIsIDEwMCwgIiArIHN0clR4dCArICIsIDApIikpOwoJICAgICAgICAgICAgYnJlYWs7CgkgICAgICAgIGRlZmF1bHQ6CgkgICAgICAgICAgICByZXR1cm4gb3V0OwoJICAgIH0KCgkgICAgLy8gVXNlIGEgc2V0IHRvIGRlLWR1cCBieSBpZnFfc2lkIChsaWtlIHlvdXIgb3JpZ2luYWwgInNlZW4iIG1hcCkKCSAgICBTZXQ8U3RyaW5nPiBzZWVuID0gbmV3IEhhc2hTZXQ8PigpOwoKCSAgICAvLyAtLS0gY29udGVudCByZXN1bHRzOiBpdGVyYXRlIGluIFJFVkVSU0Ugb3JkZXIgKHRvIG1pbWljIHlvdXIgcHJldmlvdXMgVUkgb3JkZXJpbmcpIC0tLQoJICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgewoJICAgICAgICBNZXNzYWdlRWxlbWVudFtdIGFueUFyciA9IHJlc3VsdC5nZXRfYW55KCk7CgkgICAgICAgIExPR0dFUi5pbmZvKHZhaWxkTG9nKCIjIyMgZGF0YToiICsgKGFueUFyciAhPSBudWxsICYmIGFueUFyci5sZW5ndGggPiAwID8gYW55QXJyWzBdIDogIm51bGwiKSkpOwoKCSAgICAgICAgRWxlbWVudCBkaWZmZ3JhbSA9IHBpY2tEaWZmZ3JhbShhbnlBcnIpOwoJICAgICAgICBpZiAoZGlmZmdyYW0gIT0gbnVsbCkgewoJICAgICAgICAgICAgRWxlbWVudCBkYXRhUm9vdCA9IGZpcnN0Q2hpbGRFbGVtZW50QnlMb2NhbE5hbWUoZGlmZmdyYW0sICJJUUtCIik7CgkgICAgICAgICAgICBpZiAoZGF0YVJvb3QgPT0gbnVsbCkgZGF0YVJvb3QgPSBkaWZmZ3JhbTsKCgkgICAgICAgICAgICBOb2RlTGlzdCByb3dzID0gZGF0YVJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkZ1bGxUZXh0U2VhcmNoIik7CgkgICAgICAgICAgICBmb3IgKGludCBpID0gcm93cy5nZXRMZW5ndGgoKSAtIDE7IGkgPj0gMDsgaS0tKSB7IC8vIHJldmVyc2UKCSAgICAgICAgICAgICAgICBFbGVtZW50IHJvdyA9IChFbGVtZW50KSByb3dzLml0ZW0oaSk7CgoJICAgICAgICAgICAgICAgIFN0cmluZyBpZnFTaWQgICA9IGdldENoaWxkVGV4dChyb3csICJpZnFfc2lkIik7CgkgICAgICAgICAgICAgICAgaWYgKGlmcVNpZC5pc0JsYW5rKCkgfHwgc2Vlbi5jb250YWlucyhpZnFTaWQpKSBjb250aW51ZTsKCgkgICAgICAgICAgICAgICAgU2VhcmNoSGl0QmVhbiBoaXQgPSBuZXcgU2VhcmNoSGl0QmVhbi5CdWlsZGVyKCkKCSAgICAgICAgICAgICAgICAgICAgICAgIC5mcVNpZChpZnFTaWQpCgkgICAgICAgICAgICAgICAgICAgICAgICAuZnRTaWQoZ2V0Q2hpbGRUZXh0KHJvdywgImlmdF9zaWQiKSkKCSAgICAgICAgICAgICAgICAgICAgICAgIC5mdE5hbWUoZ2V0Q2hpbGRUZXh0KHJvdywgInNmdF9uYW1lIikpCgkgICAgICAgICAgICAgICAgICAgICAgICAuZnFOYW1lKGdldENoaWxkVGV4dChyb3csICJzZnFfbmFtZSIpKQoJICAgICAgICAgICAgICAgICAgICAgICAgLmZxSGl0KHBhcnNlSW50T3JOdWxsKGdldENoaWxkVGV4dChyb3csICJpZnFfaGl0cyIpKSkKCSAgICAgICAgICAgICAgICAgICAgICAgIC5pbml0VGltZShwYXJzZURhdGVUaW1lU2FmZWx5KGdldENoaWxkVGV4dChyb3csICJkaW5pdF90aW1lIikpKQoJICAgICAgICAgICAgICAgICAgICAgICAgLm1vZGlUaW1lKHBhcnNlRGF0ZVRpbWVTYWZlbHkoZ2V0Q2hpbGRUZXh0KHJvdywgImRtb2RpX3RpbWUiKSkpCgkgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKTsKCgkgICAgICAgICAgICAgICAgc2Vlbi5hZGQoaWZxU2lkKTsKCSAgICAgICAgICAgICAgICBvdXQuYWRkKGhpdCk7CgkgICAgICAgICAgICB9CgkgICAgICAgIH0KCSAgICB9CgoJICAgIC8vIC0tLSBhdHRhY2htZW50IHJlc3VsdHMgKGlmIHJlcXVpcmVkKTogbm9ybWFsIG9yZGVyIGFwcGVuZCAtLS0KCSAgICBpZiAoYXR0YWNoUmVzdWx0ICE9IG51bGwpIHsKCSAgICAgICAgTWVzc2FnZUVsZW1lbnRbXSBhbnlBcnIgPSBhdHRhY2hSZXN1bHQuZ2V0X2FueSgpOwoJICAgICAgICBFbGVtZW50IGRpZmZncmFtID0gcGlja0RpZmZncmFtKGFueUFycik7CgkgICAgICAgIGlmIChkaWZmZ3JhbSAhPSBudWxsKSB7CgkgICAgICAgICAgICBFbGVtZW50IGRhdGFSb290ID0gZmlyc3RDaGlsZEVsZW1lbnRCeUxvY2FsTmFtZShkaWZmZ3JhbSwgIklRS0IiKTsKCSAgICAgICAgICAgIGlmIChkYXRhUm9vdCA9PSBudWxsKSBkYXRhUm9vdCA9IGRpZmZncmFtOwoKCSAgICAgICAgICAgIC8vIFNvbWUgYXR0YWNoIHNlYXJjaCByZXNwb25zZXMgYWxzbyByZXR1cm4gPEZ1bGxUZXh0U2VhcmNoPi1saWtlIHJvd3Mgd2l0aCBpZnFfc2lkL3NmcV9uYW1lCgkgICAgICAgICAgICAvLyBJZiB5b3VyIHNjaGVtYSBkaWZmZXJzLCBhZGp1c3QgdGhlIHJvdyB0YWcgJiBmaWVsZHMgYWNjb3JkaW5nbHkuCgkgICAgICAgICAgICBOb2RlTGlzdCByb3dzID0gZGF0YVJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkZ1bGxUZXh0U2VhcmNoIik7CgkgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3MuZ2V0TGVuZ3RoKCk7IGkrKykgewoJICAgICAgICAgICAgICAgIEVsZW1lbnQgcm93ID0gKEVsZW1lbnQpIHJvd3MuaXRlbShpKTsKCgkgICAgICAgICAgICAgICAgU3RyaW5nIGlmcVNpZCA9IGdldENoaWxkVGV4dChyb3csICJpZnFfc2lkIik7CgkgICAgICAgICAgICAgICAgaWYgKGlmcVNpZC5pc0JsYW5rKCkgfHwgc2Vlbi5jb250YWlucyhpZnFTaWQpKSBjb250aW51ZTsKCgkgICAgICAgICAgICAgICAgU2VhcmNoSGl0QmVhbiBoaXQgPSBuZXcgU2VhcmNoSGl0QmVhbi5CdWlsZGVyKCkKCSAgICAgICAgICAgICAgICAgICAgICAgIC5mcVNpZChpZnFTaWQpCgkgICAgICAgICAgICAgICAgICAgICAgICAuZnRTaWQoZ2V0Q2hpbGRUZXh0KHJvdywgImlmdF9zaWQiKSkKCSAgICAgICAgICAgICAgICAgICAgICAgIC5mdE5hbWUoZ2V0Q2hpbGRUZXh0KHJvdywgInNmdF9uYW1lIikpCgkgICAgICAgICAgICAgICAgICAgICAgICAuZnFOYW1lKGdldENoaWxkVGV4dChyb3csICJzZnFfbmFtZSIpKQoJICAgICAgICAgICAgICAgICAgICAgICAgLmZxSGl0KHBhcnNlSW50T3JOdWxsKGdldENoaWxkVGV4dChyb3csICJpZnFfaGl0cyIpKSkKCSAgICAgICAgICAgICAgICAgICAgICAgIC5pbml0VGltZShwYXJzZURhdGVUaW1lU2FmZWx5KGdldENoaWxkVGV4dChyb3csICJkaW5pdF90aW1lIikpKQoJICAgICAgICAgICAgICAgICAgICAgICAgLm1vZGlUaW1lKHBhcnNlRGF0ZVRpbWVTYWZlbHkoZ2V0Q2hpbGRUZXh0KHJvdywgImRtb2RpX3RpbWUiKSkpCgkgICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKTsKCgkgICAgICAgICAgICAgICAgc2Vlbi5hZGQoaWZxU2lkKTsKCSAgICAgICAgICAgICAgICBvdXQuYWRkKGhpdCk7CgkgICAgICAgICAgICB9CgkgICAgICAgIH0KCSAgICB9CgoJICAgIHJldHVybiBvdXQ7Cgl9Cg==
返回列表 上一筆 下一筆