Exemple #1
0
        public async Task <bool> UnLockRowsAsync(DbpObjectstateinfo objectstateinfo, int TimeOut)
        {
            bool result = false;

            try
            {
                int      nTime  = -1;
                DateTime dtLock = new DateTime();

                try
                {
                    System.Globalization.DateTimeFormatInfo dtfi = new System.Globalization.CultureInfo("en-US", false).DateTimeFormat;
                    dtfi.ShortTimePattern = "t";
                    //DateTime dt = DateTime.Parse("02-28-12 03:07PM", dtfi);
                    nTime = Convert.ToInt32(objectstateinfo.Timeout);

                    dtLock = DateTime.Parse(objectstateinfo.Begintime.ToString(), dtfi);
                }
                catch (System.Exception ex)
                {
                    //Logger.Error(ex.ToString());
                    Logger.Error("UnLockRowsAsync 时间格式转换不对: " + ex.Message);
                    return(false);
                }

                DateTime AddMillSec = dtLock.AddMilliseconds(nTime);

                DateTime dtNow = DateTime.Now;

                var selectResult = await Context.DbpObjectstateinfo.SingleOrDefaultAsync(x => x.Objectid == objectstateinfo.Objectid && x.Objecttypeid == objectstateinfo.Objecttypeid && x.Username == objectstateinfo.Username);

                if (AddMillSec < dtNow) //锁超时
                {
                    result = true;
                    //UpdateLock(userName, dtNow, Convert.ToInt32(TimeOut), objectID, objectTypeID);
                    if (selectResult != null)
                    {
                        selectResult.Begintime = dtNow;
                        selectResult.Timeout   = Convert.ToInt32(TimeOut);
                    }
                }
                //UnLock(objectID, objectTypeID, userName);
                if (selectResult != null)
                {
                    selectResult.Locklock = null;
                    await Context.SaveChangesAsync();
                }
                return(result);
            }
            catch (Exception ex)
            {
                SobeyRecException.ThrowSelfNoParam(objectstateinfo.Objectid.ToString(), GlobalDictionary.GLOBALDICT_CODE_EXECUTE_COMMAND_ERROR, Logger, ex);
                result = false;
                throw ex;
            }
        }
Exemple #2
0
        public async Task <bool> UnLockObjectAsync(DbpObjectstateinfo arrObjects)
        {
            try
            {
                if (arrObjects == null)
                {
                    Logger.Error("arrObjects == null || arrObjects.Count <= 0 成立,解锁函数return false,解锁失败");
                    return(false);
                }
                //加锁
                //var deleteObj = await Context.DbpObjectstateinfo.FirstOrDefaultAsync(x => x.Username == userName && ((objectID >= 0 && x.Objectid == objectID) || objectID < 0) && ((objectTypeID >= 0 && x.Objecttypeid == (int)objectTypeID) || objectTypeID < 0));

                Context.Remove(arrObjects);
                int LineNum = await Context.SaveChangesAsync();

                bool ret = false;
                if (LineNum > 0)
                {
                    ret = true;//删除了锁,才返回正确
                }
                else
                {
                    Logger.Info("UnLockObjectAsync UnLockObject return false,解锁失败");
                    ret = false;

                    arrObjects.Locklock = null;
                    await Context.SaveChangesAsync();
                }
                //解锁
                //UnLock(objectID, objectTypeID, userName);
                return(ret);
            }
            catch (MySqlException ex)
            {
                Logger.Error(ex.ToString());
                string message = "UnLockObject";
                SobeyRecException.ThrowSelfNoParam(message, GlobalDictionary.GLOBALDICT_CODE_IN_SETUNLOCKOBJECT_READ_DATA_FAILED, Logger, ex);
                return(false);
            }
            catch (System.Exception ex)
            {
                Logger.Error(ex.ToString());
                string message = "UnLockObject";
                SobeyRecException.ThrowSelfNoParam(message, GlobalDictionary.GLOBALDICT_CODE_IN_SETUNLOCKOBJECT_EXCEPTION, Logger, ex);
                return(false);
            }
        }
Exemple #3
0
        public async Task <DbpObjectstateinfo> LockRowsByConditionAsync(int objectID, OTID objectTypeID, string userName, int TimeOut = 500)
        {
            DbpObjectstateinfo objectstateinfo = null;

            try
            {
                objectstateinfo = await Context.DbpObjectstateinfo.SingleOrDefaultAsync(x => ((objectID >= 0 && x.Objectid == objectID) || objectID < 0) && (((int)objectTypeID >= 0 && x.Objecttypeid == (int)objectTypeID) || (int)objectTypeID < 0) && ((!string.IsNullOrEmpty(userName) && x.Username == userName) || string.IsNullOrEmpty(userName)) && (x.Locklock == "" || x.Locklock == null || x.Begintime < DateTime.Now.AddMilliseconds(TimeOut * (-1))));

                if (objectstateinfo != null)
                {
                    objectstateinfo.Locklock = Guid.NewGuid().ToString();
                    await Context.SaveChangesAsync();
                }
            }
            catch (Exception ex)
            {
                SobeyRecException.ThrowSelfNoParam(objectID.ToString(), GlobalDictionary.GLOBALDICT_CODE_EXECUTE_COMMAND_ERROR, Logger, ex);
            }
            return(objectstateinfo);
        }
Exemple #4
0
        public async Task <bool> SetLockObjectAsync(int objectID, OTID objectTypeID, string userName, int TimeOut)
        {
            if (TimeOut < 0)
            {
                TimeOut *= -1;
            }

            var dbpObjState = await Store.GetObjectstateinfoAsync(a => a.Where(x => x.Objectid == objectID && x.Objecttypeid == (int)objectTypeID), true);

            if (dbpObjState == null)
            {
                return(await Store.AddDbpObjStateAsync(objectID, objectTypeID, userName, TimeOut));
            }

            //设置locklock字段
            DbpObjectstateinfo objectstateinfo = null;

            for (int i = 0; i < 3 && objectstateinfo == null; i++)
            {
                if (i > 0)
                {
                    System.Threading.Thread.Sleep(100);
                }

                objectstateinfo = await Store.LockRowsByConditionAsync(objectID, objectTypeID, userName);
            }

            if (objectstateinfo == null)
            {
                return(false);
            }

            //修改加锁信息,清空locklock
            return(await Store.UnLockRowsAsync(objectstateinfo, TimeOut));

            //return await Store.SetLockObject(objectID, objectTypeID, userName, TimeOut);
        }
Exemple #5
0
        public async Task <bool> SetUnlockObjectAsync(int objectID, OTID objectTypeID, string userName)
        {
            //设置locklock字段
            DbpObjectstateinfo objectstateinfo = null;

            for (int i = 0; i < 3 && objectstateinfo == null; i++)
            {
                if (i > 0)
                {
                    System.Threading.Thread.Sleep(100);
                }

                objectstateinfo = await Store.LockRowsByConditionAsync(objectID, objectTypeID, userName);
            }

            if (objectstateinfo == null)
            {
                return(false);
            }

            return(await Store.UnLockObjectAsync(objectstateinfo));

            //return await Store.SetUnLockObject(objectID, objectTypeID, userName);
        }