Browse Source

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

jxing 6 years ago
parent
commit
ceedd1aeb8

+ 48 - 6
scheduler/src/main/java/cn/sagacloud/mybatis/dao/TaskDAO.java

@@ -6,6 +6,9 @@ import cn.sagacloud.mybatis.model.TaskModel;
 import org.apache.ibatis.session.SqlSession;
 import org.mybatis.guice.transactional.Transactional;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public class TaskDAO {
 
 
@@ -14,19 +17,23 @@ public class TaskDAO {
         try {
             session = MyBatisSqlSessionFactory.openSession();
             TaskMapper taskMapper = session.getMapper(TaskMapper.class);
-            int id = taskMapper.addTask(task);
-            session.commit();
-            //task.setId(id);
-            return true;
+            int affectedRow = taskMapper.addTask(task);
+            boolean result = addDownload(task);
+            if(!result){
+                session.rollback();
+            }
+            return result;
         } catch (Exception e) {
             return false;
         } finally {
+            if(session != null)
+                session.commit();
             if (session != null)
                 session.close();
         }
     }
 
-    public boolean addDownload(TaskModel task) {
+    private boolean addDownload(TaskModel task) {
         SqlSession session = null;
         try {
             session = MyBatisSqlSessionFactory.openSession();
@@ -36,15 +43,50 @@ public class TaskDAO {
             if(task.getDownloadTaskModelList().size() == 0)
                 return true;
             int infectedRow = taskMapper.addDownload(task.getDownloadTaskModelList(), task.getId());
-            session.commit();
+
             if(infectedRow == task.getDownloadTaskModelList().size())
                 return true;
             return true;
         } catch (Exception e) {
+            session.rollback();
             return false;
         } finally {
+            if(session != null)
+                session.commit();
+            if (session != null)
+                session.close();
+        }
+    }
+
+    public ArrayList<TaskModel> getTasksByIds(List<Integer> idList) {
+        SqlSession session = null;
+        ArrayList<TaskModel> result = new ArrayList<>();
+        try {
+            session = MyBatisSqlSessionFactory.openSession();
+            TaskMapper taskMapper = session.getMapper(TaskMapper.class);
+            result = taskMapper.getTasksByIds(idList);
+            session.commit();
+        } catch (Exception ignore) {
+        } finally {
+            if (session != null)
+                session.close();
+        }
+        return result;
+    }
+
+    public ArrayList<TaskModel> getTasksByStatus(List<Integer> statusList) {
+        SqlSession session = null;
+        ArrayList<TaskModel> result = new ArrayList<>();
+        try {
+            session = MyBatisSqlSessionFactory.openSession();
+            TaskMapper taskMapper = session.getMapper(TaskMapper.class);
+            result = taskMapper.getTasksByStatus(statusList);
+            session.commit();
+        } catch (Exception ignore) {
+        } finally {
             if (session != null)
                 session.close();
         }
+        return result;
     }
 }

+ 7 - 2
scheduler/src/main/java/cn/sagacloud/mybatis/mapper/TaskMapper.java

@@ -4,10 +4,15 @@ import cn.sagacloud.mybatis.model.DownloadTaskModel;
 import cn.sagacloud.mybatis.model.TaskModel;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.ArrayList;
 import java.util.List;
 
 public interface TaskMapper {
-    public int addTask(TaskModel task);
+    int addTask(TaskModel task);
 
-    public 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);
 }

+ 17 - 11
scheduler/src/main/java/cn/sagacloud/mybatis/service/TaskService.java

@@ -6,11 +6,12 @@ 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;
 
 public class TaskService {
-    public TaskDAO taskDAO;
+    private TaskDAO taskDAO;
 
     @Inject
     public TaskService(TaskDAO taskDAO){
@@ -20,27 +21,32 @@ public class TaskService {
     public boolean addTask(TaskModel task) throws Exception {
         if(task.getDownloadTaskModelList().size() == 0)
             throw new Exception("不能添加没有下载文件的任务");
-        if(taskDAO.addTask(task) && taskDAO.addDownload(task))
+        if(taskDAO.addTask(task))
             return true;
         return false;
     }
     @Transactional
     public boolean updateTask(TaskModel task) throws Exception {
-        if(task.getDownloadTaskModelList().size() == 0)
-            throw new Exception("不能添加没有下载文件的任务");
-        taskDAO.addTask(task);
-        taskDAO.addDownload(task);
+        ArrayList<TaskModel> tasks = taskDAO.getTasksByIds(Arrays.asList(task.getId()));
+        if(tasks == null || tasks.size() == 0){
+            return true;
+        }
+        TaskModel prev = tasks.get(0);
         return false;
     }
 
 
     public ArrayList<TaskModel> getAllTaskByStatus(List<Integer> statusList) throws Exception {
-
-        return null;
+        if(statusList == null || statusList.size() == 0)
+            return new ArrayList<>();
+        ArrayList<TaskModel> tasks = taskDAO.getTasksByStatus(statusList);
+        return tasks;
     }
 
-    public TaskModel getTaskById(int id) throws Exception {
-
-        return null;
+    public ArrayList<TaskModel> getTaskByIds(List<Integer> idList) throws Exception {
+        if(idList == null || idList.size() == 0)
+            return new ArrayList<>();
+        ArrayList<TaskModel> tasks = taskDAO.getTasksByIds(idList);
+        return tasks;
     }
 }

+ 35 - 1
scheduler/src/main/resources/mapper/TaskMap.xml

@@ -6,10 +6,44 @@
         VALUE(#{task_name},#{task_cmd},#{task_param},#{task_status},#{task_result_json},#{task_last_mac},#{task_expected_finish_time});
     </insert>
 
-    <insert id="addDownload" parameterType="cn.sagacloud.mybatis.model.DownloadTaskModel" useGeneratedKeys="true" keyProperty="list.id">
+    <insert id="addDownload" parameterType="cn.sagacloud.mybatis.model.DownloadTaskModel" useGeneratedKeys="true" keyProperty="list.">
         INSERT INTO `download`(task_id,task_url,task_md5) VALUES
         <foreach collection="list" item="item" separator=",">
             (#{taskId},#{item.task_url},#{item.task_md5})
         </foreach>
     </insert>
+
+    <select id="getTasksByIds" resultMap="taskModelList">
+        select task.id, task_name, task_cmd, task_param, task_status, task_result_json, task_last_mac,
+        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="getTasksByStatus" resultMap="taskModelList">
+        select task.id, task_name, task_cmd, task_param, task_status, task_result_json, task_last_mac,
+        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"/>
+        <result property="task_cmd" column="task_cmd"/>
+        <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_expected_finish_time" column="task_expected_finish_time"/>
+        <collection property="downloadTaskModelList" ofType="cn.sagacloud.mybatis.model.DownloadTaskModel">
+            <id property="id" column="downloadId"/>
+            <result property="task_id" column="task_id"/>
+            <result property="task_url" column="task_url"/>
+            <result property="task_md5" column="task_md5"/>
+        </collection>
+    </resultMap>
 </mapper>

+ 21 - 0
scheduler/src/test/java/cn/sagacloud/mybatis/TaskTest.java

@@ -8,6 +8,9 @@ import cn.sagacloud.mybatis.service.TaskService;
 import com.google.inject.Inject;
 import org.junit.Test;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public class TaskTest {
     TaskService service = InjectorInit.getInjector().getInstance(TaskService.class);
     @Test
@@ -24,4 +27,22 @@ public class TaskTest {
         task.getDownloadTaskModelList().add(down);
         System.out.println(service.addTask(task));
     }
+
+    @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);
+        System.out.println(tasks);
+    }
+
+    @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);
+    }
 }