Beispiel #1
0
        public async Task <Layer> SaveAsync(LayerEditDto input)
        {
            var item         = input.MapTo <Layer>();
            var maxLevelCode = this.GetMaxLevelCode(input, input.Category);

            if (input.Id == Guid.Empty)
            {
                item.LevelCode = maxLevelCode;
                item.Level     = maxLevelCode.Length / 2;
                return(await this._layerRepository.InsertAsync(item));
            }
            else
            {
                var old     = this._layerRepository.Get(input.Id);
                var changed =
                    this._layerRepository.GetAllList(r => r.LevelCode.StartsWith(old.LevelCode) && r.Level != old.Level);
                changed.ForEach(
                    r =>
                {
                    r.LevelCode = maxLevelCode + r.LevelCode.Substring(old.LevelCode.Length, r.LevelCode.Length - old.LevelCode.Length);
                    r.Level     = r.LevelCode.Length / 2;
                });
                old.LevelCode = maxLevelCode;
                old.Level     = old.LevelCode.Length / 2;

                Mapper.Map(input, old);
                return(await this._layerRepository.UpdateAsync(old));
            }
        }
Beispiel #2
0
        public async Task SaveAccountAsync(LayerEditDto input)
        {
            var item = input.MapTo <Layer>();

            if (input.Id == Guid.Empty)
            {
                item.Level = item.LevelCode.Length;
                await this._layerRepository.InsertAsync(item);
            }
            else
            {
                var old     = this._layerRepository.Get(input.Id);
                var changed =
                    this._layerRepository.GetAllList(r => r.LevelCode.StartsWith(old.LevelCode) && r.Level != old.Level);
                changed.ForEach(
                    r =>
                {
                    r.Level = r.LevelCode.Length;
                });

                old.Level = old.LevelCode.Length;

                Mapper.Map(input, old);
                await this._layerRepository.UpdateAsync(old);
            }
        }
Beispiel #3
0
        /// <summary>
        /// 获取当前最新层级
        /// </summary>
        /// <returns></returns>
        private string GetMaxLevelCode(LayerEditDto input, string category)
        {
            var maxItem = this._layerRepository.GetAll().Where(r => r.Category == category).OrderByDescending(r => r.LevelCode).FirstOrDefault(r => r.PId == input.PId);

            //当前层级没有项目
            if (maxItem == null)
            {
                var parent = this._layerRepository.FirstOrDefault(r => r.Id == input.PId);

                //父层级不存在,即为第一条数据;父级存在,即为父级下第一条数据
                return(parent == null ? "01" : string.Format("{0}{1}", parent.LevelCode, "01"));
            }
            else
            {
                //当前层级最大编号>=9,层级编号直接+1
                if (maxItem.LevelCode.Trim('0').Length % 2 == 0 || maxItem.LevelCode.ToInt() == 9)
                {
                    return((maxItem.LevelCode.ToInt() + 1).ToString());
                }
                return((maxItem.LevelCode.ToInt() + 1).ToString().PadLeft(maxItem.LevelCode.Length, '0'));
            }
        }