Esempio n. 1
0
        /// <summary>
        /// 占用单据号
        /// </summary>
        /// <param name="userId">用户ID</param>
        /// <param name="moduleId">模块ID</param>
        /// <param name="enCode">模板编码</param>
        /// <returns>true/false</returns>
        public bool UseRuleSeed(string userId, string moduleId, string enCode, IRepository db = null)
        {
            IRepository dbc = null;

            if (db == null)
            {
                dbc = new RepositoryFactory().BaseRepository();
            }
            else
            {
                dbc = db;
            }
            UserEntity     userEntity     = dbc.FindEntity <UserEntity>(userId);
            CodeRuleEntity coderuleentity = dbc.FindEntity <CodeRuleEntity>(t => t.ModuleId == moduleId || t.EnCode == enCode);

            try
            {
                if (coderuleentity != null)
                {
                    //删除用户已经用掉的种子
                    dbc.Delete <CodeRuleSeedEntity>(t => t.UserId == userId && t.RuleId == coderuleentity.RuleId);
                }
            }
            catch (Exception)
            {
                return(false);
            }
            return(true);
        }
Esempio n. 2
0
 /// <summary>
 /// 保存规则表单(新增、修改)
 /// </summary>
 /// <param name="keyValue">主键值</param>
 /// <param name="codeRuleEntity">规则实体</param>
 /// <returns></returns>
 public void SaveForm(string keyValue, CodeRuleEntity codeRuleEntity)
 {
     try
     {
         //调用单据编码示例
         InstanceDAL.SaveForm(keyValue, codeRuleEntity);
     }
     catch (Exception)
     {
         throw;
     }
 }
Esempio n. 3
0
 /// <summary>
 /// 保存规则表单(新增、修改)
 /// </summary>
 /// <param name="keyValue">主键值</param>
 /// <param name="codeRuleEntity">规则实体</param>
 /// <returns></returns>
 public void SaveForm(string keyValue, CodeRuleEntity codeRuleEntity)
 {
     if (!string.IsNullOrEmpty(keyValue))
     {
         codeRuleEntity.Modify(keyValue);
         this.BaseRepository().Update(codeRuleEntity);
     }
     else
     {
         codeRuleEntity.Create();
         this.BaseRepository().Insert(codeRuleEntity);
     }
 }
Esempio n. 4
0
 /// <summary>
 /// 保存规则表单(新增、修改)
 /// </summary>
 /// <param name="keyValue">主键值</param>
 /// <param name="codeRuleEntity">规则实体</param>
 /// <returns></returns>
 public void SaveForm(string keyValue, CodeRuleEntity codeRuleEntity)
 {
     try
     {
         //调用单据编码示例
         //codeRuleEntity.Description = service.GetBillCode(OperatorProvider.Provider.Current().UserId, "", "001");
         service.SaveForm(keyValue, codeRuleEntity);
         //service.UseRuleSeed(OperatorProvider.Provider.Current().UserId, "", "001");
     }
     catch (Exception)
     {
         throw;
     }
 }
Esempio n. 5
0
 public ActionResult SaveForm(string keyValue, CodeRuleEntity entity)
 {
     codeRuleIBLL.SaveEntity2(keyValue, entity);
     return(Success("保存成功!"));
 }
Esempio n. 6
0
 public ActionResult SaveForm(string keyValue, CodeRuleEntity codeRuleEntity)
 {
     codeRuleBLL.SaveForm(keyValue, codeRuleEntity);
     return(Success("操作成功。"));
 }
