Procházet zdrojové kódy

增加查询任务的功能, 以及在添加失败的情况下, 自动回滚

jxing před 6 roky
rodič
revize
150437070c

+ 51 - 0
scheduler/src/main/java/cn/sagacloud/mybatis/dao/TaskDAO.java

@@ -7,7 +7,9 @@ import org.apache.ibatis.session.SqlSession;
 import org.mybatis.guice.transactional.Transactional;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 public class TaskDAO {
 
@@ -89,4 +91,53 @@ public class TaskDAO {
         }
         return result;
     }
+
+    public boolean updateSingleTask(TaskModel task) {
+        SqlSession session = null;
+        try {
+            session = MyBatisSqlSessionFactory.openSession();
+            TaskMapper taskMapper = session.getMapper(TaskMapper.class);
+            int affectedRow = taskMapper.updateSingleTask(task);
+            session.commit();
+            return affectedRow > -1;
+        } catch (Exception e) {
+            return false;
+        } finally {
+            if (session != null)
+                session.close();
+        }
+    }
+
+
+    public Map<Integer, TaskModel> getAllTaskMapByStatus(List<Integer> statusList) {
+        SqlSession session = null;
+        Map<Integer, TaskModel> result = new HashMap<>();
+        try {
+            session = MyBatisSqlSessionFactory.openSession();
+            TaskMapper taskMapper = session.getMapper(TaskMapper.class);
+            result = taskMapper.getTasksMapByStatus(statusList);
+            session.commit();
+        } catch (Exception ignore) {
+        } finally {
+            if (session != null)
+                session.close();
+        }
+        return result;
+    }
+
+    public Map<Integer, TaskModel> getTaskMapByIds(List<Integer> idList) {
+        SqlSession session = null;
+        Map<Integer, TaskModel> result = new HashMap<>();
+        try {
+            session = MyBatisSqlSessionFactory.openSession();
+            TaskMapper taskMapper = session.getMapper(TaskMapper.class);
+            result = taskMapper.getTasksMapByIds(idList);
+            session.commit();
+        } catch (Exception ignore) {
+        } finally {
+            if (session != null)
+                session.close();
+        }
+        return result;
+    }
 }

+ 9 - 1
scheduler/src/main/java/cn/sagacloud/mybatis/mapper/TaskMapper.java

@@ -2,17 +2,25 @@ package cn.sagacloud.mybatis.mapper;
 
 import cn.sagacloud.mybatis.model.DownloadTaskModel;
 import cn.sagacloud.mybatis.model.TaskModel;
+import org.apache.ibatis.annotations.MapKey;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 public interface TaskMapper {
     int addTask(TaskModel task);
 
-    int addDownload(@Param("list")List<DownloadTaskModel> downloadTaskModelList, @Param("taskId")int id) ;
+    int addDownload(@Param("list")List<DownloadTaskModel> downloadTaskModelList, @Param("taskId")int id);
 
     ArrayList<TaskModel> getTasksByIds(List<Integer> idList);
 
     ArrayList<TaskModel> getTasksByStatus(List<Integer> statusList);
+
+    int updateSingleTask(TaskModel task);
+    @MapKey("id")
+    Map<Integer, TaskModel> getTasksMapByIds(List<Integer> idList);
+    @MapKey("id")
+    Map<Integer, TaskModel> getTasksMapByStatus(List<Integer> statusList);
 }

+ 5 - 5
scheduler/src/main/java/cn/sagacloud/mybatis/model/TaskModel.java

