예제 #1
0
  public static SearchResult tagSearch(Mapx map) {
    SearchParameters sps = new SearchParameters();
    String site = map.getString("site");
    String order = map.getString("order");
    String keyword = map.getString("keyword");
    String query = map.getString("query");
    if (StringUtil.isEmpty(keyword)) {
      keyword = query;
    }
    String page = map.getString("page");
    String size = map.getString("size");

    if (StringUtil.isNotEmpty(keyword)) {
      sps.addLikeField("Tag", keyword, false);
    }

    if ("time".equalsIgnoreCase(order)) {
      sps.setSortField("PublishDate", 3, true);
    }
    if (StringUtil.isNotEmpty(page)) {
      sps.setPageIndex(Integer.parseInt(page) - 1);
    }
    if (StringUtil.isNotEmpty(size)) {
      sps.setPageSize(Integer.parseInt(size));
    }
    String id = SearchAPI.getIndexIDBySiteID(site);
    sps.setIndexID(Long.parseLong(id));
    return ArticleIndexer.search(sps);
  }
예제 #2
0
  public static SearchResult search(Mapx map) {
    SearchParameters sps = new SearchParameters();
    String site = map.getString("site");
    String id = map.getString("id");
    String catalog = map.getString("catalog");
    if (StringUtil.isEmpty(catalog)) {
      catalog = map.getString("Catalog");
    }
    String order = map.getString("order");
    String time = map.getString("time");
    String keyword = map.getString("keyword");
    String query = map.getString("query");
    if (StringUtil.isEmpty(keyword)) {
      keyword = query;
    }
    String page = map.getString("page");
    String size = map.getString("size");

    if (StringUtil.isEmpty(id)) {
      id = SearchAPI.getIndexIDBySiteID(site);
    }

    if (StringUtil.isNotEmpty(keyword)) {
      sps.addFulltextField("Title", keyword, false);
      sps.addFulltextField("Content", keyword, false);
      sps.addFulltextField("_Keyword", keyword, true);
    }

    if ("time".equalsIgnoreCase(order)) {
      sps.setSortField("PublishDate", 3, true);
    }

    if (StringUtil.isNotEmpty(time)) {
      Date today = new Date();
      String StartDate = DateUtil.toString(DateUtil.addDay(today, -36500));
      if (time.equals("week")) StartDate = DateUtil.toString(DateUtil.addDay(today, -7));
      else if (time.equals("month")) StartDate = DateUtil.toString(DateUtil.addDay(today, -30));
      else if (time.equals("quarter")) {
        StartDate = DateUtil.toString(DateUtil.addDay(today, -90));
      }
      String EndDate = "2999-01-01";
      sps.setDateRange("PublishDate", StartDate, EndDate);
    }
    if (StringUtil.isNotEmpty(catalog)) {
      sps.addLeftLikeField("CatalogInnerCode", catalog);
    }
    if (StringUtil.isNotEmpty(page)) {
      sps.setPageIndex(Integer.parseInt(page) - 1);
    }
    if (StringUtil.isNotEmpty(size)) {
      sps.setPageSize(Integer.parseInt(size));
    }
    if (StringUtil.isEmpty(id)) {
      SearchResult sr = new SearchResult();
      sr.Data = new DataTable();
      return sr;
    }
    sps.setIndexID(Long.parseLong(id));
    return ArticleIndexer.search(sps);
  }