Esempio n. 7
0
        /// <summary>
        /// 获得指定模块或者编号的单据号(直接使用)
        /// </summary>
        /// <param name="userId">用户ID</param>
        /// <param name="moduleId">模块ID</param>
        /// <param name="enCode">模板编码</param>
        /// <returns>单据号</returns>
        public string SetBillCodeByCode(string userId, string enCode, IRepository db = null)
        {
            //IRepository dbc = null;
            if (db == null)
            {
                //dbc = new RepositoryFactory().BaseRepository();
                //db = this.BaseRepository();
                db = new RepositoryFactory().BaseRepository();
            }
            //else
            //{
            //    dbc = db;
            //}

            UserEntity     userEntity     = db.FindEntity <UserEntity>(userId);
            CodeRuleEntity coderuleentity = db.FindEntity <CodeRuleEntity>(t => t.EnCode == enCode);
            //判断种子是否已经产生,如果没有产生种子先插入一条初始种子
            CodeRuleSeedEntity initSeed = db.FindEntity <CodeRuleSeedEntity>(t => t.RuleId == coderuleentity.RuleId);

            if (initSeed == null)
            {
                initSeed = new CodeRuleSeedEntity();
                initSeed.Create();
                initSeed.SeedValue  = 1;
                initSeed.RuleId     = coderuleentity.RuleId;
                initSeed.CreateDate = null;
                //db.Insert<CodeRuleSeedEntity>(initSeed);
            }
            //获得模板ID
            string billCode     = "";    //单据号
            string nextBillCode = "";    //单据号
            bool   isOutTime    = false; //是否已过期

            if (coderuleentity != null)
            {
                try
                {
                    int nowSerious = 0;
                    //取得流水号种子
                    List <CodeRuleSeedEntity> codeRuleSeedlist = db.IQueryable <CodeRuleSeedEntity>(t => t.RuleId == coderuleentity.RuleId).ToList();
                    //取得最大种子
                    CodeRuleSeedEntity maxSeed = db.FindEntity <CodeRuleSeedEntity>(t => t.UserId == null);
                    #region 处理流水号归0
                    List <CodeRuleFormatEntity> codeRuleFormatList = coderuleentity.RuleFormatJson.ToList <CodeRuleFormatEntity>();
                    //看看是不是日期格式的编号规则
                    var numberFormat = codeRuleFormatList.FirstOrDefault(p => p.ItemType.ToString() == "1");
                    if (numberFormat != null)
                    {
                        //看看是不是精确到日的格式,如果是精确到日的格式 则按日来归0
                        //首先确定最大种子是否是隔天未归0的

                        switch (numberFormat.FormatStr)
                        {
                        case "mmdd":
                        case "yyyymmdd":
                        case "yymmdd":
                            if ((maxSeed.ModifyDate).ToDateString() != DateTime.Now.ToString("yyyy-MM-dd"))
                            {
                                isOutTime          = true;
                                maxSeed.SeedValue  = 1;
                                maxSeed.ModifyDate = DateTime.Now;
                            }
                            break;

                        case "yyyymm":
                            if ((maxSeed.ModifyDate).ToMonthDateString() != DateTime.Now.ToString("yyyy-MM"))
                            {
                                isOutTime          = true;
                                maxSeed.SeedValue  = 1;
                                maxSeed.ModifyDate = DateTime.Now;
                            }
                            break;

                        case "yyyy":
                            if ((maxSeed.ModifyDate).ToYearDateString() != DateTime.Now.ToString("yyyy"))
                            {
                                isOutTime          = true;
                                maxSeed.SeedValue  = 1;
                                maxSeed.ModifyDate = DateTime.Now;
                            }
                            break;
                        }
                    }



                    #endregion
                    if (maxSeed == null)
                    {
                        maxSeed = initSeed;
                    }

                    foreach (CodeRuleFormatEntity codeRuleFormatEntity in codeRuleFormatList)
                    {
                        switch (codeRuleFormatEntity.ItemType.ToString())
                        {
                        //自定义项
                        case "0":
                            billCode     = billCode + codeRuleFormatEntity.FormatStr;
                            nextBillCode = nextBillCode + codeRuleFormatEntity.FormatStr;
                            break;

                        //日期
                        case "1":
                            //日期字符串类型
                            billCode     = billCode + DateTime.Now.ToString(codeRuleFormatEntity.FormatStr.Replace("m", "M"));
                            nextBillCode = nextBillCode + DateTime.Now.ToString(codeRuleFormatEntity.FormatStr.Replace("m", "M"));

                            break;

                        //流水号
                        case "2":
                            //查找当前用户是否已有之前未用掉的种子
                            CodeRuleSeedEntity codeRuleSeedEntity = codeRuleSeedlist.Find(t => t.UserId == userId && t.RuleId == coderuleentity.RuleId);
                            //删除已过期的用户未用掉的种子
                            if (codeRuleSeedEntity != null && isOutTime)
                            {
                                db.Delete <CodeRuleSeedEntity>(codeRuleSeedEntity);
                                codeRuleSeedEntity = null;
                            }
                            //如果没有就取当前最大的种子
                            if (codeRuleSeedEntity == null)
                            {
                                //取得系统最大的种子
                                int maxSerious = (int)maxSeed.SeedValue;
                                nowSerious         = maxSerious;
                                codeRuleSeedEntity = new CodeRuleSeedEntity();
                                codeRuleSeedEntity.Create();
                                codeRuleSeedEntity.SeedValue = maxSerious;
                                codeRuleSeedEntity.UserId    = userId;
                                codeRuleSeedEntity.RuleId    = coderuleentity.RuleId;
                                //db.Insert<CodeRuleSeedEntity>(codeRuleSeedEntity);
                                //处理种子更新
                                maxSeed.SeedValue += 1;
                                if (maxSeed.CreateDate != null)
                                {
                                    db.Update <CodeRuleSeedEntity>(maxSeed);
                                }
                                else
                                {
                                    maxSeed.CreateDate = DateTime.Now;
                                    db.Insert <CodeRuleSeedEntity>(maxSeed);
                                }
                            }
                            else
                            {
                                nowSerious = (int)codeRuleSeedEntity.SeedValue;
                            }
                            string seriousStr     = new string('0', (int)(codeRuleFormatEntity.FormatStr.Length - nowSerious.ToString().Length)) + nowSerious.ToString();
                            string NextSeriousStr = new string('0', (int)(codeRuleFormatEntity.FormatStr.Length - nowSerious.ToString().Length)) + maxSeed.SeedValue.ToString();
                            billCode     = billCode + seriousStr;
                            nextBillCode = nextBillCode + NextSeriousStr;

                            break;

                        //部门
                        case "3":
                            DepartmentEntity departmentEntity = db.FindEntity <DepartmentEntity>(userEntity.DepartmentId);
                            if (codeRuleFormatEntity.FormatStr == "code")
                            {
                                billCode     = billCode + departmentEntity.EnCode;
                                nextBillCode = nextBillCode + departmentEntity.EnCode;
                            }
                            else
                            {
                                billCode     = billCode + departmentEntity.FullName;
                                nextBillCode = nextBillCode + departmentEntity.FullName;
                            }
                            break;

                        //公司
                        case "4":
                            OrganizeEntity organizeEntity = db.FindEntity <OrganizeEntity>(userEntity.OrganizeId);
                            if (codeRuleFormatEntity.FormatStr == "code")
                            {
                                billCode     = billCode + organizeEntity.EnCode;
                                nextBillCode = nextBillCode + organizeEntity.EnCode;
                            }
                            else
                            {
                                billCode     = billCode + organizeEntity.FullName;
                                nextBillCode = nextBillCode + organizeEntity.FullName;
                            }
                            break;

                        //用户
                        case "5":
                            if (codeRuleFormatEntity.FormatStr == "code")
                            {
                                billCode     = billCode + userEntity.EnCode;
                                nextBillCode = nextBillCode + userEntity.EnCode;
                            }
                            else
                            {
                                billCode     = billCode + userEntity.Account;
                                nextBillCode = nextBillCode + userEntity.Account;
                            }
                            break;

                        default:
                            break;
                        }
                    }
                    coderuleentity.CurrentNumber = nextBillCode;
                    //this.BaseRepository().Update<CodeRuleEntity>(coderuleentity);
                    db.Update <CodeRuleEntity>(coderuleentity);
                }
                catch (Exception)
                {
                    throw;
                }
            }
            return(billCode);
        }
