示例#1
0
        private string CreateNo(int CompanyID)
        {
            var redis = CacheFactory.Instance(CacheType.Redis);

            string key     = string.Format(CacheKeyString.LockMaterialCode, CompanyID);
            string datekey = string.Format(CacheKeyString.LockMaterialCode_date, CompanyID);


            var result = redis.LockRelease(key, TimeSpan.FromSeconds(5), () =>
            {
                DateSno dateSno = null;
                if (redis.ContainsKey(datekey))
                {
                    dateSno = redis.GetValueByKey <DateSno>(datekey); //获取redis 里面存储的日期
                }

                string nowStr    = DateTime.Now.ToString("yyyyMMdd");                       //当前日期
                string nowStrsss = DateTime.Now.ToString("yyyyMMddHHmmssfff").Substring(2); //当前日期

                if (dateSno != null)
                {
                    if (dateSno.DateStr != nowStr) //不是当天
                    {
                        dateSno = new DateSno()
                        {
                            DateStr = nowStr, SNO = 1
                        };

                        redis.UpdateKey(datekey, dateSno, 60 * 60 * 48);
                    }
                    else //当前 流水号+1
                    {
                        dateSno.SNO = dateSno.SNO + 1;

                        redis.UpdateKey(datekey, dateSno, 60 * 60 * 48);
                    }
                }
                else
                {
                    dateSno = new DateSno()
                    {
                        DateStr = nowStr, SNO = 1
                    };

                    redis.UpdateKey(datekey, dateSno, 60 * 60 * 48);
                }


                return(nowStrsss + dateSno.SNO.ToString().PadLeft(4, '0'));
            });

            return(result);
        }
        public string GetDate()
        {
            var redis = CacheFactory.Instance(CacheType.Redis);

            string key     = string.Format(CacheKeyString.LockGeneratorMO, 188);
            string datekey = string.Format(CacheKeyString.LockGeneratorMO_date, 188);

            string nowStr = DateTime.Now.ToString("yyyyMMdd");

            while (true)
            {
                DateSno dateSno = null;
                if (redis.ContainsKey(datekey))
                {
                    dateSno = redis.GetValueByKey <DateSno>(datekey); //获取redis 里面存储的日期
                }

                if (dateSno != null)
                {
                    if (dateSno.DateStr != nowStr) //不是当天
                    {
                        throw new Exception($"{dateSno.DateStr},{nowStr},now:{DateTime.Now.ToString("yyyymmdd HH:mm:ss")}");
                        dateSno = new DateSno()
                        {
                            DateStr = nowStr, SNO = 1
                        };

                        redis.UpdateKey(datekey, dateSno, 60 * 60 * 48);
                    }
                    else //当前 流水号+1
                    {
                        dateSno.SNO = dateSno.SNO + 1;

                        redis.UpdateKey(datekey, dateSno, 60 * 60 * 48);
                    }
                }
                else
                {
                    throw new Exception($"{null},{nowStr},now:{DateTime.Now.ToString("yyyymmdd HH:mm:ss")}");
                    dateSno = new DateSno()
                    {
                        DateStr = nowStr, SNO = 1
                    };

                    redis.UpdateKey(datekey, dateSno, 60 * 60 * 48);
                }

                Thread.Sleep(50);
            }

            return(nowStr);
        }