@@ -11,7 +11,7 @@ public class TaskModel {
     private String task_param;
     private int task_status;
     private String task_result_json;
-    private String task_last_mac;
+    private String task_last_client;
     private long task_expected_finish_time;
 
     private List<DownloadTaskModel> downloadTaskModelList;
@@ -64,12 +64,12 @@ public class TaskModel {
         this.task_result_json = task_result_json;
     }
 
-    public String getTask_last_mac() {
-        return task_last_mac;
+    public String getTask_last_client() {
+        return task_last_client;
     }
 
-    public void setTask_last_mac(String task_last_mac) {
-        this.task_last_mac = task_last_mac;
+    public void setTask_last_client(String task_last_client) {
+        this.task_last_client = task_last_client;
     }
 
     public long getTask_expected_finish_time() {

+ 23 - 10
scheduler/src/main/java/cn/sagacloud/mybatis/service/TaskService.java

@@ -5,10 +5,7 @@ import cn.sagacloud.mybatis.model.TaskModel;
 import com.google.inject.*;
 import org.mybatis.guice.transactional.Transactional;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Properties;
+import java.util.*;
 
 public class TaskService {
     private TaskDAO taskDAO;
@@ -27,12 +24,14 @@ public class TaskService {
     }
     @Transactional
     public boolean updateTask(TaskModel task) throws Exception {
-        ArrayList<TaskModel> tasks = taskDAO.getTasksByIds(Arrays.asList(task.getId()));
-        if(tasks == null || tasks.size() == 0){
-            return true;
-        }
-        TaskModel prev = tasks.get(0);
-        return false;
+//        ArrayList<TaskModel> tasks = taskDAO.getTasksByIds(Arrays.asList(task.getId()));
+//        if(tasks == null || tasks.size() == 0){
+//            return true;
+//        }
+//        TaskModel prev = tasks.get(0);
+//
+        boolean result = taskDAO.updateSingleTask(task);
+        return result;
     }
 
 
@@ -49,4 +48,18 @@ public class TaskService {
         ArrayList<TaskModel> tasks = taskDAO.getTasksByIds(idList);
         return tasks;
     }
+
+    public Map<Integer, TaskModel> getAllTaskMapByStatus(List<Integer> statusList) throws Exception {
+        if(statusList == null || statusList.size() == 0)
+            return new HashMap<>();
+        Map<Integer, TaskModel> tasks = taskDAO.getAllTaskMapByStatus(statusList);
+        return tasks;
+    }
+
+    public Map<Integer, TaskModel> getTaskMapByIds(List<Integer> idList) throws Exception {
+        if(idList == null || idList.size() == 0)
+            return new HashMap<>();
+        Map<Integer, TaskModel> tasks = taskDAO.getTaskMapByIds(idList);
+        return tasks;
+    }
 }

+ 10 - 1
scheduler/src/main/java/cn/sagacloud/pojo/Command.java

@@ -14,7 +14,8 @@ public enum Command {
     AcceptTask,
     DownloadError,
     CommandError,
-    TaskSuccess;
+    TaskSuccess,
+    ClientInfo;
     private static ArrayList<Command> cmdList;
     static{
         cmdList = new ArrayList<>();
@@ -26,4 +27,12 @@ public enum Command {
         }
         return null;
     }
+
+    public static int getIdByCmd(Command cmd) {
+        for(int i = 0; i < cmdList.size(); ++i){
+            if(cmdList.get(i).equals(cmd))
+                return i;
+        }
+        return -1;
+    }
 }

+ 12 - 0
scheduler/src/main/java/cn/sagacloud/server/DispatchTask.java

@@ -0,0 +1,12 @@
+package cn.sagacloud.server;
+
+import cn.sagacloud.guice.InjectorInit;
+import cn.sagacloud.mybatis.service.TaskService;
+
+public class DispatchTask implements Runnable {
+    TaskService service = InjectorInit.getInjector().getInstance(TaskService.class);
+    @Override
+    public void run() {
+
+    }
+}

+ 3 - 1
scheduler/src/main/java/cn/sagacloud/server/Server.java

@@ -54,6 +54,7 @@ public class Server {
         // 初始化配置
         config = new Yaml().loadAs(Server.class.getClassLoader().getResourceAsStream("config.yml"), Config.class);
         // 初始化Task(从sql到内存)
+        DispatchTask dispatchTask = new DispatchTask();
 
     }
 
@@ -61,7 +62,8 @@ public class Server {
         try {
             // 启动服务
             channel = bootstrap.bind(config.getPort()).sync().channel();
-            //println("Revit Dispatcher start success $port");
+
+
             channel.closeFuture().sync();
         } finally {
             workerGroup.shutdownGracefully();

+ 8 - 2
scheduler/src/main/proto/MessageProto.proto

@@ -4,8 +4,14 @@ package cn.sagacloud.proto;
 option optimize_for = SPEED;
 //option java_package = "cn.sagacloud.server.proto";
 option java_outer_classname = "MessageProto";
+//message Message{
+//    int32 cmd = 1;
+//    string className = 2;
+//    string content = 3;
+//}
+
 message Message{
-    int32 cmd = 1;
-    string className = 2;
+    string cmd = 1;
+    int32 taskId = 2;
     string content = 3;
 }

+ 36 - 6
scheduler/src/main/resources/mapper/TaskMap.xml

@@ -2,11 +2,11 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="cn.sagacloud.mybatis.mapper.TaskMapper">
     <insert id="addTask" parameterType="cn.sagacloud.mybatis.model.TaskModel" useGeneratedKeys="true" keyProperty="id">
-        INSERT INTO `task`(task_name, task_cmd, task_param, task_status, task_result_json, task_last_mac, task_expected_finish_time)
-        VALUE(#{task_name},#{task_cmd},#{task_param},#{task_status},#{task_result_json},#{task_last_mac},#{task_expected_finish_time});
+        INSERT INTO `task`(task_name, task_cmd, task_param, task_status, task_result_json, task_last_client, task_expected_finish_time)
+        VALUE(#{task_name},#{task_cmd},#{task_param},#{task_status},#{task_result_json},#{task_last_client},#{task_expected_finish_time});
     </insert>
 
-    <insert id="addDownload" parameterType="cn.sagacloud.mybatis.model.DownloadTaskModel" useGeneratedKeys="true" keyProperty="list.">
+    <insert id="addDownload" parameterType="cn.sagacloud.mybatis.model.DownloadTaskModel" useGeneratedKeys="true" keyProperty="list.id">
         INSERT INTO `download`(task_id,task_url,task_md5) VALUES
         <foreach collection="list" item="item" separator=",">
             (#{taskId},#{item.task_url},#{item.task_md5})
@@ -14,7 +14,7 @@
     </insert>
 
     <select id="getTasksByIds" resultMap="taskModelList">
-        select task.id, task_name, task_cmd, task_param, task_status, task_result_json, task_last_mac,
+        select task.id, task_name, task_cmd, task_param, task_status, task_result_json, task_last_client,
         task_expected_finish_time, download.id downloadId, task_id, task_url, task_md5
         from `task` right join `download` on task.id = download.task_id where task.id in
         <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
@@ -23,13 +23,32 @@
     </select>
 
     <select id="getTasksByStatus" resultMap="taskModelList">
-        select task.id, task_name, task_cmd, task_param, task_status, task_result_json, task_last_mac,
+        select task.id, task_name, task_cmd, task_param, task_status, task_result_json, task_last_client,
         task_expected_finish_time, download.id downloadId, task_id, task_url, task_md5
         from `task` right join `download` on task.id = download.task_id where task.task_status in
         <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
             #{item}
         </foreach>;
     </select>
+
+    <select id="getTasksMapByIds" resultMap="taskModelList">
+        select task.id, task_name, task_cmd, task_param, task_status, task_result_json, task_last_client,
+        task_expected_finish_time, download.id downloadId, task_id, task_url, task_md5
+        from `task` right join `download` on task.id = download.task_id where task.id in
+        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>;
+    </select>
+
+    <select id="getTasksMapByStatus" resultMap="taskModelList">
+        select task.id, task_name, task_cmd, task_param, task_status, task_result_json, task_last_client,
+        task_expected_finish_time, download.id downloadId, task_id, task_url, task_md5
+        from `task` right join `download` on task.id = download.task_id where task.task_status in
+        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>;
+    </select>
+
     <resultMap id="taskModelList" type="cn.sagacloud.mybatis.model.TaskModel">
         <id property="id" column="id"/>
         <result property="task_name" column="task_name"/>
@@ -37,7 +56,7 @@
         <result property="task_param" column="task_param"/>
         <result property="task_status" column="task_status"/>
         <result property="task_result_json" column="task_result_json"/>
-        <result property="task_last_mac" column="task_last_mac"/>
+        <result property="task_last_client" column="task_last_client"/>
         <result property="task_expected_finish_time" column="task_expected_finish_time"/>
         <collection property="downloadTaskModelList" ofType="cn.sagacloud.mybatis.model.DownloadTaskModel">
             <id property="id" column="downloadId"/>
@@ -46,4 +65,15 @@
             <result property="task_md5" column="task_md5"/>
         </collection>
     </resultMap>
+
+    <update id="updateSingleTask" parameterType="cn.sagacloud.mybatis.model.TaskModel">
+        UPDATE task
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="task_status!=null">task_status=#{task_status},</if>
+            <if test="task_result_json!=null">task_result_json=#{task_result_json},</if>
+            <if test="task_last_client!=null">task_last_client=#{task_last_client},</if>
+        </trim>
+        WHERE id = #{id};
+    </update>
+
 </mapper>

+ 28 - 3
scheduler/src/test/java/cn/sagacloud/mybatis/TaskTest.java

@@ -10,12 +10,12 @@ import org.junit.Test;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 public class TaskTest {
     TaskService service = InjectorInit.getInjector().getInstance(TaskService.class);
     @Test
     public void addTask() throws Exception {
-        //service = new TaskService(new TaskDAO());
         TaskModel task = new TaskModel();
         task.setTask_cmd("1");
         task.setTask_name("a");
@@ -30,7 +30,6 @@ public class TaskTest {
 
     @Test
     public void getTaskByIds() throws Exception {
-        //service = new TaskService(new TaskDAO());
         List<Integer> ids = new ArrayList<>();
         ids.add(0);ids.add(9);ids.add(11);
         ArrayList<TaskModel> tasks = service.getTaskByIds(ids);
@@ -39,10 +38,36 @@ public class TaskTest {
 
     @Test
     public void getTaskByStatus() throws Exception {
-        //service = new TaskService(new TaskDAO());
         List<Integer> status = new ArrayList<>();
         status.add(0);status.add(9);status.add(11);
         ArrayList<TaskModel> tasks = service.getAllTaskByStatus(status);
         System.out.println(tasks);
     }
+
+    @Test
+    public void getTaskMapByIds() throws Exception {
+        List<Integer> ids = new ArrayList<>();
+        ids.add(0);ids.add(9);ids.add(11);
+        Map<Integer, TaskModel> tasks = service.getTaskMapByIds(ids);
+        System.out.println(tasks);
+    }
+
+    @Test
+    public void getTaskMapByStatus() throws Exception {
+        List<Integer> status = new ArrayList<>();
+        status.add(0);status.add(9);status.add(11);
+        Map<Integer, TaskModel> tasks = service.getAllTaskMapByStatus(status);
+        System.out.println(tasks);
+    }
+
+    @Test
+    public void updateTask() throws Exception {
+        TaskModel task = new TaskModel();
+        task.setId(9);
+        task.setTask_cmd("1");
+        task.setTask_name("a");
+        task.setTask_status(1);
+        task.setTask_expected_finish_time(60);
+        System.out.println(service.updateTask(task));
+    }
 }