Esempio n. 8
0
        /// <summary>
        /// 获得指定模块或者编号的单据号
        /// </summary>
        /// <param name="userId">用户ID</param>
        /// <param name="moduleId">模块ID</param>
        /// <param name="enCode">模板编码</param>
        /// <returns>单据号</returns>
        public string GetBillCode(string userId, string moduleId, string enCode)
        {
            IRepository    db             = new RepositoryFactory().BaseRepository();
            UserEntity     userEntity     = db.FindEntity <UserEntity>(userId);
            CodeRuleEntity coderuleentity = db.FindEntity <CodeRuleEntity>(t => t.ModuleId == moduleId || t.EnCode == enCode);
            //判断种子是否已经产生,如果没有产生种子先插入一条初始种子
            CodeRuleSeedEntity initSeed = db.FindEntity <CodeRuleSeedEntity>(t => t.RuleId == coderuleentity.RuleId);

            if (initSeed == null)
            {
                initSeed = new CodeRuleSeedEntity();
                initSeed.Create();
                initSeed.SeedValue = 1;
                initSeed.RuleId    = coderuleentity.RuleId;
                db.Insert <CodeRuleSeedEntity>(initSeed);
            }
            else
            {
                db = new RepositoryFactory().BaseRepository().BeginTrans();
            }
            //获得模板ID
            string billCode     = "";    //单据号
            string nextBillCode = "";    //单据号
            bool   isOutTime    = false; //是否已过期

            if (coderuleentity != null)
            {
                try
                {
                    int nowSerious = 0;
                    //取得流水号种子
                    List <CodeRuleSeedEntity> codeRuleSeedlist = db.IQueryable <CodeRuleSeedEntity>(t => t.RuleId == coderuleentity.RuleId).ToList();
                    //取得最大种子
                    CodeRuleSeedEntity maxSeed = db.FindEntity <CodeRuleSeedEntity>(t => t.UserId == null);
                    #region 处理隔天流水号归0
                    //首先确定最大种子是否是隔天未归0的
                    if ((maxSeed.ModifyDate).ToDateString() != DateTime.Now.ToString("yyyy-MM-dd"))
                    {
                        isOutTime          = true;
                        maxSeed.SeedValue  = 1;
                        maxSeed.ModifyDate = DateTime.Now;
                    }
                    #endregion
                    List <CodeRuleFormatEntity> codeRuleFormatList = coderuleentity.RuleFormatJson.ToList <CodeRuleFormatEntity>();
                    foreach (CodeRuleFormatEntity codeRuleFormatEntity in codeRuleFormatList)
                    {
                        switch (codeRuleFormatEntity.ItemType.ToString())
                        {
                        //自定义项
                        case "0":
                            billCode     = billCode + codeRuleFormatEntity.FormatStr;
                            nextBillCode = nextBillCode + codeRuleFormatEntity.FormatStr;
                            break;

                        //日期
                        case "1":
                            //日期字符串类型
                            billCode     = billCode + DateTime.Now.ToString(codeRuleFormatEntity.FormatStr.Replace("m", "M"));
                            nextBillCode = nextBillCode + DateTime.Now.ToString(codeRuleFormatEntity.FormatStr.Replace("m", "M"));

                            break;

                        //流水号
                        case "2":
                            //查找当前用户是否已有之前未用掉的种子
                            CodeRuleSeedEntity codeRuleSeedEntity = codeRuleSeedlist.Find(t => t.UserId == userId && t.RuleId == coderuleentity.RuleId);
                            //删除已过期的用户未用掉的种子
                            if (codeRuleSeedEntity != null && isOutTime)
                            {
                                db.Delete <CodeRuleSeedEntity>(codeRuleSeedEntity);
                                codeRuleSeedEntity = null;
                            }
                            //如果没有就取当前最大的种子
                            if (codeRuleSeedEntity != null)
                            {
                                nowSerious = (int)codeRuleSeedEntity.SeedValue;
                            }
                            else
                            {
                                //取得系统最大的种子
                                int maxSerious = (int)maxSeed.SeedValue;
                                nowSerious         = maxSerious;
                                codeRuleSeedEntity = new CodeRuleSeedEntity();
                                codeRuleSeedEntity.Create();
                                codeRuleSeedEntity.SeedValue = maxSerious;
                                codeRuleSeedEntity.UserId    = userId;
                                codeRuleSeedEntity.RuleId    = coderuleentity.RuleId;
                                db.Insert <CodeRuleSeedEntity>(codeRuleSeedEntity);
                                //处理种子更新
                                maxSeed.SeedValue += 1;
                                maxSeed.Modify(maxSeed.RuleSeedId);
                                db.Update <CodeRuleSeedEntity>(maxSeed);
                            }
                            string seriousStr     = new string('0', (int)(codeRuleFormatEntity.FormatStr.Length - nowSerious.ToString().Length)) + nowSerious.ToString();
                            string NextSeriousStr = new string('0', (int)(codeRuleFormatEntity.FormatStr.Length - nowSerious.ToString().Length)) + maxSeed.SeedValue.ToString();
                            billCode     = billCode + seriousStr;
                            nextBillCode = nextBillCode + NextSeriousStr;

                            break;

                        //部门
                        case "3":
                            DepartmentEntity departmentEntity = db.FindEntity <DepartmentEntity>(userEntity.DepartmentId);
                            if (codeRuleFormatEntity.FormatStr == "code")
                            {
                                billCode     = billCode + departmentEntity.EnCode;
                                nextBillCode = nextBillCode + departmentEntity.EnCode;
                            }
                            else
                            {
                                billCode     = billCode + departmentEntity.FullName;
                                nextBillCode = nextBillCode + departmentEntity.FullName;
                            }
                            break;

                        //公司
                        case "4":
                            OrganizeEntity organizeEntity = db.FindEntity <OrganizeEntity>(userEntity.OrganizeId);
                            if (codeRuleFormatEntity.FormatStr == "code")
                            {
                                billCode     = billCode + organizeEntity.EnCode;
                                nextBillCode = nextBillCode + organizeEntity.EnCode;
                            }
                            else
                            {
                                billCode     = billCode + organizeEntity.FullName;
                                nextBillCode = nextBillCode + organizeEntity.FullName;
                            }
                            break;

                        //用户
                        case "5":
                            if (codeRuleFormatEntity.FormatStr == "code")
                            {
                                billCode     = billCode + userEntity.EnCode;
                                nextBillCode = nextBillCode + userEntity.EnCode;
                            }
                            else
                            {
                                billCode     = billCode + userEntity.Account;
                                nextBillCode = nextBillCode + userEntity.Account;
                            }
                            break;

                        default:
                            break;
                        }
                    }
                    coderuleentity.CurrentNumber = nextBillCode;
                    db.Update <CodeRuleEntity>(coderuleentity);
                }
                catch (Exception)
                {
                    db.Rollback();
                    return(billCode);
                }
                db.Commit();
            }
            return(billCode);
        }