using System; using System.Linq; using Infrastructure.Attribute; using Infrastructure.Extensions; using Newtonsoft.Json; using SqlSugar; using ZR.Model; using ZR.Model.Business; using ZR.Model.Dto; using ZR.Repository; using ZR.Service.Business.IBusinessService; namespace ZR.Service.Business { /// /// 质量GP12统计报表业务模块Service业务层处理 /// [AppService( ServiceType = typeof(IQcGp12ServiceStatisticsService), ServiceLifetime = LifeTime.Transient )] public class QcGp12ServiceStatisticsService : BaseService, IQcGp12ServiceStatisticsService { /// /// 查询质量GP12统计报表业务模块列表 /// /// /// public PagedInfo GetList(QcGp12ServiceStatisticsQueryDto parm) { var predicate = Expressionable.Create(); var response = Queryable() .Where(predicate.ToExpression()) .ToPage(parm); return response; } /// /// 获取详情 /// /// /// public QcGp12ServiceStatistics GetInfo(string Id) { var response = Queryable().Where(x => x.Id == Id).First(); return response; } /// /// 添加质量GP12统计报表业务模块 /// /// /// public QcGp12ServiceStatistics AddQcGp12ServiceStatistics(QcGp12ServiceStatistics model) { return Context.Insertable(model).ExecuteReturnEntity(); } /// /// 修改质量GP12统计报表业务模块 /// /// /// public int UpdateQcGp12ServiceStatistics(QcGp12ServiceStatistics model) { //var response = Update(w => w.Id == model.Id, it => new QcGp12ServiceStatistics() //{ // WorkOrder = model.WorkOrder, // PartNumber = model.PartNumber, // Description = model.Description, // Specification = model.Specification, // Color = model.Color, // Team = model.Team, // SiteNo = model.SiteNo, // ComNo = model.ComNo, // IsOnetime = model.IsOnetime, // IsBack = model.IsBack, // IsPolish = model.IsPolish, // IsOut = model.IsOut, // StartTime = model.StartTime, // EndTime = model.EndTime, // Label = model.Label, // RequireNumber = model.RequireNumber, // QualifiedNumber = model.QualifiedNumber, // QualifiedRate = model.QualifiedRate, // DamoNumber = model.DamoNumber, // BaofeiNumber = model.BaofeiNumber, // GroupCode = model.GroupCode, // GroupSort = model.GroupSort, // GroupDefectJson = model.GroupDefectJson, // Type = model.Type, // Status = model.Status, // Remark = model.Remark, // CreatedBy = model.CreatedBy, // CreatedTime = model.CreatedTime, // UpdatedBy = model.UpdatedBy, // UpdatedTime = model.UpdatedTime, //}); //return response; return Update(model, true); } public List GetReviseList(QcGp12ServiceStatisticsQueryDto parm) { const string ActiveStatus = "1"; var predicate = Expressionable .Create() .AndIF( !string.IsNullOrEmpty(parm.WorkOrder), x => SqlFunc.Like(x.WorkOrder, parm.WorkOrder + "%") ) .AndIF( !string.IsNullOrEmpty(parm.PartNumber), x => SqlFunc.Like(x.PartNumber, parm.PartNumber + "%") ) .AndIF( !string.IsNullOrEmpty(parm.Description), x => SqlFunc.Like(x.Description, parm.Description + "%") ) .AndIF(!string.IsNullOrEmpty(parm.Team), x => x.Team == parm.Team) .AndIF(!string.IsNullOrEmpty(parm.SiteNo), x => x.SiteNo == parm.SiteNo) .AndIF(!string.IsNullOrEmpty(parm.ComNo), x => x.ComNo == parm.ComNo) .AndIF(parm.IsOnetime.HasValue, x => x.IsOnetime == parm.IsOnetime.Value) .AndIF(parm.IsBack.HasValue, x => x.IsBack == parm.IsBack.Value) .AndIF(parm.IsPolish.HasValue, x => x.IsPolish == parm.IsPolish.Value) .AndIF(parm.IsOut.HasValue, x => x.IsOut == parm.IsOut.Value) .AndIF( parm.StartTime.HasValue && parm.EndTime.HasValue, x => x.StartTime >= parm.StartTime.Value && x.StartTime <= parm.EndTime.Value ) .And(x => x.Status == ActiveStatus) .ToExpression(); // 预处理排序条件 var query = Context.Queryable().Where(predicate); switch (parm.StatisticsOrderType) { case 1: query = query.OrderBy(it => it.WorkOrder); break; case 2: query = query.OrderBy(it => it.PartNumber); break; case 3: query = query.OrderBy(it => it.QualifiedRate, OrderByType.Desc); break; case 4: query = query.OrderBy(it => it.StartTime); break; } query = query.OrderBy(it => it.GroupCode).OrderBy(it => it.GroupSort); var result = query.ToList(); // 将 defectList 转换为字典以优化查找 var defectList = Context.Queryable().ToList(); var defectDict = defectList.ToDictionary(d => d.Code, d => d); var resultList = new List(); foreach (var item in result) { var dto = new QcGp12ServiceStatisticsDto { Id = item.Id, WorkOrder = item.WorkOrder, PartNumber = item.PartNumber, Description = item.Description, Specification = item.Specification, Color = item.Color, Team = item.Team, SiteNo = item.SiteNo, ComNo = item.ComNo, IsOnetime = item.IsOnetime, IsBack = item.IsBack, IsPolish = item.IsPolish, IsOut = item.IsOut, StartTime = item.StartTime, EndTime = item.EndTime, Label = item.Label, RequireNumber = item.RequireNumber, QualifiedNumber = item.QualifiedNumber, QualifiedRate = item.QualifiedRate, PolishNumber = item.PolishNumber, DamoNumber = item.DamoNumber, BaofeiNumber = item.BaofeiNumber, GroupCode = item.GroupCode, GroupSort = item.GroupSort, GroupDefectJson = item.GroupDefectJson, Type = item.Type, Status = item.Status, Remark = item.Remark, CreatedBy = item.CreatedBy, CreatedTime = item.CreatedTime, UpdatedBy = item.UpdatedBy, UpdatedTime = item.UpdatedTime }; if (!string.IsNullOrEmpty(item.GroupDefectJson)) { try { var defects = JsonConvert.DeserializeObject< List >(item.GroupDefectJson); foreach (var defect in defects) { if (defectDict.TryGetValue(defect.DefectCode, out var baseDefect)) { string code = defect.DefectCode; if (code.Length >= 2) { string propertyName = $"{code[0]}{code[^1]}"; dto.AddDynamicProperty(propertyName, defect.DefectNum); } } } } catch (Exception ex) { // 实际应用中应使用日志框架(如 ILogger) } } resultList.Add(dto); } return resultList; } } }