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.ProcessCode), p => p.ProcessCode.Contains(parm.ProcessCode)) .AndIF(!string.IsNullOrEmpty(parm.StepCode), p => p.StepCode.Contains(parm.StepCode)) .AndIF(!string.IsNullOrEmpty(parm.StepName), p => p.StepName.Contains(parm.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) { return Update(model, true); } /// /// 获取设备列表 /// /// /// public PagedInfo GetUniqueValueList(UniqueDto parm) { // 1. 构建查询条件 var predicate = Expressionable.Create() .AndIF(!string.IsNullOrEmpty(parm.StepCode), p => p.StepCode == parm.StepCode) .AndIF(!string.IsNullOrEmpty(parm.DeviceCode), p => p.UniqueValue.Contains(parm.DeviceCode)) .ToExpression(); // 2. 查询总记录数 int totalCount = Queryable() .Where(predicate) .Count(); // 3. 查询当前页数据列表 int skipCount = (parm.PageNum - 1) * parm.PageSize; var dataList = Queryable() .Where(predicate) .Distinct() .LeftJoin((w, a) => w.UniqueValue == a.DeviceCode) .Select((w, a) => new UniqueValueQueryDto { Id = w.Id, DeviceCode = w.UniqueValue, DeviceName = a.DeviceName, Workshop = a.Workshop, Workline = a.Workline, Status = a.Status, DeviceSpecification = a.DeviceSpecification, ResponsiblePerson = a.ResponsiblePerson }) .Skip(skipCount) .Take(parm.PageSize) .ToList(); // 4. 封装分页结果 return new PagedInfo { PageIndex = parm.PageNum, PageSize = parm.PageSize, TotalNum = totalCount, Result = dataList, TotalPage = totalCount > 0 ? (totalCount + parm.PageSize - 1) / parm.PageSize : 0 }; } 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(); // 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 List GetModelProcessList() { var response = Context.Queryable() .Select(p => new ProcessListDto { ProcessCode = p.ProcessCode, ProcessName = p.ProcessName, }) .ToList(); return response; } } }