using System; using System.Linq; using System.Collections.Generic; using System.Threading.Tasks; using YiSha.Util; using YiSha.Util.Extension; using YiSha.Util.Model; using YiSha.Data.Repository; using YiSha.Entity.SystemManage; using YiSha.Model.Param.SystemManage; using System.Linq.Expressions; using YiSha.Enum; namespace YiSha.Service.SystemManage { public partial class DataDictService { private IRepositoryFactory _baseRepository; public DataDictService(IRepositoryFactory baseRepository) { _baseRepository = baseRepository; } #region 获取数据 public async Task> GetListPartial(DataDictListParam param) { var expression = ListFilterPartial(param); var list = await _baseRepository.BaseRepository(dbConnectType).FindList(expression); return list.ToList(); } public async Task> GetPageListPartial(DataDictListParam param, Pagination pagination) { var expression = ListFilterPartial(param); var list = await _baseRepository.BaseRepository(dbConnectType).FindList(expression, pagination); return list.ToList(); } public async Task GetEntityPartial(int id) { return await _baseRepository.BaseRepository(dbConnectType).FindEntity(id); } public async Task GetMaxSortPartial() { object result = await _baseRepository.BaseRepository(dbConnectType).FindObject("SELECT MAX(DictSort) FROM SysDataDict"); int sort = result.ParseToInt(); sort++; return sort; } public bool ExistDictTypePartial(DataDictEntity entity) { var expression = LinqExtensions.True(); expression = expression.And(t => t.BaseIsDelete == (int)IsDeleteEnum.No); if (entity.Id.IsNullOrZero()) { expression = expression.And(t => t.DictType == entity.DictType); } else { expression = expression.And(t => t.DictType == entity.DictType && t.Id != entity.Id); } return _baseRepository.BaseRepository(dbConnectType).IQueryable(expression).Count() > 0 ? true : false; } /// /// 是否存在字典值 /// /// /// public bool ExistDictDetailPartial(string dictType) { var expression = LinqExtensions.True(); expression = expression.And(t => t.BaseIsDelete == (int)IsDeleteEnum.No); expression = expression.And(t => t.DictType == dictType); return _baseRepository.BaseRepository(dbConnectType).IQueryable(expression).Count() > 0 ? true : false; } #endregion #region 提交数据 public async Task SaveFormPartial(DataDictEntity entity) { var db = await _baseRepository.BaseRepository(dbConnectType).BeginTrans(); try { if (!entity.Id.IsNullOrZero()) { var dbEntity = await db.FindEntity(entity.Id); if (dbEntity.DictType != entity.DictType) { // 更新子表的DictType,因为2个表用DictType进行关联 IEnumerable detailList = await db.FindList(p => p.DictType == dbEntity.DictType); foreach (DataDictDetailEntity detailEntity in detailList) { detailEntity.DictType = entity.DictType; await detailEntity.Modify(); } } dbEntity.DictType = entity.DictType; dbEntity.Remark = entity.Remark; dbEntity.DictSort = entity.DictSort; await dbEntity.Modify(); await db.Update(dbEntity); } else { await entity.Create(); await db.Insert(entity); } await db.CommitTrans(); } catch { await db.RollbackTrans(); throw; } } #endregion #region 私有方法 private Expression> ListFilterPartial(DataDictListParam param) { var expression = LinqExtensions.True(); expression = expression.And(t => t.BaseIsDelete == (int)IsDeleteEnum.No); if (param != null) { if (!param.DictType.IsEmpty()) { expression = expression.And(t => t.DictType.Contains(param.DictType)); } if (!param.Remark.IsEmpty()) { expression = expression.And(t => t.Remark.Contains(param.Remark)); } } return expression; } #endregion } }