예제 #3
0
  public static void dg1DataBind(DataGridAction dga) {
    String searchUserName = dga.getParam("searchUserName");

    QueryBuilder qb = new QueryBuilder("select * from ZSOrder where IsValid = 'Y' and status='10'");
    QueryBuilder totalQB =
        new QueryBuilder("select * from ZSOrder where IsValid = 'Y' and status='10'");
    if (StringUtil.isNotEmpty(searchUserName)) {
      qb.append(" and UserName like ? ", "%" + searchUserName + "%");
      totalQB.append(" and UserName like ? ", "%" + searchUserName + "%");
    }
    dga.setTotal(totalQB);

    qb.append(" order by id desc");
    DataTable dt = qb.executePagedDataTable(dga.getPageSize(), dga.getPageIndex());
    dt.decodeColumn("IsValid", HtmlUtil.codeToMapx("Order.IsValid"));
    dt.decodeColumn("HasInvoice", HtmlUtil.codeToMapx("Order.HasInvoice"));
    dt.decodeColumn("Status", HtmlUtil.codeToMapx("Order.Status"));
    DataTable dc =
        new QueryBuilder("select Name,Code from zddistrict Order by Code").executeDataTable();
    Mapx map = dc.toMapx("Code", "Name");
    dt.decodeColumn("Province", map);
    dt.decodeColumn("City", map);
    dt.decodeColumn("District", map);
    dga.bindData(dt);
  }
예제 #4
0
  public static String[] getSearchEngine(Visit v) {
    String url = v.URL;
    if (StringUtil.isEmpty(url)) {
      return null;
    }

    if (url.indexOf("Result.jsp") > 0) {
      String keyword = SearchAPI.getParameter(url, "query");
      return new String[] {"站内搜索", keyword};
    }
    url = v.Referer;
    String domain = StatUtil.getDomain(url);
    Mapx map = ServletUtil.getMapFromQueryString(url);
    String name = null;
    String keyword = null;
    if (domain.indexOf("baidu.") > 0) {
      keyword = StringUtil.urlDecode(map.getString("wd"), "GBK");
      name = "百度";
    } else if (domain.indexOf("google.") > 0) {
      String charset = map.getString("ie");
      if (StringUtil.isEmpty(charset)) {
        charset = "UTF-8";
      }
      keyword = StringUtil.urlDecode(map.getString("q"), charset);
      name = "谷歌";
    } else if (domain.indexOf("yahoo.") > 0) {
      String charset = map.getString("ei");
      if (StringUtil.isEmpty(charset)) {
        charset = "UTF-8";
      }
      keyword = StringUtil.urlDecode(map.getString("p"), charset);
      name = "雅虎";
    } else if (domain.indexOf("msn.") > 0) {
      keyword = StringUtil.urlDecode(map.getString("q"), "UTF-8");
      name = "MSN";
    } else if (domain.indexOf("soso.") > 0) {
      keyword = StringUtil.urlDecode(map.getString("w"), "GBK");
      name = "搜搜";
    } else if (domain.indexOf("sogou.") > 0) {
      keyword = StringUtil.urlDecode(map.getString("query"), "GBK");
      name = "搜狗";
    } else if (domain.indexOf("zhongsou.") > 0) {
      keyword = StringUtil.urlDecode(map.getString("word"), "GBK");
      name = "中搜";
    } else if (domain.indexOf("youdao.") > 0) {
      String charset = map.getString("ue");
      if (StringUtil.isEmpty(charset)) {
        charset = "UTF-8";
      }
      keyword = StringUtil.urlDecode(map.getString("q"), charset);
      name = "有道";
    } else if (domain.indexOf("live.") > 0) {
      keyword = StringUtil.urlDecode(map.getString("q"), "UTF-8");
      name = "Live.com";
    }
    if (StringUtil.isNotEmpty(keyword)) {
      return new String[] {name, keyword};
    }
    return null;
  }
