2025-10-10 09:23:34 +08:00

241 lines
11 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
{
/// <summary>
/// 追溯日志错误日志警告日志调试日志Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(ITraceMainService), ServiceLifetime = LifeTime.Transient)]
public class TraceMainService : BaseService<TraceLog>, ITraceMainService
{
/// <summary>
/// 获取产品追溯信息列表
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
public PagedInfo<TracePartSnDto> GetPartSnList(TracePartSnQueryDto query)
{
if (query == null)
{
throw new ArgumentNullException(nameof(query));
}
if (!string.IsNullOrEmpty(query.SubPartScanCode))
{
var partSn = Context.Queryable<TraceSnSubScan>()
.Where(t => t.SubCode == query.SubPartScanCode)
.Select(t => t.PartSn)
.ToString();
query.PartSn = partSn;
}
var response = Context.Queryable<TraceSnScan>()
.LeftJoin<TraceProductRecord>((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;
}
/// <summary>
/// 获取子零件
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
/// <exception cref="ArgumentNullException"></exception>
public PagedInfo<TraceSnSubScanDto> GetSnSubScanList(TraceSnSubScanQueryDto query)
{
if (query == null)
{
throw new ArgumentNullException(nameof(query));
}
var response = Context.Queryable<TraceSnSubScan>()
.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;
}
/// <summary>
/// 获取检测平台折叠zd/终检eol
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
/// <exception cref="ArgumentNullException"></exception>
public PagedInfo<TraceSnQcRecordDto> GetSnQcRecordList(TraceSnQcRecordQueryDto query)
{
if (query == null)
{
throw new ArgumentNullException(nameof(query));
}
var response = Context.Queryable<TraceSnQcRecord>()
.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<TraceConfig> GetConfig(DeviceDownLoadTraceConfigQueryDto parm)
{
var response = Context
.Queryable<TraceConfig>()
.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<TraceSnTransit>()
.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<TraceSnScan>().Where(it => it.PartSn == partSn).Any();
return hasValue;
}
public string GetLastPartSn(string projectCode, string productionCode)
{
string lastPartSn = Context.Queryable<TraceSnScan>()
.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;
}
}
}