zoule 4 ماه پیش
والد
کامیت
b8a18ed907
4فایلهای تغییر یافته به همراه110 افزوده شده و 83 حذف شده
  1. 29 79
      DW5S.App/UserControl/CtrlCgRes.cs
  2. 59 0
      DW5S.Basic/ListExtension.cs
  3. 1 1
      DW5S.Controller/TaskController.cs
  4. 21 3
      DW5S.Repostory/Repository/IRepository.cs

+ 29 - 79
DW5S.App/UserControl/CtrlCgRes.cs

@@ -25,11 +25,18 @@ using DW5S.App.Model;
 using DW5S.Entity;
 
 using DW5S.Repostory;
+using Microsoft.Extensions.Logging;
 
 namespace DW5S.App.UserControl
 {
     public partial class CtrlCgRes : DevExpress.XtraEditors.XtraUserControl
     {
+        [Autowired]
+        private readonly ILogger logger;
+
+        [Autowired]
+        private readonly UnitOfWork unitOfWork;
+
         List<CgRes> list = new List<CgRes>();
         public CtrlCgRes()
         {
@@ -45,17 +52,16 @@ namespace DW5S.App.UserControl
             try
             {
                 List<TaskInfo> tskList = new List<TaskInfo>();
-                using (RHDWContext db = new RHDWContext())
-                {
-                    tskList = await db.TaskInfos.OrderByDescending(p => p.UpdateTime).ToListAsync();
-                }
+                var repsTask = unitOfWork.Of<TaskInfo>();
+                tskList.AddRange(await repsTask.GetAllAsync(p => p.UpdateTime));
                 this.txtTask.UseDefault().SetData(tskList, nameof(TaskInfo.TaskName)).UseDoubleClickToSelectAll();
 
             }
             catch (Exception ex)
             {
-                DW5S.Framework.LogHelper.Error("查询参估结果异常", ex);
-                DxHelper.MsgBoxHelper.ShowError("查询参估结果异常");
+                string msg = "查询参估结果异常";
+                logger.LogError(ex, msg);
+                DxHelper.MsgBoxHelper.ShowError(msg);
 
             }
         }
@@ -64,26 +70,16 @@ namespace DW5S.App.UserControl
         {
             try
             {
-                var groupItems = selectedRes.GroupBy(p => p.SigTime.ToString("yyyyMMdd"));
-                foreach (var groupItem in groupItems)
-                {
-                    var ids = groupItem.Select(m => m.ID).ToList();
-                    using (RHDWPartContext db = RHDWPartContext.GetContext(groupItem.First().SigTime))
-                    {
-                        if (db != null)
-                        {
-                            var list = await db.CgRes.Where(p => ids.Contains(p.ID)).ToListAsync();
-                            db.CgRes.RemoveRange(list);
-                            await db.SaveChangesAsync();
-                        }
-                    }
-                }
+                var repsCg = unitOfWork.Of<CgRes>();
+                await repsCg.DeleteAsync(selectedRes);
+                await unitOfWork.SaveAsync();
                 return true;
             }
             catch (Exception ex)
             {
-                DW5S.Framework.LogHelper.Error("删除参估结果异常", ex);
-                DxHelper.MsgBoxHelper.ShowError("删除参估结果异常");
+                string msg = "删除参估结果异常";
+                logger.LogError(ex, msg);
+                DxHelper.MsgBoxHelper.ShowError(msg);
                 return false;
             }
         }
@@ -145,7 +141,7 @@ namespace DW5S.App.UserControl
         {
             try
             {
-
+                var repsCg = unitOfWork.Of<CgRes>();
                 DateTime start = DateTime.MinValue;
                 DateTime end = DateTime.MinValue;
                 if (txtTimeCho.Text == "自定义")
@@ -155,70 +151,24 @@ namespace DW5S.App.UserControl
                 }
                 else
                 {
-                    var dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DbPart");
-                    if (!Directory.Exists(dir)) return new List<CgRes>();
-                    var yearDirs = Directory.EnumerateDirectories(dir).OrderByDescending(p => Convert.ToInt32(new DirectoryInfo(p).Name));//年目录,倒叙排列
-                    foreach (var yearDir in yearDirs)
-                    {
-                        //每一天的db文件,倒序排列
-                        var dayFiles = Directory.EnumerateFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, yearDir), "*.db").OrderByDescending(p => Convert.ToInt32(new DirectoryInfo(p).Name.Substring(0, 4)));
-                        foreach (var dayFile in dayFiles)
-                        {
-                            using (RHDWPartContext db = RHDWPartContext.GetContext(dayFile))
-                            {
-                                if (db == null) continue;
-                                if (db.CgRes.Any(p => p.TaskID == ((TaskInfo)txtTask.EditValue).ID))
-                                    end = await db.CgRes.Where(p => p.TaskID == ((TaskInfo)txtTask.EditValue).ID).MaxAsync(p => p.SigTime);
-                            }
-                            if (end != DateTime.MinValue)
-                            {
-                                start = end.AddHours(-(int)txtTimeCho.EditValue);
-                                goto skip;
-                            }
-                        }
-                    }
+                    var max = repsCg.MaxBy(p => p.SigTime, q => q.TaskID == ((TaskInfo)txtTask.EditValue).Id);
+                    if (max == null) return new List<CgRes>();
+                    end = max.SigTime;
+                    start = end.AddHours(-(int)txtTimeCho.EditValue);
                 }
-                skip:
                 if (end == DateTime.MinValue)
                 {
                     return new List<CgRes>();//没有数据不查询
                 }
-
-                DateTime endDay = new DateTime(end.Year, end.Month, end.Day);
-                DateTime startDay = new DateTime(start.Year, start.Month, start.Day);
-                List<CgRes> list = new List<CgRes>();
-                while (endDay >= startDay)
-                {
-                    using (RHDWPartContext db = RHDWPartContext.GetContext(endDay))
-                    {
-                        if (db != null)
-                        {
-                            for (int i = 0; i < 2; i++)
-                            {
-                                try
-                                {
-                                    var cgRes = await db.CgRes.Where(w => w.SigTime >= start && w.SigTime <= end && w.TaskID == ((TaskInfo)txtTask.EditValue).ID).OrderByDescending(o => o.SigTime).ToListAsync();
-                                    list.AddRange(cgRes);
-                                    break;
-                                }
-                                catch (Exception ex)
-                                {
-                                    LogHelper.Error($"同步分区表结构异常,Time={endDay:yyyyMMdd}",ex).Wait(5000);
-                                    db.SyncDb();
-                                }
-                            }
-
-                        }
-                    }
-                    endDay = endDay.AddDays(-1);
-                }
-                return list;
+                var cgRes = await repsCg.FindAsync(w => w.SigTime >= start && w.SigTime <= end && w.TaskID == ((TaskInfo)txtTask.EditValue).Id, p => p.SigTime, false);
+                return cgRes.ToList();
             }
             catch (TaskCanceledException) { }
             catch (Exception ex)
             {
-                DW5S.Framework.LogHelper.Error("参估结果查询异常", ex);
-                MsgBoxHelper.ShowError("参估结果查询异常");
+                string msg = "参估结果查询异常";
+                logger.LogError(ex,msg);
+                MsgBoxHelper.ShowError(msg);
             }
             return new List<CgRes>();
         }
