瀏覽代碼

Make it can be built

Justin 1 年之前
父節點
當前提交
23ae7fd48d
共有 3 個文件被更改,包括 153 次插入93 次删除
  1. 1 1
      StationProbe/Database.cs
  2. 143 84
      StationProbe/ProbeTask.cs
  3. 9 8
      StationProbe/SuperImageTask.cs

+ 1 - 1
StationProbe/Database.cs

@@ -51,7 +51,7 @@ namespace StationProbe
             return _db.Table<Exam>().Where(x=>x.BatchTaskId == batchTaskId && x.PageIndex == page).OrderBy(x=>x.Id).ToArray();
         }
 
-        public Image[] GetImages(int examId)
+        public Image[] GetImages(string examId)
         {
             return _db.Table<Image>().Where(x => x.ExamId == examId).OrderBy(x=>x.ImageIndex).ToArray();
         }

+ 143 - 84
StationProbe/ProbeTask.cs

@@ -10,93 +10,147 @@ using System.Xml.Linq;
 namespace StationProbe
 {
 
-    internal class LoginTask
+    internal enum ElementType
+    {
+        Page,
+        Frame
+    }
+
+    internal static class ElementConverter
+    {
+        public static T? As<T>(this object obj) where T: class
+        {
+            return obj as T;
+        }
+    }
+
+    internal class ElementCollection
+    {
+        private readonly Dictionary<ElementType, object> _objects = new();
+
+        public object this[ElementType type] => _objects[type];
+
+        public void AddObject(ElementType element, object obj)
+        {
+            _objects.Add(element, obj);
+        }
+    }
+
+    internal abstract class ProbeTask
+    {
+        protected readonly Database _db;
+        public ProbeTask(Database db)
+        {
+            _db = db;
+        }
+        public abstract Task<ElementCollection> ExecuteAsync(ElementCollection inputs);
+    }
+
+    internal class LoginTask: ProbeTask
     {
         private readonly string _loginUrl;
-        public LoginTask(string loginUrl) 
+
+        public LoginTask(Database db, string loginUrl) :base(db)
         {
             _loginUrl = loginUrl;
         }
 
-        public async Task<IPage> ExecuteAsync(IPage input, Database db)
+        public override async Task<ElementCollection> ExecuteAsync(ElementCollection inputs)
         {
-            await input.GoToAsync(_loginUrl);
-            //username
-            await input.WaitForSelectorAsync("input[_bl_13]");
-            await input.FocusAsync("input[_bl_13]");
-            await input.Keyboard.TypeAsync("justin.xing");
-            //password
-            await input.WaitForSelectorAsync("input[_bl_14]");
-            await input.FocusAsync("input[_bl_14]");
-            await input.Keyboard.TypeAsync("123456");
-            //login
-            var button = await input.WaitForSelectorAsync("button[_bl_15]");
-            await button.ClickAsync();
-
-            await input.WaitForNavigationAsync();
-            await input.WaitForNetworkIdleAsync();
-
-            return input;
+            var input = inputs[ElementType.Page].As<IPage>();
+            if (input != null)
+            {
+                await input.GoToAsync(_loginUrl);
+                //username
+                await input.WaitForSelectorAsync("input[_bl_13]");
+                await input.FocusAsync("input[_bl_13]");
+                await input.Keyboard.TypeAsync("justin.xing");
+                //password
+                await input.WaitForSelectorAsync("input[_bl_14]");
+                await input.FocusAsync("input[_bl_14]");
+                await input.Keyboard.TypeAsync("123456");
+                //login
+                var button = await input.WaitForSelectorAsync("button[_bl_15]");
+                await button.ClickAsync();
+
+                await input.WaitForNavigationAsync();
+                await input.WaitForNetworkIdleAsync();
+            }
+            return inputs;
         }
     }
 
-    internal class MenuTask
+    internal class MenuTask:ProbeTask
     {
-        public async Task<IFrame> ExecuteAsync(IPage input, Database db)
+        public MenuTask(Database db) : base(db)
         {
-            var frame = await input.WaitForFrameAsync("");
-            return frame;
+        }
+
+        public override async Task<ElementCollection> ExecuteAsync(ElementCollection inputs)
+        {
+            Logger.WriteLine("Finding menu...");
+            var input = inputs[ElementType.Page].As<IPage>();
+            if (input != null)
+            {
+                var frame = await input.WaitForFrameAsync("");
+                inputs.AddObject(ElementType.Frame, frame);
+            }
+            return inputs;
         }
     }
 
-    internal class FilterTask
+    internal class FilterTask : ProbeTask
     {
-        private DateTime _start;
-        private DateTime _end;
+        private readonly DateTime _start;
+        private readonly DateTime _end;
 
         public int PageCount { get; private set; }
 
         public int ExamCount { get; private set; }
 
-        public FilterTask(DateTime start, DateTime end)
+        public FilterTask(Database db, DateTime start, DateTime end):base(db)
         {
             _start = start;
             _end = end;
         }
 
-        public async Task<IFrame> ExecuteAsync(IPage page, IFrame frame, Database db)
+        public override async Task<ElementCollection> ExecuteAsync(ElementCollection inputs)
         {
-            await frame.WaitForSelectorAsync("input[_bl_13]");
-            await frame.FocusAsync("input[_bl_13]");
-            await page.Keyboard.TypeAsync("justin.xing");
-            return frame;
+            var page = inputs[ElementType.Page].As<IPage>();
+            var frame = inputs[ElementType.Frame].As<IFrame>();
+            if(page!= null && frame != null) 
+            {
+                await frame.WaitForSelectorAsync("input[_bl_13]");
+                await frame.FocusAsync("input[_bl_13]");
+                await page.Keyboard.TypeAsync("justin.xing");
+            }
+            return inputs;
         }
-
     }
 
-    internal class PageTask
+    internal class PageTask:ProbeTask
     {
         private readonly int _page;
-        public PageTask(int page)
+        public PageTask(Database db, int page):base(db)
         {
             _page = page;
         }
 
-        public async Task<IFrame> ExecuteAsync(IFrame input, Database db)
+        public override async Task<ElementCollection> ExecuteAsync(ElementCollection inputs)
         {
            
-            return input;
+            return inputs;
         }
     }
 
-    internal class ExamTask
+    internal class ExamTask:ProbeTask
     {
         private readonly int _batchTaskId;
         private readonly int _pageIndex;
         private readonly int _examIndex;
         private readonly int _examIndexInPage;
 
-        public ExamTask(int batchTaskId, int pageIndex, int examIndex, int examIndexInPage)
+        public ExamTask(Database db, int batchTaskId, int pageIndex, int examIndex, int examIndexInPage): base(db)
         {
             _batchTaskId = batchTaskId;
             _pageIndex = pageIndex;
@@ -104,55 +158,60 @@ namespace StationProbe
             _examIndexInPage = examIndexInPage;
         }
 
-        public async Task<IFrame> ExecuteAsync(IFrame input, Database db)
+        public override async Task<ElementCollection> ExecuteAsync(ElementCollection inputs)
         {
-            var exmaId = Guid.NewGuid().ToString("N");
-            //Enter exam
-            //Get patient info
-            var patientName = "";
-            var patientSex = "";
-            var patientAge = 0;
-            var examDate = DateTime.Now;
-
-            //Get report
-            var report = "";
-
-            //Save images.
-            var imageUrls = new List<string>();
-            for(var i= 0;i< imageUrls.Count;i++)
+            var page = inputs[ElementType.Page].As<IPage>();
+            var frame = inputs[ElementType.Frame].As<IFrame>();
+            if (page != null && frame != null)
             {
-                var response = await input.WaitForResponseAsync(imageUrls[i]);
-                var buffer = await response.BufferAsync();
-                var image = new Image()
+                var exmaId = Guid.NewGuid().ToString("N");
+                //Enter exam
+                //Get patient info
+                var patientName = "";
+                var patientSex = "";
+                var patientAge = 0;
+                var examDate = DateTime.Now;
+
+                //Get report
+                var report = "";
+
+                //Save images.
+                var imageUrls = new List<string>();
+                for (var i = 0; i < imageUrls.Count; i++)
+                {
+                    var response = await page.WaitForResponseAsync(imageUrls[i]);
+                    var buffer = await response.BufferAsync();
+                    var image = new Image()
+                    {
+                        Id = Guid.NewGuid().ToString("N"),
+                        ExamId = exmaId,
+                        ImageIndex = i,
+                        Data = buffer,
+                        CreateTime = DateTime.Now,
+                    };
+                    _db.AddImage(image);
+                }
+
+                //Save exam.
+                var exam = new Exam()
                 {
-                    Id = Guid.NewGuid().ToString("N"),
-                    ExamId = exmaId,
-                    ImageIndex = i,
-                    Data = buffer,
-                    CreateTime = DateTime.Now,
+                    Id = exmaId,
+                    PatientName = patientName,
+                    PatientSex = patientSex,
+                    PatientAge = patientAge,
+                    ExamDate = examDate,
+                    Report = report,
+                    BatchTaskId = _batchTaskId,
+                    ExamIndex = _examIndex,
+                    PageIndex = _pageIndex,
+                    ExamIndexInPage = _examIndexInPage,
+                    CreateTime = DateTime.Now
                 };
-                db.AddImage(image);
+                _db.AddExam(exam);
+                //Back to page.
+                await page.GoBackAsync();
             }
-
-            //Save exam.
-            var exam = new Exam()
-            {
-                Id = exmaId,
-                PatientName = patientName,
-                PatientSex = patientSex,
-                PatientAge = patientAge,
-                ExamDate = examDate,
-                Report = report,
-                BatchTaskId = _batchTaskId,
-                ExamIndex = _examIndex,
-                PageIndex = _pageIndex,
-                ExamIndexInPage = _examIndexInPage,
-                CreateTime = DateTime.Now
-            };
-            db.AddExam(exam);
-            //Back to page.
-            await input.GoBackAsync();
-            return input;
+            return inputs;
         }
     }
 }

