Exemple #1
0
        /// <summary>
        /// 延长锁的时间
        /// </summary>
        /// <param name="lockData"></param>
        /// <returns></returns>
        public DECheckLockResult ExtendLockTime(DELock lockData)
        {
            DECheckLockResult result = null;

            lockData.LockTime = DateTime.MinValue;

            using (TransactionScope scope = TransactionScopeFactory.Create())
            {
                bool updated = false;

                DELock lockInDB = lockInDB = Update(lockData, true, out updated);

                if (updated == false)
                {
                    result = BuildNotAvailableResult(lockData);
                }
                else
                {
                    result = BuildAvailableResult(lockInDB, true);
                }

                scope.Complete();
            }

            return(result);
        }
Exemple #2
0
        private static DECheckLockResult BuildNotAvailableResult(DELock lockData)
        {
            DECheckLockResult result = new DECheckLockResult();

            result.Lock       = lockData;
            result.LockStatus = DECheckLockStatus.Locked;

            return(result);
        }
Exemple #3
0
        /// <summary>
        /// 延长锁的时间
        /// </summary>
        public void ExtendLock()
        {
            DELock lockData = this._Lock;

            if (lockData == null)
            {
                lockData = DELock.CreateDefaultDataOperationLock();
            }

            DECheckLockResult checkResult = DELockAdapter.Instance.ExtendLockTime(lockData);

            this._Lock = checkResult.Lock;
        }
Exemple #4
0
        public void AddLock(TimeSpan effectiveTime, string description)
        {
            DELock lockData = DELock.CreateDefaultDataOperationLock();

            lockData.EffectiveTime = effectiveTime;
            lockData.Description   = description;

            DECheckLockResult checkResult = DELockAdapter.Instance.AddLock(lockData);

            if (checkResult.Available == false)
            {
                throw new DECheckLockException(DECheckLockException.CheckLockResultToMessage(checkResult));
            }

            this._Lock = checkResult.Lock;
        }
Exemple #5
0
        private static DECheckLockResult BuildAvailableResult(DELock lockData, bool overrideLock)
        {
            DECheckLockResult result = new DECheckLockResult();

            result.Lock = lockData;

            if (overrideLock)
            {
                result.LockStatus = DECheckLockStatus.LockExpired;
            }
            else
            {
                result.LockStatus = DECheckLockStatus.NotLocked;
            }

            return(result);
        }
        public static string CheckLockResultToMessage(DECheckLockResult checkResult)
        {
            checkResult.NullCheck("checkResult");

            StringBuilder strB = new StringBuilder();

            strB.AppendFormat("申请{0}失败。", EnumItemDescriptionAttribute.GetDescription(checkResult.Lock.LockType));

            if (OguBase.IsNotNullOrEmpty(checkResult.Lock.LockPerson))
            {
                strB.AppendFormat("正在由\"{0}\"执行\"{1}\"。", checkResult.Lock.LockPerson.DisplayName, checkResult.Lock.Description);
            }
            else
            {
                strB.AppendFormat("正在执行\"{0}\"", checkResult.Lock.Description);
            }

            strB.Append("请稍后再尝试。");

            return(strB.ToString());
        }
Exemple #7
0
        /// <summary>
        /// 加锁。返回新加的锁,或者原来锁的状态。成功与否,检查SCCheckLockResult的Available属性
        /// </summary>
        /// <param name="lockData"></param>
        /// <returns></returns>
        public DECheckLockResult AddLock(DELock lockData)
        {
            DECheckLockResult result = null;

            lockData.LockTime = DateTime.MinValue;

            using (TransactionScope scope = TransactionScopeFactory.Create())
            {
                //插入是否成功,判断锁是否已经存在
                DELock lockInDB = Insert(lockData);

                if (lockInDB == null)
                {
                    //更新是否成功,如果不成功,表示锁被占用。
                    bool updated = false;

                    lockInDB = Update(lockData, false, out updated);

                    if (updated == false)
                    {
                        result = BuildNotAvailableResult(lockInDB);
                    }
                    else
                    {
                        result = BuildAvailableResult(lockInDB, true);
                    }
                }
                else
                {
                    result = BuildAvailableResult(lockInDB, false);
                }

                scope.Complete();
            }

            return(result);
        }