@@ -250,7 +200,7 @@ namespace DW5S.App.UserControl
             }
             catch (Exception ex)
             {
-                LogHelper.Error("参估绘图异常", ex).Wait(5000);
+                logger.LogError(ex, "参估绘图异常");
             }
         }
     }

+ 59 - 0
DW5S.Basic/ListExtension.cs

@@ -0,0 +1,59 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+
+public static class ListExtension
+{
+    /// <summary>
+    /// Save the List data to CSV file
+    /// </summary>
+    /// <param name="list">data source</param>
+    /// <param name="file">file</param>
+    /// <returns>success flag</returns>
+    public static string ToCsvFile<T>(this List<T> list, string file)
+    {
+        PropertyInfo[] props = GetPropertyInfoArray<T>();
+        using (var sw = new StreamWriter(file))
+        {
+            StringBuilder strColumn = new StringBuilder();
+            for (int i = 0; i < props.Length; i++)
+            {
+                strColumn.Append(props[i].Name);
+                strColumn.Append(",");
+            }
+            strColumn.Remove(strColumn.Length - 1, 1);
+            sw.WriteLine(strColumn);    //write the column name
+            for (int i = 0; i < list.Count; i++)
+            {
+                StringBuilder strValue = new StringBuilder();
+                int idx = 0;
+                foreach (var prop in props)
+                {
+                    var val = prop.GetValue(list[i]);
+                    strValue.Append(val);
+                    if (idx < props.Length-1)
+                        strValue.Append(",");
+                    idx++;
+                }
+                sw.WriteLine(strValue); //write the row value
+            }
+        }
+        FileInfo f = new FileInfo(file);
+        return f.FullName;
+    }
+
+
+    private static PropertyInfo[] GetPropertyInfoArray<T>()
+    {
+        PropertyInfo[] props = null;
+        Type type = typeof(T);
+        object obj = Activator.CreateInstance(type);
+        props = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
+        return props.Where(p => p.CanRead && !p.GetMethod.IsVirtual && !p.GetMethod.IsAbstract).ToArray();
+    }
+
+}

