Exemplo n.º 1
0
        public Task CommitTransactionAsync(string message, bool restart = true)
        {
            return(RunOnMain(() =>
            {
                if (m_options.Dryrun)
                {
                    if (!restart)
                    {
                        if (m_transaction != null)
                        {
                            m_transaction.Rollback();
                        }
                        m_transaction = null;
                    }
                    return;
                }

                using (new Logging.Timer(LOGTAG, "CommitTransactionAsync", message))
                    m_transaction.Commit();
                if (restart)
                {
                    m_transaction = m_db.BeginTransaction();
                }
                else
                {
                    m_transaction = null;
                }
            }));
        }
Exemplo n.º 2
0
        public List <long> GetVybavOdvybavDoklady(long[] Ids, bool pri)
        {
            // Vybavi doklady. V zozname by mali byt iba V jedněho typu

            var result = new List <long>();

            System.Data.IDbTransaction transaction = this.BeginTransaction();

            try
            {
                if (pri)
                {
                    var doklady = GetList(Db.From <tblD_PRI_0>().Where(x => Sql.In(x.D_PRI_0, Ids)));
                    if (!doklady.Any())
                    {
                        throw new WebEasValidationException(null, "No receipts found");
                    }

                    foreach (var dkl in doklady)
                    {
                        dkl.V = !dkl.V;
                        UpdateData(dkl);
                    }
                }
                else
                {
                    var doklady = GetList(Db.From <tblD_VYD_0>().Where(x => Sql.In(x.D_VYD_0, Ids)));
                    if (!doklady.Any())
                    {
                        throw new WebEasValidationException(null, "No expenses found");
                    }
                    foreach (var dkl in doklady)
                    {
                        dkl.V = !dkl.V;
                        UpdateData(dkl);
                    }
                }

                transaction.Commit();
            }
            catch (WebEasException ex)
            {
                transaction.Rollback();
                throw ex;
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                throw new WebEasException("Nastala chyba pri vybavovaní dokladu", "Nastala chyba pri vybavovaní dokladu", ex);
            }

            return(result);

            //return result;
        }
