ソースを参照

统一产品信息获取方式,完善拍照记录模型

移除Management.CurrentProduct,所有产品信息获取统一通过IProductService.GetCurrentProduct()。完善PhotoCaptureRecord,新增机器人/像素/绝对位置信息字段。优化SystemDatabaseService部分方法参数及测试数据写入。调整NozzleChangeRecordQueryViewModel属性封装,ViewModel构造函数注入IProductService。修正部分命名、空格和注释,提升代码规范性和可维护性。
孝锋 徐 7 ヶ月 前
コミット
704c3969f9

+ 4 - 15
TeamAAS-VM/Core/Management.cs

@@ -130,17 +130,6 @@ namespace TeamAAS_VP.Core
             set { SetProperty(ref _Renders, value); }
         }
 
-        private ProductModel _CurrentProduct;
-
-        /// <summary>
-        /// 当前产品
-        /// </summary>
-        public ProductModel CurrentProduct
-        {
-            get { return _CurrentProduct; }
-            set { SetProperty(ref _CurrentProduct, value); }
-        }
-
         public BgCommunicate BgCommunicate { get; private set; }
 
         public BgModbusTcpCommunicate BgModbusTcpCommunicate { get; private set; }
@@ -2261,12 +2250,12 @@ namespace TeamAAS_VP.Core
         {
             try
             {
-                if (CurrentProduct == null) return;
                 //获取当前产品
                 var currentproduct = _productService.GetCurrentProduct();
-                TotalQuantity = await _systemDatabaseService.GetOverallProductionAsync(CurrentProduct.Name);
-                TotalQuantityToday = await _systemDatabaseService.GetTodayProductionAsync(CurrentProduct.Name);
-                CurrentUPH = await _systemDatabaseService.GetLastHourProductionAsync(CurrentProduct.Name);
+                if (currentproduct == null) return;
+                TotalQuantity = await _systemDatabaseService.GetOverallProductionAsync(currentproduct.Name);
+                TotalQuantityToday = await _systemDatabaseService.GetTodayProductionAsync(currentproduct.Name);
+                CurrentUPH = await _systemDatabaseService.GetLastHourProductionAsync(currentproduct.Name);
             }
             catch (Exception)
             {

+ 7 - 2
TeamAAS-VM/Core/ScriptHelper.cs

@@ -113,13 +113,16 @@ namespace TeamAAS_VP.Core
         {
             try
             {
+                //获取
+                IProductService productService = container.Resolve<IProductService>();
+
                 var eval = CSScript.Evaluator.ReferenceDomainAssemblies(DomainAssemblies.AllStatic);
                 IBackgroundScripting scripting = eval.LoadCode<IBackgroundScripting>(strSourceCode);
                 scripting.regionManager = regionManager;
                 scripting.eventAggregator = ea;
                 scripting.container = container;
                 scripting.management = container.Resolve<Management>();
-                scripting.CurrentProduct = scripting.management.CurrentProduct;
+                scripting.CurrentProduct = productService.GetCurrentProduct();
                 return scripting.Execute();
             }
             catch (CSScriptLib.CompilerException e1)
@@ -160,13 +163,15 @@ namespace TeamAAS_VP.Core
         {
             try
             {
+                IProductService productService = container.Resolve<IProductService>();
+
                 var eval = CSScript.Evaluator.ReferenceDomainAssemblies(DomainAssemblies.AllStatic);
                 IVisionScripting scripting = eval.LoadCode<IVisionScripting>(strSourceCode);
                 scripting.regionManager = regionManager;
                 scripting.eventAggregator = ea;
                 scripting.container= container;
                 scripting.management= container.Resolve<Management>();
-                scripting.CurrentProduct = scripting.management.CurrentProduct;
+                scripting.CurrentProduct = productService.GetCurrentProduct();
                 await scripting.Execute(procedure, items, rst =>
                 {
                     callback.Invoke(rst);

+ 29 - 5
TeamAAS-VM/Data/SystemDatabaseService.cs

@@ -178,9 +178,9 @@ namespace TeamAAS_VP.Data
             ////如果没有登录记录则返回一个默认的用户,即第一个用户
             //if (rec == null) return _db.Queryable<User>().First();
             //return _db.Queryable<User>().InSingle(rec.UserId);
-            if (CurrentUser==null)
+            if (CurrentUser == null)
             {
-                CurrentUser= _db.Queryable<User>().ToList().FirstOrDefault();
+                CurrentUser = _db.Queryable<User>().ToList().FirstOrDefault();
             }
             return CurrentUser;
         }
@@ -402,7 +402,7 @@ namespace TeamAAS_VP.Data
             var todayStart = DateTime.UtcNow.Date;
             //今天的结束时间
             var todayEnd = DateTime.UtcNow.Date;
-            todayEnd= todayEnd.AddDays(1);
+            todayEnd = todayEnd.AddDays(1);
             //按照产品名称和时间范围查询生产记录的总数
             var total = await _db.Queryable<ProductionRecord>()
                 .Where(r => r.ProductName == productName && r.Timestamp >= todayStart && r.Timestamp < todayEnd)
@@ -417,7 +417,7 @@ namespace TeamAAS_VP.Data
         /// <returns></returns>
         public async Task<int> GetLastHourProductionAsync(string productName)
         {
-                        var lastHourStart = DateTime.UtcNow.AddHours(-1);
+            var lastHourStart = DateTime.UtcNow.AddHours(-1);
             var lastHourEnd = DateTime.UtcNow;
             //按照产品名称和时间范围查询生产记录的总数
             var total = await _db.Queryable<ProductionRecord>()
@@ -680,7 +680,7 @@ namespace TeamAAS_VP.Data
         /// <summary>
         /// 查询所有符合条件的锁付结果(不分页)。
         /// </summary>
-        public async Task<IEnumerable<LockResult>> QueryAllLockResultsAsync(DateTime start, DateTime end, string productNumber = null, string productName= null, int? screwNumber = null, bool? lockPassed = null)
+        public async Task<IEnumerable<LockResult>> QueryAllLockResultsAsync(DateTime start, DateTime end, string productNumber = null, string productName = null, int? screwNumber = null, bool? lockPassed = null)
         {
             var q = _db.Queryable<LockResult>().Where(r => r.Timestamp >= start && r.Timestamp < end);
             if (!string.IsNullOrEmpty(productNumber)) q = q.Where(r => r.ProductNumber == productNumber);
@@ -1086,6 +1086,30 @@ namespace TeamAAS_VP.Data
                 await RecordLockResultAsync(result);
             }
 
+            //生成一些相机拍照记录的测试数据
+            for (int i = 0; i < 20; i++)
+            {
+                try
+                {
+                    var record = new PhotoCaptureRecord
+                    {
+                        Id = Guid.NewGuid(),
+                        RecipeName = "产品1",
+                        CameraName = $"下相机",
+                        ProductSN = $"SN-{i}",
+                        IsSuccess = (i % 2 == 0),
+                        CaptureTime = DateTime.UtcNow.AddMinutes(-i * 7),
+                        ImagePath = $"/images/photo_{i}.jpg"
+                    };
+                    await RecordPhotoCaptureAsync(record);
+                }
+                catch (Exception ex)
+                {
+                    Console.WriteLine(ex.ToString());
+                }
+
+            }
+
         }
 
         #endregion

+ 3 - 0
TeamAAS-VM/Models/PhotoCaptureRecord.cs

@@ -46,16 +46,19 @@ namespace TeamAAS_VP.Models
         /// <summary>
         /// 机器人拍照位置
         /// </summary>
+        [SugarColumn(Length = 255, IsNullable = true)]
         public string RobotPosition { get; set; }
 
         /// <summary>
         /// 像素坐标
         /// </summary>
+        [SugarColumn(Length = 255, IsNullable = true)]
         public string PixelPosition { get; set; }
 
         /// <summary>
         /// 绝对坐标
         /// </summary>
+        [SugarColumn(Length = 255, IsNullable = true)]
         public string AbsolutePosition { get; set; }
 
         /// <summary>

+ 3 - 2
TeamAAS-VM/ViewModels/HomeViewModel.cs

@@ -403,7 +403,8 @@ namespace TeamAAS_VP.ViewModels
         /// </summary>
         async void ExecuteResetCounterCommand()
         {
-            if (management.CurrentProduct == null) return;
+            var currentProduct =_productService.GetCurrentProduct();
+            if (currentProduct == null) return;
             var view = new ShowMessage(Lang.计数清零, Lang.是否重置当前产品的计数);
             //show the dialog
             var result = await DialogHost.Show(view, "RootDialog", null, null, null);
@@ -412,7 +413,7 @@ namespace TeamAAS_VP.ViewModels
                 if (((bool)result))
                 {
                     isCanExecute = false;
-                    await _systemDatabaseService.ResetProductionAsync(management.CurrentProduct.Name);
+                    await _systemDatabaseService.ResetProductionAsync(currentProduct.Name);
                     isCanExecute = true;
                 }
             }

+ 8 - 1
TeamAAS-VM/ViewModels/Statistics/NozzleChangeRecordQueryViewModel.cs

@@ -44,7 +44,14 @@ namespace TeamAAS_VP.ViewModels.Statistics
             get { return _NozzleBatchNumber; }
             set { SetProperty(ref _NozzleBatchNumber, value); }
         }
-        public ObservableCollection<NozzleChangeRecord> Results { get; set; } = new ObservableCollection<NozzleChangeRecord>();
+
+        private ObservableCollection<NozzleChangeRecord> _Results;
+        public ObservableCollection<NozzleChangeRecord> Results
+        {
+            get { return _Results; }
+            set { SetProperty(ref _Results, value); }
+        }
+        
         private int _PageIndex;
         public int PageIndex
         {

+ 2 - 2
TeamAAS-VM/ViewModels/Statistics/PhotoCaptureQueryViewModel.cs

@@ -20,7 +20,7 @@ namespace TeamAAS_VP.ViewModels.Statistics
         private readonly IProductService _productService;
         private readonly IConfigService _configService;
 
-        public PhotoCaptureQueryViewModel(ISystemDatabaseService systemDatabaseService, ProductService productService, IConfigService configService)
+        public PhotoCaptureQueryViewModel(ISystemDatabaseService systemDatabaseService, IProductService productService, IConfigService configService)
         {
             _systemDatabaseService = systemDatabaseService;
             _productService = productService;
@@ -118,7 +118,7 @@ namespace TeamAAS_VP.ViewModels.Statistics
         void ExecuteLoadedCommand()
         {
             AllProduct = new ObservableCollection<ProductModel>(_productService.GetAllProducts());
-            _AllCamera = new ObservableCollection<CameraInfo>(_configService.GetAllCameras());
+            AllCamera = new ObservableCollection<CameraInfo>(_configService.GetAllCameras());
         }
 
         private async Task ExecuteSearchCommand()

+ 15 - 13
TeamAAS-VM/ViewModels/Statistics/ProductionStatementViewModel.cs

@@ -14,6 +14,7 @@ using TeamAAS_VP.Data;
 using TeamAAS_VP.Interfaces;
 using TeamAAS_VP.Models;
 using TeamAAS_VP.Resources.Languages;
+using TeamAAS_VP.Services;
 using static MaterialDesignThemes.Wpf.Theme.ToolBar;
 
 namespace TeamAAS_VP.ViewModels.Statistics
@@ -22,6 +23,7 @@ namespace TeamAAS_VP.ViewModels.Statistics
     {
         IContainerProvider _container;
         ISystemDatabaseService _systemDatabaseService;
+        IProductService _productService;
 
         Management management;
 
@@ -119,27 +121,27 @@ namespace TeamAAS_VP.ViewModels.Statistics
 
         #endregion
 
-        public ProductionStatementViewModel(IContainerProvider container, ISystemDatabaseService systemDatabaseService)
+        public ProductionStatementViewModel(IContainerProvider container, ISystemDatabaseService systemDatabaseService, IProductService productService)
         {
             _container= container;
             _systemDatabaseService = systemDatabaseService;
+            _productService = productService;
         }
 
         #region 方法
         async void ExecuteLoadedCommand()
         {
-            if (management == null)
-                management = _container.Resolve<Management>();
-            if (management.CurrentProduct == null) return;
-           await  App.Current.Dispatcher.InvokeAsync(new Action(async () => {
-                YieldChartModel = CreateYieldChartModel(await _systemDatabaseService.GetProductionByCategoriesAsync(management.CurrentProduct.Name));
-               TotalCount = await _systemDatabaseService.GetOverallProductionAsync(management.CurrentProduct.Name);
-                MonthCount = await _systemDatabaseService.GetCurrentMonthProductionAsync(management.CurrentProduct.Name);
-               WeekCount = await _systemDatabaseService.GetCurrentWeekProductionAsync(management.CurrentProduct.Name);
-               DayCount = await _systemDatabaseService.GetTodayProductionAsync(management.CurrentProduct.Name);
-               MonthChartModel = CreateMonth(await _systemDatabaseService.GetMonthlyProductionByDayAndCategoryAsync(management.CurrentProduct.Name));
-                WeekChartModel = CreateWeek(await _systemDatabaseService.GetWeeklyProductionByDayAndCategoryAsync(management.CurrentProduct.Name));
-                DayChartModel = CreateDay(await _systemDatabaseService.GetDailyProductionByHourAndCategoryAsync(management.CurrentProduct.Name));
+            var currentproduct = _productService.GetCurrentProduct();
+            if (currentproduct == null) return;
+            await  App.Current.Dispatcher.InvokeAsync(new Action(async () => {
+                YieldChartModel = CreateYieldChartModel(await _systemDatabaseService.GetProductionByCategoriesAsync(currentproduct.Name));
+               TotalCount = await _systemDatabaseService.GetOverallProductionAsync(currentproduct.Name);
+                MonthCount = await _systemDatabaseService.GetCurrentMonthProductionAsync(currentproduct.Name);
+               WeekCount = await _systemDatabaseService.GetCurrentWeekProductionAsync(currentproduct.Name);
+               DayCount = await _systemDatabaseService.GetTodayProductionAsync(currentproduct.Name);
+               MonthChartModel = CreateMonth(await _systemDatabaseService.GetMonthlyProductionByDayAndCategoryAsync(currentproduct.Name));
+               WeekChartModel = CreateWeek(await _systemDatabaseService.GetWeeklyProductionByDayAndCategoryAsync(currentproduct.Name));
+               DayChartModel = CreateDay(await _systemDatabaseService.GetDailyProductionByHourAndCategoryAsync(currentproduct.Name));
             }));
             
         }