package cn.jcenterhome.service; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import cn.jcenterhome.util.BeanFactory; import cn.jcenterhome.util.Common; import cn.jcenterhome.util.JavaCenterHome; public class OpService { private DataBaseService dataBaseService = (DataBaseService) BeanFactory.getBean("dataBaseService"); public boolean digestThreads(HttpServletRequest request, HttpServletResponse response, int supe_uid, int tagId, int v, Object tids) throws Exception { Map<String, Object> mtag = Common.getMtag(request, response, supe_uid, tagId); if ((Integer) mtag.get("grade") < 8) { return false; } StringBuffer wheresql = new StringBuffer(); if (v == 0) { wheresql.append(" AND digest=1"); } else { wheresql.append(" AND digest=0"); v = 1; } List<String> newTids = dataBaseService.executeQuery("SELECT tid FROM " + JavaCenterHome.getTableName("thread") + " WHERE tagid=" + tagId + " AND tid IN (" + Common.sImplode(tids) + ") " + wheresql.toString(), 1); if (newTids.size() > 0) { dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("thread") + " SET digest=" + v + " WHERE tid IN (" + Common.sImplode(newTids) + ")"); return true; } else { return false; } } public boolean topThreads(HttpServletRequest request, HttpServletResponse response, int supe_uid, int tagId, int v, Object tids) throws Exception { Map<String, Object> mtag = Common.getMtag(request, response, supe_uid, tagId); if ((Integer) mtag.get("grade") < 8) { return false; } StringBuffer wheresql = new StringBuffer(); if (v == 0) { wheresql.append(" AND displayorder=1"); } else { wheresql.append(" AND displayorder=0"); v = 1; } List<String> newTids = dataBaseService.executeQuery("SELECT tid FROM " + JavaCenterHome.getTableName("thread") + " WHERE tagid=" + tagId + " AND tid IN (" + Common.sImplode(tids) + ") " + wheresql.toString(), 1); if (newTids.size() > 0) { dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("thread") + " SET displayorder=" + v + " WHERE tid IN (" + Common.sImplode(newTids) + ")"); return true; } else { return false; } } public boolean mergeTag(HttpServletRequest request, HttpServletResponse response, int newTagId, List<Object> tagIds) { if (!Common.checkPerm(request, response, "managetag")) { return false; } dataBaseService.executeUpdate("DELETE FROM " + JavaCenterHome.getTableName("tag") + " WHERE tagid IN (" + Common.sImplode(tagIds) + ") AND tagid <> " + newTagId); tagIds.add(newTagId); String newIds = Common.sImplode(Common.uniqueArray(tagIds.toArray())); List<String> blogIds = dataBaseService.executeQuery("SELECT DISTINCT blogid FROM " + JavaCenterHome.getTableName("tagblog") + " WHERE tagid IN (" + newIds + ")", 1); int size = blogIds.size(); if (size > 0) { dataBaseService.executeUpdate("DELETE FROM " + JavaCenterHome.getTableName("tagblog") + " WHERE tagid IN (" + newIds + ")"); List<String> inserts = new ArrayList<String>(); for (String blogid : blogIds) { inserts.add("(" + newTagId + "," + blogid + ")"); } dataBaseService.executeUpdate("INSERT INTO " + JavaCenterHome.getTableName("tagblog") + " (tagid, blogid) VALUES " + Common.implode(inserts, ",")); dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("tag") + " SET blognum=" + size + " WHERE tagid=" + newTagId); } return true; } public boolean closeTag(HttpServletRequest request, HttpServletResponse response, String opType, Object tagIds) { if (!Common.checkPerm(request, response, "managetag")) { return false; } int close = 0; if (!"close".equals(opType)) { close = 1; } List<String> newTagIds = dataBaseService.executeQuery("SELECT tagid FROM " + JavaCenterHome.getTableName("tag") + " WHERE tagid IN (" + Common.sImplode(tagIds) + ") AND close=" + close, 1); if (newTagIds.isEmpty()) { return false; } String newIds = Common.sImplode(newTagIds); if ("close".equals(opType)) { dataBaseService.executeUpdate("DELETE FROM " + JavaCenterHome.getTableName("tagblog") + " WHERE tagid IN (" + newIds + ")"); dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("tag") + " SET blognum=0, close=1 WHERE tagid IN (" + newIds + ")"); } else { dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("tag") + " SET close=0 WHERE tagid IN (" + newIds + ")"); } return true; } public boolean mergeMtag(HttpServletRequest request, HttpServletResponse response, int newTagId, String[] tagIds) { if (!Common.checkPerm(request, response, "managemtag")) { return false; } List<Integer> ckTagIds = new ArrayList<Integer>(); for (String tagId : tagIds) { int id = Common.intval(tagId); if (id > 0 && id != newTagId) { ckTagIds.add(id); } } if (ckTagIds.isEmpty()) { return false; } String newIds = Common.sImplode(ckTagIds); dataBaseService.executeUpdate("DELETE FROM " + JavaCenterHome.getTableName("mtag") + " WHERE tagid IN (" + newIds + ")"); dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("thread") + " SET tagid=" + newTagId + " WHERE tagid IN (" + newIds + ")"); dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("post") + " SET tagid=" + newTagId + " WHERE tagid IN (" + newIds + ")"); List<String> oldUids = dataBaseService.executeQuery("SELECT uid FROM " + JavaCenterHome.getTableName("tagspace") + " WHERE tagid=" + newTagId, 1); Map<String, String> newUids = new TreeMap<String, String>(); List<Map<String, Object>> tagspaceList2 = dataBaseService.executeQuery("SELECT uid, username FROM " + JavaCenterHome.getTableName("tagspace") + " WHERE tagid IN (" + newIds + ")"); for (Map<String, Object> value : tagspaceList2) { String uid = value.get("uid").toString(); if (!oldUids.contains(uid)) { newUids.put(uid, (String) value.get("username")); } } dataBaseService.executeUpdate("DELETE FROM " + JavaCenterHome.getTableName("tagspace") + " WHERE tagid IN (" + newIds + ")"); List<String> inserts = new ArrayList<String>(); Set<String> keys = newUids.keySet(); for (String uid : keys) { inserts.add("(" + newTagId + ", " + uid + ", '" + Common.addSlashes((String) newUids.get(uid)) + "')"); } if (inserts.size() > 0) { dataBaseService.executeUpdate("REPLACE INTO " + JavaCenterHome.getTableName("tagspace") + " (tagid,uid,username) VALUES " + Common.implode(inserts, ",")); } int memberNum = dataBaseService.findRows("SELECT COUNT(*) FROM " + JavaCenterHome.getTableName("tagspace") + " WHERE tagid=" + newTagId); int threadNum = dataBaseService.findRows("SELECT COUNT(*) FROM " + JavaCenterHome.getTableName("thread") + " WHERE tagid=" + newTagId); int postNum = dataBaseService.findRows("SELECT COUNT(*) FROM " + JavaCenterHome.getTableName("post") + " WHERE tagid=" + newTagId + " AND isthread=0"); String sql = "UPDATE " + JavaCenterHome.getTableName("mtag") + " SET membernum=" + memberNum + ",threadnum=" + threadNum + ",postnum=" + postNum + " WHERE tagid=" + newTagId; dataBaseService.executeUpdate(sql); return true; } public boolean closeMtag(HttpServletRequest request, HttpServletResponse response, String opType, Object tagIds) { if (!Common.checkPerm(request, response, "managemtag")) { return false; } int close = 0; if (!"close".equals(opType)) { close = 1; } List<String> newTagIds = dataBaseService.executeQuery("SELECT tagid FROM " + JavaCenterHome.getTableName("mtag") + " WHERE tagid IN (" + Common.sImplode(tagIds) + ") AND close=" + close, 1); if (newTagIds.isEmpty()) { return false; } dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("mtag") + " SET close=" + ("close".equals(opType) ? 1 : 0) + " WHERE tagid IN (" + Common.sImplode(newTagIds) + ")"); return true; } public boolean recommendMtag(HttpServletRequest request, HttpServletResponse response, String opType, Object tagIds) { if (!Common.checkPerm(request, response, "managemtag")) { return false; } int recommend = 0; if (!"recommend".equals(opType)) { recommend = 1; } List<String> newTagIds = dataBaseService.executeQuery("SELECT tagid FROM " + JavaCenterHome.getTableName("mtag") + " WHERE tagid IN (" + Common.sImplode(tagIds) + ") AND recommend=" + recommend, 1); if (newTagIds.isEmpty()) { return false; } dataBaseService.executeUpdate("UPDATE " + JavaCenterHome.getTableName("mtag") + " SET recommend=" + ("recommend".equals(opType) ? 1 : 0) + " WHERE tagid IN (" + Common.sImplode(newTagIds) + ")"); return true; } }