Exemple #1
0
        public MES_PIS_HandSyncBus()
        {
            ProcessIDTRSConfigService process_Service = new ProcessIDTRSConfigService
                                                        (
                new UnitOfWork(_DatabaseFactory),
                new EnumerationRepository(_DatabaseFactory),
                new ProcessIDTRSConfigRepository(_DatabaseFactory),
                new ProductInputRepository(_DatabaseFactory),
                new MES_PIS_SyncFailedRecordRepository(_DatabaseFactory),
                new FlowChartDetailRepository(_DatabaseFactory)
                                                        );


            MesDataSyncService mes_Service = new MesDataSyncService
                                             (
                new UnitOfWork(_DatabaseFactory),
                new EnumerationRepository(_DatabaseFactory),
                new MesDataSyncRepository(_DatabaseFactory),
                new ProductInputRepository(_DatabaseFactory),
                new ProcessIDTRSConfigRepository(_DatabaseFactory)
                                             );

            LogMessageRecordService Log_Service = new LogMessageRecordService
                                                  (
                new UnitOfWork(_DatabaseFactory),
                new LogMessageRecodeRepository(_DatabaseFactory)
                                                  );

            MES_PIS_SyncFailedRecordService SyncFailedLogServer = new MES_PIS_SyncFailedRecordService
                                                                  (
                new MES_PIS_SyncFailedRecordRepository(_DatabaseFactory),
                new UnitOfWork(_DatabaseFactory)
                                                                  );

            _LogService          = Log_Service;
            _mes_Service         = mes_Service;
            _process_Service     = process_Service;
            _SyncFailedLogServer = SyncFailedLogServer;
        }