Exemplo n.º 3
0
        /// <summary>
        /// 插入教练信息和绑定信息
        /// </summary>
        /// <param name="coach"></param>
        /// <returns></returns>
        private static bool ImportCoach(Sys.Models.Coach coach)
        {
            System.Data.IDbConnection connection = Comm.Helper.DapperHelper.Instance;
            connection.Open();
            System.Data.IDbTransaction transaction = connection.BeginTransaction();

            try
            {
                int coach_id             = connection.Insert <Sys.Models.Coach>(coach, transaction);
                var student_venue_result = connection.Insert <Sys.Models.Coach_Venue>(new Sys.Models.Coach_Venue()
                {
                    AddTime = DateTime.Now,
                    CoachID = coach_id,
                    VenueID = coach.VenueID,
                }, transaction);

                transaction.Commit();
                return(true);
            }
            catch (Exception ex)
            {
                logs.Error("教练添加失败", ex);
                transaction.Rollback();
                return(false);
            }
            finally
            {
                connection.Close();
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// 插入学生信息和绑定信息
        /// </summary>
        /// <param name="student"></param>
        /// <returns></returns>
        private static bool ImportStudent(Sys.Models.Student student)
        {
            System.Data.IDbConnection connection = Comm.Helper.DapperHelper.Instance;
            connection.Open();
            System.Data.IDbTransaction transaction = connection.BeginTransaction();

            try
            {
                student.State = 1;
                int student_id           = connection.Insert <Sys.Models.Student>(student, transaction);
                var student_venue_result = connection.Insert <Sys.Models.Student_Venue>(new Sys.Models.Student_Venue()
                {
                    AddTime   = DateTime.Now,
                    StudentID = student_id,
                    VenueID   = student.VenueID,
                }, transaction);

                transaction.Commit();
                return(true);
            }
            catch (Exception ex)
            {
                logs.Error("学生添加失败", ex);
                transaction.Rollback();
                return(false);
            }
            finally
            {
                connection.Close();
            }
        }
Exemplo n.º 5
0
 public void Rollback()
 {
     if (m_isTemporary)
     {
         m_parent.Rollback();
     }
 }
Exemplo n.º 6
0
            public virtual void Dispose()
            {
                if (m_tablename != null)
                {
                    try
                    {
                        using (var cmd = m_connection.CreateCommand())
                        {
                            cmd.Transaction = m_transaction;
                            cmd.ExecuteNonQuery(string.Format(@"DROP TABLE IF EXISTS ""{0}""", m_tablename));
                        }
                    }
                    catch {}
                    finally { m_tablename = null; }
                }

                if (m_insertCommand != null)
                {
                    try { m_insertCommand.Dispose(); }
                    catch {}
                    finally { m_insertCommand = null; }
                }

                if (m_transaction != null)
                {
                    try { m_transaction.Rollback(); }
                    catch {}
                    finally { m_transaction = null; }
                }
            }
Exemplo n.º 7
0
            public void Dispose()
            {
                if (m_insertPreviousElementCommand != null)
                {
                    try { m_insertPreviousElementCommand.Dispose(); }
                    catch {}
                    finally { m_insertPreviousElementCommand = null; }
                }

                if (m_insertCurrentElementCommand != null)
                {
                    try { m_insertCurrentElementCommand.Dispose(); }
                    catch {}
                    finally { m_insertCurrentElementCommand = null; }
                }

                if (m_transaction != null)
                {
                    try { m_transaction.Rollback(); }
                    catch {}
                    finally
                    {
                        m_previousTable = null;
                        m_currentTable  = null;
                        m_transaction   = null;
                    }
                }
            }
Exemplo n.º 8
0
        public static void SetAttendanceState(string code, int state)
        {
            string sql1 = "select * from attendance where code='" + code + "' and [date]='" + DateTime.Today.ToString("s") + "'";
            string sql2 = "insert into attendance(id, code, [date], [state])";

            sql2 += " values(null, '" + code + "', '" + DateTime.Today.ToString("s") + "'," + state + ")";
            string sql3 = "update attendance set state=" + state + " where code='" + code + "'";

            //db.Connection.Open();
            System.Data.IDbTransaction trans = db.Connection.BeginTransaction();
            try
            {
                var o = db.Connection.Query(sql1, null, trans).ToList();

                if (o.Count == 0)
                {
                    db.Connection.Execute(sql2, null, trans);
                }
                else
                {
                    db.Connection.Execute(sql3, null, trans);
                }

                trans.Commit();
            }
            catch (Exception ex)
            {
                trans.Rollback();
                throw (ex);
            }
            finally
            {
                //db.Connection.Close();
            }
        }
Exemplo n.º 9
0
        /// <summary>
        /// 确认上课完成
        /// </summary>
        /// <param name="pKID">课程编号</param>
        /// <param name="venueID">场馆编号</param>
        /// <param name="teachState">排课表编号</param>
        /// <param name="curriculumState">学生排课关联表状态</param>
        /// <returns></returns>
        public static bool DoneTeachingSche(int pKID, int venueID,
                                            Sys.Models.StateEnum.TeachingSchedule teachState,
                                            Sys.Models.StateEnum.Curriculum curriculumState)
        {
            System.Data.IDbConnection connection = Comm.Helper.DapperHelper.Instance;
            connection.Open();
            System.Data.IDbTransaction transaction = connection.BeginTransaction();

            try
            {
                var teachingInfo = DapperHelper.Instance.Get <Sys.Models.TeachingSchedule>(pKID);
                if (teachingInfo.VenueID != venueID)
                {
                    throw new Comm.YYException.YYException("操作非法");
                }

                var sql = "SELECT StudentID  FROM [dbo].[Curriculum]  where PKID=@pkID and [State]=@state";

                var result = DapperHelper.Instance.Query <int>(sql, new
                {
                    pkId  = pKID,
                    state = Sys.Models.StateEnum.Curriculum.InClassTeachingSche
                });

                //没有约课成功的学生则认为已经处理完成
                if (result == null || result.Count() == 0)
                {
                    return(true);
                }

                //修改排课状态
                var updateCurriculumSql = "update Curriculum set State=@state where PKID=@pkId";
                int updateCurriculum    = connection.Execute(updateCurriculumSql, new
                {
                    pkId  = pKID,
                    state = Convert.ToInt32(curriculumState)
                }, transaction);

                teachingInfo.State = Convert.ToInt32(teachState);
                connection.Update(teachingInfo, transaction);

                transaction.Commit();
                return(true);
            }
            catch (Comm.YYException.YYException)
            {
                throw;
            }
            catch (Exception ex)
            {
                logs.Error("确认上课完成失败", ex);
                transaction.Rollback();
                return(false);
            }
            finally
            {
                connection.Close();
            }
        }
Exemplo n.º 10
0
        public static int Ins <T>(this System.Data.IDbConnection cnn
                                  , System.Collections.Generic.IEnumerable <T> entities
                                  , int?commandTimeout = null
                                  , System.Data.CommandType?commandType = null)
        {
            int  ret     = -1;
            bool wasOpen = false;

            if (cnn.State != System.Data.ConnectionState.Open)
            {
                cnn.Open();
            }
            else
            {
                wasOpen = true;
            }

            System.Data.IDbTransaction transaction = cnn.BeginTransaction();

            // string sql = "INSERT INTO T VALUES (@A, @B)";
            string sql = TableInfoCache <T> .Instance.InsertStatement;

            try
            {
                ret = cnn.Execute(sql, entities, transaction);
                transaction.Commit();
            }
            catch (System.Exception ex)
            {
                System.Console.WriteLine("Commit Exception Type: {0}", ex.GetType().FullName);
                System.Console.WriteLine("  Message: {0}", ex.Message);

                // Attempt to roll back the transaction.
                try
                {
                    transaction.Rollback();
                }
                catch (System.Exception ex2)
                {
                    // This catch block will handle any errors that may have occurred
                    // on the server that would cause the rollback to fail, such as a closed connection.
                    System.Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType().FullName);
                    System.Console.WriteLine("  Message: {0}", ex2.Message);
                }

                throw;
            }
            finally
            {
                if (!wasOpen && cnn.State != System.Data.ConnectionState.Closed)
                {
                    cnn.Close();
                }
            }

            return(ret);
        }
Exemplo n.º 11
0
        public static int ExecuteNonQuery(System.Data.IDbCommand cmd)
        {
            int iAffected = -1;

            using (System.Data.IDbConnection idbConn = GetConnection())
            {
                lock (idbConn)
                {
                    lock (cmd)
                    {
                        cmd.Connection = idbConn;

                        if (cmd.Connection.State != System.Data.ConnectionState.Open)
                        {
                            cmd.Connection.Open();
                        }

                        using (System.Data.IDbTransaction idbtTrans = idbConn.BeginTransaction())
                        {
                            try
                            {
                                cmd.Transaction = idbtTrans;

                                iAffected = cmd.ExecuteNonQuery();
                                idbtTrans.Commit();
                            } // End Try
                            catch (System.Data.Common.DbException ex)
                            {
                                if (idbtTrans != null)
                                {
                                    idbtTrans.Rollback();
                                }

                                iAffected = -2;

                                if (Log(ex))
                                {
                                    throw;
                                }
                            } // End catch
                            finally
                            {
                                if (cmd.Connection.State != System.Data.ConnectionState.Closed)
                                {
                                    cmd.Connection.Close();
                                }
                            } // End Finally
                        }     // End Using idbtTrans
                    }         // End lock cmd
                }             // End lock idbConn
            }                 // End Using idbConn

            return(iAffected);
        } // End Function Execute
Exemplo n.º 12
0
        public void OneTimeTearDown()
        {
            if (Trans != null)
            {
                Trans.Rollback();
            }

            if (Connection != null && Connection.IsOpen())
            {
                Connection.Close();
            }
        }
Exemplo n.º 13
0
 public static void RollbackTransaction(System.Data.IDbTransaction transaction)
 {
     if (transaction != null)
     {
         if (transaction.Connection.State == System.Data.ConnectionState.Open)
         {
             transaction.Rollback();
         }
         transaction.Connection.Dispose();
         transaction.Dispose();
     }
 }
Exemplo n.º 14
0
        /// <summary>
        /// 插入工资表 修改课程表
        /// </summary>
        /// <param name="coachWage"></param>
        /// <param name="coachWageSubList"></param>
        /// <returns></returns>
        private bool PrePayCoachMoney(Sys.Models.CoachWages coachWage, IList <Sys.Models.CoachWages_Sub> coachWageSubList)
        {
            System.Data.IDbConnection connection = Comm.Helper.DapperHelper.Instance;
            connection.Open();
            System.Data.IDbTransaction transaction = connection.BeginTransaction();

            using (connection)
            {
                try
                {
                    //插入工资主表
                    var coachWageId = connection.Insert <Sys.Models.CoachWages>(coachWage, transaction);

                    //更新这个排课表、约课表
                    coachWageSubList.ToList().ForEach((c) =>
                    {
                        c.WagesID = coachWageId;
                        //更新这个排课表
                        connection.Execute("UPDATE[dbo].[TeachingSchedule] SET [State] =@state WHERE PKID=@pkID", new
                        {
                            state = Convert.ToInt32(Sys.Models.StateEnum.TeachingSchedule.PayCoachMoney),
                            pkID  = c.PKID
                        }, transaction);

                        //更新约课表
                        connection.Execute("UPDATE[dbo].[Curriculum] SET [State] =@state WHERE CurriculumID=@curriculumID", new
                        {
                            state        = Convert.ToInt32(Sys.Models.StateEnum.Curriculum.PayCoachMoney),
                            curriculumID = c.CurriculumID
                        }, transaction);
                    });

                    //插入工资字表
                    connection.Insert <Sys.Models.CoachWages_Sub>(coachWageSubList, transaction);

                    transaction.Commit();
                }
                catch (Exception ex)
                {
                    logs.Error("预发工资失败", ex);
                    transaction.Rollback();
                    return(false);
                }
            }

            return(true);
        }
Exemplo n.º 15
0
        /// <summary>
        /// 学生注册
        /// </summary>
        /// <param name="coach"></param>
        /// <returns></returns>
        public static bool Reginster(Sys.Models.Student student)
        {
            if (!string.IsNullOrWhiteSpace(student.OpenID))
            {
                var sql        = "select * from WxUserInfo where OpenId=@openId";
                var wxuserInfo = Comm.Helper.DapperHelper.Instance.QueryFirst <Sys.Models.WxUserInfo>(sql, new
                {
                    openId = student.OpenID
                });

                student.NickName = wxuserInfo.NickName;
                student.HeadUrl  = wxuserInfo.HeadImgUrl;
            }

            System.Data.IDbConnection connection = Comm.Helper.DapperHelper.Instance;
            connection.Open();
            System.Data.IDbTransaction transaction = connection.BeginTransaction();

            try
            {
                student.State = 1;
                int student_id           = connection.Insert <Sys.Models.Student>(student, transaction);
                var student_venue_result = connection.Insert <Sys.Models.Student_Venue>(new Sys.Models.Student_Venue()
                {
                    AddTime   = DateTime.Now,
                    StudentID = student_id,
                    VenueID   = student.VenueID,
                }, transaction);

                transaction.Commit();
                return(true);
            }
            catch (Exception ex)
            {
                logs.Error("学生注册失败", ex);
                transaction.Rollback();
                return(false);
            }
            finally
            {
                connection.Close();
            }
        }
Exemplo n.º 16
0
        public IHttpActionResult SetWagesOver(dynamic query)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            System.Data.IDbConnection connection = Comm.Helper.DapperHelper.Instance;
            connection.Open();
            System.Data.IDbTransaction transaction = connection.BeginTransaction();

            try
            {
                var venueId = (Newtonsoft.Json.Linq.JObject.Parse(query.ToString()))["VenueID"].ToString();
                Newtonsoft.Json.Linq.JArray ids = ((Newtonsoft.Json.Linq.JObject.Parse(query.ToString()))["WagesIDs"]);

                using (connection)
                {
                    foreach (var item in ids.ToArray())
                    {
                        connection.Execute("UPDATE[dbo].[CoachWages] SET [State] =1, [PayTime]=@payTime WHERE WagesID=@wagesID and VenueID=@venueId", new
                        {
                            wagesID = Convert.ToInt32(item),
                            venueId = Convert.ToInt32(query.VenueID),
                            payTime = DateTime.Now,
                        }, transaction);
                    }

                    transaction.Commit();
                }

                return(Ok(Comm.ResponseModel.ResponseModelBase.Success()));
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                logs.Error("设置工资发放完毕失败", ex);
                return(BadRequest());
            }
        }
