public ActionResult Create(TransferWorkViewModel model) { if (ModelState.IsValid) { var TransferWork = new TransferWork(); AutoMapper.Mapper.Map(model, TransferWork); TransferWork.IsDeleted = false; TransferWork.CreatedUserId = WebSecurity.CurrentUserId; TransferWork.ModifiedUserId = WebSecurity.CurrentUserId; TransferWork.CreatedDate = DateTime.Now; TransferWork.ModifiedDate = DateTime.Now; TransferWork.DayDecision = DateTime.Now; var staffs = staffRepository.GetStaffsById(model.StaffId.Value); var user = userRepository.GetUserById(WebSecurity.CurrentUserId); TransferWork.BranchDepartmentOldId = staffs.BranchDepartmentId; TransferWork.PositionOld = staffs.Position; TransferWork.UserId = user.Id; TransferWork.Status = App_GlobalResources.Wording.TransferWorkStatus_Pending; TransferWork.CodeStaffOld = staffs.Code; //tạo mã nhân viên mới khi chuyển nhân viên đi //lấy mã tăng tự động ra và cộng thêm 1 đơn vị var prefix1 = Erp.BackOffice.Helpers.Common.GetSetting("prefixOrderNo_Staff"); var department = branchDepartmentRepository.GetvwBranchDepartmentById(TransferWork.BranchDepartmentNewId.Value); TransferWork.CodeStaffNew = Erp.BackOffice.Helpers.Common.GetCodebyBranch(prefix1, staffs.Id, department.BranchCode); //tạo mã quyết định điều chuyển công tác TransferWorkRepository.InsertTransferWork(TransferWork); var prefix2 = Erp.BackOffice.Helpers.Common.GetSetting("prefixOrderNo_TransferWork"); TransferWork.Code = Erp.BackOffice.Helpers.Common.GetCode(prefix2, TransferWork.Id); TransferWorkRepository.UpdateTransferWork(TransferWork); TempData[Globals.SuccessMessageKey] = App_GlobalResources.Wording.InsertSuccess + " " + TransferWork.Code; return(RedirectToAction("Index")); } TempData[Globals.FailedMessageKey] = App_GlobalResources.Error.InsertUnsucess; return(RedirectToAction("Index")); }
public void WorkerLoop() { try { // do work LogManager.GetLogger("SiteLogger").Info("Working on " + mWorkItem); //logger.logEntry(this.ToString(), "Working on " + mWorkItem, LogMsgSeverity.Information, false); //TODO: Write the data to the work table to support restarts //FileTransferService.TransferWorkDataHandler twdh = new FileTransferService.TransferWorkDataHandler(); //FileTransferService.TransferWorkDS twDS = new FileTransferService.TransferWorkDS(); //twDS.TransferWork.AddTransferWorkRow(0, //twdh.SetTransferWork( try { TransferMainService transferMainService = new TransferMainService(); DestinationService destinationsService = new DestinationService(); TransferWorkService transferWorkService = new TransferWorkService(); FTPProcessor ifpx; DoFTPActionStartDelegate dlgt; IAsyncResult ar; // Look up transfer record by ID TransferMain tm = transferMainService.GetByTransferRefId(mWorkRefId); mTransferType = (TransferTypeList)tm.TransferTypeId; // check to make sure the file is complete if (mTransferType == TransferTypeList.FileWatchAndProcess) { while (!TryToOpenInExclusiveMode(mWorkItem)) { System.Threading.Thread.Sleep(5000); } } // Look up transfer record by ID TList<Destination> dests = destinationsService.GetByTransferRefId(mWorkRefId); switch (mTransferType) { case TransferTypeList.FileWatchAndProcess: if (tm.UsePendingFileStucture) SetFilePending(); // Create the delegate. //MDBInterfaceProcessor mdbip = new MDBInterfaceProcessor(); //mdbip.ProcessFileComplete += new ProcessFileCompleteDelegate(OnProcessFileComplete); bool processResult; ProcessTypeService pts = new ProcessTypeService(); ProcessType pt = pts.GetByProcessTypeId((short)tm.ProcessTypeId); string path = new FileInfo(Assembly.GetExecutingAssembly().Location).DirectoryName; this.ExecuteProcessorAssemblyMethod(mWorkItem, (short)tm.ProcessTypeId, out processResult, System.IO.Path.Combine(path, pt.LoadAssembly), pt.ClassName); //mdbip.ProcessFile(mWorkItem, (InterfaceType)ip.ProcessTypeId , out processResult); break; case TransferTypeList.FileWatchFtpPut: if (tm.UsePendingFileStucture) SetFilePending(); // fire a transfer for every destination you find foreach (Destination dest in dests) { // Create the delegate. ifpx = new FTPProcessor(); dlgt = new DoFTPActionStartDelegate(ifpx.DoFTPAction); /// write transfer to work table TransferWork transferWork = new TransferWork(); transferWork.TransferWorkRefId = Guid.NewGuid(); transferWork.TransferRefId = dest.TransferRefId; transferWork.DestinationRefId = dest.DestinationRefId; transferWork.Filename = mWorkItem; transferWork.SubmitTime = DateTime.Now; //transferWork.CompletionTime = DateTime.MinValue; transferWork.Retires = 0; transferWork.StatusTypeId = (short)StatusTypeList.New; transferWorkService.Save(transferWork); // Initiate the asychronous call. Include an AsyncCallback // delegate representing the callback method, and the data // needed to call EndInvoke. //TODO: Make this a generic call back function ar = dlgt.BeginInvoke(new FTPEventArgs(dest.DestinationRefId, dest.DestServer, dest.SourceDir, dest.DestDir, dest.Username, dest.Password, true, FtpClient.TransferType.PUT, mWorkItem, dest.DeleteAfterProcessing, ftpRetryThreshhold), out processResult, out destinationRefId, new AsyncCallback(OnFTPActionComplete), dlgt); } break; case TransferTypeList.FileWatchFtpPutGet: break; case TransferTypeList.FtpGet: if (tm.UsePendingFileStucture) { FileInfo file = new FileInfo(mWorkItem); if (!file.Exists) file.Create(); // used for gets SetFilePending(); } foreach (Destination dest in dests) { // Create the delegate. ifpx = new FTPProcessor(); dlgt = new DoFTPActionStartDelegate(ifpx.DoFTPAction); /// write transfer to work table TransferWork transferWork = new TransferWork(); transferWork.TransferWorkRefId = Guid.NewGuid(); transferWork.TransferRefId = dest.TransferRefId; transferWork.DestinationRefId = dest.DestinationRefId; transferWork.Filename = mWorkItem; transferWork.SubmitTime = DateTime.Now; transferWork.Retires = 0; transferWork.StatusTypeId = (short)StatusTypeList.New; try { transferWorkService.Save(transferWork); } catch (System.Data.SqlClient.SqlException ex) { LogManager.GetLogger("SiteLogger").Warn("Error Saving Transfer work on " + mWorkItem,ex); //logger.logEntry(this.ToString(), "Error Saving Transfer work on " + mWorkItem + " " + ex.Message, LogMsgSeverity.Warning, false); } // Initiate the asychronous call. Include an AsyncCallback // delegate representing the callback method, and the data // needed to call EndInvoke. //TODO: Make this a generic call back function ar = dlgt.BeginInvoke(new FTPEventArgs(dest.DestinationRefId, dest.SourceServer, dest.DestDir, dest.SourceDir, dest.Username, dest.Password, true, FtpClient.TransferType.GET, mWorkItem, dest.DeleteAfterProcessing, ftpRetryThreshhold), out processResult, out destinationRefId, new AsyncCallback(OnFTPActionComplete), dlgt); } break; case TransferTypeList.FtpGetPut: break; } LogManager.GetLogger("SiteLogger").Debug("Async WorkerLoop(): Started."); //logger.logEntry(this.ToString(), "Async WorkerLoop(): Started.", LogMsgSeverity.Trace, false); // sleep for 5 sec then check result Thread.Sleep(5000); LogManager.GetLogger("SiteLogger").Debug("Async WorkerLoop(): Ended."); //logger.logEntry(this.ToString(), "Async WorkerLoop(): Ended.", LogMsgSeverity.Trace, false); } catch (Exception ex) { LogManager.GetLogger("SiteLogger").Fatal("Async WorkerLoop(): Failed.", ex); //logger.logEntry(this.ToString(), "Async WorkerLoop(): Failed." + ex.Message, LogMsgSeverity.Critical, false); } } catch (Exception ex) { LogManager.GetLogger("SiteLogger").Fatal("Async WorkerLoop(): Failed.", ex); //logger.logEntry(this.ToString(), "Async WorkerLoop(): Failed." + ex.Message, LogMsgSeverity.Critical, false); } }