Exemple #2
0
        //添加数据
        public static void AddMES_PIS(MesDataSyncService mes_Service, List <MES_StationDataRecordDTO> mesDataList, List <ProcessIDTransformConfigDTO> pisConfigList, CurentTimeModel CurrentDate, MesRequestParamModel mesRequest)
        {
            var isSendEMail     = false;
            var isAddFailRecord = false;

            try
            {
                var resultModelList          = new List <MES_StationDataRecordDTO>();
                var convertModel             = mesDataList.GroupBy(p => new { p.MES_ProcessID, p.Color }).ToDictionary(p => p.Key, m => m);
                var mesPickIngConfigList     = pisConfigList.Select(m => new { m.PIS_ProcessID, m.PIS_ProcessName, m.MES_PickingID, m.Color }).ToList();
                var mesNgConfigList          = pisConfigList.Select(m => new { m.PIS_ProcessID, m.PIS_ProcessName, m.MES_NgID, m.Color }).ToList();
                var mesReworkConfigList      = pisConfigList.Select(m => new { m.PIS_ProcessID, m.PIS_ProcessName, m.MES_ReworkID, m.Color }).ToList();
                var mesGoodProductConfigList = pisConfigList.Select(m => new { m.PIS_ProcessID, m.PIS_ProcessName, m.MES_GoodProductID, m.Color }).ToList();
                //筛选领料--待商议
                var AllPickIngModel     = convertModel.Where(p => mesPickIngConfigList.Where(m => m.MES_PickingID == p.Key.MES_ProcessID && m.Color == p.Key.Color).Count() > 0);
                var AllGoodProductModel = convertModel.Where(p => mesGoodProductConfigList.Where(m => m.MES_GoodProductID == p.Key.MES_ProcessID && m.Color == p.Key.Color).Count() > 0);
                var AllNgModel          = convertModel.Where(p => mesNgConfigList.Where(m => m.MES_NgID == p.Key.MES_ProcessID && m.Color == p.Key.Color).Count() > 0);
                var AllReworkModel      = convertModel.Where(p => mesReworkConfigList.Where(m => m.MES_ReworkID == p.Key.MES_ProcessID && m.Color == p.Key.Color).Count() > 0);

                //Pick
                foreach (var item in AllPickIngModel)
                {
                    isAddFailRecord = true;
                    MES_StationDataRecord AddPisModel = new MES_StationDataRecord();
                    var pisPickConfigModel            = mesPickIngConfigList.Where(p => p.MES_PickingID == item.Key.MES_ProcessID && p.Color == item.Key.Color).FirstOrDefault();
                    AddPisModel.Date              = CurrentDate.CurrentDay;
                    AddPisModel.TimeInterVal      = CurrentDate.CurrentInterval;
                    AddPisModel.StartTimeInterval = CurrentDate.CurrentStartMinute;
                    AddPisModel.EndTimeInterval   = CurrentDate.CurrentEndMinute;
                    AddPisModel.PIS_ProcessID     = pisPickConfigModel.PIS_ProcessID;
                    AddPisModel.PIS_ProcessName   = pisPickConfigModel.PIS_ProcessName;
                    AddPisModel.MES_ProcessID     = item.Key.MES_ProcessID;
                    AddPisModel.MES_ProcessName   = item.Value.FirstOrDefault().MES_ProcessName;
                    AddPisModel.ProductQuantity   = item.Value.Count();
                    AddPisModel.ProjectName       = mesRequest.CustomerIDString;
                    AddPisModel.ProcessType       = "PIS-PICK";
                    //resultModelList.Add(AddPisModel);
                    var result = mes_Service.AddMesData(AddPisModel);
                    if (!result)
                    {
                        isSendEMail = true;
                    }
                }

                //GoodProduct
                foreach (var item in AllGoodProductModel)
                {
                    isAddFailRecord = true;
                    MES_StationDataRecord AddPisModel = new MES_StationDataRecord();
                    var pisPickConfigModel            = mesGoodProductConfigList.Where(p => p.MES_GoodProductID == item.Key.MES_ProcessID && p.Color == item.Key.Color).FirstOrDefault();
                    AddPisModel.Date              = CurrentDate.CurrentDay;
                    AddPisModel.TimeInterVal      = CurrentDate.CurrentInterval;
                    AddPisModel.StartTimeInterval = CurrentDate.CurrentStartMinute;
                    AddPisModel.EndTimeInterval   = CurrentDate.CurrentEndMinute;
                    AddPisModel.PIS_ProcessID     = pisPickConfigModel.PIS_ProcessID;
                    AddPisModel.PIS_ProcessName   = pisPickConfigModel.PIS_ProcessName;
                    AddPisModel.MES_ProcessID     = item.Key.MES_ProcessID;
                    AddPisModel.MES_ProcessName   = item.Value.FirstOrDefault().MES_ProcessName;
                    AddPisModel.ProductQuantity   = item.Value.Count();
                    AddPisModel.ProjectName       = mesRequest.CustomerIDString;
                    AddPisModel.ProcessType       = "PIS-GP";
                    var result = mes_Service.AddMesData(AddPisModel);
                    if (!result)
                    {
                        isSendEMail = true;
                    }
                }

                //NG
                foreach (var item in AllNgModel)
                {
                    isAddFailRecord = true;
                    MES_StationDataRecord AddPisModel = new MES_StationDataRecord();
                    var pisNgConfigModel = mesNgConfigList.Where(p => p.MES_NgID == item.Key.MES_ProcessID && p.Color == item.Key.Color).FirstOrDefault();
                    AddPisModel.Date              = CurrentDate.CurrentDay;
                    AddPisModel.TimeInterVal      = CurrentDate.CurrentInterval;
                    AddPisModel.StartTimeInterval = CurrentDate.CurrentStartMinute;
                    AddPisModel.EndTimeInterval   = CurrentDate.CurrentEndMinute;
                    AddPisModel.PIS_ProcessID     = pisNgConfigModel.PIS_ProcessID;
                    AddPisModel.PIS_ProcessName   = pisNgConfigModel.PIS_ProcessName;
                    AddPisModel.MES_ProcessID     = item.Key.MES_ProcessID;
                    AddPisModel.MES_ProcessName   = item.Value.FirstOrDefault().MES_ProcessName;
                    AddPisModel.ProductQuantity   = item.Value.Count();
                    AddPisModel.ProjectName       = mesRequest.CustomerIDString;
                    AddPisModel.ProcessType       = "PIS-NG";
                    //resultModelList.Add(AddPisModel);
                    var result = mes_Service.AddMesData(AddPisModel);
                    if (!result)
                    {
                        isSendEMail = true;
                    }
                }

                //Rework
                foreach (var item in AllReworkModel)
                {
                    isAddFailRecord = true;
                    MES_StationDataRecord AddPisModel = new MES_StationDataRecord();
                    var pisReworkConfigModel          = mesReworkConfigList.Where(p => p.MES_ReworkID == item.Key.MES_ProcessID && p.Color == item.Key.Color).FirstOrDefault();
                    AddPisModel.Date              = CurrentDate.CurrentDay;
                    AddPisModel.TimeInterVal      = CurrentDate.CurrentInterval;
                    AddPisModel.StartTimeInterval = CurrentDate.CurrentStartMinute;
                    AddPisModel.EndTimeInterval   = CurrentDate.CurrentEndMinute;
                    AddPisModel.PIS_ProcessID     = pisReworkConfigModel.PIS_ProcessID;
                    AddPisModel.PIS_ProcessName   = pisReworkConfigModel.PIS_ProcessName;
                    AddPisModel.MES_ProcessID     = item.Key.MES_ProcessID;
                    AddPisModel.MES_ProcessName   = item.Value.FirstOrDefault().MES_ProcessName;
                    AddPisModel.ProductQuantity   = item.Value.Count();
                    AddPisModel.ProjectName       = mesRequest.CustomerIDString;
                    AddPisModel.ProcessType       = "PIS-ReWork";
                    var result = mes_Service.AddMesData(AddPisModel);
                    if (!result)
                    {
                        isSendEMail = true;
                    }
                }

                if (isAddFailRecord)
                {
                    //发邮件记日志
                    if (isSendEMail)
                    {
                        AddMESSyncFailedLog("MES_PIS", "MES数据自动同步", mesRequest);
                    }
                }
                else
                {
                    AddLog("无数据", "没有获取到对应配置的数据", mesRequest);
                }
            }
            catch (Exception ex)
            {
                AddLog("Failed", "AddPIS", mesRequest);
            }
        }
