using Aliyun.OSS; using DOAN.Model; using DOAN.Model.Business; using DOAN.Model.Dto; using DOAN.Model.MES.process; using DOAN.Repository; using DOAN.Service.Business.IBusinessService; using Infrastructure.Attribute; using Infrastructure.Extensions; using NPOI.SS.Formula.Functions; using NPOI.XSSF.Streaming.Values; using SqlSugar; using System; using System.Linq; 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() .Any(p => p.StepCode == stepCode); if (!stepCodeExists) { return new List(); } List uniqueValues = Context.Queryable() .Where(p => p.StepCode == stepCode) .Select(p => p.UniqueValue) .Distinct() .Where(uv => !string.IsNullOrEmpty(uv)) .ToList(); var result = Context.Queryable() .Where(d => uniqueValues.Contains(d.UniqueValue)) // 批量匹配,性能优于循环查询 .Select(d => new UniqueValueQueryDto { Id = d.Id, Value = d.UniqueValue, Name = d.Description }) .ToList(); return result; } /// /// 新增设备 /// /// /// /// /// public int AddUniqueValue(UniqueQueryDto parm) { // 1. 校验入参 if (string.IsNullOrEmpty(parm.ProcessCode) || string.IsNullOrEmpty(parm.StepCode) || string.IsNullOrEmpty(parm.Description)) { throw new ArgumentException("ProcessCode、StepCode、Description 不能为空"); } // 2. 查询字典表中是否存在匹配的 Description var dictionary = Context.Queryable() .Where(d => d.Description == parm.Description) .First(); string uniqueValue; if (dictionary != null) { // 字典表中存在匹配的 Description,使用其 UniqueValue uniqueValue = dictionary.UniqueValue; } else { // 字典表中不存在,生成新的唯一 UniqueValue uniqueValue = GenerateUniqueValue(); } // 3. 查询工步基础信息 var workStep = Context.Queryable() .Where(x => x.StepCode == parm.StepCode && x.ProcessCode == parm.ProcessCode) .First(); if (workStep == null) { throw new Exception("未找到对应的工步信息"); } // 4. 插入新的工步记录 var newWorkStep = new ProcessmodelWorkStep { StepCode = workStep.StepCode, StepName = workStep.StepName, ProcessCode = workStep.ProcessCode, Description = workStep.Description, IsActive = workStep.IsActive, UniqueValue = uniqueValue, CreateTime = DateTime.Now }; return Context.Insertable(newWorkStep).ExecuteCommand(); } /// /// 生成唯一的 UniqueValue /// /// 唯一的 UniqueValue private string GenerateUniqueValue() { // 生成格式为 "UV" + 时间戳 + 随机数 的唯一值 var timestamp = DateTime.Now.ToString("yyyyMMddHHmmssfff"); var random = new Random().Next(1000, 9999); return $"UV{timestamp}{random}"; // 也可以根据业务规则生成,例如结合 ProcessCode 和 StepCode // return $"{parm.ProcessCode}-{parm.StepCode}-{Guid.NewGuid().ToString("N").Substring(0, 8)}"; } ///// ///// 删除设备 ///// ///// ///// ///// //public int DeleteUniqueValue(long id) //{ // Context.Deleteable() //} } }