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); }