Exemplo n.º 17
0
        public ResponseResult <bool> SignOut()
        {
            System.Data.IDbTransaction idbTrans = null;
            try
            {
                var token = Request.Token();
                var loginTokenServices = GetService <SysLoginTokenService>();
                var loginLogService    = GetService <SysLoginLogService>(loginTokenServices);
                idbTrans = loginTokenServices.BeginTrans();
                loginTokenServices.DisableToken(token, idbTrans);
                loginLogService.LoginOutByToken(token, idbTrans);

                idbTrans?.Commit();
                return(ResponseResult <bool> .GenSuccessResponse(true));
            }
            catch (Exception ex)
            {
                LogHelper.WriteErrorLog(HttpContext.Current.Request.RawUrl, ex);
                idbTrans?.Rollback();
                return(ResponseResult <bool> .GenFaildResponse(ex.Message));
            }
        }
Exemplo n.º 18
0
        private void CreateSchemaAndUser(string sql, System.Data.IDbConnection connection)
        {
            if (connection == null)
            {
                throw new Exception("Failed to set a connection to external available instance");
            }
            if (connection.State == System.Data.ConnectionState.Closed)
            {
                connection.Open();
            }
            using (System.Data.IDbTransaction transaction = connection.BeginTransaction(System.Data.IsolationLevel.ReadCommitted))
            {
                using (System.Data.IDbCommand command = connection.CreateCommand())
                {
                    command.Transaction = transaction;
                    command.CommandText = sql;
                    try
                    {
                        //if (command.Connection.State == System.Data.ConnectionState.Closed)
                        //    command.Connection.Open();
                        command.ExecuteScalar();
                        transaction.Commit();
                    }
                    catch (Exception ex)
                    {
                        if (connection != null && connection.State != System.Data.ConnectionState.Closed)
                        {
                            transaction.Rollback();
                        }

                        Maps.Instance.DuradosMap.Logger.Log("AppFactory", null, "CreateNewSchemaAndUser", ex, 1, "Faild to create new schema for new rds app");
                        throw new Exception("Faild to create new schema for new rds app", ex);
                    }
                }
            }
        }
Exemplo n.º 19
0
        /// <summary>
        /// 取消学生预约的课程(适用于学校停课、教练请假)
        /// </summary>
        /// <param name="pKID">课程编号</param>
        /// <param name="venueID">场馆编号</param>
        /// <param name="teachState">排课表编号</param>
        /// <param name="curriculumState">学生排课关联表状态</param>
        /// <param name="classHoursDetailedState">学生课时明细状态</param>
        /// <param name="remark">备注</param>
        /// <returns></returns>
        public static bool CancelTeachingSche(int pKID, int venueID,
                                              Sys.Models.StateEnum.TeachingSchedule teachState,
                                              Sys.Models.StateEnum.Curriculum curriculumState,
                                              Sys.Models.StateEnum.ClassHoursDetailed classHoursDetailedState,
                                              string remark)
        {
            /*
             * 检测该操作是否合法
             *
             * 修改约课表状态
             * 回写学生约课课时、添加日志记录
             * 修改排课表信息
             *
             */

            System.Data.IDbConnection connection = Comm.Helper.DapperHelper.Instance;
            connection.Open();
            System.Data.IDbTransaction transaction = connection.BeginTransaction();

            try
            {
                var teachingInfo = DapperHelper.Instance.Get <Sys.Models.TeachingSchedule>(pKID);
                if (teachingInfo.VenueID != venueID)
                {
                    throw new Comm.YYException.YYException("操作非法");
                }

                var         sql    = "SELECT StudentID  FROM [dbo].[Curriculum]  where PKID=@pkID and [State]=@state";
                IList <int> result = new List <int>();
                if (teachState == Sys.Models.StateEnum.TeachingSchedule.StopTeachingSche)
                {
                    if (teachingInfo.State != Convert.ToInt32(Sys.Models.StateEnum.TeachingSchedule.BookTeachingScheDone))
                    {
                        throw new Comm.YYException.YYException("课程不是预约成功状态");
                    }
                    result = DapperHelper.Instance.Query <int>(sql, new
                    {
                        pkId  = pKID,
                        state = Sys.Models.StateEnum.Curriculum.BookTeachingScheDone
                    }).ToList();
                    //没有约课成功的学生则认为已经处理完成
                    if (result == null || result.Count() == 0)
                    {
                        return(true);
                    }
                }
                else
                {
                    if (teachingInfo.State != Convert.ToInt32(Sys.Models.StateEnum.TeachingSchedule.LeaveTeachingScheIng))
                    {
                        throw new Comm.YYException.YYException("课程未申请请假");
                    }
                    result = DapperHelper.Instance.Query <int>(sql, new
                    {
                        pkId  = pKID,
                        state = Sys.Models.StateEnum.Curriculum.CoachLeaveTeachingScheDone
                    }).ToList();
                    //没有约课成功的学生则认为已经处理完成
                    if (result == null || result.Count() == 0)
                    {
                        return(true);
                    }
                }

                //修改排课状态
                var updateCurriculumSql = "update Curriculum set State=@state where PKID=@pkId";
                int updateCurriculum    = connection.Execute(updateCurriculumSql, new
                {
                    pkId  = pKID,
                    state = Convert.ToInt32(curriculumState)
                }, transaction);

                var updateClassHoursNumberSql = "update ClassHoursNumber set ClassNumber=ClassNumber+1 where StudentID=@studentID and CoachID=@coachID and VenueID=@venueID and PKType=@PKType";
                foreach (var item in result)
                {
                    //修改学生课时数量
                    int updateClassHoursNumber = connection.Execute(updateClassHoursNumberSql, new
                    {
                        studentID = item,
                        coachID   = teachingInfo.CoachID,
                        venueID   = venueID,
                        PKType    = teachingInfo.PKType
                    }, transaction);

                    //添加学生课时数操作日志
                    connection.Insert <Sys.Models.ClassHoursDetailed>(new Sys.Models.ClassHoursDetailed()
                    {
                        AddTime   = DateTime.Now,
                        DNumber   = 1,
                        CoachID   = teachingInfo.CoachID.Value,
                        StudentID = item,
                        VenueID   = venueID,
                        DType     = Convert.ToInt32(classHoursDetailedState),
                        Remark    = remark,
                        PKType    = teachingInfo.PKType.Value,
                    }, transaction);
                }

                teachingInfo.State = Convert.ToInt32(teachState);
                connection.Update(teachingInfo, transaction);

                transaction.Commit();
                return(true);
            }
            catch (Comm.YYException.YYException)
            {
                throw;
            }
            catch (Exception ex)
            {
                logs.Error("取消课程失败", ex);
                transaction.Rollback();
                return(false);
            }
            finally
            {
                connection.Close();
            }
        }