예제 #5
0
  public void setRelaTableMaxNo(SiteTableRela.TableRela tr, DataRow dr, boolean newIDFlag) {
    for (int i = 0; i < this.NoRelas.length; ++i) {
      SiteTableRela.NoType nr = this.NoRelas[i];
      if (nr.TableCode.equalsIgnoreCase(tr.TableCode)) {
        String id = dr.getString(nr.FieldName);
        if (newIDFlag) {
          id = String.valueOf(NoUtil.getMaxID(nr.NoType));
        }
        addIDMapping(nr.TableCode + "." + nr.FieldName, dr.getString(nr.FieldName), id);
        dr.set(nr.FieldName, id);
      }
    }
    for (int i = 0; i < this.TableRelas.length; ++i)
      if (this.TableRelas[i].TableCode.equals(tr.TableCode)) {
        String type = this.TableRelas[i].RelaTable;
        if ((((type.equals("ZCArticle"))
                || (type.equals("ZCAttachment"))
                || (type.equals("ZCImage"))
                || (type.equals("ZCAudio"))
                || (type.equals("ZCVideo"))))
            && (this.TableRelas[i].RelaField.equals("ID"))) {
          type = "Document";
        }

        String id =
            getIDMapping(
                type + "." + this.TableRelas[i].RelaField,
                dr.getString(this.TableRelas[i].KeyField));
        if (StringUtil.isNotEmpty(id)) dr.set(this.TableRelas[i].KeyField, id);
      }
  }
예제 #6
0
  public void setSiteIDTableMaxNo(String tableName, DataRow dr, boolean newIDFlag) {
    try {
      if (dr.getDataColumn("SiteID") != null)
        dr.set("SiteID", getIDMapping("ZCSite", String.valueOf(this.siteID)));
    } catch (Throwable t) {
      t.printStackTrace();
      LogUtil.warn(tableName);
    }
    for (int i = 0; i < this.NoRelas.length; ++i) {
      SiteTableRela.NoType nr = this.NoRelas[i];
      if (nr.TableCode.equalsIgnoreCase(tableName)) {
        String id = dr.getString(nr.FieldName);
        if (newIDFlag) {
          if ((nr.TableCode.equals("ZCCatalog")) && (nr.FieldName.equals("InnerCode")))
            if (id.length() == 6) {
              id = CatalogUtil.createCatalogInnerCode(null);
            } else {
              String parent = id.substring(0, id.length() - 6);
              parent = getIDMapping(nr.TableCode + "." + nr.FieldName, parent);
              id = CatalogUtil.createCatalogInnerCode(parent);
            }
          else {
            id = String.valueOf(NoUtil.getMaxID(nr.NoType));
          }
        }
        String type = nr.TableCode;
        if ((((type.equals("ZCArticle"))
                || (type.equals("ZCAttachment"))
                || (type.equals("ZCImage"))
                || (type.equals("ZCAudio"))
                || (type.equals("ZCVideo"))))
            && (nr.NoType.equals("DocID"))) {
          type = "Document";
        }

        addIDMapping(type + "." + nr.FieldName, dr.getString(nr.FieldName), id);
        dr.set(nr.FieldName, id);
      }
    }
    for (int i = 0; i < this.TableRelas.length; ++i)
      if (this.TableRelas[i].TableCode.equals(tableName)) {
        String type = this.TableRelas[i].RelaTable;
        if ((((type.equals("ZCArticle"))
                || (type.equals("ZCAttachment"))
                || (type.equals("ZCImage"))
                || (type.equals("ZCAudio"))
                || (type.equals("ZCVideo"))))
            && (this.TableRelas[i].RelaField.equals("ID"))) {
          type = "Document";
        }

        String id =
            getIDMapping(
                type + "." + this.TableRelas[i].RelaField,
                dr.getString(this.TableRelas[i].KeyField));
        if (StringUtil.isNotEmpty(id)) dr.set(this.TableRelas[i].KeyField, id);
      }
  }
