using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using AMESCoreStudio.WebApi;
using AMESCoreStudio.WebApi.Models.SYS;
using AMESCoreStudio.WebApi.Models.AMES;
using AMESCoreStudio.WebApi.Models.BAS;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Query.SqlExpressions;
using System.Reflection;

namespace AMESCoreStudio.WebApi
{
	/// <summary>
	/// 
	/// </summary>
	public class AMESContext : DbContext
	{
		/// <summary>
		/// 
		/// </summary>
		/// <param name="options"></param>
		public AMESContext(DbContextOptions<AMESContext> options)
			: base(options)
		{
			//Configuration.ProxyCreationEnabled = false;
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="datePartArg"></param>
		/// <param name="date"></param>
		/// <returns></returns>
		public int? DatePart(string datePartArg, DateTimeOffset? date) => throw new InvalidOperationException($"{nameof(DatePart)} cannot be called client side.");


		/// <summary>
		/// 
		/// </summary>
		/// <param name="modelBuilder"></param>
		protected override void OnModelCreating(ModelBuilder modelBuilder)
		{
			var methodInfo = typeof(DbFunctionExtensions).GetMethod(nameof(DatePart));

			var datePartMethodInfo = typeof(AMESContext)
				.GetRuntimeMethod(nameof(AMESContext.DatePart), new[] { typeof(string), typeof(DateTimeOffset) });
			modelBuilder.HasDbFunction(datePartMethodInfo)
			   .HasTranslation(args =>
						new SqlFunctionExpression("DatePart",
							new[]
							{
							new SqlFragmentExpression((args.ToArray()[0] as SqlConstantExpression).Value.ToString()),
							args.ToArray()[1]
							},
							true,
							new[] { false, false },
							typeof(int?),
							null
						)
					);

			/*
			modelBuilder.Entity<RoleModule>()
				.HasOne(m => m.Module);
			*/

			modelBuilder.Entity<Rules>().HasKey(c => new { c.RuleID });
			modelBuilder.Entity<WipBarcode>().HasKey(c => new { c.WipNO, c.StartNO, c.EndNO });
			modelBuilder.Entity<WipLog>().HasKey(c => new { c.WipID, c.CreateDate });
			modelBuilder.Entity<PartMap>().HasKey(c => new { c.CorpSN });
			modelBuilder.Entity<BarcodeWip>().HasKey(c => new { c.WipID, c.BarcodeID });
			modelBuilder.Entity<BarcodeStation>().HasKey(c => new { c.BarcodeID ,c.WipID, c.StationID ,c.RuleStatus ,c.InputDate,c.FlowRuleID });

			modelBuilder.Entity<WipRule>().HasKey(c => new { c.WipNO, c.StationID, c.KeyNo });
			modelBuilder.Entity<WipMAC>().HasKey(c => new { c.WipNO, c.StartNO, c.EndNO });
			modelBuilder.Entity<WipInfoBlob>().HasKey(c => new { c.WipBlobID, c.WipNo });
			modelBuilder.Entity<BarcodeItem>().HasOne(r => r.B).WithMany().HasForeignKey(r => r.BarcodeID).IsRequired();
			modelBuilder.Entity<BarcodeItem>().HasOne(r => r.I).WithMany().HasForeignKey(r => r.ItemNo).IsRequired();
			modelBuilder.Entity<BarcodeItem>().HasOne(r => r.S).WithMany().HasForeignKey(r => r.StationID).IsRequired();
			modelBuilder.Entity<WorkClass>().HasOne(r => r.Group).WithMany().HasForeignKey(r => r.GroupID).IsRequired();
			modelBuilder.Entity<ListObj>().HasKey(c => new { c.value, c.name });

			modelBuilder.Entity<CycleTime>().HasKey(c => new { c.ItemNo, c.LineID });
			modelBuilder.Entity<CycleTime>().HasOne(r => r.Unit).WithMany().HasForeignKey(r => r.SectionNo).IsRequired();
			modelBuilder.Entity<CycleTime>().HasOne(r => r.Line).WithMany().HasForeignKey(r => r.LineID).IsRequired();

			modelBuilder.Entity<AMESCoreStudio.WebApi.Models.BAS.ClassInfo>().HasOne(r => r.Unit).WithMany().HasForeignKey(r => r.UnitNo).IsRequired();
			modelBuilder.Entity<AMESCoreStudio.WebApi.Models.BAS.LineInfo>().HasOne(r => r.Unit).WithMany().HasForeignKey(r => r.UnitNo).IsRequired();
			modelBuilder.Entity<AMESCoreStudio.WebApi.Models.BAS.LineInfo>().HasOne(r => r.Dept).WithMany().HasForeignKey(r => r.DeptID).IsRequired();
			modelBuilder.Entity<AMESCoreStudio.WebApi.Models.BAS.Stations>().HasOne(r => r.Unit).WithMany().HasForeignKey(r => r.UnitNo).IsRequired();

			modelBuilder.Entity<MACInfo>().HasKey(c => new { c.Class, c.ClassGroup });

			modelBuilder.Entity<RoleModule>().HasOne(r => r.Module).WithMany().HasForeignKey(r => r.ModuleID).IsRequired();

			modelBuilder.Entity<StandardWorkTime>().HasOne(r => r.Stations).WithMany().HasForeignKey(r => r.StationID).IsRequired();
			modelBuilder.Entity<StandardWorkTime>().HasOne(r => r.LineInfo).WithMany().HasForeignKey(r => r.LineID).IsRequired();

			modelBuilder.Entity<UserInfo>().HasKey(c => new { c.UserNo});
			modelBuilder.Entity<WorkManPower>().HasOne(r => r.U).WithMany().HasForeignKey(r => r.UserNo).IsRequired();
			//modelBuilder.Entity<WorkManPower>().HasOne(r => r.DeptInfo).WithMany().HasForeignKey(r => r.UserNo).IsRequired();

			// modelBuilder.Entity<MaterialFlow>().HasKey(c => new { c.ItemID,c.FlowRuleID,c.UnitNo});
			// modelBuilder.Entity<MaterialFlow>().HasKey(c => new { c.ItemID, c.FlowSEQ, c.UnitNo });
			//modelBuilder.Entity<MaterialFlow>().HasKey(c => new { c.ItemID });
			modelBuilder.Entity<MaterialFlow>().HasOne(r => r.MaterialItem).WithMany().HasForeignKey(r => r.ItemID).IsRequired();
			modelBuilder.Entity<MaterialFlow>().HasOne(r => r.FlowRule).WithMany().HasForeignKey(r => r.FlowRuleID).IsRequired();
			modelBuilder.Entity<RuninTime>().HasKey(c => new { c.ItemNo });

			//modelBuilder.Entity<BarcodeWip>().HasKey(c => new { c.WipID, c.BarcodeID });
			modelBuilder.Entity<BarcodeGroup>().HasKey(c => new { c.GroupID, c.BarcodeID });

			modelBuilder.Entity<FqcInhouseMaster>().HasKey(c => new { c.InhouseNo, c.SeqID });
			modelBuilder.Entity<FqcInhouseDetail>().HasKey(c => new { c.InhouseNo, c.SeqID , c.SerialNo });
			modelBuilder.Entity<FqcResultDetail>().HasKey(c => new { c.FqcID, c.BoxNo ,c.BarcodeNo });
			modelBuilder.Entity<FqcBarcode>().HasKey(c => new { c.FqcID, c.BarcodeID });
			modelBuilder.Entity<FqcItem>().HasKey(c => new { c.FqcID, c.ItemID });
			modelBuilder.Entity<FqcResultMasterBlob>().HasKey(e => new { e.FqcID, e.CreateDate });
			modelBuilder.Entity<NgInfo>().HasOne(r => r.Barcode).WithMany().HasForeignKey(r => r.BarcodeID).IsRequired();
			modelBuilder.Entity<NgInfo>().HasOne(r => r.Wip).WithMany().HasForeignKey(r => r.WipId).IsRequired();
			modelBuilder.Entity<NgInfo>().HasOne(r => r.Station).WithMany().HasForeignKey(r => r.StationId).IsRequired();
			//modelBuilder.Entity<NgInfo>().HasOne(r => r.User).WithMany().HasForeignKey(r => r.OperatorID).IsRequired();

			modelBuilder.Entity<WipStation>().HasKey(c => new { c.WipID, c.StationID, c.RuleStatus, c.CreateDate});
			modelBuilder.Entity<WipClass>().HasKey(c => new { c.WipID, c.StationID, c.RuleStatus, c.ClassID, c.CreateDate });
			modelBuilder.Entity<WipTime>().HasKey(c => new { c.WipID, c.StationID, c.RuleStatus, c.SegmentID, c.CreateDate });

			//Yiru add  ---------------------------------------------------------------------------------------------------------------------------
			modelBuilder.Entity<WareHouseing>().HasKey(c => new { c.InhouseNo, c.SeqID, c.SerialNo });
			modelBuilder.Entity<OutfitFactoryInfo>().HasKey(c => new { c.OutfitFactoryID });
			modelBuilder.Entity<OutfitInfoBlob>().HasKey(c => new { c.OutfitID });
			modelBuilder.Entity<RLabelReprint>().HasKey(c => new { c.SerialNumber,c.ReprintTime});
			modelBuilder.Entity<CZmomaterialList>().HasNoKey();
			modelBuilder.Entity<SerialRuleDetail>().HasKey(c => new { c.SerialRuleDetailID });
			modelBuilder.Entity<ExceptionWorktimeBlob>().HasKey(c => new { c.ExceptionWorktimeID, c.CreateDate });
			modelBuilder.Entity<PlmBom>().HasNoKey();
			//Yiru End  ---------------------------------------------------------------------------------------------------------------------------


			modelBuilder.Entity<InspectionResultBlob>().HasKey(c => new { c.InspectionItemID, c.InspectionID,c.CreateDate });

			modelBuilder.Entity<InspectionResultDetail>().HasKey(c => new { c.InspectionItemID, c.InspectionID });


			modelBuilder.Entity<InspectionResultDetail>().HasOne(r => r.Stations).WithMany().HasForeignKey(r => r.RuleStationID).IsRequired();
			modelBuilder.Entity<InspectionResultDetail>().HasOne(r => r.LineInfo).WithMany().HasForeignKey(r => r.LineID).IsRequired();
			//modelBuilder.Entity<InspectionResultDetail>().HasOne(r => r.FactoryUnit).WithMany().HasForeignKey(r => r.MissingUnitNo).IsRequired();
			//modelBuilder.Entity<InspectionResultDetail>().HasOne(r => r.User).WithMany().HasForeignKey(r => r.MissingUserID).IsRequired();
			modelBuilder.Entity<InspectionResultDetail>().HasOne(r => r.InspectionItem).WithMany().HasForeignKey(r => r.InspectionItemID).IsRequired();
			modelBuilder.Entity<InspectionForm>().HasOne(r => r.FactoryUnit).WithMany().HasForeignKey(r => r.UnitNo).IsRequired();

			modelBuilder.Entity<SNKeyPart>().HasKey(c => new { c.StockInNo, c.KPItem });
			modelBuilder.Entity<NGReason>().HasKey(c => new { c.NGClassNo, c.NGReasonNo });
			modelBuilder.Entity<QcRate>().HasKey(c => new { c.Yrer, c.Month, c.QcRateType, c.ProductType });

            modelBuilder.Entity<SolderPasteRecord>().HasKey(c => new { c.SolderPasteID, c.Status});
        }

		/// <summary>
		/// 
		/// </summary>
		public DbSet<IDKey> IDKeys { get; set; }

		/// <summary>
		/// 
		/// </summary>
		public DbSet<AuthInfo> AuthInfo { get; set; }

		/// <summary>
		/// 
		/// </summary>
		public DbSet<SystemInfo> SystemInfoes { get; set; }

		/// <summary>
		/// 
		/// </summary>
		public DbSet<ModuleInfo> ModuleInfoes { get; set; }

		/// <summary>
		/// 
		/// </summary>
		public DbSet<ProgramInfo> ProgramInfoes { get; set; }

		/// <summary>
		/// 
		/// </summary>
		public DbSet<RoleInfo> RoleInfoes { get; set; }

		/// <summary>
		/// 
		/// </summary>
		public DbSet<UserInfo> UserInfoes { get; set; }

		/// <summary>
		/// 
		/// </summary>
		public DbSet<DeptInfo> DeptInfoes { get; set; }

		/// <summary>
		/// 
		/// </summary>
		public DbSet<RoleModule> RoleModules { get; set; }

	   
		/// <summary>
		/// 
		/// </summary>
		public DbSet<RoleProgram> RolePrograms { get; set; }

		/// <summary>
		/// 
		/// </summary>
		public DbSet<UserRole> UserRoles { get; set; }

		//#region AMES Table BAS
		/// <summary>
		/// 工廠
		/// </summary>
		public DbSet<AMESCoreStudio.WebApi.Models.BAS.FactoryInfo> FactoryInfos { get; set; }

		/// <summary>
		/// 單位
		/// </summary>
		public DbSet<AMESCoreStudio.WebApi.Models.BAS.FactoryUnit> FactoryUnits { get; set; }

		/// <summary>ClassInfo
		/// 線別
		/// </summary>
		public DbSet<AMESCoreStudio.WebApi.Models.BAS.LineInfo> LineInfoes { get; set; }

		/// <summary>
		/// 班别資料
		/// </summary>
		public DbSet<AMESCoreStudio.WebApi.Models.BAS.ClassInfo> ClassInfoes { get; set; }

		/// <summary>TIME_SEGMENT
		/// 生產時段
		/// </summary>
		public DbSet<AMESCoreStudio.WebApi.Models.BAS.TimeSegment> TimeSegments { get; set; }

		/// <summary>
		/// 工作臺類別
		/// </summary>
		public DbSet<AMESCoreStudio.WebApi.Models.BAS.StationType> StationTypes { get; set; }

		/// <summary>
		/// 工作臺
		/// </summary>
		public DbSet<AMESCoreStudio.WebApi.Models.BAS.Stations> Stationses { get; set; }

		/// <summary>
		/// 責任單位資料
		/// </summary>
		public DbSet<AMESCoreStudio.WebApi.Models.BAS.RepairResponsibleUnits> RepairResponsibleUnitses { get; set; }

		/// <summary>
		/// 郵件群组類别
		/// </summary>
		public DbSet<AMESCoreStudio.WebApi.Models.BAS.MailGroup> MailGroups { get; set; }

		/// <summary>
		/// 郵件群组資料
		/// </summary>
		public DbSet<AMESCoreStudio.WebApi.Models.BAS.MailGroupDetail> MailGroupDetails { get; set; }

		/// <summary>
		/// 測試代號
		/// </summary>
		public DbSet<AMESCoreStudio.WebApi.Models.BAS.TestType> TestTypes { get; set; }

		/// <summary>
		/// List
		/// </summary>
		public DbSet<AMESCoreStudio.WebApi.Models.BAS.ListObj> ListObjs { get; set; }

		/////////////////////////*****/////////////////////////////////////////////////////////

		/// <summary>
		/// 正背面
		/// </summary>
		public DbSet<AMESCoreStudio.WebApi.Models.AMES.MFGType> MFGTypes { get; set; }

		/// <summary>
		/// 工單性質
		/// </summary>
		public DbSet<AMESCoreStudio.WebApi.Models.AMES.ProcessType> ProcessTypes { get; set; }

		/// <summary>
		/// 產品別
		/// </summary>
		public DbSet<AMESCoreStudio.WebApi.Models.AMES.ProductType> ProductTypes { get; set; }

		/// <summary>
		/// 工單機種資料
		/// </summary>
		public DbSet<AMESCoreStudio.WebApi.Models.AMES.WipAtt> WipAtts { get; set; }

		/// <summary>
		/// 工單基本資料文件
		/// </summary>
		public virtual DbSet<WipInfo> WipInfos { get; set; }


		/// <summary>
		/// 流程資料
		/// </summary>
		public DbSet<FlowRule> FlowRules { get; set; }

		/// <summary>
		/// 流程站別資料
		/// </summary>
		public DbSet<RuleStation> RuleStations { get; set; }

		/// <summary>
		/// 流程規則資料
		/// </summary>
		public DbSet<Rules> Ruleses { get; set; }

		/// <summary>
		/// 條碼狀態資料
		/// </summary>
		public DbSet<BarcodeStatus> BarcodeStatus { get; set; }

		/// <summary>
		/// 異常群組資料
		/// </summary>
		public DbSet<ErrorGroup> ErrorGroups { get; set; }

		/// <summary>
		/// 異常類別資料
		/// </summary>
		public DbSet<ErrorClass> ErrorClasses { get; set; }

		/// <summary>
		/// 工單狀態資料
		/// </summary>
		public DbSet<WipStatus> WipStatus { get; set; }

		/// <summary>
		/// 工單鎖定資料檔
		/// </summary>
		public DbSet<WipLock> WipLocks { get; set; }

		/// <summary>
		/// 工單條碼起迄資料檔
		/// </summary>
		public DbSet<WipBarcode> WipBarcodes { get; set; }

		/// <summary>
		/// 異常原因資料
		/// </summary>
		public DbSet<ErrorReason> ErrorReasons { get; set; }

		/// <summary>
		/// 工單投產纪錄資料文件
		/// </summary>
		public DbSet<WipLog> WipLogs { get; set; }


		/// <summary>
		/// 工單投產纪錄資料文件
		/// </summary>
		public DbSet<NGGroup> NGGroups { get; set; }

		/// <summary>
		/// 工單投產纪錄資料文件
		/// </summary>
		public DbSet<NGClass> NGClasses { get; set; }

		/// <summary>
		/// 維修群組資料
		/// </summary>
		public DbSet<RMAGroup> RMAGroups { get; set; }

		/// <summary>
		/// 維修類別資料
		/// </summary>
		public DbSet<RMAClass> RMAClasses { get; set; }

		/// <summary>
		/// 維修原因資料
		/// </summary>
		public DbSet<RMAReason> RMAReasons { get; set; }

		/// <summary>
		/// 機種C/T資料
		/// </summary>
		public DbSet<CycleTime> CycleTimes { get; set; }

		/// <summary>
		/// 不良現象原因代碼資料
		/// </summary>
		public DbSet<NGReason> NGReasons { get; set; }

		/// <summary>
		/// 問題類別資料
		/// </summary>
		public DbSet<QAType> QATypes { get; set; }

		/// <summary>
		/// 維修方式資料
		/// </summary>
		public DbSet<RepairType> RepairTypes { get; set; }

		/// <summary>
		/// 組件類別資料
		/// </summary>
		public DbSet<RepairItem> RepairItems { get; set; }

		/// <summary>
		/// 序號料號資料
		/// </summary>
		public DbSet<PartMap> PartMaps { get; set; }

		/// <summary>
		/// 組件料號序號資料
		/// </summary>
		public DbSet<KPLink> KPLinks { get; set; }

		/// <summary>
		/// 組件類別資料
		/// </summary>
		public virtual DbSet<Items> Items { get; set; }

		/// <summary>
		/// MAC資料
		/// </summary>
		public DbSet<MACInfo> MACInfoes { get; set; }

		/// <summary>
		/// SOP文件維護
		/// </summary>
		//public virtual DbSet<WipSop> WipSops { get; set; }
		public virtual DbSet<MaterialSop> MaterialSops { get; set; }

		/// <summary>
		/// 料號基本資料檔
		/// </summary>
		public virtual DbSet<MaterialItem> MaterialItems { get; set; }

		/// <summary>
		/// 
		/// </summary>
		public virtual DbSet<MaterialKp> MaterialKps { get; set; }

		/// <summary>
		/// 工單資訊-板卡工程資訊
		/// </summary>
		public virtual DbSet<WipBoard> WipBoards { get; set; }

		/// <summary>
		/// 工單資訊-系統組裝工程資訊
		/// </summary>
		public virtual DbSet<WipSystem> WipSystems { get; set; }

		/// <summary>
		/// 工單資訊-系統組裝工程資訊
		/// </summary>
		public virtual DbSet<BarcodeChange> BarcodeChanges { get; set; }

		/// <summary>
		/// 工單對應SOP文件log
		/// </summary>
		public virtual DbSet<WipSop> WipSops { get; set; }

		/// <summary>
		/// 工單資料-標籤
		/// </summary>
		public virtual DbSet<WipLabel> WipLabels { get; set; }

		/// <summary>
		/// 工單MAC資料檔
		/// </summary>
		public virtual DbSet<WipMAC> WipMACs { get; set; }

		/// <summary>
		/// 工單條碼規則設定文件檔
		/// </summary>
		public virtual DbSet<WipRule> WipRules { get; set; }

		/// <summary>
		/// 工單條碼區間設定檔(除内部SN)
		/// </summary>
		public virtual DbSet<WipBarcodeOther> WipBarcodeOthers { get; set; }

		/// <summary>
		///條碼資料
		/// </summary>
		public virtual DbSet<BarcodeInfo> BarcodeInfoes { get; set; }

		/// <summary>
		///條碼组件資料
		/// </summary>
		public virtual DbSet<BarcodeItem> BarcodeItems { get; set; }


		/// <summary>
		///工時群組資料
		/// </summary>
		public DbSet<WorkGroup> WorkGroups { get; set; }

		/// <summary>
		///工作類別資料
		/// </summary>
		public DbSet<WorkClass> WorkClasses { get; set; }

		/// <summary>
		///標準工時資料
		/// </summary>
		public DbSet<StandardWorkTime> StandardWorkTimes { get; set; }

		/// <summary>
		///每日出勤資料
		/// </summary>
		public DbSet<WorkManPower> WorkManPowers { get; set; }


		/// <summary>
		///援入援外資料
		/// </summary>
		public DbSet<SupportUser> SupportUsers { get; set; }

		/// <summary>
		///異常工時資料
		/// </summary>
		public DbSet<ExceptionWorktime> ExceptionWorktimes { get; set; }

		/// <summary>
		///重工工時資料
		/// </summary>
		public DbSet<StandardWorkTimeRework> StandardWorkTimeReworks { get; set; }

		/// <summary>
		///無效工時在線收集資料
		/// </summary>
		public DbSet<ExceptionWorktimeOline> ExceptionWorktimeOlines { get; set; }

		/// <summary>
		/// 條碼類別資料檔
		/// </summary>
		public virtual DbSet<BarcodeType> BarcodeTypes { get; set; }

		/// <summary>
		/// 料號属性代碼基本檔
		/// </summary>
		public virtual DbSet<MatProperty> MatPropertys { get; set; }


		/// <summary>
		///條碼组件變更資料
		/// </summary>
		public DbSet<BarcodeItemChange> BarcodeItemChanges { get; set; }

		/// <summary>
		/// 料號站別工項資料檔
		/// </summary>
		public virtual DbSet<AMESCoreStudio.WebApi.Models.AMES.MaterialStationsItem> MaterialStationsItems { get; set; }

		/// <summary>
		/// 料號治具資訊資料檔
		/// </summary>
		public virtual DbSet<AMESCoreStudio.WebApi.Models.AMES.MaterialOutfit> MaterialOutfits { get; set; }

		/// <summary>
		/// 條碼鎖定資料表
		/// </summary>
		public DbSet<BarcodeLock> BarcodeLocks { get; set; }

		/// <summary>
		/// 檔案用途    條碼工單資料檔
		/// </summary>
		public virtual DbSet<BarcodeWip> BarcodeWips { get; set; }

		/// <summary>
		/// 測試不良基本資料檔
		/// </summary>
		public virtual DbSet<NgInfo> NgInfos { get; set; }

		/// <summary>
		/// 條碼過站資料檔
		/// </summary>
		//public DbSet<AMESCoreStudio.WebApi.Models.AMES.BarcodeStation> BarcodeStation { get; set; }
		public DbSet<BarcodeStation> BarcodeStation { get; set; }

		/// <summary>
		/// 條碼關聯資料檔
		/// </summary>
		public virtual DbSet<BarcodeGroup> BarcodeGroups { get; set; }

		/// <summary>
		/// 料號流程資料檔
		/// </summary>
		public virtual DbSet<AMESCoreStudio.WebApi.Models.BAS.MaterialFlow> MaterialFlows { get; set; }

		/// <summary>
		/// 燒机時間資料檔
		/// </summary>
		public virtual DbSet<RuninTime> RuninTimes { get; set; }

		/// <summary>
		/// 檢驗類別維護資料檔
		/// </summary>
		public virtual DbSet<QcGroup> QcGroups { get; set; }

		/// <summary>
		/// 檢驗項目維護資料檔
		/// </summary>
		public virtual DbSet<QcItem> QcItems { get; set; }

		/// <summary>
		/// 檢驗结果維護資料檔
		/// </summary>
		public virtual DbSet<FqcResult> FqcResults { get; set; }

		/// <summary>
		/// 抽驗係数資料檔
		/// </summary>
		public virtual DbSet<QcQuot> QcQuots { get; set; }

		/// <summary>
		/// 抽驗標準資料檔
		/// </summary>
		public virtual DbSet<QcCriterion> QcCriteria { get; set; }

		/// <summary>
		/// 入庫單資料檔
		/// </summary>
		public virtual DbSet<FqcInhouseMaster> FqcInhouseMasters { get; set; }

		/// <summary>
		/// 檢驗單明細資料檔
		/// </summary>
		public virtual DbSet<FqcInhouseDetail> FqcInhouseDetails { get; set; }

		/// <summary>
		/// 檢驗單結果資料檔
		/// </summary>
		public virtual DbSet<FqcResultMaster> FqcResultMasters { get; set; }

		/// <summary>
		/// FQC檢驗結果明細資料檔
		/// </summary>
		public virtual DbSet<FqcResultDetail> FqcResultDetails { get; set; }

		/// <summary>
		/// FQC條碼資料檔
		/// </summary>
		public virtual DbSet<FqcBarcode> FqcBarcodes { get; set; }

		/// <summary>
		/// FQC细目資料檔
		/// </summary>
		public virtual DbSet<FqcItem> FqcItems { get; set; }

		/// <summary>
		/// 抽驗批退資料檔
		/// </summary>
		public virtual DbSet<QngInfo> QngInfos { get; set; }

		/// <summary>
		/// 測試不良基本資料檔
		/// </summary>
		public DbSet<NgComponent> NgComponents { get; set; }

		/// <summary>
		/// 維修紀錄資料檔
		/// </summary>
		public DbSet<RepairRecord> RepairRecords { get; set; }

		/// <summary>
		/// 不良維修資料檔
		/// </summary>
		public DbSet<NgRepair> NgRepairs { get; set; }

		/// <summary>
		/// 維修解碼上傳圖檔資料表
		/// </summary>
		public DbSet<NgRepairBlob> NgRepairBlobs { get; set; }

		/// <summary>
		/// 過站狀態檔
		/// </summary>
		public virtual DbSet<StatusType> StatusTypes { get; set; }
		/// <summary>
		/// 異常工時類別資料檔
		/// </summary>
		public virtual DbSet<ExceptionClass> ExceptionClasses { get; set; }

		/// <summary>
		/// 異常工時CODE資料檔
		/// </summary>
		public virtual DbSet<ExceptionCode> ExceptionCodes { get; set; }

		/// <summary>
		/// 異常工時REASON資料檔
		/// </summary>
		public virtual DbSet<ExceptionReason> ExceptionReasons { get; set; }

		/// <summary>
		/// 工單箱號資料檔
		/// </summary>
		public virtual DbSet<WipBox> WipBoxs { get; set; }
		/// <summary>
		/// 巡檢類別資料檔
		/// </summary>
		public virtual DbSet<InspectionType> InspectionTypes { get; set; }

		/// <summary>
		/// 工單各站數量資料檔
		/// </summary>
		public virtual DbSet<WipStation> WipStations { get; set; }
		/// <summary>
		/// 巡檢表單資料檔
		/// </summary>
		public virtual DbSet<InspectionItem> InspectionItems { get; set; }

		/// <summary>
		/// 巡檢項目資料檔
		/// </summary>
		public virtual DbSet<InspectionForm> InspectionForms { get; set; }

		/// <summary>
		/// 巡檢項目資料檔
		/// </summary>
		public virtual DbSet<InspectionResultMaster> InspectionResultMasters { get; set; }

		/// <summary>
		/// 巡檢項目資料檔
		/// </summary>
		public virtual DbSet<InspectionResultDetail> InspectionResultDetails { get; set; }

		/// <summary>
		/// 巡檢項目資料檔
		/// </summary>
		public virtual DbSet<InspectionResultBlob> InspectionResultBlobs { get; set; }

		/// <summary>
		/// 各班別數量資料檔
		/// </summary>
		public virtual DbSet<WipClass> WipClass { get; set; }

		/// <summary>
		/// 工單各站數量資料檔 – By TIME
		/// </summary>
		public virtual DbSet<WipTime> WipTimes { get; set; }

		/// <summary>
		/// 工單KP資訊資料檔
		/// </summary>
		public virtual DbSet<WipKp> WipKps { get; set; }

		/// <summary>
		/// 日曆資料表
		/// </summary>
		public DbSet<CalendarTable> CalendarTables { get; set; }

		/// <summary>
		/// 內部序號對應的治具序號明細
		/// </summary>
		public virtual DbSet<BarcodeOutfit> BarcodeOutfits { get; set; }

		/// <summary>
		/// 設備種類資料檔
		/// </summary>
		public virtual DbSet<OutfitCommodityInfo> OutfitCommodityInfoes { get; set; }

		/// <summary>
		/// 設備規格資料檔
		/// </summary>
		public virtual DbSet<OutfitVarityInfo> OutfitVarityInfoes { get; set; }

		/// <summary>
		/// 廠商資料檔
		/// </summary>
		public virtual DbSet<OutfitVendorInfo> OutfitVendorInfoes { get; set; }

		/// <summary>
		/// 治具資料檔
		/// </summary>
		public virtual DbSet<OutfitInfo> OutfitInfoes { get; set; }

		/// <summary>
		/// PLM轉入料號說明
		/// </summary>
		public virtual DbSet<PlmMeterialInfo> PlmMeterialInfos { get; set; }
		/// <summary>
		/// 設備狀態紀錄資料檔
		/// </summary>
		public virtual DbSet<OutfitStatusLog> OutfitStatusLogs { get; set; }

		/// <summary>
		/// 工單資訊確認
		/// </summary>
		public virtual DbSet<WipCheck> WipChecks { get; set; }

		/// <summary>
		/// 工單治具資料檔
		/// </summary>
		public virtual DbSet<WipOutfit> WipOutfits { get; set; }

		/// <summary>
		/// 工單上傳圖檔資料表
		/// </summary>
		public virtual DbSet<WipInfoBlob> WipInfoBlobs { get; set; }


		/// <summary>
		/// 出貨序號規則
		/// </summary>
		public virtual DbSet<SerialRule> SerialRules { get; set; }

		/// <summary>
		/// 燒機記錄資料表
		/// </summary>
		public virtual DbSet<BurnInfo> BurnInfos { get; set; }
		
		/// <summary>
		/// 樣本序號取得記錄資料表
		/// </summary>
		public virtual DbSet<SampleSipmentSN> SampleSipmentSNs { get; set; }


		/// <summary>
		/// 工單序號退回紀錄
		/// </summary>
		public virtual DbSet<WipReturn> WipReturns { get; set; }

		/// <summary>
		/// 料號對應工項資料檔
		/// </summary>
		public virtual DbSet<MaterialFqcItem> MaterialFqcItems { get; set; }

		/// <summary>
		/// 工單對應工項資料檔
		/// </summary>
		public virtual DbSet<WipFqcItem> WipFqcItems { get; set; }

		/// <summary>
		/// 檢驗結果上傳圖檔資料表
		/// </summary>
		public virtual DbSet<FqcResultMasterBlob> FqcResultMasterBlobs { get; set; }

		/// <summary>
		/// 工單警報資料
		/// </summary>
		public DbSet<WipAlarm> WipAlarms { get; set; }

		/// <summary>
		/// 工時收集資料檔
		/// </summary>
		public DbSet<WorkingHoursCollection> WorkingHoursCollections { get; set; }

		/// <summary>
		/// 外包機種資料
		/// </summary>
		public DbSet<SNKeyPart> SNKeyParts { get; set; }

		/// <summary> Yiru add  ---------------------------------------------------
		/// 檢驗單明細資料檔
		/// </summary>
		public virtual DbSet<WareHouseing> WareHouseings { get; set; }

		/// <summary>
		/// 生產工時報工資料檔
		/// </summary>
		public DbSet<WipTimeSheet> WipTimeSheets { get; set; }

		/// <summary>
		/// 鋼板基本資料檔
		/// </summary>
		public virtual DbSet<SteelPlateInfo> SteelPlateInfos { get; set; }

		/// <summary>
		/// 鋼板量測記錄資料檔
		/// </summary>
		public virtual DbSet<SteelPlateMeasure> SteelPlateMeasures { get; set; }

		/// <summary>
		/// 鋼板量測NG記錄資料檔
		/// </summary>
		public virtual DbSet<SteelPlateMeasureNg> SteelPlateMeasuresNg { get; set; }

		/// <summary>
		/// 錫膏基本資料檔
		/// </summary>
		public virtual DbSet<SolderPasteInfo> SolderPasteInfos { get; set; }

		/// <summary>
		/// 錫膏使用紀錄資料檔
		/// </summary>
		public virtual DbSet<SolderPasteRecord> SolderPasteRecords { get; set; }

		/// <summary>
		/// 條碼報廢轉出資料檔
		/// </summary>
		public DbSet<BarcodeQngInfo> BarcodeQngInfos { get; set; }

		/// <summary>
		/// 異常工時附件資料檔
		/// </summary>
		public virtual DbSet<ExceptionWorktimeBlob> ExceptionWorktimeBlobs { get; set; }


		/// <summary> Yiru add  ---------------------------------------------------
		/// 設備廠別資料檔
		/// </summary>
		public virtual DbSet<OutfitFactoryInfo> OutfitFactoryInfos { get; set; }

		public virtual DbSet<RLabelReprint> RLabelReprints { get; set; }

		/// <summary> yiru 2022-09-20  ---------------------------------------------------
		/// 治具ID圖檔
		/// </summary>
		public virtual DbSet<OutfitInfoBlob> OutfitInfoBlobs { get; set; }

		/// <summary>
		/// FQC 報表自動派送維護
		/// </summary>
		public virtual DbSet<FqcNoticeMail> FqcNoticeMails { get; set; }

		/// <summary>
		/// 解除綁定出貨序號箱號資料檔
		/// </summary>
		public virtual DbSet<UnbindExtraBarcode> UnbindExtraBarcodes { get; set; }

		/// <summary>
		/// SOP資訊 - SOP類型為暫行文件
		/// </summary>
		public virtual DbSet<CTempSop> CTempSops { get; set; }

		/// <summary> yiru add
		/// 工單發料資料
		/// </summary>
		public DbSet<CZmomaterialList> CZmomaterialLists { get; set; }

	  /// <summary> yiru add
		/// 出貨序號規則-明細
		/// </summary>
		public DbSet<SerialRuleDetail> SerialRuleDetails { get; set; }

		/// <summary>
		/// 清線資料
		/// </summary>
		public DbSet<WipClear> WipClears { get; set; }

		/// <summary>
		/// 清線明細資料
		/// </summary>
		public DbSet<WipClearDetail> WipClearDetails { get; set; }

		/// <summary>
		/// PlmBom資料
		/// </summary>
		public DbSet<PlmBom> PlmBoms { get; set; }

		/// <summary>
		/// 工程編號
		/// </summary>

		public virtual DbSet<MaterialBake> MaterialBakes { get; set; }

		/// <summary>
		/// 報工站別資料
		/// </summary>

		public DbSet<StationWorkingHour> StationWorkingHours { get; set; }

		/// <summary>
		/// 包裝拆箱資料
		/// </summary>

		public DbSet<BoxChange> BoxChanges { get; set; }

		/// <summary>
		/// 治具規格圖檔
		/// </summary>

		public DbSet<OutfitVarietyBlob> OutfitVarietyBlobs { get; set; }

		/// <summary>
		/// QC RATE
		/// </summary>
		public virtual DbSet<QcRate> QcRates { get; set; }

		/// <summary>
		/// 
		/// </summary>
		public DbSet<ProductionIndex> ProductionIndexes { get; set; }

		/// <summary>
		///AUS條碼组件資料
		/// </summary>
		public virtual DbSet<AUSBarcodeItem> AUSBarcodeItems { get; set; }


		/// <summary>
		///AUS條碼資料
		/// </summary>
		public virtual DbSet<AUSBarcodeInfo> AUSBarcodeInfos { get; set; }

		/// <summary>
		/// 錫膏固定編碼流水碼表
		/// </summary>
		public virtual DbSet<SolderPasteSerial> SolderPasteSerials { get; set; }


	}

}