/* *所有关于Data_Machine类的业务代码应在此处编写 *可使用repository.调用常用方法,获取EF/Dapper等信息 *如果需要事务请使用repository.DbContextBeginTransaction *也可使用DBServerProvider.手动获取数据库相关信息 *用户信息、权限、角色等使用UserContext.Current操作 *Data_MachineService对增、删、改查、导入、导出、审核业务代码扩展参照ServiceFunFilter */ using VOL.Core.BaseProvider; using VOL.Core.Extensions.AutofacManager; using VOL.Entity.DomainModels; using System.Linq; using VOL.Core.Utilities; using System.Linq.Expressions; using VOL.Core.Extensions; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.AspNetCore.Http; using VOL.Data.IRepositories; using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; using SkiaSharp; using StackExchange.Redis; using System.Text.RegularExpressions; using Microsoft.EntityFrameworkCore.Metadata.Internal; using Newtonsoft.Json; using System; using System.Collections.Generic; namespace VOL.Data.Services { public partial class Data_MachineService { private readonly IHttpContextAccessor _httpContextAccessor; private readonly IData_MachineRepository _repository;//访问数据库 [ActivatorUtilitiesConstructor] public Data_MachineService( IData_MachineRepository dbRepository, IHttpContextAccessor httpContextAccessor ) : base(dbRepository) { _httpContextAccessor = httpContextAccessor; _repository = dbRepository; //多租户会用到这init代码,其他情况可以不用 //base.Init(dbRepository); } public Dictionary GetMachineData() { var db = _repository.DbContext.Set(); var machineList = new Dictionary(); List configList = Data_ConfigService.Instance.getConfigList(); IQueryable query = db.Where(x => x.com_status == 5); foreach ( Data_Config config in configList ) { // 机床数据,各自取最新一条 Data_Machine? data_Machine = query.Where(x => x.config_id == config.id). OrderByDescending(d => d.CreateDate).FirstOrDefault(); if ( data_Machine != null ) { data_Machine.com_ip = config.com_ip; data_Machine.name = config.name; data_Machine.totalQuantity = data_Machine.quantity_total; data_Machine.totalRuntime = data_Machine.run_time_total; // 判断通讯是否断开 #pragma warning disable CS8600 Data_Machine lastdata_Machine = db.Where(x => x.config_id == config.id). OrderByDescending(d => d.CreateDate).FirstOrDefault(); #pragma warning restore CS8600 data_Machine.com_status = lastdata_Machine.com_status; // 生产数据, 各自取最新一条 Func where = p => p.config_id == config.id && p.com_status == 5; Data_Produce data_Produce = Data_ProduceService.Instance.getLastProduceData(where); if (data_Produce != null) { data_Machine.currentTurnout = data_Produce.turnout_all; data_Machine.OEE = data_Produce.oee; } machineList.Add(config.id, data_Machine); } } return machineList; } // 测试使用 public void testQuery() { //List data_Machines = _repository.DbContext.Set().ToList(); //var list = db.Where(x => x.com_status == 5).GroupBy(e => e.config_id).Select(g => new { // ConfigId = g.Key, // Data_Machine = g.OrderByDescending(d => d.CreateDate).ToList() //}).OrderBy(g => g.ConfigId).ToList(); // 1. 查设备ID分组 //var result1 = db.GroupBy(e => e.config_id).Select(g => new //{ // ConfigId = g.Key //}).OrderBy(g => g.ConfigId).ToList(); //List configIds = result1.Select(c => c.ConfigId).ToList(); // 2. 查找设备名称并赋值 //var result2 = db.Where(p => configIds.Contains(p.config_id) && p.com_status == 5).OrderByDescending(o => o.CreateDate).ToList(); //Console.Write(JsonConvert.SerializeObject(result2)); //Console.Write(string.Join(",", data_Machines)); //var list = db.GroupBy(e => e.config_id).Count(); } } }