schangxiang@126.com
2024-06-16 0f89dfa00bb223dc0db4960bda4c8fe5d0b762a8
iWara.SCADA.Code/iWare.Wms.Application/Service/QualityDataInfo/QualityDataInfoService.cs
@@ -26,7 +26,7 @@
    [Route("api/[Controller]")]
    public class QualityDataInfoService : IQualityDataInfoService, IDynamicApiController, ITransient
    {
        private readonly IRepository<QualityDataInfo,MasterDbContextLocator> _qualityDataInfoRep;
        private readonly IRepository<QualityDataInfo, MasterDbContextLocator> _qualityDataInfoRep;
        private readonly IRepository<EquipmentBaseInfo, MasterDbContextLocator> _equipmentBaseInfoRep;
        private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep;
        private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep;
@@ -40,7 +40,7 @@
        /// <param name="sysDictTypeRep"></param>
        /// <param name="sysDictDataRep"></param>
        public QualityDataInfoService(
            IRepository<QualityDataInfo,MasterDbContextLocator> qualityDataInfoRep,
            IRepository<QualityDataInfo, MasterDbContextLocator> qualityDataInfoRep,
            IRepository<EquipmentBaseInfo, MasterDbContextLocator> equipmentBaseInfoRep,
            IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep,
            IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep,
@@ -62,9 +62,9 @@
        public async Task<AddQualityDataInfoInputV2> GetQualityInfoSPCForID([FromQuery] QualityDataInfoSearch2 input)
        {
            var interfaceLog = _accessInterfaceLogRep.DetachedEntities.Where(o => o.Id == input.QualityDataInfoID).FirstOrDefault();
            if(interfaceLog==null|| interfaceLog.Id<1)
            if (interfaceLog == null || interfaceLog.Id < 1)
            {//没有查询到
                throw Oops.Oh($"当前工件{input.WorkPieceID??""}没有SPC反馈信息!");
                throw Oops.Oh($"当前工件{input.WorkPieceID ?? ""}没有SPC反馈信息!");
            }
            var output = JsonConvert.DeserializeObject<AddQualityDataInfoInputV2>(interfaceLog.ParaJSON);
            return output;
@@ -76,9 +76,9 @@
        /// <returns></returns>
        [HttpGet("GetQualityInfoForID")]
        public async Task<QualityDataInfoOutput> GetQualityInfoForID([FromQuery] QualityDataInfoSearch2 input)
        {
        {
            QualityDataInfoOutput qualityDataInfo = new QualityDataInfoOutput();
            if(input==null|| string.IsNullOrEmpty(input.OperationType))
            if (input == null || string.IsNullOrEmpty(input.OperationType))
            {
                throw Oops.Oh("传参异常!");
            }
@@ -137,13 +137,31 @@
                   QualityOP80To8 = m.a.QualityOP80To8,
                   QualityOP80To9 = m.a.QualityOP80To9,
                   QualityOP80To10 = m.a.QualityOP80To10,
                   //新增OP80的一些质量数据 【Editby shaocx,2024 - 06 - 13】
                   QualityOP80_Houdu = m.a.QualityOP80_Houdu,
                   QualityOP80_ZXJ = m.a.QualityOP80_ZXJ,
                   QualityOP80_DTKYZD = m.a.QualityOP80_DTKYZD,
                   QualityOP80_XTSMYD = m.a.QualityOP80_XTSMYD,
                   QualityOP80_XTXMYD = m.a.QualityOP80_XTXMYD,
                   QualityOP80_D_TKZJ = m.a.QualityOP80_D_TKZJ,
                   QualityOP80_D_S_X = m.a.QualityOP80_D_S_X,
                   QualityOP80_D_S_Y = m.a.QualityOP80_D_S_Y,
                   QualityOP80_D_X_X = m.a.QualityOP80_D_X_X,
                   QualityOP80_D_X_Y = m.a.QualityOP80_D_X_Y,
                   QualityOP80_X_TKZJ = m.a.QualityOP80_X_TKZJ,
                   QualityOP80_X_S_X = m.a.QualityOP80_X_S_X,
                   QualityOP80_X_S_Y = m.a.QualityOP80_X_S_Y,
                   QualityOP80_X_X_X = m.a.QualityOP80_X_X_X,
                   QualityOP80_X_X_Y = m.a.QualityOP80_X_X_Y,
                   Remarks = m.a.Remarks,
               })
               //.OrderBy(PageInputOrder.OrderBuilder<QualityDataInfoSearch>(input))
               .ProjectToType<QualityDataInfoOutput>()
               .FirstOrDefaultAsync();
            }
            return qualityDataInfo;
        }
@@ -155,7 +173,7 @@
        [HttpGet("page")]
        public async Task<PageResult<QualityDataInfoOutput>> Page([FromQuery] QualityDataInfoSearch input)
        {
            if(!input.StartTime.HasValue|| !input.EndTime.HasValue||input.StartTime>input.EndTime)
            if (!input.StartTime.HasValue || !input.EndTime.HasValue || input.StartTime > input.EndTime)
            {
                throw Oops.Oh("传参异常:日期范围必须传值!");
            }
@@ -170,107 +188,6 @@
            //}
            var qualityDataInfos = await _qualityDataInfoRep.DetachedEntities
                .Join(_equipmentBaseInfoRep.DetachedEntities, a => a.EquipmentID, b => b.EquipmentId, (a, b) => new { a, b })
                //.Where(o => o.a.CreatedTime.Value.Date >= input.StartTime.Value)
                //.Where(o => o.a.UpdatedTime.Value.Date <= input.EndTime.Value)
               .Where(!string.IsNullOrEmpty(input.WorkPieceID), w => w.a.WorkPieceID.Contains(input.WorkPieceID))
               .Where(input.EquipmentID.Equals("EOP10") && string.IsNullOrEmpty(input.WorkingProcedure), o => (o.a.OP10QualityReceiveTime.Value.Date >= input.StartTime.Value
               && o.a.OP10QualityReceiveTime.Value.Date <= input.EndTime.Value&&o.a.OP10QualityState==(input.QualityState.HasValue?input.QualityState.ToString():o.a.OP10QualityState)) || (o.a.OP40QualityReceiveTime.Value.Date >= input.StartTime.Value && o.a.OP40QualityReceiveTime.Value.Date <= input.EndTime.Value && o.a.OP40QualityState == (input.QualityState.HasValue ? input.QualityState.ToString() : o.a.OP40QualityState)))
               .Where(input.EquipmentID.Equals("EOP10") && !string.IsNullOrEmpty(input.WorkingProcedure) && input.WorkingProcedure.Equals("OP10"), o => (o.a.OP10QualityReceiveTime.Value.Date >= input.StartTime.Value && o.a.OP10QualityReceiveTime.Value.Date <= input.EndTime.Value && o.a.OP10QualityState == (input.QualityState.HasValue ? input.QualityState.ToString() : o.a.OP10QualityState)))
               .Where(input.EquipmentID.Equals("EOP10") && !string.IsNullOrEmpty(input.WorkingProcedure) && input.WorkingProcedure.Equals("OP40"), o => (o.a.OP40QualityReceiveTime.Value.Date >= input.StartTime.Value && o.a.OP40QualityReceiveTime.Value.Date <= input.EndTime.Value && o.a.OP40QualityState == (input.QualityState.HasValue ? input.QualityState.ToString() : o.a.OP40QualityState)))
               .Where(input.EquipmentID.Equals("EOP20"), o => o.a.OP20QualityReceiveTime.Value.Date >= input.StartTime.Value && o.a.OP20QualityReceiveTime.Value.Date <= input.EndTime.Value && o.a.OP20QualityState == (input.QualityState.HasValue ? input.QualityState.ToString() : o.a.OP20QualityState))
               .Where(input.EquipmentID.Equals("EOP30"), o => o.a.OP30QualityReceiveTime.Value.Date >= input.StartTime.Value && o.a.OP30QualityReceiveTime.Value.Date <= input.EndTime.Value && o.a.OP30QualityState == (input.QualityState.HasValue ? input.QualityState.ToString() : o.a.OP30QualityState))
               .Where(input.EquipmentID.Equals("EOP35"), o => o.a.OP35QualityReceiveTime.Value.Date >= input.StartTime.Value && o.a.OP35QualityReceiveTime.Value.Date <= input.EndTime.Value && o.a.OP35QualityState == (input.QualityState.HasValue ? input.QualityState.ToString() : o.a.OP35QualityState))
               .Where(input.EquipmentID.Equals("EOP60"), o => o.a.OP60QualityReceiveTime.Value.Date >= input.StartTime.Value && o.a.OP60QualityReceiveTime.Value.Date <= input.EndTime.Value && o.a.OP60QualityState == (input.QualityState.HasValue ? input.QualityState.ToString() : o.a.OP60QualityState))
               .Where(input.EquipmentID.Equals("EOP80"), o => o.a.OP80QualityReceiveTime.Value.Date >= input.StartTime.Value && o.a.OP80QualityReceiveTime.Value.Date <= input.EndTime.Value && o.a.OP80QualityState == (input.QualityState.HasValue ? input.QualityState.ToString() : o.a.OP80QualityState))
               .Where(o => !string.IsNullOrEmpty(o.a.WorkPieceID))
               .Select(m => new QualityDataInfoOutput
               {
                   Id = m.a.Id,
                   WorkPieceID = m.a.WorkPieceID,
                   EquipmentID = input.EquipmentID,
                   //EquipmentName = m.b.EquipmentName,
                   WorkingProcedure = input.WorkingProcedure,
                   QualityState = m.a.QualityState,
                   //QualityStateName = m.a.f.f.Value,
                   QualityStateUpdateMode = m.a.QualityStateUpdateMode,
                   QualityStateUpdateUser = m.a.QualityStateUpdateUser,
                   QualityReceiveTime = m.a.QualityReceiveTime,
                   OfflineTime = m.a.OfflineTime,
                   QualityOP10To1 = m.a.QualityOP10To1,
                   QualityOP40To1 = m.a.QualityOP40To1,
                   QualityOP20To1 = m.a.QualityOP20To1,
                   QualityOP30To1 = m.a.QualityOP30To1,
                   QualityOP30To2 = m.a.QualityOP30To2,
                   QualityOP30To3 = m.a.QualityOP30To3,
                   QualityOP30To4 = m.a.QualityOP30To4,
                   QualityOP30To5 = m.a.QualityOP30To5,
                   QualityOP30To6 = m.a.QualityOP30To6,
                   QualityOP30To7 = m.a.QualityOP30To7,
                   QualityOP30To8 = m.a.QualityOP30To8,
                   QualityOP30To9 = m.a.QualityOP30To9,
                   QualityOP30To10 = m.a.QualityOP30To10,
                   QualityOP30To11 = m.a.QualityOP30To11,
                   QualityOP35To1 = m.a.QualityOP35To1,
                   QualityOP35To2 = m.a.QualityOP35To2,
                   QualityOP60To1 = m.a.QualityOP60To1,
                   QualityOP60To2 = m.a.QualityOP60To2,
                   QualityOP70To1 = m.a.QualityOP70To1,
                   QualityOP70To2 = m.a.QualityOP70To2,
                   QualityOP70To3 = m.a.QualityOP70To3,
                   QualityOP80To1 = m.a.QualityOP80To1,
                   QualityOP80To2 = m.a.QualityOP80To2,
                   QualityOP80To3 = m.a.QualityOP80To3,
                   QualityOP80To4 = m.a.QualityOP80To4,
                   QualityOP80To5 = m.a.QualityOP80To5,
                   QualityOP80To6 = m.a.QualityOP80To6,
                   QualityOP80To7 = m.a.QualityOP80To7,
                   QualityOP80To8 = m.a.QualityOP80To8,
                   QualityOP80To9 = m.a.QualityOP80To9,
                   QualityOP80To10 = m.a.QualityOP80To10,
                   OP10QualityReceiveTime = m.a.OP10QualityReceiveTime,
                   OP20QualityReceiveTime = m.a.OP20QualityReceiveTime,
                   OP30QualityReceiveTime = m.a.OP30QualityReceiveTime,
                   OP35QualityReceiveTime = m.a.OP35QualityReceiveTime,
                   OP40QualityReceiveTime=  m.a.OP40QualityReceiveTime,
                   OP60QualityReceiveTime = m.a.OP60QualityReceiveTime,
                   OP80QualityReceiveTime = m.a.OP80QualityReceiveTime,
                   OP10QualityState = m.a.OP10QualityState,
                   OP20QualityState = m.a.OP20QualityState,
                   OP30QualityState = m.a.OP30QualityState,
                   OP40QualityState = m.a.OP40QualityState,
                   OP35QualityState = m.a.OP35QualityState,
                   OP60QualityState = m.a.OP60QualityState,
                   OP80QualityState = m.a.OP80QualityState,
                   Remarks = m.a.Remarks,
                   UpdateTime = m.a.UpdatedTime,
               })
            .ProjectToType<QualityDataInfoOutput>()
               .OrderByDescending(o => o.UpdateTime)
            .ToADPagedListAsync(input.PageNo, input.PageSize);
            return qualityDataInfos;
        }
        /// <summary>
        /// 根据质量数据导出Excel
        /// </summary>
        /// <param name="input">质量数据传入信息</param>
        /// <returns>导出的Excel文件</returns>
        [HttpGet("toExcel")]
        public async Task<IActionResult> ToExcelAsync([FromQuery] QualityDataInfoSearch input)
        {
            if (!input.StartTime.HasValue || !input.EndTime.HasValue || input.StartTime > input.EndTime)
            {
                throw Oops.Oh("传参异常:日期范围必须传值!");
            }
            if (string.IsNullOrEmpty(input.EquipmentID))
            {
                throw Oops.Oh("传参异常:设备编号必须传参!");
            }
            var qualityDataInfos = await _qualityDataInfoRep.DetachedEntities
                .Join(_equipmentBaseInfoRep.DetachedEntities, a => a.EquipmentID, b => b.EquipmentId, (a, b) => new { a, b })
               //.Where(o => o.a.CreatedTime.Value.Date >= input.StartTime.Value)
               //.Where(o => o.a.UpdatedTime.Value.Date <= input.EndTime.Value)
               .Where(!string.IsNullOrEmpty(input.WorkPieceID), w => w.a.WorkPieceID.Contains(input.WorkPieceID))
@@ -283,7 +200,7 @@
               .Where(input.EquipmentID.Equals("EOP35"), o => o.a.OP35QualityReceiveTime.Value.Date >= input.StartTime.Value && o.a.OP35QualityReceiveTime.Value.Date <= input.EndTime.Value && o.a.OP35QualityState == (input.QualityState.HasValue ? input.QualityState.ToString() : o.a.OP35QualityState))
               .Where(input.EquipmentID.Equals("EOP60"), o => o.a.OP60QualityReceiveTime.Value.Date >= input.StartTime.Value && o.a.OP60QualityReceiveTime.Value.Date <= input.EndTime.Value && o.a.OP60QualityState == (input.QualityState.HasValue ? input.QualityState.ToString() : o.a.OP60QualityState))
               .Where(input.EquipmentID.Equals("EOP80"), o => o.a.OP80QualityReceiveTime.Value.Date >= input.StartTime.Value && o.a.OP80QualityReceiveTime.Value.Date <= input.EndTime.Value && o.a.OP80QualityState == (input.QualityState.HasValue ? input.QualityState.ToString() : o.a.OP80QualityState))
               .Where(o=>!string.IsNullOrEmpty(o.a.WorkPieceID))
               .Where(o => !string.IsNullOrEmpty(o.a.WorkPieceID))
               .Select(m => new QualityDataInfoOutput
               {
                   Id = m.a.Id,
@@ -342,6 +259,148 @@
                   OP35QualityState = m.a.OP35QualityState,
                   OP60QualityState = m.a.OP60QualityState,
                   OP80QualityState = m.a.OP80QualityState,
                   OP30QualityStateCH3 = m.a.OP30QualityStateCH3,
                   OP30QualityStateCH4 = m.a.OP30QualityStateCH4,
                   OP30QualityStateCH5 = m.a.OP30QualityStateCH5,
                   OP30QualityStateCH6 = m.a.OP30QualityStateCH6,
                   //新增OP80的一些质量数据 【Editby shaocx,2024 - 06 - 13】
                   QualityOP80_Houdu = m.a.QualityOP80_Houdu,
                   QualityOP80_ZXJ = m.a.QualityOP80_ZXJ,
                   QualityOP80_DTKYZD = m.a.QualityOP80_DTKYZD,
                   QualityOP80_XTSMYD = m.a.QualityOP80_XTSMYD,
                   QualityOP80_XTXMYD = m.a.QualityOP80_XTXMYD,
                   QualityOP80_D_TKZJ = m.a.QualityOP80_D_TKZJ,
                   QualityOP80_D_S_X = m.a.QualityOP80_D_S_X,
                   QualityOP80_D_S_Y = m.a.QualityOP80_D_S_Y,
                   QualityOP80_D_X_X = m.a.QualityOP80_D_X_X,
                   QualityOP80_D_X_Y = m.a.QualityOP80_D_X_Y,
                   QualityOP80_X_TKZJ = m.a.QualityOP80_X_TKZJ,
                   QualityOP80_X_S_X = m.a.QualityOP80_X_S_X,
                   QualityOP80_X_S_Y = m.a.QualityOP80_X_S_Y,
                   QualityOP80_X_X_X = m.a.QualityOP80_X_X_X,
                   QualityOP80_X_X_Y = m.a.QualityOP80_X_X_Y,
                   Remarks = m.a.Remarks,
                   UpdateTime = m.a.UpdatedTime,
               })
            .ProjectToType<QualityDataInfoOutput>()
               .OrderByDescending(o => o.UpdateTime)
            .ToADPagedListAsync(input.PageNo, input.PageSize);
            return qualityDataInfos;
        }
        /// <summary>
        /// 根据质量数据导出Excel
        /// </summary>
        /// <param name="input">质量数据传入信息</param>
        /// <returns>导出的Excel文件</returns>
        [HttpGet("toExcel")]
        public async Task<IActionResult> ToExcelAsync([FromQuery] QualityDataInfoSearch input)
        {
            if (!input.StartTime.HasValue || !input.EndTime.HasValue || input.StartTime > input.EndTime)
            {
                throw Oops.Oh("传参异常:日期范围必须传值!");
            }
            if (string.IsNullOrEmpty(input.EquipmentID))
            {
                throw Oops.Oh("传参异常:设备编号必须传参!");
            }
            var qualityDataInfos = await _qualityDataInfoRep.DetachedEntities
                .Join(_equipmentBaseInfoRep.DetachedEntities, a => a.EquipmentID, b => b.EquipmentId, (a, b) => new { a, b })
               //.Where(o => o.a.CreatedTime.Value.Date >= input.StartTime.Value)
               //.Where(o => o.a.UpdatedTime.Value.Date <= input.EndTime.Value)
               .Where(!string.IsNullOrEmpty(input.WorkPieceID), w => w.a.WorkPieceID.Contains(input.WorkPieceID))
               .Where(input.EquipmentID.Equals("EOP10") && string.IsNullOrEmpty(input.WorkingProcedure), o => (o.a.OP10QualityReceiveTime.Value.Date >= input.StartTime.Value
               && o.a.OP10QualityReceiveTime.Value.Date <= input.EndTime.Value && o.a.OP10QualityState == (input.QualityState.HasValue ? input.QualityState.ToString() : o.a.OP10QualityState)) || (o.a.OP40QualityReceiveTime.Value.Date >= input.StartTime.Value && o.a.OP40QualityReceiveTime.Value.Date <= input.EndTime.Value && o.a.OP40QualityState == (input.QualityState.HasValue ? input.QualityState.ToString() : o.a.OP40QualityState)))
               .Where(input.EquipmentID.Equals("EOP10") && !string.IsNullOrEmpty(input.WorkingProcedure) && input.WorkingProcedure.Equals("OP10"), o => (o.a.OP10QualityReceiveTime.Value.Date >= input.StartTime.Value && o.a.OP10QualityReceiveTime.Value.Date <= input.EndTime.Value && o.a.OP10QualityState == (input.QualityState.HasValue ? input.QualityState.ToString() : o.a.OP10QualityState)))
               .Where(input.EquipmentID.Equals("EOP10") && !string.IsNullOrEmpty(input.WorkingProcedure) && input.WorkingProcedure.Equals("OP40"), o => (o.a.OP40QualityReceiveTime.Value.Date >= input.StartTime.Value && o.a.OP40QualityReceiveTime.Value.Date <= input.EndTime.Value && o.a.OP40QualityState == (input.QualityState.HasValue ? input.QualityState.ToString() : o.a.OP40QualityState)))
               .Where(input.EquipmentID.Equals("EOP20"), o => o.a.OP20QualityReceiveTime.Value.Date >= input.StartTime.Value && o.a.OP20QualityReceiveTime.Value.Date <= input.EndTime.Value && o.a.OP20QualityState == (input.QualityState.HasValue ? input.QualityState.ToString() : o.a.OP20QualityState))
               .Where(input.EquipmentID.Equals("EOP30"), o => o.a.OP30QualityReceiveTime.Value.Date >= input.StartTime.Value && o.a.OP30QualityReceiveTime.Value.Date <= input.EndTime.Value && o.a.OP30QualityState == (input.QualityState.HasValue ? input.QualityState.ToString() : o.a.OP30QualityState))
               .Where(input.EquipmentID.Equals("EOP35"), o => o.a.OP35QualityReceiveTime.Value.Date >= input.StartTime.Value && o.a.OP35QualityReceiveTime.Value.Date <= input.EndTime.Value && o.a.OP35QualityState == (input.QualityState.HasValue ? input.QualityState.ToString() : o.a.OP35QualityState))
               .Where(input.EquipmentID.Equals("EOP60"), o => o.a.OP60QualityReceiveTime.Value.Date >= input.StartTime.Value && o.a.OP60QualityReceiveTime.Value.Date <= input.EndTime.Value && o.a.OP60QualityState == (input.QualityState.HasValue ? input.QualityState.ToString() : o.a.OP60QualityState))
               .Where(input.EquipmentID.Equals("EOP80"), o => o.a.OP80QualityReceiveTime.Value.Date >= input.StartTime.Value && o.a.OP80QualityReceiveTime.Value.Date <= input.EndTime.Value && o.a.OP80QualityState == (input.QualityState.HasValue ? input.QualityState.ToString() : o.a.OP80QualityState))
               .Where(o => !string.IsNullOrEmpty(o.a.WorkPieceID))
               .Select(m => new QualityDataInfoOutput
               {
                   Id = m.a.Id,
                   WorkPieceID = m.a.WorkPieceID,
                   EquipmentID = input.EquipmentID,
                   //EquipmentName = m.b.EquipmentName,
                   WorkingProcedure = input.WorkingProcedure,
                   QualityState = m.a.QualityState,
                   //QualityStateName = m.a.f.f.Value,
                   QualityStateUpdateMode = m.a.QualityStateUpdateMode,
                   QualityStateUpdateUser = m.a.QualityStateUpdateUser,
                   QualityReceiveTime = m.a.QualityReceiveTime,
                   OfflineTime = m.a.OfflineTime,
                   QualityOP10To1 = m.a.QualityOP10To1,
                   QualityOP40To1 = m.a.QualityOP40To1,
                   QualityOP20To1 = m.a.QualityOP20To1,
                   QualityOP30To1 = m.a.QualityOP30To1,
                   QualityOP30To2 = m.a.QualityOP30To2,
                   QualityOP30To3 = m.a.QualityOP30To3,
                   QualityOP30To4 = m.a.QualityOP30To4,
                   QualityOP30To5 = m.a.QualityOP30To5,
                   QualityOP30To6 = m.a.QualityOP30To6,
                   QualityOP30To7 = m.a.QualityOP30To7,
                   QualityOP30To8 = m.a.QualityOP30To8,
                   QualityOP30To9 = m.a.QualityOP30To9,
                   QualityOP30To10 = m.a.QualityOP30To10,
                   QualityOP30To11 = m.a.QualityOP30To11,
                   QualityOP35To1 = m.a.QualityOP35To1,
                   QualityOP35To2 = m.a.QualityOP35To2,
                   QualityOP60To1 = m.a.QualityOP60To1,
                   QualityOP60To2 = m.a.QualityOP60To2,
                   QualityOP70To1 = m.a.QualityOP70To1,
                   QualityOP70To2 = m.a.QualityOP70To2,
                   QualityOP70To3 = m.a.QualityOP70To3,
                   QualityOP80To1 = m.a.QualityOP80To1,
                   QualityOP80To2 = m.a.QualityOP80To2,
                   QualityOP80To3 = m.a.QualityOP80To3,
                   QualityOP80To4 = m.a.QualityOP80To4,
                   QualityOP80To5 = m.a.QualityOP80To5,
                   QualityOP80To6 = m.a.QualityOP80To6,
                   QualityOP80To7 = m.a.QualityOP80To7,
                   QualityOP80To8 = m.a.QualityOP80To8,
                   QualityOP80To9 = m.a.QualityOP80To9,
                   QualityOP80To10 = m.a.QualityOP80To10,
                   OP10QualityReceiveTime = m.a.OP10QualityReceiveTime,
                   OP20QualityReceiveTime = m.a.OP20QualityReceiveTime,
                   OP30QualityReceiveTime = m.a.OP30QualityReceiveTime,
                   OP35QualityReceiveTime = m.a.OP35QualityReceiveTime,
                   OP40QualityReceiveTime = m.a.OP40QualityReceiveTime,
                   OP60QualityReceiveTime = m.a.OP60QualityReceiveTime,
                   OP80QualityReceiveTime = m.a.OP80QualityReceiveTime,
                   OP10QualityState = m.a.OP10QualityState,
                   OP20QualityState = m.a.OP20QualityState,
                   OP30QualityState = m.a.OP30QualityState,
                   OP40QualityState = m.a.OP40QualityState,
                   OP35QualityState = m.a.OP35QualityState,
                   OP60QualityState = m.a.OP60QualityState,
                   OP80QualityState = m.a.OP80QualityState,
                   //新增OP80的一些质量数据 【Editby shaocx,2024 - 06 - 13】
                   QualityOP80_Houdu = m.a.QualityOP80_Houdu,
                   QualityOP80_ZXJ = m.a.QualityOP80_ZXJ,
                   QualityOP80_DTKYZD = m.a.QualityOP80_DTKYZD,
                   QualityOP80_XTSMYD = m.a.QualityOP80_XTSMYD,
                   QualityOP80_XTXMYD = m.a.QualityOP80_XTXMYD,
                   QualityOP80_D_TKZJ = m.a.QualityOP80_D_TKZJ,
                   QualityOP80_D_S_X = m.a.QualityOP80_D_S_X,
                   QualityOP80_D_S_Y = m.a.QualityOP80_D_S_Y,
                   QualityOP80_D_X_X = m.a.QualityOP80_D_X_X,
                   QualityOP80_D_X_Y = m.a.QualityOP80_D_X_Y,
                   QualityOP80_X_TKZJ = m.a.QualityOP80_X_TKZJ,
                   QualityOP80_X_S_X = m.a.QualityOP80_X_S_X,
                   QualityOP80_X_S_Y = m.a.QualityOP80_X_S_Y,
                   QualityOP80_X_X_X = m.a.QualityOP80_X_X_X,
                   QualityOP80_X_X_Y = m.a.QualityOP80_X_X_Y,
                   Remarks = m.a.Remarks,
                   UpdateTime = m.a.UpdatedTime,
               })
@@ -407,6 +466,6 @@
            var fileName = HttpUtility.UrlEncode($"{sheetName}[{DateTimeOffset.Now:yyyy-MM-dd}].xlsx", Encoding.GetEncoding("UTF-8"));
            return new FileStreamResult(ms, "application/octet-stream") { FileDownloadName = fileName };
        }
    }
}