+ 9 - 8
StationProbe/SuperImageTask.cs

@@ -20,12 +20,13 @@ namespace StationProbe
 
         public async Task RunAsync(IPage page)
         {
-            IPage output = page;
+            var outputs = new ElementCollection();
+            outputs.AddObject(ElementType.Page, page);
             var url = "http://192.168.200.85:8080";
             Logger.WriteLine($"Start login task (url:{url})...");
             try
             {
-                output = await new LoginTask(url).ExecuteAsync(output,_db);
+                outputs = await new LoginTask(_db,url).ExecuteAsync(outputs);
             }
             catch (Exception ex)
             {
@@ -35,7 +36,7 @@ namespace StationProbe
             Logger.WriteLine("Start menu task...");
             try
             {
-                output = await new MenuTask().ExecuteAsync(output, _db);
+                outputs = await new MenuTask(_db).ExecuteAsync(outputs);
             }
             catch (Exception ex)
             {
@@ -45,8 +46,8 @@ namespace StationProbe
             Logger.WriteLine($"Start filter task(start:{_batchTask.Start:yyyy-MM-dd}, end:{_batchTask.End:yyyy-MM-dd})...");
             try
             {
-                var filterTask = new FilterTask(_batchTask.Start, _batchTask.End);
-                output = await filterTask.ExecuteAsync(output, _db);
+                var filterTask = new FilterTask(_db,_batchTask.Start, _batchTask.End);
+                outputs = await filterTask.ExecuteAsync(outputs);
                 if (filterTask.PageCount != _batchTask.PageCount || filterTask.ExamCount != _batchTask.ExamCount)
                 {
                     //Update the batchTask
@@ -80,15 +81,15 @@ namespace StationProbe
                 Logger.WriteLine($"Start page task (page:{_pageIndex})");
                 try
                 {
-                    var pageTask = new PageTask(_pageIndex);
-                    output = await pageTask.ExecuteAsync(output, _db);
+                    var pageTask = new PageTask(_db, _pageIndex);
+                    outputs = await pageTask.ExecuteAsync(outputs);
                     var currentExamCountinPage = _pageIndex < (_batchTask.PageCount - 1) ? _examCountInPage : (_batchTask.ExamCount - _pageIndex * _examCountInPage);
                     while (_examIndexInPage < currentExamCountinPage)
                     {
                         Logger.WriteLine($"Start exam task (exam index: {_examIndexInPage})...");
                         try
                         {
-                            output = await new ExamTask(_batchTask.Id, _pageIndex, _examIndex ,_examIndexInPage).ExecuteAsync(output, _db);
+                            outputs = await new ExamTask(_db,_batchTask.Id, _pageIndex, _examIndex ,_examIndexInPage).ExecuteAsync(outputs);
                         }
                         catch (Exception ex)
                         {