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) { starttime = starttime.ToLocalTime(); endTime = endTime.ToLocalTime(); int totalNum = 0; var predicate = Expressionable.Create() //XXX:修改查询日期查询的字段 .AndIF(starttime > new DateTime(2023, 1, 1, 0, 0, 0), it => it.StartTime >= starttime.ToLocalTime()) .AndIF(endTime > new DateTime(2023, 1, 1, 0, 0, 0), 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) .OrderBy(it => it.StartTime) .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) { starttime = starttime.ToLocalTime(); endTime = endTime.ToLocalTime(); int totalNum = 0; var predicate = Expressionable.Create() //XXX:修改查询日期查询的字段 .AndIF(starttime > new DateTime(2023, 1, 1, 0, 0, 0), it => it.StartTime >= starttime.ToLocalTime()) .AndIF(endTime > new DateTime(2023, 1, 1, 0, 0, 0), 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).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) { starttime = starttime.ToLocalTime(); endTime = endTime.ToLocalTime(); int totalNum = 0; var predicate = Expressionable.Create() //XXX:修改查询日期查询的字段 .AndIF(starttime > new DateTime(2023, 1, 1, 0, 0, 0), it => it.StartTime >= starttime.ToLocalTime()) .AndIF(endTime > new DateTime(2023, 1, 1, 0, 0, 0), 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).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) { starttime = starttime.ToLocalTime(); endTime = endTime.ToLocalTime(); int totalNum = 0; var predicate = Expressionable.Create() //XXX:修改查询日期查询的字段 .AndIF(starttime > new DateTime(2023, 1, 1, 0, 0, 0), it => it.StartTime >= starttime.ToLocalTime()) .AndIF(endTime > new DateTime(2023, 1, 1, 0, 0, 0), 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).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) { try { pageNum = 1; pageSize = 5000; return type switch { // 首检 1 => DoFirstExcel(starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize), // 抛光 2 => DoSecondExcel(starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize), // 包装 3 => DoThirdExcel(starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize), // 总表 4 => DoTotalExcel(starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize), _ => 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) { List list = GetQualityStatisticsTable_first(starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize).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) { List list = GetQualityStatisticsTable_again(starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize).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) { List list = GetQualityStatisticsTable_final(starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize).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) { List list = GetQualityStatisticsTable_total(starttime, endTime, workorderid, partnumber, product_description, team, pageNum, pageSize).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 "获取描述异常!"; } } } }