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;
}
///
/// 获取省市区名称
///
/// id
///
public async Task GetRegionName(int id)
{
var province = await _RegionRepository.GetFirstAsync(s => s.RegionId == id);
return province.RegionName;
}
///
/// 获取省市区完整名称
///
/// 省id
/// 市id
/// 区id
///
public async Task GetRegionFullName(int provinceId, int cityId, int regionId)
{
var regionName = "";
var province = await _RegionRepository.GetFirstAsync(s => s.RegionId == provinceId);
regionName += province.RegionName;
var city = await _RegionRepository.GetFirstAsync(s => s.RegionId == cityId);
regionName += city.RegionName;
var region = await _RegionRepository.GetFirstAsync(s => s.RegionId == regionId);
regionName += region.RegionName;
return regionName;
}
#region Excel处理
///
/// Excel数据导出处理
///
public async Task> HandleExportData(List data)
{
return data;
}
#endregion
#endregion
}
}