+ 1 - 1
DW5S.Controller/TaskController.cs

@@ -68,7 +68,7 @@ namespace DW5S.App.Controllers
                 if (item.TaskState == EnumTaskState.Stopped)
                     Thread.Sleep(2000);
                 item.TaskState = EnumTaskState.Stopped;
-                repsTask.AddOrUpdate(item);
+                await repsTask.AddOrUpdateAsync(item);
                 await unitOfWork.SaveAsync();
                 Messenger.Defalut.Pub("任务状态改变", dto.ID);
                 if (dto.StopType == EnumTaskStopType.Properly)

+ 21 - 3
DW5S.Repostory/Repository/IRepository.cs

@@ -20,11 +20,16 @@ namespace DW5S.Repostory
         Task<IEnumerable<Res>> GetDistinctAsync<Res>(Expression<Func<T, Res>> selector);
 
         Task<T> FirstOrDefaultAsync(Expression<Func<T, bool>> predicate = null);
-        Task<bool> AnyAsync(Expression<Func<T, bool>> predicate = null);
         Task<T> AddOrUpdateAsync(T entity);
         Task AddOrUpdateAsync(IEnumerable<T> entitis);
         Task<int> DeleteAsync(T entity);
+        Task<int> DeleteAsync(IEnumerable<T> entitis);
+
         Task<int> DeleteAsync(Expression<Func<T, bool>> predicate = null);
+
+        Task<bool> AnyAsync(Expression<Func<T, bool>> predicate = null);
+
+        T MaxBy<TResult>(Expression<Func<T, TResult>> selector, Expression<Func<T, bool>> predicate = null);
     }
 
     public class Repository<T> : IRepository<T> where T : BaseEntity
@@ -112,7 +117,7 @@ namespace DW5S.Repostory
 
         public async Task<T> AddOrUpdateAsync(T entity)
         {
-            if (entity.Id==0)
+            if (entity.Id == 0)
             {
                 var res = await dbSet.AddAsync(entity);
                 return res.Entity;
@@ -129,6 +134,12 @@ namespace DW5S.Repostory
             return await dbSet.Where(p => p.Id == entity.Id).ExecuteDeleteAsync();
         }
 
+        public async Task<int> DeleteAsync(IEnumerable<T> entities)
+        {
+            var ids = entities.Select(p => p.Id);
+            return await DeleteAsync(p => ids.Contains(p.Id));
+        }
+
         public async Task<int> DeleteAsync(Expression<Func<T, bool>> predicate = null)
         {
             return await dbSet.Where(predicate).ExecuteDeleteAsync();
@@ -138,6 +149,13 @@ namespace DW5S.Repostory
         {
             return await dbSet.AnyAsync(predicate);
         }
-    }
 
+        public T MaxBy<TResult>(Expression<Func<T, TResult>> selector, Expression<Func<T, bool>> predicate = null)
+        {
+            if (predicate == null)
+                return dbSet.MaxBy(selector);
+            else
+                return dbSet.Where(predicate).MaxBy(selector);
+        }
+    }
 }