返回列表 上一筆 下一筆

📄 資料內容

/**

 * 取得搜尋資料

 * iftSid:

 *   0 = content only

 *   1 = content + attachments (attachments appended after content)

 *   2 = attachments only

 *

 * 備註:

 * - Axis 回傳的 any[]:index 0 通常是 schema,index 1 才是資料 diffgram。

 * - 內容結果維持「反向」以符合原前端行為;附件結果以「正向」附加。

 * - 去重以 ifq_sid 為準。

 */

public List<SearchHitBean> getSearchContent(Integer iftSid, String strTxt, String userType) throws RemoteException {

    List<SearchHitBean> out = new ArrayList<>();



    WsGetFullTextSearchResponseWsGetFullTextSearchResult result = null;

    WsGetAttachSearchResponseWsGetAttachSearchResult     attachResult = null;



    // --- call services(保留原本 log)---

    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;

    }



    // de-dup by ifq_sid

    Set<String> seen = new HashSet<>();



    // --- parse content(反向)---

    if (result != null) {

        MessageElement[] anyArr = result.get_any();

        MessageElement data = (anyArr != null && anyArr.length > 1) ? anyArr[1] : null; // index 1 = diffgram

        LOGGER.info(vaildLog("### data:" + data));



        if (data != null) {

            Element diffgram = data;

            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 iterate

                Element row = (Element) rows.item(i);



                String ifqSid = getChildText(row, "ifq_sid");

                if (ifqSid == null || 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_hit"))) // 單數

                        .initTime(parseDateTimeSafely(getChildText(row, "dinit_time")))

                        .modiTime(parseDateTimeSafely(getChildText(row, "dmodi_time")))

                        .build();



                seen.add(ifqSid);

                out.add(hit);

            }

        }

    }



    // --- parse attachments(正向附加)---

    if (attachResult != null) {

        MessageElement[] attachArr = attachResult.get_any();

        MessageElement attachData = (attachArr != null && attachArr.length > 1) ? attachArr[1] : null; // index 1 = diffgram

        LOGGER.info(vaildLog("### attachData:" + attachData));



        if (attachData != null) {

            Element diffgram = attachData;

            Element dataRoot = firstChildElementByLocalName(diffgram, "IQKB");

            if (dataRoot == null) dataRoot = diffgram;



            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 == null || 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_hit"))) // 單數

                        .initTime(parseDateTimeSafely(getChildText(row, "dinit_time")))

                        .modiTime(parseDateTimeSafely(getChildText(row, "dmodi_time")))

                        .build();



                seen.add(ifqSid);

                out.add(hit);

            }

        }

    }



    return out;

}

🔐 Base64 編碼內容