Exemplo n.º 20
0
        private async Task RunAsync(string[] sources, Library.Utility.IFilter filter)
        {
            m_result.OperationProgressUpdater.UpdatePhase(OperationPhase.Backup_Begin);

            // New isolated scope for each operation
            using (new IsolatedChannelScope())
                using (m_database = new LocalBackupDatabase(m_options.Dbpath, m_options))
                {
                    m_result.SetDatabase(m_database);
                    m_result.Dryrun = m_options.Dryrun;

                    // Check the database integrity
                    Utility.UpdateOptionsFromDb(m_database, m_options);
                    Utility.VerifyParameters(m_database, m_options);

                    var probe_path = m_database.GetFirstPath();
                    if (probe_path != null && Duplicati.Library.Utility.Utility.GuessDirSeparator(probe_path) != System.IO.Path.DirectorySeparatorChar.ToString())
                    {
                        throw new UserInformationException(string.Format("The backup contains files that belong to another operating system. Proceeding with a backup would cause the database to contain paths from two different operation systems, which is not supported. To proceed without losing remote data, delete all filesets and make sure the --{0} option is set, then run the backup again to re-use the existing data on the remote store.", "no-auto-compact"), "CrossOsDatabaseReuseNotSupported");
                    }

                    if (m_database.PartiallyRecreated)
                    {
                        throw new UserInformationException("The database was only partially recreated. This database may be incomplete and the repair process is not allowed to alter remote files as that could result in data loss.", "DatabaseIsPartiallyRecreated");
                    }

                    if (m_database.RepairInProgress)
                    {
                        throw new UserInformationException("The database was attempted repaired, but the repair did not complete. This database may be incomplete and the backup process cannot continue. You may delete the local database and attempt to repair it again.", "DatabaseRepairInProgress");
                    }

                    // If there is no filter, we set an empty filter to simplify the code
                    // If there is a filter, we make sure that the sources are included
                    m_filter       = filter ?? new Library.Utility.FilterExpression();
                    m_sourceFilter = new Library.Utility.FilterExpression(sources, true);

                    Task parallelScanner = null;
                    Task uploader        = null;
                    try
                    {
                        // Setup runners and instances here
                        using (var db = new Backup.BackupDatabase(m_database, m_options))
                            using (var backend = new BackendManager(m_backendurl, m_options, m_result.BackendWriter, m_database))
                                using (var filesetvolume = new FilesetVolumeWriter(m_options, m_database.OperationTimestamp))
                                    using (var stats = new Backup.BackupStatsCollector(m_result))
                                        using (var bk = new Common.BackendHandler(m_options, m_backendurl, db, stats, m_result.TaskReader))
                                            // Keep a reference to these channels to avoid shutdown
                                            using (var uploadtarget = ChannelManager.GetChannel(Backup.Channels.BackendRequest.ForWrite))
                                            {
                                                long filesetid;
                                                var  counterToken = new CancellationTokenSource();
                                                using (var snapshot = GetSnapshot(sources, m_options))
                                                {
                                                    try
                                                    {
                                                        // Start parallel scan, or use the database
                                                        if (m_options.DisableFileScanner)
                                                        {
                                                            var d = m_database.GetLastBackupFileCountAndSize();
                                                            m_result.OperationProgressUpdater.UpdatefileCount(d.Item1, d.Item2, true);
                                                        }
                                                        else
                                                        {
                                                            parallelScanner = Backup.CountFilesHandler.Run(sources, snapshot, m_result, m_options, m_sourceFilter, m_filter, m_result.TaskReader, counterToken.Token);
                                                        }

                                                        // Make sure the database is sane
                                                        await db.VerifyConsistencyAsync(m_options.Blocksize, m_options.BlockhashSize, true);

                                                        // Start the uploader process
                                                        uploader = Backup.BackendUploader.Run(bk, m_options, db, m_result, m_result.TaskReader, stats);

                                                        // If we have an interrupted backup, grab the
                                                        string lasttempfilelist = null;
                                                        long   lasttempfileid   = -1;
                                                        if (!m_options.DisableSyntheticFilelist)
                                                        {
                                                            var candidates = (await db.GetIncompleteFilesetsAsync()).OrderBy(x => x.Value).ToArray();
                                                            if (candidates.Length > 0)
                                                            {
                                                                lasttempfileid   = candidates.Last().Key;
                                                                lasttempfilelist = m_database.GetRemoteVolumeFromID(lasttempfileid).Name;
                                                            }
                                                        }

                                                        // TODO: Rewrite to using the uploader process, or the BackendHandler interface
                                                        // Do a remote verification, unless disabled
                                                        PreBackupVerify(backend, lasttempfilelist);

                                                        // If the previous backup was interrupted, send a synthetic list
                                                        await Backup.UploadSyntheticFilelist.Run(db, m_options, m_result, m_result.TaskReader, lasttempfilelist, lasttempfileid);

                                                        // Grab the previous backup ID, if any
                                                        var prevfileset = m_database.FilesetTimes.FirstOrDefault();
                                                        if (prevfileset.Value.ToUniversalTime() > m_database.OperationTimestamp.ToUniversalTime())
                                                        {
                                                            throw new Exception(string.Format("The previous backup has time {0}, but this backup has time {1}. Something is wrong with the clock.", prevfileset.Value.ToLocalTime(), m_database.OperationTimestamp.ToLocalTime()));
                                                        }

                                                        var lastfilesetid = prevfileset.Value.Ticks == 0 ? -1 : prevfileset.Key;

                                                        // Rebuild any index files that are missing
                                                        await Backup.RecreateMissingIndexFiles.Run(db, m_options, m_result, m_result.TaskReader);

                                                        // This should be removed as the lookups are no longer used
                                                        m_database.BuildLookupTable(m_options);

                                                        // Prepare the operation by registering the filelist
                                                        m_result.OperationProgressUpdater.UpdatePhase(OperationPhase.Backup_ProcessingFiles);

                                                        var repcnt = 0;
                                                        while (repcnt < 100 && await db.GetRemoteVolumeIDAsync(filesetvolume.RemoteFilename) >= 0)
                                                        {
                                                            filesetvolume.ResetRemoteFilename(m_options, m_database.OperationTimestamp.AddSeconds(repcnt++));
                                                        }

                                                        if (await db.GetRemoteVolumeIDAsync(filesetvolume.RemoteFilename) >= 0)
                                                        {
                                                            throw new Exception("Unable to generate a unique fileset name");
                                                        }

                                                        var filesetvolumeid = await db.RegisterRemoteVolumeAsync(filesetvolume.RemoteFilename, RemoteVolumeType.Files, RemoteVolumeState.Temporary);

                                                        filesetid = await db.CreateFilesetAsync(filesetvolumeid, VolumeBase.ParseFilename(filesetvolume.RemoteFilename).Time);

                                                        // create USN-based scanner if enabled
                                                        var journalService = GetJournalService(sources, snapshot, filter, lastfilesetid);

                                                        // Run the backup operation
                                                        if (await m_result.TaskReader.ProgressAsync)
                                                        {
                                                            await RunMainOperation(sources, snapshot, journalService, db, stats, m_options, m_sourceFilter, m_filter, m_result, m_result.TaskReader, lastfilesetid).ConfigureAwait(false);
                                                        }
                                                    }
                                                    finally
                                                    {
                                                        //If the scanner is still running for some reason, make sure we kill it now
                                                        counterToken.Cancel();
                                                    }
                                                }

                                                // Ensure the database is in a sane state after adding data
                                                using (new Logging.Timer(LOGTAG, "VerifyConsistency", "VerifyConsistency"))
                                                    await db.VerifyConsistencyAsync(m_options.Blocksize, m_options.BlockhashSize, false);

                                                // Send the actual filelist
                                                if (await m_result.TaskReader.ProgressAsync)
                                                {
                                                    await Backup.UploadRealFilelist.Run(m_result, db, m_options, filesetvolume, filesetid, m_result.TaskReader);
                                                }

                                                // Wait for upload completion
                                                m_result.OperationProgressUpdater.UpdatePhase(OperationPhase.Backup_WaitForUpload);
                                                var lastVolumeSize = await FlushBackend(m_result, uploadtarget, uploader).ConfigureAwait(false);

                                                // Make sure we have the database up-to-date
                                                await db.CommitTransactionAsync("CommitAfterUpload", false);

                                                // TODO: Remove this later
                                                m_transaction = m_database.BeginTransaction();

                                                if (await m_result.TaskReader.ProgressAsync)
                                                {
                                                    CompactIfRequired(backend, lastVolumeSize);
                                                }

                                                if (m_options.UploadVerificationFile && await m_result.TaskReader.ProgressAsync)
                                                {
                                                    m_result.OperationProgressUpdater.UpdatePhase(OperationPhase.Backup_VerificationUpload);
                                                    FilelistProcessor.UploadVerificationFile(backend.BackendUrl, m_options, m_result.BackendWriter, m_database, m_transaction);
                                                }

                                                if (m_options.Dryrun)
                                                {
                                                    m_transaction.Rollback();
                                                    m_transaction = null;
                                                }
                                                else
                                                {
                                                    using (new Logging.Timer(LOGTAG, "CommitFinalizingBackup", "CommitFinalizingBackup"))
                                                        m_transaction.Commit();

                                                    m_transaction = null;

                                                    if (m_result.TaskControlRendevouz() != TaskControlState.Stop)
                                                    {
                                                        if (m_options.NoBackendverification)
                                                        {
                                                            UpdateStorageStatsFromDatabase();
                                                        }
                                                        else
                                                        {
                                                            PostBackupVerification();
                                                        }
                                                    }
                                                }

                                                m_database.WriteResults();
                                                m_database.PurgeLogData(m_options.LogRetention);
                                                if (m_options.AutoVacuum)
                                                {
                                                    m_database.Vacuum();
                                                }
                                                m_result.OperationProgressUpdater.UpdatePhase(OperationPhase.Backup_Complete);
                                                return;
                                            }
                    }
                    catch (Exception ex)
                    {
                        var aex = BuildException(ex, uploader, parallelScanner);
                        Logging.Log.WriteErrorMessage(LOGTAG, "FatalError", ex, "Fatal error");
                        if (aex == ex)
                        {
                            throw;
                        }

                        throw aex;
                    }
                    finally
                    {
                        if (parallelScanner != null && !parallelScanner.IsCompleted)
                        {
                            parallelScanner.Wait(500);
                        }

                        // TODO: We want to commit? always?
                        if (m_transaction != null)
                        {
                            try { m_transaction.Rollback(); }
                            catch (Exception ex) { Logging.Log.WriteErrorMessage(LOGTAG, "RollbackError", ex, "Rollback error: {0}", ex.Message); }
                        }
                    }
                }
        }
