using Aliyun.OSS; using DOAN.Model; using DOAN.Model.Business; using DOAN.Model.Dto; using DOAN.Model.MES.dev; using DOAN.Model.MES.dev.Dto; using DOAN.Model.MES.process; using DOAN.Repository; using DOAN.Service.Business.IBusinessService; using Infrastructure.Attribute; using Infrastructure.Extensions; using JinianNet.JNTemplate; using NPOI.SS.Formula.Functions; using NPOI.XSSF.Streaming.Values; using SqlSugar; using System; using System.Linq; using UAParser; namespace DOAN.Service.Business { /// /// Service业务层处理 /// [AppService(ServiceType = typeof(IProcessmodelWorkStepService), ServiceLifetime = LifeTime.Transient)] public class ProcessmodelWorkStepService : BaseService, IProcessmodelWorkStepService { /// /// 查询列表 /// /// /// public PagedInfo GetList(ProcessmodelWorkStepQueryDto parm) { var predicate = Expressionable.Create() .AndIF(!string.IsNullOrEmpty(parm.StepCode), p => parm.StepCode.Contains(p.StepCode)) .AndIF(!string.IsNullOrEmpty(parm.StepName), p => parm.StepName.Contains(p.StepName)); var response = Queryable() .Where(predicate.ToExpression()) .GroupBy(p => p.StepCode) .ToPage(parm); return response; } /// /// 获取详情 /// /// /// public ProcessmodelWorkStep GetInfo(long Id) { var response = Queryable() .Where(x => x.Id == Id) .First(); return response; } /// /// 添加 /// /// /// public ProcessmodelWorkStep AddProcessmodelWorkStep(ProcessmodelWorkStep model) { return Context.Insertable(model).ExecuteReturnEntity(); } /// /// 修改 /// /// /// public int UpdateProcessmodelWorkStep(ProcessmodelWorkStep model) { //var response = Update(w => w.Id == model.Id, it => new ProcessmodelOperationStep() //{ // OperationStepCode = model.OperationStepCode, // OperationStepName = model.OperationStepName, // OperationCode = model.OperationCode, // Description = model.Description, // IsActive = model.IsActive, // UpdateTime = model.UpdateTime, // UpdateBy = model.UpdateBy, // Remark = model.Remark, //}); //return response; return Update(model, true); } /// /// 获取设备列表 /// /// /// public List GetUniqueValueList(string stepCode) { bool stepCodeExists = Context.Queryable() .Where(p => p.StepCode == stepCode) .Any(); if (!stepCodeExists) { return new List(); } var uniqueValues = Context.Queryable() .Where(p => p.StepCode == stepCode) .Distinct() .ToList(); List result = []; foreach (var uniqueValue in uniqueValues) { var dictionary = Context.Queryable().First(d => d.DeviceCode == uniqueValue.UniqueValue); if (dictionary == null) { return new List(); } result.Add(new UniqueValueQueryDto { Id = uniqueValue.Id, DeviceCode = uniqueValue.UniqueValue, DeviceName = dictionary.DeviceName, Workshop = dictionary.Workshop, Workline = dictionary.Workline, Status = dictionary.Status, DeviceSpecification = dictionary.DeviceSpecification, ResponsiblePerson = dictionary.ResponsiblePerson }); } return result; } public List GetAccountList() { // 1. SqlSugar 链式查询:先查平数据(数据库端过滤,性能不浪费) var flatData = Context.Queryable() // 过滤空值,避免分组垃圾数据 .Where(d => !string.IsNullOrEmpty(d.Workshop) && !string.IsNullOrEmpty(d.Workline)) // 只取需要的字段,减少数据传输 .Select(d => new { d.Workshop, d.Workline, d.DeviceCode, d.DeviceName }) .ToList(); // 加载到内存,后续内存分组(SqlSugar 内存分组不会报错) // 2. 手动构建 DTO 结构(最稳妥,不会有任何翻译问题) var result = new List(); // 先获取所有不重复的车间 var allWorkshops = flatData.Select(d => d.Workshop).Distinct().ToList(); foreach (var workshop in allWorkshops) { // 构建当前车间 DTO var workshopDto = new WorkshopDto { Workshop = workshop }; // 获取当前车间下的所有数据 var workshopData = flatData.Where(d => d.Workshop == workshop).ToList(); // 获取当前车间下不重复的产线 var allWorklines = workshopData.Select(d => d.Workline).Distinct().ToList(); foreach (var workline in allWorklines) { // 构建当前产线 DTO var worklineDto = new WorklineDto { Workline = workline }; // 获取当前产线下的所有设备 var devices = workshopData .Where(d => d.Workline == workline) .Select(d => new DeviceDto { DeviceCode = d.DeviceCode, DeviceName = d.DeviceName }) .ToList(); worklineDto.Devices = devices; workshopDto.Worklines.Add(worklineDto); } result.Add(workshopDto); } return result; } /// /// 新增设备 /// /// /// /// /// public int AddUniqueValue(UniqueQueryDto parm) { // 查询工步基础信息 var workStep = Context.Queryable() .Where(x => x.StepCode == parm.StepCode && x.ProcessCode == parm.ProcessCode) .First(); if (workStep == null) { throw new Exception("未找到对应的工步信息"); } // 插入新的工步记录 var newWorkStep = new ProcessmodelWorkStep { StepCode = workStep.StepCode, StepName = workStep.StepName, ProcessCode = workStep.ProcessCode, Description = workStep.Description, IsActive = workStep.IsActive, UniqueValue = parm.DeviceCode, CreateTime = DateTime.Now }; return Context.Insertable(newWorkStep).ExecuteCommand(); } ///// ///// 删除设备 ///// ///// ///// ///// //public int DeleteUniqueValue(long id) //{ // Context.Deleteable() //} } }