예제 #7
0
  public void add() {
    String toUser = $V("ToUser");
    if (!StringUtil.checkID(toUser)) {
      this.Response.setLogInfo(0, "传入参数错误!");
      return;
    }
    String[] userList = toUser.split(",");

    String toRole = $V("ToRole");
    if (!StringUtil.checkID(toRole)) {
      this.Response.setLogInfo(0, "传入参数错误!");
      return;
    }
    String[] roleList = toRole.split(",");

    if (roleList.length > 0) {
      String roleStr = "";
      for (int j = 0; j < roleList.length; ++j) {
        if (StringUtil.isNotEmpty(roleList[j])) {
          if (j == 0) roleStr = roleStr + "'" + roleList[j] + "'";
          else {
            roleStr = roleStr + ",'" + roleList[j] + "'";
          }
        }
      }
      if (StringUtil.isNotEmpty(roleStr)) {
        DataTable dt =
            new QueryBuilder("select UserName from zduserRole where rolecode in (" + roleStr + ")")
                .executeDataTable();
        for (int k = 0; k < dt.getRowCount(); ++k) {
          String userName = dt.getString(k, "UserName");
          if ((!User.getUserName().equals(userName))
              && (!ArrayUtils.contains(userList, userName))) {
            userList = (String[]) ArrayUtils.add(userList, userName);
          }
        }
      }
    }

    if (MessageCache.addMessage($V("Subject"), $V("Content"), userList, User.getUserName()))
      this.Response.setLogInfo(1, "新建成功!");
    else this.Response.setLogInfo(0, "新建失败!");
  }
예제 #8
0
  public static void bindRoleList(DataGridAction dga) {
    String searchRoleName = dga.getParam("SearchRoleName");
    QueryBuilder qb = new QueryBuilder("select * from ZDRole");
    qb.append(" where BranchInnerCode like ?", User.getBranchInnerCode() + "%");
    if (StringUtil.isNotEmpty(searchRoleName)) {
      qb.append(" and (RoleCode like ?", "%" + searchRoleName.trim() + "%");

      qb.append(" or RoleName like ?)", "%" + searchRoleName.trim() + "%");
    }
    qb.append(" order by AddTime desc");
    dga.bindData(qb);
  }
예제 #9
0
  public static void bindUserList(DataGridAction dga) {
    String searchUserName = dga.getParam("SearchUserName");
    QueryBuilder qb = new QueryBuilder("select * from ZDUser");
    qb.append(" where BranchInnerCode like ?", User.getBranchInnerCode() + "%");
    qb.append(" and UserName <> ?", User.getUserName());
    if (StringUtil.isNotEmpty(searchUserName)) {
      qb.append(" and (UserName like ?", "%" + searchUserName.trim() + "%");

      qb.append(" or realname like ?)", "%" + searchUserName.trim() + "%");
    }
    qb.append(" order by AddTime desc");
    dga.setTotal(qb);
    DataTable dt = qb.executePagedDataTable(dga.getPageSize(), dga.getPageIndex());
    dt.decodeColumn("Status", UserList.STATUS_MAP);
    dga.bindData(dt);
  }
예제 #10
0
 public static boolean evalCondition(Treex.TreeNode parent, TemplateContext context) {
   LogicClause clause = (LogicClause) parent.getData();
   if ((clause != null) && (StringUtil.isNotEmpty(clause.getClauseString()))) {
     return clause.execute(context);
   }
   Treex.TreeNodeList list = parent.getChildren();
   boolean v = true;
   for (int i = 0; i < list.size(); ++i) {
     clause = (LogicClause) list.get(i).getData();
     boolean isOr = clause.isOr;
     if ((clause == null) || (StringUtil.isEmpty(clause.getClauseString()))) {
       if ((isOr) && (v)) {
         continue;
       }
       if ((!isOr) && (!v)) {
         continue;
       }
       v = (v) || (evalCondition(list.get(i), context));
     }
   }
   return v;
 }
