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;
}
}
}