using DOAN.Model; using DOAN.Model.MES.product; using DOAN.Model.MES.quality.FQC; using DOAN.Model.MES.quality.IQC; using DOAN.Model.MES.quality.IQC.Dto; using DOAN.Model.MES.Quality.FQC.Dto; using DOAN.Model.System; using DOAN.Model.System.Dto; using DOAN.Repository; using DOAN.Service.MES.quality.FQC.IService; using Infrastructure.Attribute; using SqlSugar.DistributedSystem.Snowflake; using static ICSharpCode.SharpZipLib.Zip.ExtendedUnixData; namespace DOAN.Service.MES.quality.FQC { /// /// 成品缺陷收集 Service业务层处理 /// [AppService(ServiceType = typeof(IQcFinishedproductDefectService), ServiceLifetime = LifeTime.Transient)] public class QcFinishedproductDefectService : BaseService, IQcFinishedproductDefectService { public bool AddDefectNum(QueryFQCDto queryFQCDto) { int flag = 0; if(!string.IsNullOrEmpty(queryFQCDto.CheckName)) { string NickName = Context.Queryable().Where(it => it.UserName == queryFQCDto.CheckName).Select(it => it.NickName).First(); queryFQCDto.CheckName = string.IsNullOrEmpty(NickName) ? queryFQCDto.CheckName + "|异常人员|" : NickName; } // 检查 Workorder 是否存在 var existingRecord = Context.Queryable() .Where(it => it.Workorder == queryFQCDto.WorkOrder) .Where(it => it.DefectCode == queryFQCDto.DefectCode) .First(); if (existingRecord != null) { // 更新 Number 字段 flag = Context.Updateable() .SetColumns(it => new QcFinishedproductDefectCollection { Number = it.Number + 1, UpdatedTime = DateTime.Now, CheckDatetime = DateTime.Now, CheckName=queryFQCDto.CheckName }) .Where(it => it.Workorder == queryFQCDto.WorkOrder) .Where(it => it.DefectCode == queryFQCDto.DefectCode) .ExecuteCommand(); } else { // 插入新记录 QcFinishedproductDefectCollection qcFinishedproductDefect = new QcFinishedproductDefectCollection(); qcFinishedproductDefect.Id = XueHua; qcFinishedproductDefect.Workorder = queryFQCDto.WorkOrder; qcFinishedproductDefect.DefectCode = queryFQCDto.DefectCode; qcFinishedproductDefect.DefectName = Context.Queryable().Where(it => it.Code == queryFQCDto.DefectCode).Select(it => it.Name).First(); qcFinishedproductDefect.CheckName = queryFQCDto.CheckName; qcFinishedproductDefect.CheckDatetime = DateTime.Now; qcFinishedproductDefect.CreatedTime = DateTime.Now; qcFinishedproductDefect.Number = 1; flag = Context.Insertable(qcFinishedproductDefect).ExecuteCommand(); } return flag > 0 ? true : false; } public bool UpdateDefectNum(QueryFQCDto queryFQCDto) { int flag = 0; if (!string.IsNullOrEmpty(queryFQCDto.CheckName)) { string NickName = Context.Queryable().Where(it => it.UserName == queryFQCDto.CheckName).Select(it => it.NickName).First(); queryFQCDto.CheckName = string.IsNullOrEmpty(NickName) ? queryFQCDto.CheckName + "|异常人员|" : NickName; flag = Context.Updateable() .SetColumns(it => new QcFinishedproductDefectCollection { Number = queryFQCDto.num, UpdatedTime = DateTime.Now, CheckDatetime = DateTime.Now, CheckName = queryFQCDto.CheckName, }) .Where(it => it.Workorder == queryFQCDto.WorkOrder) .Where(it => it.DefectCode == queryFQCDto.DefectCode) .ExecuteCommand(); } else { flag = Context.Updateable() .SetColumns(it => new QcFinishedproductDefectCollection { Number = queryFQCDto.num, UpdatedTime = DateTime.Now, CheckDatetime = DateTime.Now, }) .Where(it => it.Workorder == queryFQCDto.WorkOrder) .Where(it => it.DefectCode == queryFQCDto.DefectCode) .ExecuteCommand(); } return flag > 0 ? true : false; } public List SearchDefectList(string WorkOrder) { return Context.Queryable().Where(it => it.Workorder == WorkOrder).ToList(); } /// /// 分页查询缺陷统计 /// /// /// public PagedInfo SearchDefectStatisticsPage(QueryFQCShowDto queryFQCShow) { var predicate = Expressionable.Create() .AndIF(!string.IsNullOrEmpty(queryFQCShow.Workorder), (t1, t2, t3) => t1.Workorder.Contains(queryFQCShow.Workorder)) .AndIF(!string.IsNullOrEmpty(queryFQCShow.ProductName), (t1, t2, t3) => t1.productionName.Contains(queryFQCShow.ProductName)) .AndIF(!string.IsNullOrEmpty(queryFQCShow.ProductCode), (t1, t2, t3) => t1.productionCode.Contains(queryFQCShow.ProductCode)) .AndIF(!string.IsNullOrEmpty(queryFQCShow.CheckName), (t1, t2, t3) => t3.CheckName.Contains(queryFQCShow.CheckName)) .AndIF(!string.IsNullOrEmpty(queryFQCShow.DefectName), (t1, t2, t3) => t3.CheckName.Contains(queryFQCShow.DefectName)) .AndIF(queryFQCShow.SearchDateTime != null && queryFQCShow.SearchDateTime.Length >= 2 && queryFQCShow.SearchDateTime[0] >= DateTime.MinValue, (t1, t2, t3) => t3.CheckDatetime > queryFQCShow.SearchDateTime[0]) .AndIF(queryFQCShow.SearchDateTime != null && queryFQCShow.SearchDateTime.Length >= 2 && queryFQCShow.SearchDateTime[1] <= DateTime.MinValue, (t1, t2, t3) => t3.CheckDatetime > queryFQCShow.SearchDateTime[1]); return Context.Queryable() .RightJoin((t1, t2) => t1.Workorder == t2.Workorder) .RightJoin((t1, t2, t3) => t2.Workorder == t3.Workorder) .Where(predicate.ToExpression()) .GroupBy((t1,t2,t3)=>new { t3.Workorder, t2.FinishNum,t1.PlanNum, t1.productionName, t1.productionCode }) .Select((t1, t2, t3) => new ResultFQCShowDto { Workorder = t3.Workorder, productionName = t1.productionName, productionCode = t1.productionCode, PlanNum = t1.PlanNum, FinishedNum = t2.FinishNum, DefectAllNum = SqlFunc.AggregateSum(t3.Number), QualifiedNum = t2.FinishNum- SqlFunc.AggregateSum(t3.Number) }).ToPage_NO_Convert(queryFQCShow); } } }