예제 #1
0
        static void Main(string[] args)
        {
            IoC.Init();

            string filePath = string.IsNullOrEmpty(ConfigurationManager.AppSettings["UploadFile"]) ?
                              "C:/log/cli/Upload/data_Process/" : ConfigurationManager.AppSettings["UploadFile"];

            BUPProcessBusiness            _bupProcessBusiness   = new BUPProcessBusiness();
            BUPTaskBusiness               _bupTaskBusiness      = new BUPTaskBusiness();
            AutomationSettingBusiness     _autoBusiness         = new AutomationSettingBusiness();
            List <AutomationSettingModel> processingAutomations = _autoBusiness.GetProcessingAutomationSettings();
            UserBusiness _userBusiness = new UserBusiness();
            ISunnetLog   LoggerHelper  = ObjectFactory.GetInstance <ISunnetLog>();

            LoggerHelper.Info("start ......");
            Console.WriteLine("start ......");

            if (processingAutomations != null && processingAutomations.Count > 0)
            {
                List <UserBaseEntity> users = _userBusiness.GetUsers(processingAutomations.Select(r => r.CreatedBy).ToList());
                foreach (AutomationSettingModel item in processingAutomations)
                {
                    IEncrypt   encrypt = ObjectFactory.GetInstance <IEncrypt>();
                    SFTPHelper sftp    = new SFTPHelper(item.HostIp, item.Port, item.UserName, encrypt.Decrypt(item.PassWord), LoggerHelper);

                    bool bconn = sftp.Connect();
                    if (bconn)
                    {
                        try
                        {
                            UserBaseEntity user = users.Find(r => r.ID == item.CreatedBy);
                            if (user != null)
                            {
                                Dictionary <string, dynamic> dicType = GetDictionary(item);

                                foreach (var type in dicType)
                                {
                                    if (sftp.DirExist(type.Key))
                                    {
                                        string localPath = filePath + (item.CommunityName + "/" + type.Key.Replace("/", "").Replace("\\", ""))
                                                           + "/" + DateTime.Now.ToString("MM-dd-yyyy") + "/";
                                        string failedPath  = type.Key + "/Failed/" + DateTime.Now.ToString("MM-dd-yyyy") + "/";
                                        string successPath = type.Key + "/Processed/" + DateTime.Now.ToString("MM-dd-yyyy") + "/";

                                        //从sftp获取文件到本地目录
                                        List <string> objList       = new List <string>();
                                        List <string> LocalFileList = new List <string>();
                                        objList = sftp.GetFileList(type.Key, new string[] { ".xls", ".xlsx" });
                                        if (objList.Count > 0)
                                        {
                                            Helper.CheckAndCreatePath(localPath);
                                            foreach (object obj in objList)
                                            {
                                                string fileUrl     = obj.ToString();
                                                string newFileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "--" + fileUrl;
                                                sftp.Get(type.Key + "/" + fileUrl, localPath + "/" + newFileName);
                                                LocalFileList.Add(newFileName);
                                                sftp.DeleteFile(type.Key + "/" + fileUrl);
                                            }

                                            if (Directory.Exists(localPath))
                                            {
                                                DirectoryInfo dr = new DirectoryInfo(localPath);
                                                foreach (FileInfo file in dr.GetFiles()
                                                         .Where(r => r.Extension.ToLower() == ".xls" || r.Extension.ToLower() == ".xlsx" &&
                                                                LocalFileList.Contains(r.Name)))
                                                {
                                                    Console.WriteLine(string.Format("Start processing {0}", file.FullName));
                                                    LoggerHelper.Info(string.Format("Start processing {0}", file.FullName));
                                                    //导入数据到BUP表
                                                    DataTable dt       = new DataTable();
                                                    string    errorMsg = "";
                                                    errorMsg = _bupProcessBusiness.InvalidateFile(file.FullName, type.Value.Count, type.Value.Type, out dt);
                                                    if (!string.IsNullOrEmpty(errorMsg))
                                                    {
                                                        Console.WriteLine(string.Format("Result: Error. Message: {0}", errorMsg));
                                                        LoggerHelper.Info(string.Format("Result: Error. Message: {0}", errorMsg));
                                                        WriteErrorMsg(sftp, localPath, failedPath, file, errorMsg);
                                                        continue;
                                                    }

                                                    int    identity       = 0;
                                                    string originFileName = file.Name.Substring(file.Name.IndexOf("--") + 2);
                                                    //Automation   默认发送邀请
                                                    switch ((BUPType)type.Value.Type)
                                                    {
                                                    case BUPType.School:
                                                        errorMsg = _bupProcessBusiness.ProcessSchool(dt, user.ID, originFileName, file.Name, user,
                                                                                                     out identity, BUPProcessType.Automation, item.CommunityId);
                                                        break;

                                                    case BUPType.Classroom:
                                                        errorMsg = _bupProcessBusiness.ProcessClassroom(dt, user.ID, originFileName, file.Name, user,
                                                                                                        item.CommunityId, out identity, BUPProcessType.Automation);
                                                        break;

                                                    case BUPType.Class:
                                                        errorMsg = _bupProcessBusiness.ProcessClass(dt, user.ID, originFileName, file.Name, user,
                                                                                                    out identity, BUPProcessType.Automation, item.CommunityId);
                                                        break;

                                                    case BUPType.Teacher:
                                                        errorMsg = _bupProcessBusiness.ProcessTeacher(dt, user.ID, "1", originFileName, file.Name, user,
                                                                                                      out identity, BUPProcessType.Automation, item.CommunityId);
                                                        break;

                                                    case BUPType.Student:
                                                        errorMsg = _bupProcessBusiness.ProcessStudent(dt, user.ID, originFileName, file.Name, user,
                                                                                                      out identity, BUPProcessType.Automation, item.CommunityId);
                                                        break;

                                                    case BUPType.CommunityUser:
                                                        errorMsg = _bupProcessBusiness.ProcessCommunityUser(dt, user.ID, false, "1", originFileName, file.Name,
                                                                                                            user, item.CommunityId, out identity, BUPProcessType.Automation);
                                                        break;

                                                    case BUPType.CommunitySpecialist:
                                                        errorMsg = _bupProcessBusiness.ProcessCommunityUser(dt, user.ID, true, "1", originFileName, file.Name,
                                                                                                            user, item.CommunityId, out identity, BUPProcessType.Automation);
                                                        break;

                                                    case BUPType.Principal:
                                                        errorMsg = _bupProcessBusiness.ProcessPrincipal(dt, user.ID, false, originFileName, file.Name, "1",
                                                                                                        user, item.CommunityId, out identity, BUPProcessType.Automation);
                                                        break;

                                                    case BUPType.SchoolSpecialist:
                                                        errorMsg = _bupProcessBusiness.ProcessPrincipal(dt, user.ID, true, originFileName, file.Name, "1",
                                                                                                        user, item.CommunityId, out identity, BUPProcessType.Automation);
                                                        break;

                                                    case BUPType.Parent:
                                                        errorMsg = _bupProcessBusiness.ProcessParent(dt, user.ID, originFileName, file.Name,
                                                                                                     out identity, BUPProcessType.Automation);
                                                        break;

                                                    default:
                                                        errorMsg = "Can not find this action: " + type.Value.Type;
                                                        break;
                                                    }
                                                    if (!string.IsNullOrEmpty(errorMsg))
                                                    {
                                                        Console.WriteLine(string.Format("Result: Error. Message: {0}", errorMsg));
                                                        LoggerHelper.Info(string.Format("Result: Error. Message: {0}", errorMsg));
                                                        WriteErrorMsg(sftp, localPath, failedPath, file, errorMsg);
                                                        continue;
                                                    }

                                                    //执行数据导入操作
                                                    try
                                                    {
                                                        if (identity > 0)
                                                        {
                                                            ProcessHandler handler     = new ProcessHandler(BUPTaskBusiness.Start);
                                                            IAsyncResult   asyncResult = handler.BeginInvoke(identity, user.ID, null, null);
                                                            handler.EndInvoke(asyncResult);  //此方法会等待异步执行完成后再往下执行
                                                            ProcessData(identity, user, LoggerHelper, sftp, successPath, file);
                                                        }
                                                    }
                                                    catch (Exception ex)
                                                    {
                                                        Console.WriteLine(string.Format("Result: Error. Message: {0}", ex.Message));
                                                        LoggerHelper.Info(string.Format("Result: Error. Message: {0}", errorMsg));
                                                        WriteErrorMsg(sftp, localPath, failedPath, file, ex.Message);
                                                        continue;
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                                sftp.Disconnect();
                            }
                            else
                            {
                                LoggerHelper.Debug("Can not find user with the ID: " + item.CreatedBy + ". DateTime: " + DateTime.Now.ToString());
                            }
                        }
                        catch (Exception ex)
                        {
                            if (sftp.IsConnected)
                            {
                                sftp.Disconnect();
                            }
                            Console.WriteLine(ex.Message);
                            LoggerHelper.Info(string.Format("Result: Error. Message: {0}", ex.Message));
                            LoggerHelper.Debug(ex);
                        }
                    }
                    else
                    {
                        LoggerHelper.Info("can not connect to the sftp server");
                        Console.WriteLine("can not connect to the sftp server");
                    }
                }
            }
            LoggerHelper.Info("end ......");
            Console.WriteLine("end ......");
        }