LyoqCgogKiDlj5blvpfmkJzlsIvos4fmlpkKCiAqIGlmdFNpZDoKCiAqICAgMCA9IGNvbnRlbnQgb25seQoKICogICAxID0gY29udGVudCArIGF0dGFjaG1lbnRzIChhdHRhY2htZW50cyBhcHBlbmRlZCBhZnRlciBjb250ZW50KQoKICogICAyID0gYXR0YWNobWVudHMgb25seQoKICoKCiAqIOWCmeiou++8mgoKICogLSBBeGlzIOWbnuWCs+eahCBhbnlbXe+8mmluZGV4IDAg6YCa5bi45pivIHNjaGVtYe+8jGluZGV4IDEg5omN5piv6LOH5paZIGRpZmZncmFt44CCCgogKiAtIOWFp+Wuuee1kOaenOe2reaMgeOAjOWPjeWQkeOAjeS7peespuWQiOWOn+WJjeerr+ihjOeCuu+8m+mZhOS7tue1kOaenOS7peOAjOato+WQkeOAjemZhOWKoOOAggoKICogLSDljrvph43ku6UgaWZxX3NpZCDngrrmupbjgIIKCiAqLwoKcHVibGljIExpc3Q8U2VhcmNoSGl0QmVhbj4gZ2V0U2VhcmNoQ29udGVudChJbnRlZ2VyIGlmdFNpZCwgU3RyaW5nIHN0clR4dCwgU3RyaW5nIHVzZXJUeXBlKSB0aHJvd3MgUmVtb3RlRXhjZXB0aW9uIHsKCiAgICBMaXN0PFNlYXJjaEhpdEJlYW4+IG91dCA9IG5ldyBBcnJheUxpc3Q8PigpOwoKCgogICAgV3NHZXRGdWxsVGV4dFNlYXJjaFJlc3BvbnNlV3NHZXRGdWxsVGV4dFNlYXJjaFJlc3VsdCByZXN1bHQgPSBudWxsOwoKICAgIFdzR2V0QXR0YWNoU2VhcmNoUmVzcG9uc2VXc0dldEF0dGFjaFNlYXJjaFJlc3VsdCAgICAgYXR0YWNoUmVzdWx0ID0gbnVsbDsKCgoKICAgIC8vIC0tLSBjYWxsIHNlcnZpY2Vz77yI5L+d55WZ5Y6f5pysIGxvZ++8iS0tLQoKICAgIHN3aXRjaCAoaWZ0U2lkKSB7CgogICAgICAgIGNhc2UgMDoKCiAgICAgICAgICAgIHJlc3VsdCA9IHNlcnZpY2Uud3NHZXRGdWxsVGV4dFNlYXJjaChzdHJWYWxpZENvZGUsIDEsIGNoYW5uZWxNYXAuZ2V0KHVzZXJUeXBlKSwgMTAwLCBzdHJUeHQsIDAsICJmcV9oaXQiKTsKCiAgICAgICAgICAgIExPR0dFUi5pbmZvKHZhaWxkTG9nKCIjIyMgbWV0aG9kOmdldFNlYXJjaENvbnRlbnQsIHdlYnNlcnZpY2U6d3NHZXRGdWxsVGV4dFNlYXJjaCIpKTsKCiAgICAgICAgICAgIExPR0dFUi5pbmZvKHZhaWxkTG9nKCIjIyMgcmVxOiIgKyAid3NHZXRGdWxsVGV4dFNlYXJjaCgiICsgc3RyVmFsaWRDb2RlICsgIiwgMSwgIgoKICAgICAgICAgICAgICAgICAgICArIGNoYW5uZWxNYXAuZ2V0KHVzZXJUeXBlKSArICIsIDEwMCwgIiArIHN0clR4dCArICIsIDAsIGZxX2hpdCkiKSk7CgogICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAxOgoKICAgICAgICAgICAgcmVzdWx0ID0gc2VydmljZS53c0dldEZ1bGxUZXh0U2VhcmNoKHN0clZhbGlkQ29kZSwgMSwgY2hhbm5lbE1hcC5nZXQodXNlclR5cGUpLCAxMDAsIHN0clR4dCwgMCwgImZxX2hpdCIpOwoKICAgICAgICAgICAgTE9HR0VSLmluZm8odmFpbGRMb2coIiMjIyBtZXRob2Q6Z2V0U2VhcmNoQ29udGVudCwgd2Vic2VydmljZTp3c0dldEZ1bGxUZXh0U2VhcmNoIikpOwoKICAgICAgICAgICAgTE9HR0VSLmluZm8odmFpbGRMb2coIiMjIyByZXE6IiArICJ3c0dldEZ1bGxUZXh0U2VhcmNoKCIgKyBzdHJWYWxpZENvZGUgKyAiLCAxLCAiCgogICAgICAgICAgICAgICAgICAgICsgY2hhbm5lbE1hcC5nZXQodXNlclR5cGUpICsgIiwgMTAwLCAiICsgc3RyVHh0ICsgIiwgMCwgZnFfaGl0KSIpKTsKCgoKICAgICAgICAgICAgYXR0YWNoUmVzdWx0ID0gc2VydmljZS53c0dldEF0dGFjaFNlYXJjaChzdHJWYWxpZENvZGUsIDEsIGNoYW5uZWxNYXAuZ2V0KHVzZXJUeXBlKSwgMTAwLCBzdHJUeHQsIDApOwoKICAgICAgICAgICAgTE9HR0VSLmluZm8odmFpbGRMb2coIiMjIyBtZXRob2Q6Z2V0U2VhcmNoQ29udGVudCwgd2Vic2VydmljZTp3c0dldEF0dGFjaFNlYXJjaCIpKTsKCiAgICAgICAgICAgIExPR0dFUi5pbmZvKHZhaWxkTG9nKCIjIyMgcmVxOiIgKyAid3NHZXRBdHRhY2hTZWFyY2goIiArIHN0clZhbGlkQ29kZSArICIsIDEsICIKCiAgICAgICAgICAgICAgICAgICAgKyBjaGFubmVsTWFwLmdldCh1c2VyVHlwZSkgKyAiLCAxMDAsICIgKyBzdHJUeHQgKyAiLCAwKSIpKTsKCiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDI6CgogICAgICAgICAgICBhdHRhY2hSZXN1bHQgPSBzZXJ2aWNlLndzR2V0QXR0YWNoU2VhcmNoKHN0clZhbGlkQ29kZSwgMSwgY2hhbm5lbE1hcC5nZXQodXNlclR5cGUpLCAxMDAsIHN0clR4dCwgMCk7CgogICAgICAgICAgICBMT0dHRVIuaW5mbyh2YWlsZExvZygiIyMjIG1ldGhvZDpnZXRTZWFyY2hDb250ZW50LCB3ZWJzZXJ2aWNlOndzR2V0QXR0YWNoU2VhcmNoIikpOwoKICAgICAgICAgICAgTE9HR0VSLmluZm8odmFpbGRMb2coIiMjIyByZXE6IiArICJ3c0dldEF0dGFjaFNlYXJjaCgiICsgc3RyVmFsaWRDb2RlICsgIiwgMSwgIgoKICAgICAgICAgICAgICAgICAgICArIGNoYW5uZWxNYXAuZ2V0KHVzZXJUeXBlKSArICIsIDEwMCwgIiArIHN0clR4dCArICIsIDApIikpOwoKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGRlZmF1bHQ6CgogICAgICAgICAgICByZXR1cm4gb3V0OwoKICAgIH0KCgoKICAgIC8vIGRlLWR1cCBieSBpZnFfc2lkCgogICAgU2V0PFN0cmluZz4gc2VlbiA9IG5ldyBIYXNoU2V0PD4oKTsKCgoKICAgIC8vIC0tLSBwYXJzZSBjb250ZW5077yI5Y+N5ZCR77yJLS0tCgogICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7CgogICAgICAgIE1lc3NhZ2VFbGVtZW50W10gYW55QXJyID0gcmVzdWx0LmdldF9hbnkoKTsKCiAgICAgICAgTWVzc2FnZUVsZW1lbnQgZGF0YSA9IChhbnlBcnIgIT0gbnVsbCAmJiBhbnlBcnIubGVuZ3RoID4gMSkgPyBhbnlBcnJbMV0gOiBudWxsOyAvLyBpbmRleCAxID0gZGlmZmdyYW0KCiAgICAgICAgTE9HR0VSLmluZm8odmFpbGRMb2coIiMjIyBkYXRhOiIgKyBkYXRhKSk7CgoKCiAgICAgICAgaWYgKGRhdGEgIT0gbnVsbCkgewoKICAgICAgICAgICAgRWxlbWVudCBkaWZmZ3JhbSA9IGRhdGE7CgogICAgICAgICAgICBFbGVtZW50IGRhdGFSb290ID0gZmlyc3RDaGlsZEVsZW1lbnRCeUxvY2FsTmFtZShkaWZmZ3JhbSwgIklRS0IiKTsKCiAgICAgICAgICAgIGlmIChkYXRhUm9vdCA9PSBudWxsKSBkYXRhUm9vdCA9IGRpZmZncmFtOwoKCgogICAgICAgICAgICBOb2RlTGlzdCByb3dzID0gZGF0YVJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkZ1bGxUZXh0U2VhcmNoIik7CgogICAgICAgICAgICBmb3IgKGludCBpID0gcm93cy5nZXRMZW5ndGgoKSAtIDE7IGkgPj0gMDsgaS0tKSB7IC8vIHJldmVyc2UgaXRlcmF0ZQoKICAgICAgICAgICAgICAgIEVsZW1lbnQgcm93ID0gKEVsZW1lbnQpIHJvd3MuaXRlbShpKTsKCgoKICAgICAgICAgICAgICAgIFN0cmluZyBpZnFTaWQgPSBnZXRDaGlsZFRleHQocm93LCAiaWZxX3NpZCIpOwoKICAgICAgICAgICAgICAgIGlmIChpZnFTaWQgPT0gbnVsbCB8fCBpZnFTaWQuaXNCbGFuaygpIHx8IHNlZW4uY29udGFpbnMoaWZxU2lkKSkgY29udGludWU7CgoKCiAgICAgICAgICAgICAgICBTZWFyY2hIaXRCZWFuIGhpdCA9IG5ldyBTZWFyY2hIaXRCZWFuLkJ1aWxkZXIoKQoKICAgICAgICAgICAgICAgICAgICAgICAgLmZxU2lkKGlmcVNpZCkKCiAgICAgICAgICAgICAgICAgICAgICAgIC5mdFNpZChnZXRDaGlsZFRleHQocm93LCAiaWZ0X3NpZCIpKQoKICAgICAgICAgICAgICAgICAgICAgICAgLmZ0TmFtZShnZXRDaGlsZFRleHQocm93LCAic2Z0X25hbWUiKSkKCiAgICAgICAgICAgICAgICAgICAgICAgIC5mcU5hbWUoZ2V0Q2hpbGRUZXh0KHJvdywgInNmcV9uYW1lIikpCgogICAgICAgICAgICAgICAgICAgICAgICAuZnFIaXQocGFyc2VJbnRPck51bGwoZ2V0Q2hpbGRUZXh0KHJvdywgImlmcV9oaXQiKSkpIC8vIOWWruaVuAoKICAgICAgICAgICAgICAgICAgICAgICAgLmluaXRUaW1lKHBhcnNlRGF0ZVRpbWVTYWZlbHkoZ2V0Q2hpbGRUZXh0KHJvdywgImRpbml0X3RpbWUiKSkpCgogICAgICAgICAgICAgICAgICAgICAgICAubW9kaVRpbWUocGFyc2VEYXRlVGltZVNhZmVseShnZXRDaGlsZFRleHQocm93LCAiZG1vZGlfdGltZSIpKSkKCiAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpOwoKCgogICAgICAgICAgICAgICAgc2Vlbi5hZGQoaWZxU2lkKTsKCiAgICAgICAgICAgICAgICBvdXQuYWRkKGhpdCk7CgogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICB9CgoKCiAgICAvLyAtLS0gcGFyc2UgYXR0YWNobWVudHPvvIjmraPlkJHpmYTliqDvvIktLS0KCiAgICBpZiAoYXR0YWNoUmVzdWx0ICE9IG51bGwpIHsKCiAgICAgICAgTWVzc2FnZUVsZW1lbnRbXSBhdHRhY2hBcnIgPSBhdHRhY2hSZXN1bHQuZ2V0X2FueSgpOwoKICAgICAgICBNZXNzYWdlRWxlbWVudCBhdHRhY2hEYXRhID0gKGF0dGFjaEFyciAhPSBudWxsICYmIGF0dGFjaEFyci5sZW5ndGggPiAxKSA/IGF0dGFjaEFyclsxXSA6IG51bGw7IC8vIGluZGV4IDEgPSBkaWZmZ3JhbQoKICAgICAgICBMT0dHRVIuaW5mbyh2YWlsZExvZygiIyMjIGF0dGFjaERhdGE6IiArIGF0dGFjaERhdGEpKTsKCgoKICAgICAgICBpZiAoYXR0YWNoRGF0YSAhPSBudWxsKSB7CgogICAgICAgICAgICBFbGVtZW50IGRpZmZncmFtID0gYXR0YWNoRGF0YTsKCiAgICAgICAgICAgIEVsZW1lbnQgZGF0YVJvb3QgPSBmaXJzdENoaWxkRWxlbWVudEJ5TG9jYWxOYW1lKGRpZmZncmFtLCAiSVFLQiIpOwoKICAgICAgICAgICAgaWYgKGRhdGFSb290ID09IG51bGwpIGRhdGFSb290ID0gZGlmZmdyYW07CgoKCiAgICAgICAgICAgIE5vZGVMaXN0IHJvd3MgPSBkYXRhUm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiRnVsbFRleHRTZWFyY2giKTsKCiAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93cy5nZXRMZW5ndGgoKTsgaSsrKSB7CgogICAgICAgICAgICAgICAgRWxlbWVudCByb3cgPSAoRWxlbWVudCkgcm93cy5pdGVtKGkpOwoKCgogICAgICAgICAgICAgICAgU3RyaW5nIGlmcVNpZCA9IGdldENoaWxkVGV4dChyb3csICJpZnFfc2lkIik7CgogICAgICAgICAgICAgICAgaWYgKGlmcVNpZCA9PSBudWxsIHx8IGlmcVNpZC5pc0JsYW5rKCkgfHwgc2Vlbi5jb250YWlucyhpZnFTaWQpKSBjb250aW51ZTsKCgoKICAgICAgICAgICAgICAgIFNlYXJjaEhpdEJlYW4gaGl0ID0gbmV3IFNlYXJjaEhpdEJlYW4uQnVpbGRlcigpCgogICAgICAgICAgICAgICAgICAgICAgICAuZnFTaWQoaWZxU2lkKQoKICAgICAgICAgICAgICAgICAgICAgICAgLmZ0U2lkKGdldENoaWxkVGV4dChyb3csICJpZnRfc2lkIikpCgogICAgICAgICAgICAgICAgICAgICAgICAuZnROYW1lKGdldENoaWxkVGV4dChyb3csICJzZnRfbmFtZSIpKQoKICAgICAgICAgICAgICAgICAgICAgICAgLmZxTmFtZShnZXRDaGlsZFRleHQocm93LCAic2ZxX25hbWUiKSkKCiAgICAgICAgICAgICAgICAgICAgICAgIC5mcUhpdChwYXJzZUludE9yTnVsbChnZXRDaGlsZFRleHQocm93LCAiaWZxX2hpdCIpKSkgLy8g5Zau5pW4CgogICAgICAgICAgICAgICAgICAgICAgICAuaW5pdFRpbWUocGFyc2VEYXRlVGltZVNhZmVseShnZXRDaGlsZFRleHQocm93LCAiZGluaXRfdGltZSIpKSkKCiAgICAgICAgICAgICAgICAgICAgICAgIC5tb2RpVGltZShwYXJzZURhdGVUaW1lU2FmZWx5KGdldENoaWxkVGV4dChyb3csICJkbW9kaV90aW1lIikpKQoKICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7CgoKCiAgICAgICAgICAgICAgICBzZWVuLmFkZChpZnFTaWQpOwoKICAgICAgICAgICAgICAgIG91dC5hZGQoaGl0KTsKCiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgIH0KCgoKICAgIHJldHVybiBvdXQ7Cgp9Cg==
返回列表 上一筆 下一筆