SystemService.cs 8.43 KB
using HHECS.Application.Error;
using HHECS.BllModel;
using HHECS.Dal;
using HHECS.Dal.Repository;
using HHECS.Model.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;

namespace HHECS.Application.Service
{
    /// <summary>
    /// 系统服务
    /// 字典、config等
    /// </summary>
    public class SystemService : BaseService
    {

        #region Config

        public BllResult<Config> GetConfigById(int id)
        {
            try
            {
                ConfigRepository configRepository = new ConfigRepository();
                return BllResultFactory.Success(configRepository.Find(id));
            }
            catch (Exception ex)
            {
                return BllResultFactory.Error<Config>($"异常:{ex.Message}", ErrorCodeConst.DEZ0001.ToString());
            }
        }

        public BllResult DeleteConfigs(List<Config> configs)
        {
            try
            {
                ConfigRepository configRepository = new ConfigRepository();
                return BllResultFactory.Success(configRepository.Delete(configs));
            }
            catch (Exception ex)
            {
                return BllResultFactory.Error($"异常:{ex.Message}", ErrorCodeConst.DEZ0001.ToString());
            }
        }

        public BllResult<Config> SaveConfig(Config config)
        {
            try
            {
                ConfigRepository configRepository = new ConfigRepository();
                return BllResultFactory.Success(configRepository.InsertOrUpdate(config));
            }
            catch (Exception ex)
            {
                return BllResultFactory.Error<Config>($"异常:{ex.Message}", ErrorCodeConst.DEZ0001.ToString());
            }
        }

        /// <summary>
        /// 分页查询config
        /// </summary>
        /// <param name="filter"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="totalCount"></param>
        /// <returns></returns>
        public BllResult<List<Config>> GetConfigs(Expression<Func<Config, bool>> filter, int pageIndex, int pageSize, out long totalCount)
        {
            try
            {
                ConfigRepository configRepository = new ConfigRepository();
                return BllResultFactory.Success(configRepository.Where(filter).Count(out totalCount).Page(pageIndex, pageSize).ToList());
            }
            catch (Exception ex)
            {
                totalCount = 0;
                return BllResultFactory.Error<List<Config>>($"异常:{ex.Message}", ErrorCodeConst.DEZ0001.ToString());
            }
        }

        #endregion

        #region Dict

        public BllResult<Dict> GetDictWithDetails(Expression<Func<Dict, bool>> filter)
        {
            try
            {
                DictRepository dictRepository = new DictRepository();
                var a = dictRepository.Where(filter).IncludeMany(t => t.DictDetails).First();
                if (a == null)
                {
                    return BllResultFactory.Error<Dict>("未查询到数据", ErrorCodeConst.QEZ0001.ToString());
                }
                else
                {
                    return BllResultFactory.Success(a);
                }
            }
            catch (Exception ex)
            {
                return BllResultFactory.Error<Dict>($"异常:{ex.Message}", ErrorCodeConst.DEZ0001.ToString());
            }
        }

        /// <summary>
        /// 插入或更新字典主表
        /// </summary>
        /// <param name="currentDict"></param>
        /// <returns></returns>
        public BllResult SaveDict(Dict dict)
        {
            try
            {
                DictRepository dictRepository = new DictRepository();
                dictRepository.InsertOrUpdate(dict);
                return BllResultFactory.Success();
            }
            catch (Exception ex)
            {
                return BllResultFactory.Error($"异常:{ex.Message}", ErrorCodeConst.DEZ0001.ToString());
            }
        }

        public BllResult<List<Dict>> GetDicts(Expression<Func<Dict, bool>> filter)
        {
            try
            {
                DictRepository dictRepository = new DictRepository();
                return BllResultFactory.Success(dictRepository.Where(filter).ToList());
            }
            catch (Exception ex)
            {
                return BllResultFactory.Error<List<Dict>>($"异常:{ex.Message}", ErrorCodeConst.DEZ0001.ToString());
            }
        }

        public BllResult<List<Dict>> GetDicts(Expression<Func<Dict, bool>> filter, int pageIndex, int pageSize, out long totalCount)
        {
            try
            {
                DictRepository dictRepository = new DictRepository();
                return BllResultFactory.Success(dictRepository.Where(filter).Count(out totalCount).Page(pageIndex, pageSize).ToList());
            }
            catch (Exception ex)
            {
                totalCount = 0;
                return BllResultFactory.Error<List<Dict>>($"异常:{ex.Message}", ErrorCodeConst.DEZ0001.ToString());
            }
        }

        public BllResult DeleteDicts(List<Dict> dicts)
        {
            using (var uw = DALHelper.GetFreeSql().CreateUnitOfWork())
            {
                try
                {
                    DictRepository dictRepository = new DictRepository();
                    dictRepository.UnitOfWork = uw;
                    DictDetailRepository dictDetailRepository = new DictDetailRepository();
                    dictDetailRepository.UnitOfWork = uw;

                    var dictIds = dicts.Select(t => t.Id).ToList();
                    dictDetailRepository.Delete(t => dictIds.Contains(t.DictId));
                    dictRepository.Delete(dicts);
                    uw.Commit();
                    return BllResultFactory.Success();
                }
                catch (Exception ex)
                {
                    uw?.Rollback();
                    return BllResultFactory.Error($"异常:{ex.Message}", ErrorCodeConst.DEZ0001.ToString());
                }
            }
        }

        /// <summary>
        /// 删除字典明细主id
        /// </summary>
        /// <param name="id">主表id</param>
        /// <returns></returns>
        public BllResult DeleteDictDetailByDictId(int dictId)
        {
            try
            {
                DictDetailRepository dictDetailRepository = new DictDetailRepository();
                dictDetailRepository.Delete(t => t.DictId == dictId);
                return BllResultFactory.Success();
            }
            catch (Exception ex)
            {
                return BllResultFactory.Error(ex.Message);
            }
        }

        /// <summary>
        /// 插入或更新字典明细
        /// </summary>
        /// <param name="currentDictDetial"></param>
        /// <returns></returns>
        public BllResult SaveDictDetail(DictDetail dictDetial)
        {
            try
            {
                DictDetailRepository dictDetailRepository = new DictDetailRepository();
                dictDetailRepository.InsertOrUpdate(dictDetial);
                return BllResultFactory.Success();
            }
            catch (Exception ex)
            {
                return BllResultFactory.Error($"异常:{ex.Message}", ErrorCodeConst.DEZ0001.ToString());
            }
        }

        public BllResult<List<DictDetail>> GetDictDetails(Expression<Func<DictDetail, bool>> filter)
        {
            try
            {
                DictDetailRepository dictDetailRepository = new DictDetailRepository();
                return BllResultFactory.Success(dictDetailRepository.Where(filter).Include(t => t.Dict).ToList());
            }
            catch (Exception ex)
            {
                return BllResultFactory.Error<List<DictDetail>>($"异常:{ex.Message}", ErrorCodeConst.DEZ0001.ToString());
            }
        }

        public BllResult DeleteDictDetails(List<DictDetail> dictDetails)
        {
            try
            {
                DictDetailRepository dictDetailRepository = new DictDetailRepository();
                return BllResultFactory.Success(dictDetailRepository.Delete(dictDetails));
            }
            catch (Exception ex)
            {
                return BllResultFactory.Error($"异常:{ex.Message}", ErrorCodeConst.DEZ0001.ToString());
            }
        }

        #endregion
    }
}