예제 #11
0
   public void writeArticle()
   {
     prepareList();
     if (this.config.getType() == 1) {
       QueryBuilder imageQB = new QueryBuilder("select id from zccatalog where type=4 and siteid=?", 
         CatalogUtil.getSiteID(this.config.getCatalogID()));
       String imageCatalogID = imageQB.executeString();
       if (StringUtil.isEmpty(CatalogUtil.getSiteID(this.config.getCatalogID()))) {
         LogUtil.getLogger().warn("文档采集的目的栏目不存在:ID=" + this.config.getCatalogID());
         return;
       }
       String sitePath = SiteUtil.getAbsolutePath(CatalogUtil.getSiteID(this.config.getCatalogID()));
       String imagePath = "upload/Image/" + CatalogUtil.getAlias(imageCatalogID) + "/";
 
       RegexParser rp = this.config.getTemplate("Ref1");
       RegexParser[] filters = this.config.getFilterBlocks();
       this.list.moveFirst();
       WebDocument doc = null;
       int cSuccess = 0;
       int cFailure = 0;
       int cLost = 0;
 
       boolean publishDateFlag = false;
       ZCArticleSet set = new ZCArticleSet();
       while ((doc = this.list.next()) != null) {
         if (this.task.checkStop()) {
           return;
         }
         if (doc.getLevel() != this.config.getUrlLevels().length - 1) {
           continue;
         }
         int percent = (100 - this.task.getPercent()) * (cSuccess + cFailure + cLost) / this.list.size();
         this.task.setPercent(this.task.getPercent() + percent);
         if ((doc.isTextContent()) && (doc.getContent() != null)) {
           String text = doc.getContentText();
           rp.setText(text);
           if (rp.match()) {
             Mapx map = rp.getMapx();
             Object[] ks = map.keyArray();
             Object[] vs = map.valueArray();
             for (int i = 0; i < map.size(); ++i) {
               String key = ks[i].toString();
               String value = vs[i].toString();
               if (!key.equalsIgnoreCase("Content")) {
                 value = this.tagPattern.matcher(value).replaceAll("");
               }
               value = StringUtil.htmlDecode(value);
               value = value.trim();
               map.put(key, value);
             }
             String title = map.getString("Title");
             String content = map.getString("Content");
             String author = map.getString("Author");
             String source = map.getString("Source");
             String strDate = map.getString("PublishDate");
             Date publishDate = doc.getLastmodifiedDate();
             if ((StringUtil.isNotEmpty(strDate)) && (StringUtil.isNotEmpty(this.config.getPublishDateFormat())))
             {
               try {
                 strDate = DateUtil.convertChineseNumber(strDate);
                 publishDate = DateUtil.parse(strDate, this.config.getPublishDateFormat());
               } catch (Exception e) {
                 this.task.addError("日期" + strDate + "不符合指定格式" + doc.getUrl());
               }
               publishDateFlag = true;
             }
             if (publishDate.getTime() > System.currentTimeMillis()) {
               publishDate = new Date();
             }
             ArticleAPI api = new ArticleAPI();
             try {
               ZCArticleSchema article = new ZCArticleSchema();
               if (StringUtil.isNotEmpty(title)) {
                 article.setTitle(title);
               } else {
                 ++cLost;
                 break label1209:
               }
               if (StringUtil.isNotEmpty(content)) {
                 content = content.trim();
                 while (rp.match()) {
                   String html = rp.getMapx().getString("Content");
                   content = content + html;
                 }
                 if (this.config.isCleanLinkFlag()) {
                   content = this.framePattern.matcher(content).replaceAll("");
                   content = this.stylePattern.matcher(content).replaceAll("");
                   content = this.scriptPattern.matcher(content).replaceAll("");
                   content = this.linkPattern.matcher(content).replaceAll("$1");
                 }
                 if (filters != null) {
                   for (int k = 0; k < filters.length; ++k) {
                     content = filters[k].replace(content, "");
                   }
                 }
 
                 String str = dealImage(content, doc.getUrl(), sitePath, imagePath, imageCatalogID);
                 article.setContent(str);
               } else {
                 ++cLost;
                 break label1209:
               }
               if (StringUtil.isNotEmpty(author)) {
                 article.setAuthor(author);
               }
               if (StringUtil.isNotEmpty(source)) {
                 article.setReferName(source);
               }
               article.setReferURL(doc.getUrl());
               article.setPublishDate(publishDate);
               article.setCatalogID(this.config.getCatalogID());
               article.setBranchInnerCode("0001");
               article.setProp2("FromWeb");
 
               if (ExtendManager.hasAction("FromWeb.BeforeSave")) {
                 ExtendManager.executeAll("FromWeb.BeforeSave", new Object[] { article });
               }
 
               Date date = (Date)new QueryBuilder(
                 "select PublishDate from ZCArticle where ReferURL=? and CatalogID=?", doc.getUrl(), 
                 this.config.getCatalogID()).executeOneValue();
               if (date != null) {
                 if (date.getTime() < doc.getLastDownloadTime()) {
                   QueryBuilder qb = new QueryBuilder(
                     "update ZCArticle set Title=?,Content=? where CatalogID=? and ReferURL=?");
                   qb.add(article.getTitle());
                   qb.add(article.getContent());
                   qb.add(this.config.getCatalogID());
                   qb.add(doc.getUrl());
                   qb.executeNoQuery();
                 }
                 ++cSuccess;
               } else {
                 api.setSchema(article);
                 set.add(article);
                 if (api.insert() > 0L)
                   ++cSuccess;
                 else
                   ++cFailure;
               }
             }
             catch (Exception e) {
               ++cFailure;
               e.printStackTrace();
             }
           } else {
             LogUtil.getLogger().info("未能匹配" + doc.getUrl());
             this.task.addError("未能匹配" + doc.getUrl());
             ++cLost;
           }
           label1209: this.task.setCurrentInfo("正在转换文档, <font class='green'>" + cSuccess + "</font> 个成功, <font class='red'>" + 
             cFailure + "</font> 个失败, <font class='green'>" + cLost + "</font> 个未匹配");
         }
       }
예제 #12
0
  public static SearchResult advanceSearch(Mapx map) {
    SearchParameters sps = new SearchParameters();

    String site = map.getString("site");
    String id = map.getString("id");
    String startDate = map.getString("startdate");
    String endDate = map.getString("enddate");
    String catalog = map.getString("catalog");
    String author = map.getString("author");
    String title = map.getString("title");
    String content = map.getString("content");
    String keyword = map.getString("keyword");
    String query = map.getString("query");
    if (StringUtil.isEmpty(keyword)) {
      keyword = query;
    }
    String orderField = map.getString("orderfield");
    String descFlag = map.getString("descflag");
    String page = map.getString("page");
    String size = map.getString("size");

    if (StringUtil.isEmpty(id)) {
      id = SearchAPI.getIndexIDBySiteID(site);
    }

    if ((StringUtil.isNotEmpty(startDate)) && (StringUtil.isEmpty(endDate))) {
      endDate = "2099-01-01";
    }
    if ((StringUtil.isNotEmpty(endDate)) && (StringUtil.isEmpty(startDate))) {
      startDate = "1900-01-01";
    }
    if (StringUtil.isNotEmpty(startDate)) {
      sps.setDateRange("PublishDate", startDate, endDate);
    }
    if (StringUtil.isNotEmpty(catalog)) {
      sps.addLeftLikeField("CatalogInnerCode", catalog, true);
    }
    if (StringUtil.isNotEmpty(title)) {
      sps.addFulltextField("Title", title);
    }
    if (StringUtil.isNotEmpty(content)) {
      sps.addFulltextField("Content", content);
    }
    if (StringUtil.isNotEmpty(keyword)) {
      sps.addFulltextField("Title", keyword, false);
      sps.addFulltextField("Content", keyword, false);
      sps.addFulltextField("_Keyword", keyword, true);
    }
    if (StringUtil.isNotEmpty(orderField)) {
      boolean isDesc = "true".equals(descFlag);
      sps.setSortField(orderField, 3, isDesc);
    }
    if (StringUtil.isNotEmpty(author)) {
      sps.addEqualField("Author", author);
    }
    if (StringUtil.isNotEmpty(page)) {
      sps.setPageIndex(Integer.parseInt(page) - 1);
    }
    if (StringUtil.isNotEmpty(size)) {
      sps.setPageSize(Integer.parseInt(size));
    }
    if (StringUtil.isEmpty(id)) {
      SearchResult sr = new SearchResult();
      sr.Data = new DataTable();
      return sr;
    }

    sps.setIndexID(Long.parseLong(id));
    return ArticleIndexer.search(sps);
  }