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