using Infrastructure.Attribute; using Microsoft.AspNetCore.Http; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Infrastructure; using ARW.Model; using ARW.Repository; using ARW.Model.Dto.Business.Custom.Regions; using ARW.Model.Models.Business.Custom.Regions; using ARW.Model.Vo.Business.Custom.Regions; using ARW.Repository.Business.Custom.Regions; using ARW.Service.Business.IBusinessService.Custom.Regions; namespace ARW.Service.Business.BusinessService.Custom.Regions { /// /// 省市区数据表接口实现类 /// [AppService(ServiceType = typeof(IRegionService), ServiceLifetime = LifeTime.Transient)] public class RegionServiceImpl : BaseService, IRegionService { private readonly RegionRepository _RegionRepository; public RegionServiceImpl(RegionRepository RegionRepository) { _RegionRepository = RegionRepository; } #region 业务逻辑代码 /// /// 查询省市区数据表树形列表 /// public async Task> GetRegionTreeList(RegionQueryDto parm) { //开始拼装查询条件 var predicate = Expressionable.Create(); predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.RegionName), s => s.RegionName.Contains(parm.RegionName)); predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.RegionCode), s => s.RegionCode == parm.RegionCode); var query = _RegionRepository .Queryable() .LeftJoin((s, c) => s.RegionPid == c.RegionId) .Where(predicate.ToExpression()) .OrderBy(s => s.RegionId, OrderByType.Asc) .Select((s, c) => new RegionVo { RegionId = s.RegionId, RegionName = s.RegionName, RegionPid = s.RegionPid, RegionCode = s.RegionCode, RegionLevel = s.RegionLevel, ParentName = c.RegionName, }); return await query.ToTreeAsync(it => it.Children, it => it.RegionPid, 0); } /// /// 查询省市区数据表树形列表(二级) /// public async Task> GetSecondRegionTreeList(RegionQueryDto parm) { //开始拼装查询条件 var predicate = Expressionable.Create(); predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.RegionName), s => s.RegionName.Contains(parm.RegionName)); predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.RegionCode), s => s.RegionCode == parm.RegionCode); predicate = predicate.And(s => s.RegionLevel <= 2); var query = _RegionRepository .Queryable() .LeftJoin((s, c) => s.RegionPid == c.RegionId) .Where(predicate.ToExpression()) .OrderBy(s => s.RegionId, OrderByType.Asc) .Select((s, c) => new SecondRegionVo { Id = s.RegionId, Label = s.RegionName, Pid = s.RegionPid, Code = s.RegionCode, ParentName = c.RegionName }); return await query.ToTreeAsync(it => it.Children, it => it.Pid, 0); } /// /// 查询省市区数据表列表 /// public Task> GetRegionList(RegionQueryDto parm) { //开始拼装查询条件d var predicate = Expressionable.Create(); predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.RegionName), it => it.RegionName.Contains(parm.RegionName)); predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.RegionCode), it => it.RegionCode == parm.RegionCode); var query = _RegionRepository .Queryable() .Where(predicate.ToExpression()) .OrderBy(s => s.RegionId, OrderByType.Asc) .Select(s => new RegionVo { RegionId = s.RegionId, RegionName = s.RegionName, RegionPid = s.RegionPid, RegionCode = s.RegionCode, RegionLevel = s.RegionLevel, }); return query.ToListAsync(); } /// /// 添加或修改省市区数据表 /// public async Task AddOrUpdateRegion(Region model) { if (model.RegionId != 0) { var type = await _RegionRepository.GetListAsync(s => s.RegionPid == model.RegionId); if (type != null) { foreach (var item in type) { if (model.RegionPid == item.RegionId) throw new CustomException("上级菜单不能选择自己的子级!"); } } if (model.RegionPid == model.RegionId) throw new CustomException("上级菜单不能选择与当前菜单一样的!"); var response = await _RegionRepository.UpdateAsync(model); return "修改成功!"; } else { var info = _RegionRepository.GetFirst(it => it.RegionId == model.RegionPid); var response = await _RegionRepository.InsertAsync(model); return "添加成功!"; } } /// /// 获取省市区Id /// /// 省市区编码 /// /// public async Task GetRegionId(string RegionCode, int level) { var region = await _RegionRepository.GetFirstAsync(s => s.RegionCode == RegionCode && s.RegionLevel == level); if (region == null) throw new Exception(RegionCode + "编码不正确"); return region.RegionId; } #region Excel处理 /// /// Excel数据导出处理 /// public async Task> HandleExportData(List data) { return data; } #endregion #endregion } }