Java tutorial
package com.jeans.iservlet.service.fts.impl; import java.util.ArrayList; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.jeans.iservlet.dao.BaseDao; import com.jeans.iservlet.dao.FtsDao; import com.jeans.iservlet.enums.it.SystemScope; import com.jeans.iservlet.model.asset.Asset; import com.jeans.iservlet.model.asset.Hardware; import com.jeans.iservlet.model.asset.Software; import com.jeans.iservlet.model.cloud.CloudFile; import com.jeans.iservlet.model.cloud.CloudList; import com.jeans.iservlet.model.cloud.CloudUnit; import com.jeans.iservlet.model.hr.Company; import com.jeans.iservlet.model.it.ITSystem; import com.jeans.iservlet.model.it.Project; import com.jeans.iservlet.model.it.SystemBranch; import com.jeans.iservlet.model.it.post.Page; import com.jeans.iservlet.model.it.post.Post; import com.jeans.iservlet.model.portal.User; import com.jeans.iservlet.service.fts.FtsService; import com.jeans.iservlet.utils.LoggerUtils; import com.jeans.iservlet.view.portal.FtsResultView; @Service public class FtsServiceImpl implements FtsService { /** * */ protected static final int FTS_ASSET_HARDWARE = 201; protected static final int FTS_ASSET_SOFTWARE = 202; protected static final int FTS_IT_SYSTEM = 301; protected static final int FTS_IT_WIKI = 302; protected static final int FTS_PROJECT = 401; protected static final int FTS_CLOUD_FILE = 601; protected static final int FTS_CLOUD_LIST = 602; @Autowired private FtsDao<Hardware> hardwareDao; @Autowired private FtsDao<Software> softwareDao; @Autowired private FtsDao<ITSystem> systemDao; @Autowired private FtsDao<Post> postDao; @Autowired private FtsDao<CloudFile> fileDao; @Autowired private FtsDao<CloudList> listDao; @Autowired private FtsDao<Project> prjDao; @Autowired private BaseDao<Page> pageDao; @Override public void reIndex() throws InterruptedException { fileDao.reIndex(); } @Override public Map<String, List<FtsResultView>> search(String catalog, String keyword, User user) { Map<String, List<FtsResultView>> results = new LinkedHashMap<String, List<FtsResultView>>(); if (StringUtils.contains(catalog, "S")) { // TODO ??? } if (StringUtils.contains(catalog, "A")) { // ?? List<Asset> assets = assetSearch(keyword, user.getCompany().getId()); if (null != assets && assets.size() > 0) { // ? List<FtsResultView> items = new ArrayList<FtsResultView>(); for (Asset asset : assets) { FtsResultView item = new FtsResultView(); item.setId(asset.getId()); item.setTitle(asset.getFullName()); if (asset instanceof Hardware) { item.setType(FTS_ASSET_HARDWARE); } else { item.setType(FTS_ASSET_SOFTWARE); } items.add(item); } results.put("?", items); } } if (StringUtils.contains(catalog, "W")) { // ???ITSystem, Post List<FtsResultView> items = new ArrayList<FtsResultView>(); List<ITSystem> systems = systemSearch(keyword); Company company = user.getCompany(); for (ITSystem system : systems) { if (system.getOwner().equals(company)) { items.add(wrapSystem(system)); continue; } boolean branched = false; Set<SystemBranch> branches = system.getBranches(); for (SystemBranch branch : branches) { if (branch.getCompany().equals(company)) { branched = true; items.add(wrapSystem(system)); break; } } if (branched) { continue; } if (system.getScope() == SystemScope.Custom) { if (system.getCompaniesInScope().contains(company)) { items.add(wrapSystem(system)); continue; } } else { if (company.getLevel() != Company.PROVINCE) { if (system.getOwner().equals(company.getSuperior()) && system.getScope() != SystemScope.Private) { items.add(wrapSystem(system)); continue; } if (company.getLevel() == Company.BRANCH && system.getOwner().equals(company.getSuperior().getSuperior()) && (system.getScope() == SystemScope.PrivateAndInferiors || system.getScope() == SystemScope.Inferiors)) { items.add(wrapSystem(system)); continue; } } } } List<Post> posts = wikiSearch(keyword); Set<Page> pages = new HashSet<Page>(); for (Post post : posts) { if (null == post.getPage()) { Page p = pageDao.getById(Page.class, post.getId()); if (p.getWiki().getCompanies().contains(company) || (company.getLevel() == Company.BRANCH && p.getWiki().getCompanies().contains(company.getSuperior()))) { System.out.println("id=" + p.getId()); pages.add(p); } } else { if (post.getPage().getWiki().getCompanies().contains(company) || (company.getLevel() == Company.BRANCH && post.getPage().getWiki().getCompanies().contains(company.getSuperior()))) { pages.add(post.getPage()); } } } for (Page page : pages) { items.add(wrapPage(page)); } if (!items.isEmpty()) { results.put("?", items); } } if (StringUtils.contains(catalog, "P")) { // ?? List<Project> projects = projectSearch(keyword); if (null != projects && projects.size() > 0) { List<FtsResultView> items = new ArrayList<FtsResultView>(); for (Project project : projects) { if (project.getProjectTeam().getStaff().contains(user.getEmployee())) { FtsResultView item = new FtsResultView(); item.setId(project.getId()); item.setTitle(project.getName()); item.setType(FTS_PROJECT); items.add(item); } } results.put("", items); } } if (StringUtils.contains(catalog, "M")) { // TODO ??? } if (StringUtils.contains(catalog, "D")) { // ?? List<CloudUnit> units = cloudSearch(keyword); if (null != units && units.size() > 0) { List<FtsResultView> items = new ArrayList<FtsResultView>(); for (CloudUnit unit : units) { // ? FtsResultView item = new FtsResultView(); item.setId(unit.getId()); if (unit instanceof CloudFile) { item.setTitle(unit.getOwner().getName() + " - " + ((CloudFile) unit).getVersionFilename()); item.setType(FTS_CLOUD_FILE); } else { item.setTitle(unit.getOwner().getName() + " - " + unit.getName()); item.setType(FTS_CLOUD_LIST); } items.add(item); } results.put("", items); } } return results; } /** * ?HardwareSoftware * * @param keyword * @param companyId * @return */ private List<Asset> assetSearch(String keyword, long companyId) { String kw = keyword.trim().replaceAll("\\s+", " "); List<Asset> assets = new ArrayList<Asset>(); try { assets.addAll(hardwareDao.query(Hardware.class, new String[] { "fullName", "comment", "location" }, new String[] { "sn", "ip", "code", "financialCode" }, kw, "companyId", companyId)); assets.addAll(softwareDao.query(Software.class, new String[] { "fullName", "comment" }, new String[] { "license" }, kw, "companyId", companyId)); } catch (Exception e) { LoggerUtils.error(e); } return assets; } /** * ?? * * @param keyword * @param companyId * @return */ private List<ITSystem> systemSearch(String keyword) { List<ITSystem> systems = new ArrayList<ITSystem>(); String kw = keyword.trim().replaceAll("\\s+", " "); try { systems.addAll(systemDao.query(ITSystem.class, new String[] { "name", "alias", "modelOrVersion", "brief", "provider.alias", "provider.englishName", "provider.name" }, kw)); } catch (Exception e) { e.printStackTrace(); LoggerUtils.error(e); } return systems; } private FtsResultView wrapSystem(ITSystem system) { FtsResultView item = new FtsResultView(); item.setId(system.getId()); item.setType(FTS_IT_SYSTEM); if (StringUtils.isBlank(system.getModelOrVersion())) { item.setTitle(system.getName()); } else { item.setTitle(system.getName() + " - " + system.getModelOrVersion()); } return item; } /** * ?? * * @param keyword * @param companyId * @return */ private List<Post> wikiSearch(String keyword) { List<Post> posts = new ArrayList<Post>(); String kw = keyword.trim().replaceAll("\\s+", " "); try { posts.addAll(postDao.query(Post.class, new String[] { "title", "text" }, kw)); } catch (Exception e) { LoggerUtils.error(e); } return posts; } private FtsResultView wrapPage(Page page) { FtsResultView item = new FtsResultView(); item.setId(page.getId()); item.setType(FTS_IT_WIKI); StringBuilder builder = new StringBuilder(""); builder.append(page.getTitle()).append("?"); String[] lines = page.getText().split("\n"); int i = 0; for (i = 0; i < lines.length; i++) { if (!StringUtils.isBlank(lines[i])) { break; } } if (i == lines.length) { builder.append(""); } else { builder.append(lines[i].length() <= 75 ? lines[i] : lines[i].substring(0, 75) + "..."); } item.setTitle(builder.toString()); return item; } /** * ?Project * * @param keyword * @return */ private List<Project> projectSearch(String keyword) { String kw = keyword.trim().replaceAll("\\s+", " "); List<Project> projects = new ArrayList<Project>(); try { projects.addAll(prjDao.query(Project.class, new String[] { "name", "constructor.name", "constructor.alias", "constructor.englishName" }, kw)); } catch (Exception e) { LoggerUtils.error(e); } return projects; } /** * ?CloudFileCloudList * * @param keyword * @return */ private List<CloudUnit> cloudSearch(String keyword) { String kw = keyword.trim().replaceAll("\\s+", " "); List<CloudUnit> units = new ArrayList<CloudUnit>(); try { units.addAll(fileDao.query(CloudFile.class, new String[] { "versionFilename", "tags.title" }, kw)); units.addAll(listDao.query(CloudList.class, new String[] { "name", "tags.title" }, kw)); } catch (Exception e) { LoggerUtils.error(e); } return units; } }