Exemple #3
0
        static void Main(string[] args)
        {
            //NewmMes_Service.SynchronizeMesInfo(syncParam);
            //mes_Service.SynchronizeMesInfo(syncParam);

            ProcessIDTRSConfigService process_Service = new ProcessIDTRSConfigService
                                                        (
                new UnitOfWork(_DatabaseFactory),
                new EnumerationRepository(_DatabaseFactory),
                new ProcessIDTRSConfigRepository(_DatabaseFactory),
                new ProductInputRepository(_DatabaseFactory),
                new MES_PIS_SyncFailedRecordRepository(_DatabaseFactory),
                new FlowChartDetailRepository(_DatabaseFactory)
                                                        );

            MesDataSyncService mes_Service = new MesDataSyncService
                                             (
                new UnitOfWork(_DatabaseFactory),
                new EnumerationRepository(_DatabaseFactory),
                new MesDataSyncRepository(_DatabaseFactory),
                new ProductInputRepository(_DatabaseFactory),
                new ProcessIDTRSConfigRepository(_DatabaseFactory)
                                             );

            LogMessageRecordService Log_Service = new LogMessageRecordService
                                                  (
                new UnitOfWork(_DatabaseFactory),
                new LogMessageRecodeRepository(_DatabaseFactory)
                                                  );

            MES_PIS_SyncFailedRecordService SyncFailedLogServer = new MES_PIS_SyncFailedRecordService
                                                                  (
                new MES_PIS_SyncFailedRecordRepository(_DatabaseFactory),
                new UnitOfWork(_DatabaseFactory)
                                                                  );

            MES_SNOriginalService SNOriginalService = new MES_SNOriginalService
                                                      (
                new UnitOfWork(_DatabaseFactory),
                new MES_SNOriginalRepository(_DatabaseFactory),
                new Mes_StationColorRepository(_DatabaseFactory),
                new ShipMentRepository(_DatabaseFactory)
                                                      );

            _LogService          = Log_Service;
            _SyncFailedLogServer = SyncFailedLogServer;
            EnumerationRepository enumration = new EnumerationRepository(_DatabaseFactory);

            //一 获取枚举表-构造参数
            //二 获取临时表的数据
            //三 获取配置表的数据判断是否需要同步
            //四 判断数据是插入还是更新
            //1 获取当前日期和时段

            //测试代码
            //var starttime = DateTime.Now;
            if (false)
            {
                var i = 0;
                while (true)
                {
                    Thread t1 = new Thread(new ThreadStart(AddData));
                    t1.Start();
                    Thread.Sleep(60000);
                    Console.Write(++i + ", ");
                }
            }
            else
            {
                var startTime            = string.Empty;
                var endTime              = string.Empty;
                var current_Date         = string.Empty;
                var current_TimeInterval = string.Empty;
                var _currentDateTime     = DateTime.Now.AddMinutes(-10);
                //var _currentDateTime = Convert.ToDateTime("2018/09/28 10:10");
                //while (_currentDateTime.AddMinutes(10) < Convert.ToDateTime("2018/09/28 15:10"))
                //{
                //    _currentDateTime = _currentDateTime.AddMinutes(10);
                var currentDateInfoModel = GetCurrentTime(_currentDateTime);
                current_TimeInterval = currentDateInfoModel.CurrentInterval;
                current_Date         = currentDateInfoModel.CurrentDay;
                startTime            = currentDateInfoModel.CurrentStartMinute;
                endTime = currentDateInfoModel.CurrentEndMinute;
                //获取需要同步的专案
                var projectList = enumration.GetMES_Project("MES_ProjectType");
                //2 获取配置表需要同步的制程
                var ProcessConfList = process_Service.GetSyscProcessConfig();

                foreach (var project in projectList)
                {
                    #region
                    List <MES_StationDataRecordDTO> MesPeocessInfoList = new List <MES_StationDataRecordDTO>();
                    var requestParam       = project.Enum_Value.Split(',');
                    var SqlServer          = requestParam[0].ToString();
                    var Database           = requestParam[1].ToString();
                    var UserID_ID          = int.Parse(requestParam[2]);
                    var customerIDString   = requestParam[5].ToString();
                    var assemblyIDString   = requestParam[6].ToString();
                    var customerNameString = requestParam[7].ToString();
                    //获取专案下面最新的一条数据
                    var       LastDatemodel = mes_Service.GetLastSyncDate(customerIDString);
                    var       model         = new MES_StationDataRecordDTO();
                    Recordset resultMesData = new Recordset();
                    //第一条数据直接滴啊用接口
                    if (LastDatemodel == null)
                    {
                        MesRequestParamModel mesRequest = new MesRequestParamModel()
                        {
                            SqlServer        = SqlServer,
                            Database         = Database,
                            UserID_ID        = UserID_ID,
                            StartDate        = startTime,
                            EndDate          = endTime,
                            CustomerIDString = customerIDString,
                            AssemblyIDString = assemblyIDString
                        };
                        resultMesData = GetMesAPIData(mesRequest);
                        if (resultMesData.RecordCount == 0)
                        {
                            AddLog("MES-无数据数据", "RequestMESAPI", mesRequest);
                            continue;
                        }

                        MesPeocessInfoList = ConvertMesDateToPis(resultMesData, customerNameString);
                        AddMES_PIS(mes_Service, MesPeocessInfoList, ProcessConfList, currentDateInfoModel, mesRequest);
                    }
                    else
                    {
                        //当前同步的开始时间=已经同步的结束的时间
                        if (LastDatemodel.EndTimeInterval == startTime)
                        {
                            MesRequestParamModel mesRequest = new MesRequestParamModel()
                            {
                                SqlServer        = SqlServer,
                                Database         = Database,
                                UserID_ID        = UserID_ID,
                                StartDate        = startTime,
                                EndDate          = endTime,
                                CustomerIDString = customerIDString,
                                AssemblyIDString = assemblyIDString
                            };

                            resultMesData = GetMesAPIData(mesRequest);
                            if (resultMesData.RecordCount == 0)
                            {
                                AddLog("MES-无数据数据", "RequestMESAPI", mesRequest);
                                continue;
                            }
                            MesPeocessInfoList = ConvertMesDateToPis(resultMesData, customerNameString);
                            AddMES_PIS(mes_Service, MesPeocessInfoList, ProcessConfList, currentDateInfoModel, mesRequest);
                        }
                        else
                        {
                            for (int i = 12; i >= 0; i--)
                            {
                                Recordset resultMesDataForFail = new Recordset();
                                //往前面推10分钟-最多查询前面一个小时数据
                                var tempTineModel = GetCurrentTime(_currentDateTime.AddMinutes(-(10 * i)));
                                if (Convert.ToDateTime(LastDatemodel.EndTimeInterval) > Convert.ToDateTime(tempTineModel.CurrentStartMinute))
                                {
                                    continue;
                                }
                                else
                                {
                                    current_Date         = tempTineModel.CurrentDay;
                                    current_TimeInterval = tempTineModel.CurrentInterval;
                                    startTime            = tempTineModel.CurrentStartMinute;
                                    endTime = tempTineModel.CurrentEndMinute;
                                    MesRequestParamModel mesRequest = new MesRequestParamModel()
                                    {
                                        SqlServer        = SqlServer,
                                        Database         = Database,
                                        UserID_ID        = UserID_ID,
                                        StartDate        = startTime,
                                        EndDate          = endTime,
                                        CustomerIDString = customerIDString,
                                        AssemblyIDString = assemblyIDString
                                    };
                                    resultMesDataForFail = GetMesAPIData(mesRequest);
                                    if (resultMesDataForFail.RecordCount == 0)
                                    {
                                        AddLog("MES-无数据数据", "RequestMESAPI", mesRequest);
                                        //记日志或者发邮件
                                        continue;
                                    }
                                    MesPeocessInfoList = ConvertMesDateToPis(resultMesDataForFail, customerNameString);
                                    //AddMES_PIS(mes_Service, MesPeocessInfoList, ProcessConfList, tempTineModel, mesRequest);
                                    //找到相等时的时段执行完直接跳出
                                }
                                //原逻辑
                                #region
                                //if (LastDatemodel.EndTimeInterval == tempTineModel.CurrentStartMinute)
                                //{
                                //    current_Date = tempTineModel.CurrentDay;
                                //    current_TimeInterval = tempTineModel.CurrentInterval;
                                //    startTime = tempTineModel.CurrentStartMinute;
                                //    endTime = tempTineModel.CurrentEndMinute;
                                //    MesRequestParamModel mesRequest = new MesRequestParamModel()
                                //    {
                                //        SqlServer = SqlServer,
                                //        Database = Database,
                                //        UserID_ID = UserID_ID,
                                //        StartDate = startTime,
                                //        EndDate = endTime,
                                //        CustomerIDString = customerIDString,
                                //        AssemblyIDString = assemblyIDString
                                //    };
                                //    resultMesDataForFail = GetMesAPIData(mesRequest);
                                //    if (resultMesDataForFail.RecordCount == 0)
                                //    {
                                //        AddLog("MES-无数据数据", "RequestMESAPI", mesRequest);
                                //        //记日志或者发邮件
                                //        continue;
                                //    }
                                //    //MesPeocessInfoList = ConvertMesDateToPis(resultMesDataForFail);
                                //    //AddMES_PIS(mes_Service, MesPeocessInfoList, ProcessConfList, tempTineModel, mesRequest);
                                //    //找到相等时的时段执行完直接跳出
                                //    break;
                                //}
                                //else
                                //{
                                //    current_Date = tempTineModel.CurrentDay;
                                //    current_TimeInterval = tempTineModel.CurrentInterval;
                                //    startTime = tempTineModel.CurrentStartMinute;
                                //    endTime = tempTineModel.CurrentEndMinute;
                                //    MesRequestParamModel mesRequest = new MesRequestParamModel()
                                //    {
                                //        SqlServer = SqlServer,
                                //        Database = Database,
                                //        UserID_ID = UserID_ID,
                                //        StartDate = startTime,
                                //        EndDate = endTime,
                                //        CustomerIDString = customerIDString,
                                //        AssemblyIDString = assemblyIDString
                                //    };
                                //    resultMesDataForFail = GetMesAPIData(mesRequest);
                                //    if (resultMesDataForFail.RecordCount == 0)
                                //    {
                                //        AddLog("MES-无数据数据", "RequestMESAPI", mesRequest);
                                //        //记日志或者发邮件
                                //        continue;
                                //    }
                                //    //MesPeocessInfoList = ConvertMesDateToPis(resultMesDataForFail);
                                //    //AddMES_PIS(mes_Service, MesPeocessInfoList, ProcessConfList, tempTineModel, mesRequest);
                                //}

                                #endregion
                                //}
                            }
                            #endregion
                        }
                    }
                    //测试代码
                    //var endtime = DateTime.Now;
                    //Console.WriteLine("总耗时毫秒:" + (endtime - starttime).TotalMilliseconds);
                    //Console.WriteLine("总耗时秒:" + (endtime - starttime).Milliseconds);
                    //Console.WriteLine("总耗时分:" + (endtime - starttime).TotalMinutes);
                    //Console.ReadKey();
                }
            }
        }