using Aliyun.OSS; using DOAN.Model; using DOAN.Model.Dto; using DOAN.Model.MES.dev; using DOAN.Model.MES.trace; using DOAN.Model.MES.trace.Dto; using DOAN.Repository; using DOAN.Service.Business.IBusinessService; using Infrastructure.Attribute; using Infrastructure.Extensions; using Microsoft.IdentityModel.Tokens; using SqlSugar; using System; using System.ComponentModel.DataAnnotations; using System.Linq; namespace DOAN.Service { /// /// 追溯日志,错误日志,警告日志,调试日志Service业务层处理 /// [AppService(ServiceType = typeof(ITraceMainService), ServiceLifetime = LifeTime.Transient)] public class TraceMainService : BaseService, ITraceMainService { /// /// 获取产品追溯信息列表 /// /// /// public PagedInfo GetPartSnList(TracePartSnQueryDto query) { if (query == null) { throw new ArgumentNullException(nameof(query)); } if (!string.IsNullOrEmpty(query.SubPartScanCode)) { var partSn = Context.Queryable() .Where(t => t.SubCode == query.SubPartScanCode) .Select(t => t.PartSn) .ToString(); query.PartSn = partSn; } var response = Context.Queryable() .LeftJoin((s, r) => s.PartSn == r.PartSn) .WhereIF(!string.IsNullOrEmpty(query.PartSn), (s, r) => s.PartSn == query.PartSn) .WhereIF(!string.IsNullOrEmpty(query.ProductionSn), (s, r) => r.ProductionSn == query.ProductionSn) .WhereIF(!string.IsNullOrEmpty(query.ProjectCode), (s, r) => s.ProjectCode == query.ProjectCode) .WhereIF(query.StartTime > DateTime.MinValue, (s, r) => s.CreateTime >= query.StartTime) .WhereIF(query.EndTime > DateTime.MinValue, (s, r) => s.CreateTime >= query.EndTime) .OrderByDescending((s, r) => s.CreateTime) .GroupBy((s, r) => new { s.PartSn, r.ProductionSn }) .Select((s, r) => new TracePartSnDto() { Id = XueHua, ProjectCode = s.ProjectCode, ProductionCode = r.ProductionCode, ProductionName = r.ProductionName, Specification = s.Specification, ProductionSn = r.ProductionSn, PartSN = s.PartSn, Result = r.Result, CreateTime = r.CreateTime != null ? (DateTime)r.CreateTime : (DateTime)s.CreateTime }) .ToPage(query); return response; } /// /// 获取子零件 /// /// /// /// public PagedInfo GetSnSubScanList(TraceSnSubScanQueryDto query) { if (query == null) { throw new ArgumentNullException(nameof(query)); } var response = Context.Queryable() .Where(t => t.PartSn == query.PartSn) .Select(t => new TraceSnSubScanDto() { Id = t.Id, SubCode = t.SubCode, SubName = t.SubName, Specification = t.Specification, PartSn = t.PartSn, SubPartScanCode = t.SubPartScanCode, IsBack = t.IsBack, CreateTime = t.CreateTime }) .ToPage(query); return response; } /// /// 获取检测平台(折叠:zd/终检:eol) /// /// /// /// public PagedInfo GetSnQcRecordList(TraceSnQcRecordQueryDto query) { if (query == null) { throw new ArgumentNullException(nameof(query)); } var response = Context.Queryable() .Where(r => r.PartSn == query.PartSn && r.QcType == query.QcType) .Select(r => new TraceSnQcRecordDto() { Id = r.Id, ProjectCode = r.ProjectCode, ProductionCode = r.ProductionCode, ProductionName = r.ProductionName, Specification = r.Specification, PartSn = r.PartSn, QcType = r.QcType, IsBack = r.IsBack, CreateBy = r.CreateBy, CreateTime = r.CreateTime, Value01 = r.Value01, Value02 = r.Value02, Value03 = r.Value03, Value04 = r.Value04, Value05 = r.Value05, Value06 = r.Value06, Value07 = r.Value07, Value08 = r.Value08, Value09 = r.Value09, Value10 = r.Value10, Value11 = r.Value11, Value12 = r.Value12, Value13 = r.Value13, Value14 = r.Value14, Value15 = r.Value15, Value16 = r.Value16, Value17 = r.Value17, Value18 = r.Value18, Value19 = r.Value19, Value20 = r.Value20, Value21 = r.Value21, Value22 = r.Value22, Value23 = r.Value23, Value24 = r.Value24, Value25 = r.Value25, Value26 = r.Value26, Value27 = r.Value27, Value28 = r.Value28, Value29 = r.Value29, Value30 = r.Value30, Value31 = r.Value31, Value32 = r.Value32, Value33 = r.Value33, Value34 = r.Value34, Value35 = r.Value35, Value36 = r.Value36, Value37 = r.Value37, Value38 = r.Value38, Value39 = r.Value39, Value40 = r.Value40, }) .ToPage(query); return response; } public List GetConfig(DeviceDownLoadTraceConfigQueryDto parm) { var response = Context .Queryable() .Where(it => it.ProcessCode == parm.ProcessCode) .ToList(); return response; } public bool AddPartSn(string projectCode, string productionCode, string partSn) { TraceSnScan snScan = new() { ProjectCode = projectCode, ProductionCode = productionCode, PartSn = partSn, CreateTime = DateTime.Now }; return Context.Insertable(snScan).ExecuteCommand() > 0; } public bool AddPartSnSubScan(TraceSnSubScan scan) { scan.CreateTime = DateTime.Now; return Context.Insertable(scan).ExecuteCommand() > 0; } public bool AddTraceSnTransit(TraceSnTransit traceSnTransit) { traceSnTransit.CreateTime = DateTime.Now; return Context.Insertable(traceSnTransit).ExecuteCommand() > 0; } public bool CheckIsTransit(string partSn, string TransitName) { bool hasValue = Context .Queryable() .Where(it => it.PartSn == partSn) .Where(it => it.TransitName == TransitName) .Where(it => it.IsBack == 0) .Any(); return hasValue; } public bool CheckPartSnIsExist(string partSn) { bool hasValue = Context.Queryable().Where(it => it.PartSn == partSn).Any(); return hasValue; } public string GetLastPartSn(string projectCode, string productionCode) { string lastPartSn = Context.Queryable() .Where(it => it.ProjectCode == projectCode) .Where(it => it.ProductionCode == productionCode) .OrderByDescending(it => it.Id) .Select(it => it.PartSn) .First(); return lastPartSn; } public bool UploadPartSnAndZdDecord(TraceSnQcRecord traceSnQcRecord) { traceSnQcRecord.CreateTime = DateTime.Now; return Context.Insertable(traceSnQcRecord).ExecuteCommand() > 0; } } }