package cn.ksource.web.service.knowledge; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import cn.ksource.beans.KM_LIBRARY; import cn.ksource.beans.KM_LIBRARY_FAVORITE; import cn.ksource.beans.KM_LIBRARY_TEMP; import cn.ksource.core.dao.BaseDao; import cn.ksource.core.dao.SqlParameter; import cn.ksource.core.util.ConvertUtil; import cn.ksource.core.util.DateUtil; import cn.ksource.core.util.StringUtil; import cn.ksource.core.web.WebUtil; import cn.ksource.web.Constants; import cn.ksource.web.service.file.FileService; @Service public class KmServiceImpl implements KmService { @Autowired private BaseDao baseDao; @Autowired private FileService fileService; @Override public List getCategoryList(HttpServletRequest request) { StringBuffer sql=new StringBuffer(" SELECT A.*,COUNT(B.ID) AS NUM FROM KM_LIBRARY_CATEGORY A LEFT JOIN KM_LIBRARY B ON A.ID = B.CATEGORY_ID and B.STATE = 1 WHERE A.STATE=1 "); sql.append(" GROUP BY A.ID ORDER BY A.LEVEL,A.SERIAL,A.TITLE"); List categoryList = baseDao.queryForList(sql.toString()); List resultList = new LinkedList(); Map yjgnCache = new HashMap(); Map ejgnCache = new HashMap(); Map sjgnCache = new HashMap(); for (Map map : categoryList) { if (map.get("LEVEL").toString().equalsIgnoreCase("2")) { for(Map map1 : categoryList){ int num = ConvertUtil.obj2Int(map.get("NUM")); if(map.get("ID").equals(map1.get("TAG"))){ num += ConvertUtil.obj2Int(map1.get("NUM")); map.put("NUM", num); } } } } for (Map map : categoryList) { for(Map map1 : categoryList){ if (map.get("LEVEL").toString().equalsIgnoreCase("1")) { int num = ConvertUtil.obj2Int(map.get("NUM")); if(map.get("ID").equals(map1.get("TAG"))){ num += ConvertUtil.obj2Int(map1.get("NUM")); map.put("NUM", num); } } } } for (Map map : categoryList) { //一级树 if (map.get("LEVEL").toString().equalsIgnoreCase("1")) { yjgnCache.put(map.get("ID").toString(), map); List ejgnList = new LinkedList(); map.put("ejTree", ejgnList); resultList.add(map); continue; } //二级树 if (map.get("LEVEL").toString().equalsIgnoreCase("2")) { Map yjgnMap = yjgnCache.get(map.get("TAG").toString()); List list = (List)yjgnMap.get("ejTree"); map.put("sjTree", new LinkedList()); list.add(map); ejgnCache.put(map.get("ID").toString(), map); continue; } //三级树 if (map.get("LEVEL").toString().equalsIgnoreCase("3")) { if(null!=map.get("TAG")){ Map ejgnMap = ejgnCache.get(map.get("TAG").toString()); List list = (List)ejgnMap.get("sjTree"); list.add(map); } } } return resultList; } @Override public int getKnowByProId(HttpServletRequest request) { String userId = WebUtil.getLoginedUserId(request); String cusId = request.getParameter("cusId"); StringBuilder sql = new StringBuilder("SELECT COUNT(A.ID) FROM KM_LIBRARY A,KM_LIBRARY_CATEGORY B "); if(!StringUtil.isEmpty(cusId)){ sql.append(" ,KM_LIBRARY_KNOWLEDGE_ACCESS D "); } sql.append("WHERE A.STATE = 1 AND A.CATEGORY_ID = B.ID "); if(!StringUtil.isEmpty(cusId)){ sql.append(" AND A.ID = D.KNOWLEDGE_ID AND D.CUSTOMER_ID = :cusId "); } return baseDao.queryForInteger(sql.toString(), new SqlParameter().addValue("userId",userId ).addValue("cusId", cusId)); } @Override public List queryLibraryCategoryList(HttpServletRequest request) { String category_id = request.getParameter("category_id"); String cusId = request.getParameter("cusId"); StringBuilder sql=new StringBuilder(" SELECT A.ID,A.TITLE,A.TAG P_ID,A.LEVEL,COUNT(B.ID) AS NUM FROM KM_LIBRARY_CATEGORY A LEFT JOIN "); if(StringUtil.isEmpty(cusId)){ sql.append(" KM_LIBRARY B ON A.ID = B.CATEGORY_ID and B.STATE = 1"); }else{ sql.append(" (SELECT C.* FROM KM_LIBRARY C,KM_LIBRARY_KNOWLEDGE_ACCESS D WHERE C.ID = D.KNOWLEDGE_ID AND D.CUSTOMER_ID = :cusId) B ON A.ID = B.CATEGORY_ID and B.STATE = 1"); } sql.append(" WHERE A.STATE=1 GROUP BY A.ID ORDER BY A.LEVEL,A.SERIAL,A.TITLE"); List categoryList = baseDao.queryForList(sql.toString(),new SqlParameter("cusId",cusId)); List resultList = new LinkedList(); String firstCate = ""; String secondCate = ""; Map yjgnCache = new HashMap(); Map ejgnCache = new HashMap(); Map sjgnCache = new HashMap(); for (Map map : categoryList) { //一级树 if (map.get("LEVEL").toString().equalsIgnoreCase("1")) { yjgnCache.put(map.get("ID").toString(), map); List ejgnList = new LinkedList(); map.put("ejTree", ejgnList); resultList.add(map); continue; } //二级树 if (map.get("LEVEL").toString().equalsIgnoreCase("2")) { Map yjgnMap = yjgnCache.get(map.get("P_ID").toString()); List list = (List)yjgnMap.get("ejTree"); map.put("sjTree", new LinkedList()); list.add(map); ejgnCache.put(map.get("ID").toString(), map); continue; } //三级树 if (map.get("LEVEL").toString().equalsIgnoreCase("3")) { if(!StringUtil.isEmpty(category_id)&&category_id.equals(map.get("ID"))){ map.put("select", 1); } if(null!=map.get("P_ID")){ Map ejgnMap = ejgnCache.get(map.get("P_ID").toString()); List list = (List)ejgnMap.get("sjTree"); list.add(map); } } } return resultList; } @Override public List getmyFavourite(String userId) { StringBuilder sql = new StringBuilder(); sql.append("select * "); sql.append("from KM_LIBRARY_FAVORITE k "); sql.append("where k.CREATE_USER_ID=:create_user_id "); SqlParameter param = new SqlParameter(); param.addValue("create_user_id", userId); return baseDao.queryForList(sql.toString(), param); } @Override public List queryLibraryByKey(HttpServletRequest request) { String userId = WebUtil.getLoginedUserId(request); String cusId = request.getParameter("cusId"); String pageIndex = request.getParameter("currPage"); String pageSize = request.getParameter("pageSize"); if(!StringUtil.notEmptyNum(pageSize)){ pageSize = "5"; } if(!StringUtil.notEmptyNum(pageIndex)){ pageIndex = "1"; } StringBuilder sql = new StringBuilder(); sql.append("select t.ID,t.TITLE,t.TAG,t.CATEGORY_ID,t.SUMMARY,t.CREATE_TIME,t.CREATE_USER_NAME,t.IS_EDITOR,t.STATE from ( "); sql.append("select DISTINCT k.ID,k.TITLE,k.TAG,k.SUMMARY,k.CREATE_TIME,k.CREATE_USER_NAME,k.CATEGORY_ID,k.IS_EDITOR,p.STATE "); if(StringUtil.isEmpty(cusId)){ sql.append("from km_library k "); }else{ sql.append("from (SELECT A.* FROM KM_LIBRARY A,KM_LIBRARY_KNOWLEDGE_ACCESS B WHERE A.ID = B.KNOWLEDGE_ID AND B.CUSTOMER_ID = :cusId ) k "); } sql.append(" LEFT JOIN KM_LIBRARY_TEMP p on p.ORIGINAL_ID = k.ID where k.STATE=1 "); sql.append("order by k.CREATE_TIME desc) t "); sql.append("limit :limit1,:limit2 "); int begin = Integer.valueOf(pageIndex); int size = Integer.valueOf(pageSize); SqlParameter param = new SqlParameter(); param.addValue("userId", userId); param.addValue("cusId", cusId); param.addValue("limit1", (begin-1)*size); param.addValue("limit2", size); List list = baseDao.queryForList(sql.toString(), param); List mylist = getmyFavourite(userId); for (Map map : list) { for(Map mymap :mylist){ if(map.get("ID").equals(mymap.get("LIBRARY_ID"))){ map.put("favourite", 1); } } map.put("CREATE_TIME", DateUtil.format("yyyy-MM-dd HH:mm:ss", map.get("CREATE_TIME"))); //标签 String tag = ConvertUtil.obj2Str(map.get("TAG")); if (tag != null) { map.put("tag_list", tag.split("\\s")); } } return list; } @Override public int queryLibraryCount(HttpServletRequest request) { String cusId = request.getParameter("cusId"); StringBuilder sql = new StringBuilder(); sql.append(" select count(t.ID) from (select DISTINCT k.ID "); if(StringUtil.isEmpty(cusId)){ sql.append("from km_library k "); }else{ sql.append("from (SELECT A.* FROM KM_LIBRARY A,KM_LIBRARY_KNOWLEDGE_ACCESS B WHERE A.ID = B.KNOWLEDGE_ID AND B.CUSTOMER_ID = :cusId ) k "); } sql.append("where k.STATE=1 "); sql.append("order by k.CREATE_TIME desc) t "); return baseDao.queryForInteger(sql.toString()); } @Override public int queryLibraryCountForMapByCategoryId(HttpServletRequest request, int treetype) { String userId = WebUtil.getLoginedUserId(request); String categoryId = request.getParameter("categoryId"); String cusId = request.getParameter("cusId"); StringBuilder sql = new StringBuilder(); sql.append(" select count(t.ID) from (select DISTINCT k.ID "); if(StringUtil.isEmpty(cusId)){ sql.append("from km_library k "); }else{ sql.append("from (SELECT A.* FROM KM_LIBRARY A,KM_LIBRARY_KNOWLEDGE_ACCESS B WHERE A.ID = B.KNOWLEDGE_ID AND B.CUSTOMER_ID = :cusId ) k "); } sql.append("where k.STATE=1 "); if(treetype == 1){ sql.append("and k.CATEGORY_ID=:category_id "); }else if(treetype == 2){ sql.append("and k.THIRDLEVEL_ID=:category_id "); }else{ sql.append("and k.THIRD_CATEGORY_ID=:category_id "); } sql.append("order by k.CREATE_TIME desc) t "); SqlParameter param = new SqlParameter(); param.addValue("category_id", categoryId); param.addValue("userId", userId); param.addValue("cusId", cusId); return baseDao.queryForInteger(sql.toString(), param); } @Override public List queryLibraryForMapByCategoryId(HttpServletRequest request, int treetype) { String userId = WebUtil.getLoginedUserId(request); String categoryId = request.getParameter("categoryId"); String cusId = request.getParameter("cusId"); String pageIndex = request.getParameter("currPage"); String pageSize = request.getParameter("pageSize"); if(!StringUtil.notEmptyNum(pageSize)){ pageSize = "5"; } if(!StringUtil.notEmptyNum(pageIndex)){ pageIndex = "1"; } StringBuilder sql = new StringBuilder(); sql.append("select t.ID,t.TITLE,t.TAG,t.SUMMARY,t.CREATE_TIME,t.CREATE_USER_NAME,t.IS_EDITOR,t.STATE from ( "); sql.append("select DISTINCT k.ID,k.TITLE,k.TAG,k.SUMMARY,k.CREATE_TIME,k.CREATE_USER_NAME,k.IS_EDITOR,p.STATE "); if(StringUtil.isEmpty(cusId)){ sql.append("from km_library k "); }else{ sql.append("from (SELECT A.* FROM KM_LIBRARY A,KM_LIBRARY_KNOWLEDGE_ACCESS B WHERE A.ID = B.KNOWLEDGE_ID AND B.CUSTOMER_ID = :cusId ) k "); } sql.append(" LEFT JOIN KM_LIBRARY_TEMP p on p.ORIGINAL_ID = k.ID where k.STATE=1 "); if(treetype == 1){ sql.append("and k.CATEGORY_ID=:category_id "); }else if(treetype == 2){ sql.append("and k.THIRDLEVEL_ID=:category_id "); }else{ sql.append("and k.THIRD_CATEGORY_ID=:category_id "); } sql.append("order by k.CREATE_TIME desc) t "); sql.append("limit :limit1,:limit2 "); int begin = Integer.valueOf(pageIndex); int size = Integer.valueOf(pageSize); SqlParameter param = new SqlParameter(); param.addValue("limit1", (begin-1)*size); param.addValue("limit2", size); param.addValue("category_id", categoryId); param.addValue("userId", userId); param.addValue("cusId", cusId); List list = baseDao.queryForList(sql.toString(), param); List mylist = getmyFavourite(userId); for (Map map : list) { for(Map mymap :mylist){ if(map.get("ID").equals(mymap.get("LIBRARY_ID"))){ map.put("favourite", 1); } } map.put("CREATE_TIME", DateUtil.format("yyyy-MM-dd HH:mm:ss", map.get("CREATE_TIME"))); //标签 String tag = ConvertUtil.obj2Str(map.get("TAG")); if (tag != null) { String[] tags = tag.split("\\s"); List tagList = new ArrayList(); for(int i=0;i mylist = getmyFavourite(userId); List myrecord = getmyknowRecord(userId); for(Map mymap :mylist){ if(map.get("ID").equals(mymap.get("LIBRARY_ID"))){ map.put("favourite", 1); } } for(Map mymap :myrecord){ if(map.get("ID").equals(mymap.get("LIBRARY_ID"))){ if(ConvertUtil.obj2Integer(mymap.get("TYPE")) == Constants.KM_SCORE_RULE_TYPE_D){ map.put("zan", 1); } if(ConvertUtil.obj2Integer(mymap.get("TYPE")) == Constants.KM_SCORE_RULE_TYPE_C){ map.put("cai", 1); } } } //标签 String tag = ConvertUtil.obj2Str(map.get("TAG")); if (tag != null) { String[] tags = tag.split("\\s"); List tagList = new ArrayList(); for(int i=0;i linkList = baseDao.queryForList(linksql, new SqlParameter("library_id", libraryId)); map.put("link_list", linkList); //历史版本列表 String historySql = "select ID,VERSION,CREATE_USER_NAME,CREATE_TIME from KM_LIBRARY_HISTORY " +"where ORIGINAL_ID=:original_id and STATE=1 order by VERSION "; List historyList = baseDao.queryForList(historySql, new SqlParameter("original_id", libraryId)); map.put("historyList", historyList); //点击排名 Map rankMap = this.getLibraryRankForHits(); map.put("RANK", rankMap.get(libraryId)); return map; } @Override public Map getLibraryZjbById(String libraryId, HttpServletRequest request) { String userId = WebUtil.getLoginedUserId(request); //基本信息 StringBuilder sql = new StringBuilder("select k.* "); sql.append("from KM_LIBRARY_TEMP k "); sql.append(" WHERE k.ID = :id "); SqlParameter param = new SqlParameter(); param.addValue("id", libraryId); Map map = baseDao.queryForMap(sql.toString(), param); List mylist = getmyFavourite(userId); for(Map mymap :mylist){ if(map.get("ID").equals(mymap.get("LIBRARY_ID"))){ map.put("favourite", 1); } } //标签 String tag = ConvertUtil.obj2Str(map.get("TAG")); if (tag != null) { String[] tags = tag.split("\\s"); List tagList = new ArrayList(); for(int i=0;i linkList = baseDao.queryForList(linksql, new SqlParameter("library_id", new KM_LIBRARY_TEMP(libraryId).getInstanceById().getOriginal_id())); if(linkList.size()==0){ linkList = baseDao.queryForList(linksql, new SqlParameter("library_id", libraryId)); } map.put("link_list", linkList); /*//历史版本列表 String historySql = "select ID,VERSION from KM_LIBRARY_HISTORY " +"where ORIGINAL_ID=:original_id and STATE=1 order by VERSION "; List historyList = baseDao.queryForList(historySql, new SqlParameter("original_id", libraryId)); map.put("historyList", historyList); //点击排名 Map rankMap = this.getLibraryRankForHits(); map.put("RANK", rankMap.get(libraryId));*/ return map; } /** * 获取文库点击排名 * @param partnerId * @return key=library_id,value=rank */ private Map getLibraryRankForHits() { Map resultMap = new HashMap(); String sql = "select ID,HITS from km_library where STATE=1 order by HITS desc "; List list = baseDao.queryForList(sql); if (list != null && list.size() > 0) { for (int i=0; i 0) { return false;//不重复收藏 } else { new KM_LIBRARY_FAVORITE().setLibrary_id(libraryId) .setCreate_user_id(userId) .setCreate_time(DateUtil.getCurrentDate14()) .insert(); return true; } } @Override public Map getHistoryById(String historyId) { //基本信息 StringBuilder sql = new StringBuilder("select ID,TITLE,TAG,SUMMARY,CONTENT,CATEGORY_ID,CATEGORY_NAME,CREATE_USER_ID,CREATE_USER_NAME,CREATE_TIME,VERSION,HITS,STATE,FILE_ID "); sql.append("from km_library_history where ID=:id "); SqlParameter param = new SqlParameter(); param.addValue("id", historyId); Map map = baseDao.queryForMap(sql.toString(), param); //标签 String tag = ConvertUtil.obj2Str(map.get("TAG")); if (tag != null) { String[] tags = tag.split("\\s"); List tagList = new ArrayList(); for(int i=0;i linkList = baseDao.queryForList(linksql, new SqlParameter("library_id", historyId)); map.put("link_list", linkList); return map; } @Override public Map thirdlevelListTree(HttpServletRequest request) { String category_id = request.getParameter("category_id"); String cusId = request.getParameter("cusId"); StringBuilder sql=new StringBuilder("SELECT A.* ,COUNT(B.ID) AS NUM FROM CMDB_CI_CATEGORY A LEFT JOIN "); if(StringUtil.isEmpty(cusId)){ sql.append(" KM_LIBRARY B ON A.ID = B.THIRDLEVEL_ID AND B.STATE = 1 "); }else{ sql.append(" (SELECT C.* FROM KM_LIBRARY C,KM_LIBRARY_KNOWLEDGE_ACCESS D WHERE C.ID = D.KNOWLEDGE_ID AND D.CUSTOMER_ID = :cusId) B ON A.ID = B.THIRDLEVEL_ID and B.STATE = 1"); } sql.append(" WHERE A.STATE = 1 and a.cate_type=1 GROUP BY A.ID ORDER BY A.LV,A.SERIAL,A.NAME"); List categoryList = baseDao.queryForList(sql.toString(),new SqlParameter("cusId",cusId)); Map result = new HashMap(); List resultList = new LinkedList(); Map yjgnCache = new HashMap(); Map ejgnCache = new HashMap(); Map sjgnCache = new HashMap(); for (Map map : categoryList) { //一级树 if (map.get("LV").toString().equalsIgnoreCase("1")) { yjgnCache.put(map.get("ID").toString(), map); List ejgnList = new LinkedList(); map.put("ejTree", ejgnList); resultList.add(map); continue; } //二级树 if (map.get("LV").toString().equalsIgnoreCase("2")) { Map yjgnMap = yjgnCache.get(map.get("PID").toString()); List list = (List)yjgnMap.get("ejTree"); map.put("sjTree", new LinkedList()); list.add(map); ejgnCache.put(map.get("ID").toString(), map); continue; } //三级树 if (map.get("LV").toString().equalsIgnoreCase("3")) { if(!StringUtil.isEmpty(category_id)&&category_id.equals(map.get("ID"))){ map.put("select", 1); } if(null!=map.get("PID")){ Map ejgnMap = ejgnCache.get(map.get("PID").toString()); List list = (List)ejgnMap.get("sjTree"); list.add(map); } } } Map resultMap = new HashMap(); resultMap.put("categoryList", resultList); return resultMap; } @Override public Map serviceListTree(HttpServletRequest request) { String category_id = request.getParameter("category_id"); String cusId = request.getParameter("cusId"); String type = request.getParameter("type"); StringBuffer sql = new StringBuffer("SELECT D.*,COUNT(B.ID) AS NUM FROM ("); String sqlpart="SELECT * FROM SC_SERVCE_CATEGORY WHERE STATE = 1 AND TYPE = 2 ORDER BY LEVEL,SERIAL "; sql.append(sqlpart); sql.append(" ) D LEFT JOIN "); if(StringUtil.isEmpty(cusId)){ sql.append(" KM_LIBRARY B ON D.ID = B.THIRD_CATEGORY_ID and B.STATE = 1 "); }else{ sql.append(" (SELECT C.* FROM KM_LIBRARY C,KM_LIBRARY_KNOWLEDGE_ACCESS D WHERE C.ID = D.KNOWLEDGE_ID AND D.CUSTOMER_ID = :cusId) B ON D.ID = B.THIRD_CATEGORY_ID and B.STATE = 1"); } sql.append(" GROUP BY D.ID ORDER BY D.LEVEL,D.SERIAL,D.CATEGORY_NAME"); List categoryList = baseDao.queryForList(sql.toString(),new SqlParameter("cusId",cusId)); Map result = new HashMap(); List resultList = new LinkedList(); Map yjgnCache = new HashMap(); Map ejgnCache = new HashMap(); Map sjgnCache = new HashMap(); for (Map map : categoryList) { //一级树 if (map.get("LEVEL").toString().equalsIgnoreCase("1")) { yjgnCache.put(map.get("ID").toString(), map); List ejgnList = new LinkedList(); map.put("ejTree", ejgnList); resultList.add(map); continue; } //二级树 if (map.get("LEVEL").toString().equalsIgnoreCase("2")) { Map yjgnMap = yjgnCache.get(map.get("P_ID").toString()); List list = (List)yjgnMap.get("ejTree"); map.put("sjTree", new LinkedList()); list.add(map); ejgnCache.put(map.get("ID").toString(), map); continue; } //三级树 if (map.get("LEVEL").toString().equalsIgnoreCase("3")) { if(!StringUtil.isEmpty(category_id)&&category_id.equals(map.get("ID"))){ map.put("select", 1); } if(null!=map.get("P_ID")){ Map ejgnMap = ejgnCache.get(map.get("P_ID").toString()); List list = (List)ejgnMap.get("sjTree"); list.add(map); } } } Map resultMap = new HashMap(); resultMap.put("categoryList", resultList); return resultMap; } @Override public List getmyknowRecord(String userId) { String sql = "SELECT * FROM KM_RECORD WHERE CREATE_USER_ID = :userId "; return baseDao.queryForList(sql,new SqlParameter("userId",userId)); } }