actions = Collections.emptyList();
-
- if (StringUtil.isNotBlank(type)) {
- switch (type) {
- case "threads":
- threads = TaskRunManager.getAllThread();
- break;
- case "schedulers":
- schedulers = QuartzSchedulerManager.getAllScheduler();
- break;
- case "actions":
- actions = TaskRunManager.getAllAction();
- break;
- default:
- throw new ApiException(500, "err type " + type);
- }
-
- } else {
- threads = TaskRunManager.getAllThread();
- schedulers = QuartzSchedulerManager.getAllScheduler();
- actions = TaskRunManager.getAllAction();
- }
-
- final String gn = groupName;
- if (StringUtil.isNotBlank(groupName)) {
- threads = threads.stream().filter(t -> t.getGroupName().equals(gn)).collect(Collectors.toList());
- schedulers = schedulers.stream().filter(t -> t.getGroupName().equals(gn)).collect(Collectors.toList());
- actions = actions.stream().filter(t -> t.getGroupName().equals(gn)).collect(Collectors.toList());
- }
-
- JSONObject json = new JSONObject();
-
- json.put("threads", threads);
- json.put("schedulers", schedulers);
- json.put("actions", actions);
-
- return Restful.ok().obj(json);
- }
- }
-
- /**
- * 停止一个运行的action
- *
- * 停止一个运行的action,或者task
- */
- @At
- public Restful stop(@Param("hostPort") String hostPort, @Param("key") String key, @Param(value = "first", df = "true") boolean first) throws Exception {
- if (first) {
- JSONObject json = new JSONObject();
- Map post = proxyService.post(new String[]{hostPort}, "/admin/thread/stop", ImmutableMap.of("key", key, "first", false), 100000);
- for (Map.Entry entry : post.entrySet()) {
- Restful ref = entry.getValue();
- if (!ref.isOk()) {
- LOG.error(entry.getKey() + ":" + entry.getValue().toJsonString());
- continue;
- }
- return Restful.instance(ref.isOk(),ref.getMessage()) ;
- }
- } else {
- try {
- TaskRunManager.stop(key);
- return Restful.ok().msg("停止任务成功!");
- } catch (TaskException e) {
- e.printStackTrace();
- LOG.error("stop action err", e);
- return Restful.fail().msg("停止任务失败!");
- }
- }
- return null;
- }
-
-// /**
-// * 停止一个运行的job的所有实例线程
-// */
-// @At
-// public void stopAllJob(String groupName, String taskName) throws Exception {
-// try {
-// TaskRunManager.stopAll(groupName, taskName);
-// } catch (Exception e) {
-// LOG.error("author err", e);
-// throw e;
-// }
-// }
-}
+package org.nlpcn.jcoder.controller;
+
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.nlpcn.jcoder.domain.Task;
+import org.nlpcn.jcoder.domain.TaskInfo;
+import org.nlpcn.jcoder.domain.UserGroup;
+import org.nlpcn.jcoder.scheduler.TaskException;
+import org.nlpcn.jcoder.scheduler.ThreadManager;
+import org.nlpcn.jcoder.service.TaskService;
+import org.nlpcn.jcoder.util.StaticValue;
+import org.nlpcn.jcoder.util.dao.BasicDao;
+import org.nutz.dao.Cnd;
+import org.nutz.ioc.loader.annotation.IocBean;
+import org.nutz.mvc.Mvcs;
+import org.nutz.mvc.annotation.At;
+import org.nutz.mvc.annotation.By;
+import org.nutz.mvc.annotation.Filters;
+import org.nutz.mvc.annotation.Ok;
+import org.nutz.mvc.filter.CheckSession;
+import org.quartz.SchedulerException;
+
+import com.alibaba.fastjson.JSONObject;
+
+@IocBean
+public class ThreadAction {
+
+ private static final Logger LOG = Logger.getLogger(ThreadAction.class);
+
+ private BasicDao basicDao = StaticValue.systemDao;
+
+ @Filters(@By(type = CheckSession.class, args = { "user", "/login.jsp" }))
+ @At("/thread/list/")
+ @Ok("jsp:/thread_list.jsp")
+ public JSONObject list() throws TaskException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, SchedulerException {
+ return this.runInfo();
+ }
+
+ /**
+ * 通过api的方式获得线程
+ *
+ * @return
+ * @throws SchedulerException
+ * @throws TaskException
+ */
+ @At("/thread/info")
+ @Ok("json")
+ public JSONObject runInfo() throws SchedulerException, TaskException {
+ // 线程任务
+ List threads = ThreadManager.getAllThread();
+
+ // 获得计划任务
+ List schedulers = ThreadManager.getAllScheduler();
+
+ // 获得执行中的action
+ List actions = ThreadManager.getAllAction();
+
+ JSONObject json = new JSONObject();
+
+ json.put("threads", threads);
+
+ json.put("schedulers", schedulers);
+
+ json.put("actions", actions);
+
+ return json;
+ }
+
+ @Filters(@By(type = CheckSession.class, args = { "user", "/login.jsp" }))
+ @At("/thread/stop/task/?")
+ @Ok("redirect:/thread/list/")
+ public void stopTask(String name) throws Exception {
+ try {
+ authEditorValidate(name);
+ try {
+ ThreadManager.stop(name);
+ } catch (TaskException e) {
+ e.printStackTrace();
+ LOG.error(e);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ LOG.error(e);
+ }
+ }
+
+
+ /**
+ * 停止一个运行的action
+ *
+ * @param host
+ * @param name
+ * @throws Exception
+ */
+ @Filters(@By(type = CheckSession.class, args = { "user", "/login.jsp" }))
+ @At("/thread/stop/?")
+ @Ok("redirect:/thread/list/")
+ public void stop(String key) throws Exception {
+ try {
+ authEditorValidate(key.split("@")[0]);
+ try {
+ ThreadManager.stop(key);
+ } catch (TaskException e) {
+ e.printStackTrace();
+ LOG.error(e);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ LOG.error(e);
+ }
+ }
+
+ /**
+ * 编辑task权限验证
+ *
+ * @throws Exception
+ */
+ private void authEditorValidate(String name) throws Exception {
+ if ((Integer) Mvcs.getHttpSession().getAttribute("userType") == 1) {
+ return;
+ }
+
+ Task task = TaskService.findTaskByCache(name);
+
+ UserGroup ug = basicDao.findByCondition(UserGroup.class, Cnd.where("groupId", "=", task.getGroupId()).and("userId", "=", Mvcs.getHttpSession().getAttribute("userId")));
+ if (ug == null || ug.getAuth() != 2) {
+ throw new Exception("not have editor auth in groupId:" + task.getGroupId());
+ }
+ }
+
+}
diff --git a/src/main/java/org/nlpcn/jcoder/controller/UserAction.java b/src/main/java/org/nlpcn/jcoder/controller/UserAction.java
index c8c4945..996da98 100644
--- a/src/main/java/org/nlpcn/jcoder/controller/UserAction.java
+++ b/src/main/java/org/nlpcn/jcoder/controller/UserAction.java
@@ -1,117 +1,195 @@
-package org.nlpcn.jcoder.controller;
-
-import com.alibaba.fastjson.JSONObject;
-import org.nlpcn.jcoder.domain.Group;
-import org.nlpcn.jcoder.domain.User;
-import org.nlpcn.jcoder.filter.AuthoritiesManager;
-import org.nlpcn.jcoder.util.Restful;
-import org.nlpcn.jcoder.util.StaticValue;
-import org.nlpcn.jcoder.util.dao.BasicDao;
-import org.nutz.dao.Cnd;
-import org.nutz.dao.Condition;
-import org.nutz.ioc.loader.annotation.IocBean;
-import org.nutz.mvc.annotation.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Date;
-import java.util.List;
-
-@IocBean
-@Filters(@By(type = AuthoritiesManager.class))
-@Ok("json")
-public class UserAction {
-
- private static final Logger LOG = LoggerFactory.getLogger(UserAction.class);
-
-
- public BasicDao basicDao = StaticValue.systemDao;
- ;
-
- @At("/admin/user/list")
- public Restful userList() {
-
- JSONObject result = new JSONObject();
-
- Condition con = null;
- List users = basicDao.search(User.class, con);
- result.put("users", users);
-
- List groups = basicDao.search(Group.class, con);
- result.put("groups", groups);
-
- return Restful.instance().obj(result);
-
- }
-
- @At("/user/nameDiff")
- @Ok("raw")
- public boolean userNameDiff(@Param("name") String name) {
- Condition con = Cnd.where("name", "=", name);
- int count = basicDao.searchCount(User.class, con);
- return count == 0;
- }
-
-
- @At("/admin/user/add")
- public Restful addU(@Param("..") User user) throws Exception {
- //User user = JSONObject.parseObject(userInfo).toJavaObject(User.class);
- if (userNameDiff(user.getName())) {
- user.setPassword(StaticValue.passwordEncoding(user.getPassword()));
- user.setCreateTime(new Date());
- basicDao.save(user);
- LOG.info("add user:" + user.getName());
- return Restful.ok().msg("添加成功!");
- } else {
- return Restful.fail().msg("有相同名字用户!");
- }
-
- }
-
- @At("/admin/user/del")
- public Restful delU(@Param("..") User user) {
- // TODO 删除用户后要把用户相关的userTask及userGroup删除,等userTask完成后做
- if (user.getType() == 1) {
- // 保证至少要有一个超级用户
- Condition con = Cnd.where("type", "=", 1);
- int count = basicDao.searchCount(User.class, con);
- if (count == 1) {
- LOG.info("fail to del the last super user!");
- return Restful.fail().msg("至少保证有一个超级管理员!");
- }
- }
- boolean flag = basicDao.delById(user.getId(), User.class);
- if (flag) {
- LOG.info("del user:" + user.getName());
- return Restful.ok().msg("删除用户:" + user.getName() + "成功!");
- }
- Condition co = Cnd.where("userId", "=", user.getId());
- /*int num = basicDao.delByCondition(UserGroup.class, co);
- if (num > 0) {
- LOG.info("del userGroup's num:" + num);
- }*/
- return Restful.ok();
- }
-
- @At("/admin/user/modify")
- public Restful modify(@Param("..") User user) throws Exception {
- if (user == null) {
- return Restful.fail().msg("修改失败!");
- }
-
- User dbUser = basicDao.find(user.getId(), User.class);
-
- if (!user.getPassword().equals(dbUser.getPassword())) {
- user.setPassword(StaticValue.passwordEncoding(user.getPassword()));
- }
-
- boolean flag = basicDao.update(user);
- if (flag) {
- LOG.info("modify user:" + user);
- return Restful.ok().msg("修改成功!");
- }
- return Restful.ok();
- }
-
-
-}
+package org.nlpcn.jcoder.controller;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+import org.nlpcn.jcoder.domain.Group;
+import org.nlpcn.jcoder.domain.User;
+import org.nlpcn.jcoder.domain.UserGroup;
+import org.nlpcn.jcoder.filter.AuthoritiesManager;
+import org.nlpcn.jcoder.util.StaticValue;
+import org.nlpcn.jcoder.util.dao.BasicDao;
+import org.nutz.dao.Cnd;
+import org.nutz.dao.Condition;
+import org.nutz.ioc.loader.annotation.IocBean;
+import org.nutz.mvc.Mvcs;
+import org.nutz.mvc.annotation.At;
+import org.nutz.mvc.annotation.By;
+import org.nutz.mvc.annotation.Fail;
+import org.nutz.mvc.annotation.Filters;
+import org.nutz.mvc.annotation.Ok;
+import org.nutz.mvc.annotation.Param;
+
+@IocBean
+@Filters(@By(type = AuthoritiesManager.class, args = { "userType", "1", "/login.jsp" }))
+public class UserAction {
+
+ private Logger log = Logger.getLogger(this.getClass());
+
+ public BasicDao basicDao = StaticValue.systemDao;;
+
+ @At("/user/list")
+ @Ok("jsp:/user/user_list.jsp")
+ public void userList() {
+ Condition con = null;
+ List users = basicDao.search(User.class, con);
+ Mvcs.getReq().setAttribute("users", users);
+
+ List groups = basicDao.search(Group.class, con);
+ Mvcs.getReq().setAttribute("groups", groups);
+
+ }
+
+ @At("/group/list")
+ @Ok("jsp:/user/group_list.jsp")
+ public void groupList() {
+ Condition con = null;
+ List groups = basicDao.search(Group.class, con);
+ // 查找group下所有用户
+
+ for (Group group : groups) {
+ List userGroupList = basicDao.search(UserGroup.class, Cnd.where("groupId", "=", group.getId()));
+
+ List