using Infrastructure.Attribute; using SqlSugar; using System; using System.Linq; using ZR.Model.MES.qc; using ZR.Model.MES.qc.DTO; using ZR.Model.MES.wms; using ZR.Service.mes.qc.IService; namespace ZR.Service.mes.qc { /// /// 查询报表 /// [AppService(ServiceType = typeof(IQCStatisticsService), ServiceLifetime = LifeTime.Transient)] public class QCStatisticsService : BaseService, IQCStatisticsService { /// /// 获取质量统计表 首检 /// /// /// /// 工单号 /// /// /// /// /// /// /// public (List, int) GetQualityStatisticsTable_first( DateTime starttime, DateTime endTime, string workorderid, string partnumber, string product_description, string team, int pageNum, int pageSize, int sortType = 0 ) { starttime = starttime.ToLocalTime(); endTime = endTime.ToLocalTime(); int totalNum = 0; var predicate = Expressionable .Create() //XXX:修改查询日期查询的字段 .AndIF( starttime > DateTime.MinValue && string.IsNullOrEmpty(workorderid), it => it.StartTime >= starttime.ToLocalTime() ) .AndIF( endTime > DateTime.MinValue && string.IsNullOrEmpty(workorderid), it => it.StartTime <= endTime.ToLocalTime() ) .AndIF( !string.IsNullOrEmpty(workorderid), it => it.WorkorderId.Contains(workorderid) ) .AndIF( !string.IsNullOrEmpty(partnumber), it => it.FinishedPartNumber.Contains(partnumber) ) .AndIF(!string.IsNullOrEmpty(team), it => it.Team.Equals(team)) .AndIF( !string.IsNullOrEmpty(product_description), it => it.ProductDescription.Contains(product_description) ) .ToExpression(); List data = Context .Queryable() .Where(predicate) .OrderByIF(sortType == 1, it => it.QualifiedRate, OrderByType.Desc) .OrderByIF(sortType == 2, it => it.ProductDescription, OrderByType.Asc) .OrderByIF(sortType == 0 || sortType == 2, it => it.StartTime, OrderByType.Asc) .OrderByIF(sortType == 3, it => it.FinishedPartNumber, OrderByType.Asc) .OrderBy(it => it.WorkorderId) .OrderBy(it => it.Remark2) .ToPageList(pageNum, pageSize, ref totalNum); foreach (QcQualityStatisticsFirst item in data) { WmMaterial material = Context .Queryable() .Where(it => it.Partnumber == item.FinishedPartNumber) .First(); if (material == null) { item.ProductDescription = "此零件号不在物料清单内!"; continue; } item.ProductDescription = !string.IsNullOrEmpty(material.Description) ? material.Description : material.ProductName; } return (data, totalNum); } /// /// 获取质量统计表 二检 /// /// /// /// /// /// /// /// /// /// /// public (List, int) GetQualityStatisticsTable_again( DateTime starttime, DateTime endTime, string workorderid, string partnumber, string product_description, string team, int pageNum, int pageSize, int sortType = 0 ) { starttime = starttime.ToLocalTime(); endTime = endTime.ToLocalTime(); int totalNum = 0; var predicate = Expressionable .Create() //XXX:修改查询日期查询的字段 .AndIF( starttime > DateTime.MinValue && string.IsNullOrEmpty(workorderid), it => it.StartTime >= starttime.ToLocalTime() ) .AndIF( endTime > DateTime.MinValue && string.IsNullOrEmpty(workorderid), it => it.StartTime <= endTime.ToLocalTime() ) .AndIF( !string.IsNullOrEmpty(workorderid), it => it.WorkorderId.Contains(workorderid) ) .AndIF( !string.IsNullOrEmpty(partnumber), it => it.FinishedPartNumber.Contains(partnumber) ) .AndIF(!string.IsNullOrEmpty(team), it => it.Team.Equals(team)) .AndIF( !string.IsNullOrEmpty(product_description), it => it.ProductDescription.Contains(product_description) ) .ToExpression(); List data = Context .Queryable() .Where(predicate) .OrderByIF(sortType == 1, it => it.QualifiedRate, OrderByType.Desc) .OrderByIF(sortType == 2, it => it.ProductDescription, OrderByType.Asc) .OrderByIF(sortType == 0 || sortType == 2, it => it.StartTime, OrderByType.Asc) .OrderByIF(sortType == 3, it => it.FinishedPartNumber, OrderByType.Asc) .OrderBy(it => it.WorkorderId) .OrderBy(it => it.Remark2) .ToPageList(pageNum, pageSize, ref totalNum); foreach (QcQualityStatisticsAgain item in data) { WmMaterial material = Context .Queryable() .Where(it => it.Partnumber == item.FinishedPartNumber) .First(); if (material == null) { item.ProductDescription = "此零件号不在物料清单内!"; continue; } item.ProductDescription = !string.IsNullOrEmpty(material.Description) ? material.Description : material.ProductName; } return (data, totalNum); } /// /// 获取质量统计表 三检 /// /// /// /// /// /// /// /// /// /// /// public (List, int) GetQualityStatisticsTable_final( DateTime starttime, DateTime endTime, string workorderid, string partnumber, string product_description, string team, int pageNum, int pageSize, int sortType = 0 ) { starttime = starttime.ToLocalTime(); endTime = endTime.ToLocalTime(); int totalNum = 0; var predicate = Expressionable .Create() //XXX:修改查询日期查询的字段 .AndIF( starttime > DateTime.MinValue && string.IsNullOrEmpty(workorderid), it => it.StartTime >= starttime.ToLocalTime() ) .AndIF( endTime > DateTime.MinValue && string.IsNullOrEmpty(workorderid), it => it.StartTime <= endTime.ToLocalTime() ) .AndIF( !string.IsNullOrEmpty(workorderid), it => it.WorkorderId.Contains(workorderid) ) .AndIF( !string.IsNullOrEmpty(partnumber), it => it.FinishedPartNumber.Contains(partnumber) ) .AndIF(!string.IsNullOrEmpty(team), it => it.Team.Equals(team)) .AndIF( !string.IsNullOrEmpty(product_description), it => it.ProductDescription.Contains(product_description) ) .ToExpression(); List data = Context .Queryable() .Where(predicate) .OrderByIF(sortType == 1, it => it.QualifiedRate, OrderByType.Desc) .OrderByIF(sortType == 2, it => it.ProductDescription, OrderByType.Asc) .OrderByIF(sortType == 0 || sortType == 2, it => it.StartTime, OrderByType.Asc) .OrderByIF(sortType == 3, it => it.FinishedPartNumber, OrderByType.Asc) .OrderBy(it => it.WorkorderId) .OrderBy(it => it.Remark2) .ToPageList(pageNum, pageSize, ref totalNum); foreach (QcQualityStatisticsFinal item in data) { WmMaterial material = Context .Queryable() .Where(it => it.Partnumber == item.FinishedPartNumber) .First(); if (material == null) { item.ProductDescription = "此零件号不在物料清单内!"; continue; } item.ProductDescription = !string.IsNullOrEmpty(material.Description) ? material.Description : material.ProductName; } return (data, totalNum); } /// /// 获取质量统计表 总表 /// /// /// /// /// /// /// /// /// /// /// public (List, int) GetQualityStatisticsTable_total( DateTime starttime, DateTime endTime, string workorderid, string partnumber, string product_description, string team, int pageNum, int pageSize, int sortType = 0 ) { starttime = starttime.ToLocalTime(); endTime = endTime.ToLocalTime(); int totalNum = 0; var predicate = Expressionable .Create() //XXX:修改查询日期查询的字段 .AndIF( starttime > DateTime.MinValue && string.IsNullOrEmpty(workorderid), it => it.StartTime >= starttime.ToLocalTime() ) .AndIF( endTime > DateTime.MinValue && string.IsNullOrEmpty(workorderid), it => it.StartTime <= endTime.ToLocalTime() ) .AndIF( !string.IsNullOrEmpty(workorderid), it => it.WorkorderId.Contains(workorderid) ) .AndIF( !string.IsNullOrEmpty(partnumber), it => it.FinishedPartNumber.Contains(partnumber) ) .AndIF(!string.IsNullOrEmpty(team), it => it.Team.Equals(team)) .AndIF( !string.IsNullOrEmpty(product_description), it => it.ProductDescription.Contains(product_description) ) .ToExpression(); List data = Context .Queryable() .Where(predicate) .OrderByIF(sortType == 1, it => it.QualifiedRate, OrderByType.Desc) .OrderByIF(sortType == 2, it => it.ProductDescription, OrderByType.Asc) .OrderByIF(sortType == 0 || sortType == 2, it => it.StartTime, OrderByType.Asc) .OrderByIF(sortType == 3, it => it.FinishedPartNumber, OrderByType.Asc) .OrderBy(it => it.WorkorderId) .OrderBy(it => it.Remark2) .ToPageList(pageNum, pageSize, ref totalNum); foreach (QcQualityStatisticsTotal item in data) { WmMaterial material = Context .Queryable() .Where(it => it.Partnumber == item.FinishedPartNumber) .First(); if (material == null) { item.ProductDescription = "此零件号不在物料清单内!"; continue; } item.ProductDescription = !string.IsNullOrEmpty(material.Description) ? material.Description : material.ProductName; } return (data, totalNum); } /// /// 删除首检,二检,三检报表 /// /// /// public int DeleteStatisticsTable(string workorderid) { int num = 0; num = num + Context .Deleteable() .Where(it => it.WorkorderId == workorderid) .ExecuteCommand(); num = num + Context .Deleteable() .Where(it => it.WorkorderId == workorderid) .ExecuteCommand(); num = num + Context .Deleteable() .Where(it => it.WorkorderId == workorderid) .ExecuteCommand(); num = num + Context .Deleteable() .Where(it => it.WorkorderId == workorderid) .ExecuteCommand(); return num; } List IQCStatisticsService.DownloadStatisticsTableExcel( DateTime starttime, DateTime endTime, string workorderid, string partnumber, string product_description, string team, int pageNum, int pageSize, int type, int sortType = 0 ) { try { pageNum = 1; pageSize = 5000; return type switch { // 首检 1 => DoFirstExcel( starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize, sortType ), // 抛光 2 => DoSecondExcel( starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize, sortType ), // 包装 3 => DoThirdExcel( starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize, sortType ), // 总表 4 => DoTotalExcel( starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize, sortType ), _ => throw new Exception("获取的报表类型错误!" + type), }; } catch (Exception ex) { throw new Exception(ex.Message); } } public List DoFirstExcel( DateTime starttime, DateTime endTime, string workorderid, string partnumber, string product_description, string team, int pageNum, int pageSize, int sortType ) { List list = GetQualityStatisticsTable_first( starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize, sortType ).Item1; List newList = list.Select( item => new QcQualityStatisticsFirstDto() { WorkorderId = item.WorkorderId, FinishedPartNumber = item.FinishedPartNumber, ProductDescription = GetDescription(item.FinishedPartNumber), Color = item.Color, RequireNumber = item.RequireNumber, Team = item.Team, QualifiedNumber = item.QualifiedNumber, QualifiedRate = item.QualifiedRate ?? 0, PaoguangTotal = item.PaoguangTotal ?? 0, DamoTotal = item.DamoTotal ?? 0, BaofeiTotal = item.BaofeiTotal ?? 0, StartTime = item.StartTime, EndTime = item.EndTime, Remark = item.Remark ?? "", // 油漆(6) PaintSuokong = item.PaintSuokong ?? 0, PaintZhengkong = item.PaintZhengkong ?? 0, PaintShiguang = item.PaintShiguang ?? 0, PaintSecha = item.PaintSecha ?? 0, PaintDianzi = item.PaintDianzi ?? 0, PaintOther = item.PaintOther ?? 0, // 设备(7) DeviceShuiban = item.DeviceShuiban ?? 0, DeviceZandian = item.DeviceZandian ?? 0, DeviceBianxing = item.DeviceBianxing ?? 0, DeviceYouzhu = item.DeviceYouzhu ?? 0, DeviceTuoluo = item.DeviceTuoluo ?? 0, DeviceZhuangshang = item.DeviceZhuangshang ?? 0, DeviceOther = item.DeviceOther ?? 0, // 毛坯(6) BlankMaoci = item.BlankMaoci ?? 0, BlankSuoyin = item.BlankSuoyin ?? 0, BlankCanshuang = item.BlankCanshuang ?? 0, BlankShaying = item.BlankShaying ?? 0, BlankZangdian = item.BlankZangdian ?? 0, BlankDamo = item.BlankDamo ?? 0, // 程序(5) ProgramLiuguang = item.ProgramLiuguang ?? 0, ProgramSeqiqueqi = item.ProgramSeqiqueqi ?? 0, ProgramQingqiqueqi = item.ProgramQingqiqueqi ?? 0, ProgramJupi = item.ProgramJupi ?? 0, ProgramOther = item.ProgramOther ?? 0, // 班组操作(6) TeamTuoluocanshuang = item.TeamTuoluocanshuang ?? 0, TeamQingqiqikuai = item.TeamQingqiqikuai ?? 0, TeamSeqiqikuai = item.TeamSeqiqikuai ?? 0, TeamFahua = item.TeamFahua ?? 0, TeamLiangbang = item.TeamLiangbang ?? 0, TeamPenglou = item.TeamPenglou ?? 0, } ) .ToList(); return newList; } public List DoSecondExcel( DateTime starttime, DateTime endTime, string workorderid, string partnumber, string product_description, string team, int pageNum, int pageSize, int sortType ) { List list = GetQualityStatisticsTable_again( starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize, sortType ).Item1; List newList = list.Select( item => new QcQualityStatisticsFirstDto() { WorkorderId = item.WorkorderId, FinishedPartNumber = item.FinishedPartNumber, ProductDescription = GetDescription(item.FinishedPartNumber), Color = item.Color, RequireNumber = item.RequireNumber, Team = item.Team, QualifiedNumber = item.QualifiedNumber, QualifiedRate = item.QualifiedRate ?? 0, PaoguangTotal = item.PaoguangTotal ?? 0, DamoTotal = item.DamoTotal ?? 0, BaofeiTotal = item.BaofeiTotal ?? 0, StartTime = item.StartTime, EndTime = item.EndTime, Remark = item.Remark ?? "", // 油漆(6) PaintSuokong = item.PaintSuokong ?? 0, PaintZhengkong = item.PaintZhengkong ?? 0, PaintShiguang = item.PaintShiguang ?? 0, PaintSecha = item.PaintSecha ?? 0, PaintDianzi = item.PaintDianzi ?? 0, PaintOther = item.PaintOther ?? 0, // 设备(7) DeviceShuiban = item.DeviceShuiban ?? 0, DeviceZandian = item.DeviceZandian ?? 0, DeviceBianxing = item.DeviceBianxing ?? 0, DeviceYouzhu = item.DeviceYouzhu ?? 0, DeviceTuoluo = item.DeviceTuoluo ?? 0, DeviceZhuangshang = item.DeviceZhuangshang ?? 0, DeviceOther = item.DeviceOther ?? 0, // 毛坯(6) BlankMaoci = item.BlankMaoci ?? 0, BlankSuoyin = item.BlankSuoyin ?? 0, BlankCanshuang = item.BlankCanshuang ?? 0, BlankShaying = item.BlankShaying ?? 0, BlankZangdian = item.BlankZangdian ?? 0, BlankDamo = item.BlankDamo ?? 0, // 程序(5) ProgramLiuguang = item.ProgramLiuguang ?? 0, ProgramSeqiqueqi = item.ProgramSeqiqueqi ?? 0, ProgramQingqiqueqi = item.ProgramQingqiqueqi ?? 0, ProgramJupi = item.ProgramJupi ?? 0, ProgramOther = item.ProgramOther ?? 0, // 班组操作(6) TeamTuoluocanshuang = item.TeamTuoluocanshuang ?? 0, TeamQingqiqikuai = item.TeamQingqiqikuai ?? 0, TeamSeqiqikuai = item.TeamSeqiqikuai ?? 0, TeamFahua = item.TeamFahua ?? 0, TeamLiangbang = item.TeamLiangbang ?? 0, TeamPenglou = item.TeamPenglou ?? 0, } ) .ToList(); return newList; } public List DoThirdExcel( DateTime starttime, DateTime endTime, string workorderid, string partnumber, string product_description, string team, int pageNum, int pageSize, int sortType ) { List list = GetQualityStatisticsTable_final( starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize, sortType ).Item1; List newList = list.Select( item => new QcQualityStatisticsFirstDto() { WorkorderId = item.WorkorderId, FinishedPartNumber = item.FinishedPartNumber, ProductDescription = GetDescription(item.FinishedPartNumber), Color = item.Color, RequireNumber = item.RequireNumber, Team = item.Team, QualifiedNumber = item.QualifiedNumber, QualifiedRate = item.QualifiedRate ?? 0, PaoguangTotal = item.PaoguangTotal ?? 0, DamoTotal = item.DamoTotal ?? 0, BaofeiTotal = item.BaofeiTotal ?? 0, StartTime = item.StartTime, EndTime = item.EndTime, Remark = item.Remark ?? "", // 油漆(6) PaintSuokong = item.PaintSuokong ?? 0, PaintZhengkong = item.PaintZhengkong ?? 0, PaintShiguang = item.PaintShiguang ?? 0, PaintSecha = item.PaintSecha ?? 0, PaintDianzi = item.PaintDianzi ?? 0, PaintOther = item.PaintOther ?? 0, // 设备(7) DeviceShuiban = item.DeviceShuiban ?? 0, DeviceZandian = item.DeviceZandian ?? 0, DeviceBianxing = item.DeviceBianxing ?? 0, DeviceYouzhu = item.DeviceYouzhu ?? 0, DeviceTuoluo = item.DeviceTuoluo ?? 0, DeviceZhuangshang = item.DeviceZhuangshang ?? 0, DeviceOther = item.DeviceOther ?? 0, // 毛坯(6) BlankMaoci = item.BlankMaoci ?? 0, BlankSuoyin = item.BlankSuoyin ?? 0, BlankCanshuang = item.BlankCanshuang ?? 0, BlankShaying = item.BlankShaying ?? 0, BlankZangdian = item.BlankZangdian ?? 0, BlankDamo = item.BlankDamo ?? 0, // 程序(5) ProgramLiuguang = item.ProgramLiuguang ?? 0, ProgramSeqiqueqi = item.ProgramSeqiqueqi ?? 0, ProgramQingqiqueqi = item.ProgramQingqiqueqi ?? 0, ProgramJupi = item.ProgramJupi ?? 0, ProgramOther = item.ProgramOther ?? 0, // 班组操作(6) TeamTuoluocanshuang = item.TeamTuoluocanshuang ?? 0, TeamQingqiqikuai = item.TeamQingqiqikuai ?? 0, TeamSeqiqikuai = item.TeamSeqiqikuai ?? 0, TeamFahua = item.TeamFahua ?? 0, TeamLiangbang = item.TeamLiangbang ?? 0, TeamPenglou = item.TeamPenglou ?? 0, } ) .ToList(); return newList; } public List DoTotalExcel( DateTime starttime, DateTime endTime, string workorderid, string partnumber, string product_description, string team, int pageNum, int pageSize, int sortType ) { List list = GetQualityStatisticsTable_total( starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize, sortType ).Item1; List newList = list.Select( item => new QcQualityStatisticsFirstDto() { WorkorderId = item.WorkorderId, FinishedPartNumber = item.FinishedPartNumber, ProductDescription = GetDescription(item.FinishedPartNumber), Color = item.Color, RequireNumber = item.RequireNumber, Team = item.Team, QualifiedNumber = item.QualifiedNumber, QualifiedRate = item.QualifiedRate ?? 0, PaoguangTotal = item.PaoguangTotal ?? 0, DamoTotal = item.DamoTotal ?? 0, BaofeiTotal = item.BaofeiTotal ?? 0, StartTime = item.StartTime, EndTime = item.EndTime, Remark = item.Remark ?? "", // 油漆(6) PaintSuokong = item.PaintSuokong ?? 0, PaintZhengkong = item.PaintZhengkong ?? 0, PaintShiguang = item.PaintShiguang ?? 0, PaintSecha = item.PaintSecha ?? 0, PaintDianzi = item.PaintDianzi ?? 0, PaintOther = item.PaintOther ?? 0, // 设备(7) DeviceShuiban = item.DeviceShuiban ?? 0, DeviceZandian = item.DeviceZandian ?? 0, DeviceBianxing = item.DeviceBianxing ?? 0, DeviceYouzhu = item.DeviceYouzhu ?? 0, DeviceTuoluo = item.DeviceTuoluo ?? 0, DeviceZhuangshang = item.DeviceZhuangshang ?? 0, DeviceOther = item.DeviceOther ?? 0, // 毛坯(6) BlankMaoci = item.BlankMaoci ?? 0, BlankSuoyin = item.BlankSuoyin ?? 0, BlankCanshuang = item.BlankCanshuang ?? 0, BlankShaying = item.BlankShaying ?? 0, BlankZangdian = item.BlankZangdian ?? 0, BlankDamo = item.BlankDamo ?? 0, // 程序(5) ProgramLiuguang = item.ProgramLiuguang ?? 0, ProgramSeqiqueqi = item.ProgramSeqiqueqi ?? 0, ProgramQingqiqueqi = item.ProgramQingqiqueqi ?? 0, ProgramJupi = item.ProgramJupi ?? 0, ProgramOther = item.ProgramOther ?? 0, // 班组操作(6) TeamTuoluocanshuang = item.TeamTuoluocanshuang ?? 0, TeamQingqiqikuai = item.TeamQingqiqikuai ?? 0, TeamSeqiqikuai = item.TeamSeqiqikuai ?? 0, TeamFahua = item.TeamFahua ?? 0, TeamLiangbang = item.TeamLiangbang ?? 0, TeamPenglou = item.TeamPenglou ?? 0, } ) .ToList(); return newList; } public string GetDescription(string partnumber) { try { WmMaterial material = Context .Queryable() .Where(it => it.Partnumber == partnumber) .First(); if (material == null) { return "此零件号不在物料清单内!"; } else { return !string.IsNullOrEmpty(material.Description) ? material.Description : material.ProductName; } } catch (Exception ex) { return "获取描述异常!"; } } /// /// 获取首检倒车雷达数量 /// /// /// /// /// /// /// /// /// /// /// public int GetParkingSensorTotal( DateTime starttime, DateTime endTime, string workorderid, string partnumber, string product_description, string team, int pageNum, int pageSize ) { try { // 倒车雷达提取 string[] checkStrArray2 = { "倒车雷达" }; var ParkingSensorPartNumberCheck = Expressionable.Create(); foreach (string checkStr in checkStrArray2) { ParkingSensorPartNumberCheck.Or(it => it.Description.Contains(checkStr)); } ; ParkingSensorPartNumberCheck.And(it => it.Type == 1).And(it => it.Status == 1); List ParkingSensorPartNumberList = Context .Queryable() .Where(ParkingSensorPartNumberCheck.ToExpression()) .Select(it => it.Partnumber) .ToList(); var predicateParkingSensor = Expressionable .Create() .And(it => ParkingSensorPartNumberList.Contains(it.FinishedPartNumber)) .AndIF(!string.IsNullOrEmpty(workorderid), it => it.WorkorderId == workorderid) .AndIF(!string.IsNullOrEmpty(partnumber), it => it.FinishedPartNumber == partnumber) .AndIF( !string.IsNullOrEmpty(product_description), it => it.ProductDescription == product_description ) .AndIF(!string.IsNullOrEmpty(team), it => it.Team == team) .AndIF(starttime > DateTime.MinValue, it => it.StartTime >= starttime.ToLocalTime()) .AndIF(endTime > DateTime.MinValue, it => it.StartTime <= endTime.ToLocalTime()) .ToExpression(); return (Context .Queryable() .Where(predicateParkingSensor) .Sum(it => it.QualifiedNumber) ?? 0) / 3; } catch (Exception e) { throw new Exception(e.Message ?? string.Empty); } } } }