Exemplo n.º 21
0
        public bool Save(iSqlTransaction trans, int cartid, List<CartitemInfo> list)
        {
            try
            {
                try
                {
                    foreach (CartitemInfo info in list)
                    {
                        info.CartID = cartid;
                        this.Saveitem(trans, info);
                    }

                    //trans.Commit();
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    throw ex;
                }

                return true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Exemplo n.º 22
0
        private static object ExecImprimir(string comando)
        {
            string SubComandoImprimir = Lfx.Types.Strings.GetNextToken(ref comando, " ").Trim();

            switch (SubComandoImprimir.ToUpperInvariant())
            {
            case "COMPROBANTE":
            case "COMPROB":
                int IdComprobante = Lfx.Types.Parsing.ParseInt(Lfx.Types.Strings.GetNextToken(ref comando, " "));

                Lfx.Types.OperationResult ResultadoImpresion;

                using (Lfx.Data.Connection DataBaseImprimir = Lfx.Workspace.Master.GetNewConnection("Imprimir comprobante"))
                    using (System.Data.IDbTransaction Trans = DataBaseImprimir.BeginTransaction()) {
                        Lbl.Comprobantes.ComprobanteConArticulos Comprob = new Lbl.Comprobantes.ComprobanteConArticulos(DataBaseImprimir, IdComprobante);
                        Lazaro.Impresion.Comprobantes.ImpresorComprobanteConArticulos Impresor = new Impresion.Comprobantes.ImpresorComprobanteConArticulos(Comprob, Trans);
                        ResultadoImpresion = Impresor.Imprimir();
                        if (ResultadoImpresion.Success)
                        {
                            Trans.Commit();
                        }
                        else
                        {
                            Trans.Rollback();
                        }
                    }

                return(ResultadoImpresion);

            default:
                int  itemId   = Lfx.Types.Parsing.ParseInt(Lfx.Types.Strings.GetNextToken(ref comando, " ").Trim());
                Type TipoElem = Lbl.Instanciador.InferirTipo(SubComandoImprimir);
                if (TipoElem != null && itemId > 0)
                {
                    using (Lfx.Data.Connection DbImprimir = Lfx.Workspace.Master.GetNewConnection("Imprimir " + TipoElem.ToString() + " " + itemId.ToString())) {
                        Lbl.IElementoDeDatos      Elem = Lbl.Instanciador.Instanciar(TipoElem, DbImprimir, itemId);
                        Lfx.Types.OperationResult Res;
                        using (System.Data.IDbTransaction Trans = DbImprimir.BeginTransaction()) {
                            Lazaro.Impresion.ImpresorElemento Impresor = Lazaro.Impresion.Instanciador.InstanciarImpresor(Elem, Trans);

                            string ImprimirEn = Lfx.Types.Strings.GetNextToken(ref comando, " ").Trim().ToUpperInvariant();
                            if (ImprimirEn == "EN")
                            {
                                // El nombre de la impresora es lo que resta del comando
                                // No lo puedo separar con GetNextToken porque puede contener espacios
                                string NombreImpresora = comando;
                                Impresor.Impresora = Lbl.Impresion.Impresora.InstanciarImpresoraLocal(DbImprimir, NombreImpresora);
                            }

                            Res = Impresor.Imprimir();
                            if (Res.Success)
                            {
                                Trans.Commit();
                            }
                            else
                            {
                                Trans.Rollback();
                            }
                        }
                        return(Res);
                    }
                }
                break;
            }

            return(null);
        }
Exemplo n.º 23
0
 public void OneTimeTearDown()
 {
     Trans.Rollback();
     Connection.Close();
 }
Exemplo n.º 24
0
        /// <summary>
        /// Execute a Massive Call's to the database according to services configuration
        /// </summary>
        /// <param name="Service">Database Service Information</param>
        /// <param name="Delegate">Database Callback</param>
        /// <param name="ConnectionTimeout">Maximum TimeOut before Throw TimeoutException</param>
        /// <returns></returns>
        private void Execute(DataService[] Services, Action <System.Data.IDbCommand> Delegate, Int32 ConnectionTimeout)
        {
            //Initialize the Component's will be Connect to the Database
            System.Data.IDbConnection DbConnection = new Tconnection();
            DbConnection.ConnectionString = _connectionString;
            DbConnection.Open();
            System.Data.IDbTransaction _tran     = DbConnection.BeginTransaction();
            System.Data.IDbCommand     DbCommand = DbConnection.CreateCommand();
            DbCommand.CommandTimeout = ConnectionTimeout;
            DbCommand.Transaction    = _tran;
            string _currentService = "";

            try
            {
                foreach (DataService Service in Services)
                {
                    DbCommand.Parameters.Clear();
                    if (Service != null)
                    {
                        DbCommand.CommandType = System.Data.CommandType.StoredProcedure;
                        DbCommand.CommandText = _currentService = Service.Command;
                    }

                    //Fill Parameters
                    if (Service != null && Service.HasParameters())
                    {
                        Service.Parameters.ForEach((Parameter) =>
                        {
                            System.Data.IDbDataParameter dbParameter = DbCommand.CreateParameter();
                            dbParameter.ParameterName = Parameter.Name;
                            dbParameter.Value         = Parameter.Value;
                            dbParameter.Direction     = Parameter.Direction;

                            //Special Threatment by Type
                            if (Parameter.Value != null)
                            {
                                ParameterParse(ref dbParameter, Parameter);
                            }

                            DbCommand.Parameters.Add(dbParameter);
                        });
                    }


                    //Call Handler
                    Delegate(DbCommand);
                }


                //Call Handler
                _tran.Commit();
            }
            catch (System.Exception ex)
            {
                //Throw Exception Between The Top Layers
                _tran.Rollback();
                DbConnection.Close();

                throw new Gale.Exception.GaleException("ServiceTransactionError", _currentService, ex.Message);
            }
            finally
            {
                //Finally Close The Connection [Always]
                DbConnection.Close();
            }
        }
Exemplo n.º 25
0
        /// <summary>
        /// 确认缴费成功
        /// </summary>
        /// <param name="applyBuyHours"></param>
        public static bool SetPayRecordAudited(dynamic applyBuyHours)
        {
            int applyId = Convert.ToInt32(applyBuyHours.ApplyID);

            Sys.Models.ApplyBuyHours model = DapperHelper.Instance.Get <Sys.Models.ApplyBuyHours>(applyId);

            if (model.Status == 1)
            {
                return(true);
            }

            System.Data.IDbConnection connection = Comm.Helper.DapperHelper.Instance;

            using (connection)
            {
                connection.Open();
                System.Data.IDbTransaction transaction = connection.BeginTransaction();

                try
                {
                    //设置为成功
                    var sql = "UPDATE [dbo].[ApplyBuyHours] SET [Status] =1 WHERE ApplyID=@ApplyID";
                    connection.Execute(sql, new { ApplyID = applyId }, transaction);

                    var isExistClassHoursNumber = ClassHoursNumberService.IsExist(Convert.ToInt32(applyBuyHours.VenueID), model.StudentID, model.CoachID, model.PKType, model.TSMID);
                    if (isExistClassHoursNumber)
                    {
                        var updateClassHoursNumberSql = @"update ClassHoursNumber set ClassNumber=ClassNumber+@classNumber where StudentID=@studentID and CoachID=@coachID and VenueID=@venueID and PKType=@PKType";
                        //修改学生课时数量
                        int updateClassHoursNumber = connection.Execute(updateClassHoursNumberSql, new
                        {
                            classNumber = model.ClassNumber,
                            studentID   = model.StudentID,
                            coachID     = model.CoachID,
                            venueID     = model.VenueID,
                            PKType      = model.PKType
                        }, transaction);
                    }
                    else
                    {
                        connection.Insert(new Sys.Models.ClassHoursNumber()
                        {
                            StudentID   = model.StudentID,
                            CoachID     = model.CoachID,
                            VenueID     = model.VenueID,
                            ClassNumber = model.ClassNumber,
                            AddTime     = DateTime.Now,
                            PKType      = model.PKType,
                            TSMID       = model.TSMID
                        }, transaction);
                    }

                    connection.Insert(new Sys.Models.ClassHoursDetailed()
                    {
                        AddTime   = DateTime.Now,
                        StudentID = model.StudentID,
                        CoachID   = model.CoachID,
                        VenueID   = model.VenueID,
                        CMoney    = model.PaidMoney,
                        DNumber   = model.ClassNumber,
                        DType     = 1,
                        PKType    = model.PKType,
                        Remark    = "后台确认购买课时缴费成功",
                    }, transaction);

                    transaction.Commit();
                    return(true);
                }
                catch (Exception ex)
                {
                    logs.Error("确认缴费失败", ex);
                    transaction.Rollback();
                    return(false);
                }
            }
        }
Exemplo n.º 26
0
        public static int BatchedInsert <T>(System.Collections.Generic.IEnumerable <T> ls, sqlGenerator_t <T> sqlGenerator)
        {
            int iAffected = 0;
            int batchSize = 100; // Each batch corresponds to a single round-trip to the DB.

            using (System.Data.IDbConnection idbConn = GetConnection())
            {
                lock (idbConn)
                {
                    using (System.Data.IDbCommand cmd = idbConn.CreateCommand())
                    {
                        lock (cmd)
                        {
                            if (cmd.Connection.State != System.Data.ConnectionState.Open)
                            {
                                cmd.Connection.Open();
                            }

                            using (System.Data.IDbTransaction idbtTrans = idbConn.BeginTransaction())
                            {
                                try
                                {
                                    cmd.Transaction = idbtTrans;


                                    System.Text.StringBuilder sb = new System.Text.StringBuilder();
                                    int i = 0;
                                    foreach (T item in ls)
                                    {
                                        sqlGenerator(sb, item);
                                        if (i % batchSize == 0 && i != 0)
                                        {
                                            cmd.CommandText = sb.ToString();
                                            iAffected      += cmd.ExecuteNonQuery();
                                            sb.Length       = 0;
                                        }
                                        ++i;
                                    }

                                    if (sb.Length != 0)
                                    {
                                        cmd.CommandText = sb.ToString();
                                        iAffected      += cmd.ExecuteNonQuery();
                                    }

                                    idbtTrans.Commit();
                                } // End Try
                                catch (System.Data.Common.DbException ex)
                                {
                                    if (idbtTrans != null)
                                    {
                                        idbtTrans.Rollback();
                                    }

                                    iAffected = -1;

                                    //if (Log(ex))
                                    throw;
                                } // End catch
                                finally
                                {
                                    if (cmd.Connection.State != System.Data.ConnectionState.Closed)
                                    {
                                        cmd.Connection.Close();
                                    }
                                } // End Finally
                            }     // End Using idbtTrans
                        }         // End lock cmd
                    }             // End Using cmd
                }                 // End lock idbConn
            }                     // End Using idbConn

            return(iAffected);
        } // End Function BatchedInsert
Exemplo n.º 27
0
        public void Run(string[] sources, Library.Utility.IFilter filter)
        {
            m_result.OperationProgressUpdater.UpdatePhase(OperationPhase.Backup_Begin);                        
            
            using(m_database = new LocalBackupDatabase(m_options.Dbpath, m_options))
            {
                m_result.SetDatabase(m_database);
                m_result.Dryrun = m_options.Dryrun;

                Utility.UpdateOptionsFromDb(m_database, m_options);
                Utility.VerifyParameters(m_database, m_options);

                if (m_database.RepairInProgress)
                    throw new Exception("The database was attempted repaired, but the repair did not complete. This database may be incomplete and the backup process cannot continue. You may delete the local database and attempt to repair it again.");

                m_blocksize = m_options.Blocksize;

                m_blockbuffer = new byte[m_options.Blocksize * Math.Max(1, m_options.FileReadBufferSize / m_options.Blocksize)];
                m_blocklistbuffer = new byte[m_options.Blocksize];

                m_blockhasher = System.Security.Cryptography.HashAlgorithm.Create(m_options.BlockHashAlgorithm);
                m_filehasher = System.Security.Cryptography.HashAlgorithm.Create(m_options.FileHashAlgorithm);

                if (m_blockhasher == null)
                    throw new Exception(Strings.Common.InvalidHashAlgorithm(m_options.BlockHashAlgorithm));
                if (m_filehasher == null)
                    throw new Exception(Strings.Common.InvalidHashAlgorithm(m_options.FileHashAlgorithm));

                if (!m_blockhasher.CanReuseTransform)
                    throw new Exception(Strings.Common.InvalidCryptoSystem(m_options.BlockHashAlgorithm));
                if (!m_filehasher.CanReuseTransform)
                    throw new Exception(Strings.Common.InvalidCryptoSystem(m_options.FileHashAlgorithm));

                m_database.VerifyConsistency(null, m_options.Blocksize, m_options.BlockhashSize);
                // If there is no filter, we set an empty filter to simplify the code
                // If there is a filter, we make sure that the sources are included
                m_filter = filter ?? new Library.Utility.FilterExpression();
                m_sourceFilter = new Library.Utility.FilterExpression(sources, true);
            	
                m_backendLogFlushTimer = DateTime.Now.Add(FLUSH_TIMESPAN);
                System.Threading.Thread parallelScanner = null;

    
                try
                {

                    using(var backend = new BackendManager(m_backendurl, m_options, m_result.BackendWriter, m_database))
                    using(var filesetvolume = new FilesetVolumeWriter(m_options, m_database.OperationTimestamp))
                    {
                        using(var snapshot = GetSnapshot(sources, m_options, m_result))
                        {
                            // Start parallel scan
                            if (m_options.ChangedFilelist == null || m_options.ChangedFilelist.Length < 1)
                            {
                                parallelScanner = new System.Threading.Thread(CountFilesThread) {
                                    Name = "Read ahead file counter",
                                    IsBackground = true
                                };
                                parallelScanner.Start(snapshot);
                            }

                            PreBackupVerify(backend);

                            // Verify before uploading a synthetic list
                            m_database.VerifyConsistency(null, m_options.Blocksize, m_options.BlockhashSize);
                            UploadSyntheticFilelist(backend);

                            m_database.BuildLookupTable(m_options);
                            m_transaction = m_database.BeginTransaction();

                            var repcnt = 0;
                            while(repcnt < 100 && m_database.GetRemoteVolumeID(filesetvolume.RemoteFilename) >= 0)
                                filesetvolume.ResetRemoteFilename(m_options, m_database.OperationTimestamp.AddSeconds(repcnt++));
        		            
                            if (m_database.GetRemoteVolumeID(filesetvolume.RemoteFilename) >= 0)
                                throw new Exception("Unable to generate a unique fileset name");

                            m_result.OperationProgressUpdater.UpdatePhase(OperationPhase.Backup_ProcessingFiles);
                            var filesetvolumeid = m_database.RegisterRemoteVolume(filesetvolume.RemoteFilename, RemoteVolumeType.Files, RemoteVolumeState.Temporary, m_transaction);
                            m_database.CreateFileset(filesetvolumeid, VolumeBase.ParseFilename(filesetvolume.RemoteFilename).Time, m_transaction);
        	
                            RunMainOperation(snapshot, backend);

                            //If the scanner is still running for some reason, make sure we kill it now 
                            if (parallelScanner != null && parallelScanner.IsAlive)
                                parallelScanner.Abort();
                        }

                        var lastVolumeSize = FinalizeRemoteVolumes(backend);
    		            
                        using(new Logging.Timer("UpdateChangeStatistics"))
                            m_database.UpdateChangeStatistics(m_result);
                        using(new Logging.Timer("VerifyConsistency"))
                            m_database.VerifyConsistency(m_transaction, m_options.Blocksize, m_options.BlockhashSize);
    
                        UploadRealFileList(backend, filesetvolume);
    									
                        m_result.OperationProgressUpdater.UpdatePhase(OperationPhase.Backup_WaitForUpload);
                        using(new Logging.Timer("Async backend wait"))
                            backend.WaitForComplete(m_database, m_transaction);
                            
                        if (m_result.TaskControlRendevouz() != TaskControlState.Stop) 
                            CompactIfRequired(backend, lastVolumeSize);
    		            
                        if (m_options.UploadVerificationFile)
                        {
                            m_result.OperationProgressUpdater.UpdatePhase(OperationPhase.Backup_VerificationUpload);
                            FilelistProcessor.UploadVerificationFile(backend.BackendUrl, m_options, m_result.BackendWriter, m_database, m_transaction);
                        }

                        if (m_options.Dryrun)
                        {
                            m_transaction.Rollback();
                            m_transaction = null;
                        }
                        else
                        {
                            using(new Logging.Timer("CommitFinalizingBackup"))
                                m_transaction.Commit();
                                
                            m_transaction = null;
                            m_database.Vacuum();
                            
                            if (m_result.TaskControlRendevouz() != TaskControlState.Stop && !m_options.NoBackendverification)
                            {
                                PostBackupVerification();
                            }

                        }
                        
                        m_result.OperationProgressUpdater.UpdatePhase(OperationPhase.Backup_Complete);
                        m_database.WriteResults();                    
                        m_database.PurgeLogData(m_options.LogRetention);
                        return;
                    }
                }
                catch (Exception ex)
                {
                    m_result.AddError("Fatal error", ex);
                    throw;
                }
                finally
                {
                    if (parallelScanner != null && parallelScanner.IsAlive)
                    {
                        parallelScanner.Abort();
                        parallelScanner.Join(500);
                        if (parallelScanner.IsAlive)
                            m_result.AddWarning("Failed to terminate filecounter thread", null);
                    }
                
                    if (m_transaction != null)
                        try { m_transaction.Rollback(); }
                        catch (Exception ex) { m_result.AddError(string.Format("Rollback error: {0}", ex.Message), ex); }
                }
            }
        }
Exemplo n.º 28
0
        /// <summary>
        /// 学生请假
        /// </summary>
        /// <param name="curriculumID"></param>
        /// <param name="venueID"></param>
        /// <param name="teachState"></param>
        /// <param name="curriculumState"></param>
        /// <param name="classHoursDetailedState"></param>
        /// <param name="remark"></param>
        /// <returns></returns>
        public static bool CancelTeachingSche4Student(int curriculumID, int venueID,
                                                      Sys.Models.StateEnum.TeachingSchedule teachState,
                                                      Sys.Models.StateEnum.Curriculum curriculumState,
                                                      Sys.Models.StateEnum.ClassHoursDetailed classHoursDetailedState,
                                                      string remark)
        {
            /*
             * 检测该操作是否合法
             *
             * 修改约课表状态
             * 回写学生约课课时、添加日志记录
             * 修改排课表信息
             *
             */

            System.Data.IDbConnection connection = Comm.Helper.DapperHelper.Instance;
            connection.Open();
            System.Data.IDbTransaction transaction = connection.BeginTransaction();

            try
            {
                var curriculumInfo = DapperHelper.Instance.Get <Sys.Models.Curriculum>(curriculumID);
                if (curriculumInfo.VenueID != venueID)
                {
                    throw new Comm.YYException.YYException("操作非法");
                }

                if (curriculumInfo.State != Convert.ToInt32(Sys.Models.StateEnum.Curriculum.LeaveTeachingScheIng))
                {
                    throw new Comm.YYException.YYException("课程未申请请假");
                }

                var teachingInfo = DapperHelper.Instance.Get <Sys.Models.TeachingSchedule>(curriculumInfo.PKID);

                //修改排课状态
                var updateCurriculumSql = "update Curriculum set State=@state where PKID=@pkId";
                int updateCurriculum    = connection.Execute(updateCurriculumSql, new
                {
                    pkId  = curriculumInfo.PKID,
                    state = Convert.ToInt32(curriculumState)
                }, transaction);

                var updateClassHoursNumberSql = "update ClassHoursNumber set ClassNumber=ClassNumber+1 where StudentID=@studentID and CoachID=@coachID and VenueID=@venueID and PKType=@PKType";

                //修改学生课时数量
                int updateClassHoursNumber = connection.Execute(updateClassHoursNumberSql, new
                {
                    studentID = curriculumInfo.StudentID,
                    coachID   = teachingInfo.CoachID,
                    venueID   = venueID,
                    PKType    = teachingInfo.PKType
                }, transaction);

                //添加学生课时数操作日志
                connection.Insert <Sys.Models.ClassHoursDetailed>(new Sys.Models.ClassHoursDetailed()
                {
                    AddTime   = DateTime.Now,
                    DNumber   = 1,
                    CoachID   = teachingInfo.CoachID.Value,
                    StudentID = curriculumInfo.StudentID.Value,
                    VenueID   = venueID,
                    DType     = Convert.ToInt32(classHoursDetailedState),
                    Remark    = remark,
                    PKType    = teachingInfo.PKType.Value
                }, transaction);

                //如果是一对一的课程可以修改为请假完成
                if (teachingInfo.PKType.Value == 1)
                {
                    teachingInfo.State = Convert.ToInt32(teachState);
                    connection.Update(teachingInfo, transaction);
                }

                transaction.Commit();
                return(true);
            }
            catch (Comm.YYException.YYException)
            {
                throw;
            }
            catch (Exception ex)
            {
                logs.Error("确认学生请假申请失败", ex);
                transaction.Rollback();
                return(false);
            }
            finally
            {
                connection.Close();
            }
        }
Exemplo n.º 29
0
 /// <summary>
 /// Desfaz.
 /// </summary>
 public void Rollback()
 {
     _transaction.Rollback();
 }
Exemplo n.º 30
0
        public IHttpActionResult Create(Models.RequestModel.TeachingScheduleRequest teachingschedule)
        {
            logs.Info(Newtonsoft.Json.JsonConvert.SerializeObject(teachingschedule));

            if (!ModelState.IsValid)
            {
                return(Ok(Comm.ResponseModel.ResponseModelBase.GetRes(ValidationMsg)));
            }

            try
            {
                //上课周期
                string[] curriculumDateArr = teachingschedule.CurriculumDateStr
                                             .Split("to".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

                DateTime startDate = Convert.ToDateTime(curriculumDateArr[0]);
                DateTime endDate   = Convert.ToDateTime(curriculumDateArr[1]);

                List <Sys.Models.TeachingSchedule> entityList = new List <Sys.Models.TeachingSchedule>();

                bool isContain = true;
                while (isContain)
                {
                    try
                    {
                        //上午上课
                        entityList.AddRange(BuildClass(teachingschedule.TimepickerAMCheckd, startDate, teachingschedule.CurriculumAMTime, teachingschedule));
                        //下午上课
                        entityList.AddRange(BuildClass(teachingschedule.TimepickerPMCheckd, startDate, teachingschedule.CurriculumPMTime, teachingschedule));
                    }
                    catch (Exception ex)
                    {
                        logs.Error("排课失败", ex);
                        return(Ok(Comm.ResponseModel.ResponseModelBase.GetRes(ex.Message)));
                    }
                    startDate = startDate.AddDays(1);
                    if (startDate > endDate)
                    {
                        isContain = false;
                    }
                }

                bool isOk = false;

                var campusInfo = DapperHelper.Instance.Get <Campus>(teachingschedule.CampusID);
                System.Data.IDbConnection connection = Comm.Helper.DapperHelper.Instance;
                using (connection)
                {
                    connection.Open();
                    System.Data.IDbTransaction transaction = connection.BeginTransaction();
                    try
                    {
                        TeachingScheduleMaster tcm = TConvertHelper.Mapper <TeachingScheduleMaster, TeachingScheduleRequest>(teachingschedule);
                        tcm.AddTime             = DateTime.Now;
                        tcm.CurriculumBeginDate = Convert.ToDateTime(curriculumDateArr[0]);
                        tcm.CurriculumEndDate   = Convert.ToDateTime(curriculumDateArr[1]);
                        tcm.TotalClassHour      = entityList.Count;
                        tcm.Latitude            = campusInfo.Latitude;
                        tcm.Longitude           = campusInfo.Longitude;
                        connection.Insert <TeachingScheduleMaster>(tcm, transaction);

                        connection.Insert <Sys.Models.TeachingSchedule>(entityList, transaction);
                        transaction.Commit();
                        isOk = true;
                    }
                    catch (Exception ex)
                    {
                        logs.Error("排课失败", ex);
                        transaction.Rollback();
                        return(BadRequest());
                    }
                }

                return(isOk ? Ok(Comm.ResponseModel.ResponseModelBase.Success()) : Ok(Comm.ResponseModel.ResponseModelBase.SysError()));
            }
            catch (Exception ex)
            {
                logs.Error("排课失败", ex);
                return(BadRequest());
            }
        }