using JNPF.Common.Core.Manager; using JNPF.Common.Enums; using JNPF.Common.Filter; using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.FriendlyException; using JNPF.Systems.Entitys.Dto.Province; using JNPF.Systems.Entitys.System; using JNPF.Systems.Interfaces.System; using Mapster; using Microsoft.AspNetCore.Mvc; using SqlSugar; namespace JNPF.Systems.Core.Province; /// /// 行政区划 /// 版 本:V3.2 /// 版 权:拓通智联科技有限公司(http://www.tuotong-tech.com) /// 日 期:2021-06-01. /// [ApiDescriptionSettings(Tag = "System", Name = "Area", Order = 206)] [Route("api/system/[controller]")] public class ProvinceService : IDynamicApiController, ITransient { /// /// 服务基础仓储. /// private readonly ISqlSugarRepository _repository; /// /// 用户管理. /// private readonly IUserManager _userManager; /// /// 初始化一个类型的新实例. /// public ProvinceService( ISqlSugarRepository repository, IUserManager userManager) { _repository = repository; _userManager = userManager; } #region GET /// /// 获取行政区划列表. /// /// 节点Id. /// 请求参数. /// [HttpGet("{nodeId}")] public async Task GetList(string nodeid, [FromQuery] KeywordInput input) { var data = await _repository.AsQueryable().Where(m => m.ParentId == nodeid && m.DeleteMark == null) .WhereIF(!string.IsNullOrEmpty(input.keyword), t => t.EnCode.Contains(input.keyword) || t.FullName.Contains(input.keyword)) .OrderBy(o => o.SortCode).OrderBy(t => t.CreatorTime, OrderByType.Desc) .OrderByIF(!string.IsNullOrEmpty(input.keyword), t => t.LastModifyTime, OrderByType.Desc).ToListAsync(); var output = data.Adapt>(); foreach (var item in output) { var flag = await _repository.IsAnyAsync(m => m.ParentId == item.id && m.DeleteMark == null); item.isLeaf = !flag; item.hasChildren = flag; } return new { list = output }; } /// /// 获取行政区划下拉框数据(异步). /// /// 当前Id. /// 区域ID. /// [HttpGet("{id}/Selector/{areaId}")] public async Task GetSelector(string id, string areaId) { var data = await _repository.AsQueryable().Where(m => m.ParentId == id && m.DeleteMark == null && m.EnabledMark == 1).OrderBy(o => o.SortCode).ToListAsync(); if (!areaId.Equals("0")) data.RemoveAll(x => x.Id == areaId); var output = data.Adapt>(); foreach (var item in output) { item.isLeaf = !await _repository.IsAnyAsync(m => m.ParentId == item.id && m.DeleteMark == null); } return new { list = output }; } /// /// 信息. /// /// 主键值 /// [HttpGet("{id}/Info")] public async Task GetInfo(string id) { return (await _repository.GetFirstAsync(m => m.Id == id && m.DeleteMark == null)).Adapt(); } #endregion #region POST /// /// 删除. /// /// 主键值. /// [HttpDelete("{id}")] public async Task Delete(string id) { if (!await _repository.IsAnyAsync(m => m.Id == id && m.DeleteMark == null) || await _repository.IsAnyAsync(m => m.ParentId == id && m.DeleteMark == null)) throw Oops.Oh(ErrorCode.D1007); var isOk = await _repository.AsUpdateable().SetColumns(it => new ProvinceEntity() { DeleteMark = 1, DeleteUserId = _userManager.UserId, DeleteTime = SqlFunc.GetDate() }).Where(it => it.Id.Equals(id)).ExecuteCommandHasChangeAsync(); if (!isOk) throw Oops.Oh(ErrorCode.COM1002); } /// /// 新建. /// /// 实体对象. /// [HttpPost("")] public async Task Create([FromBody] ProvinceCrInput input) { if (await _repository.IsAnyAsync(x => x.EnCode == input.enCode && x.DeleteMark == null)) throw Oops.Oh(ErrorCode.COM1004); var entity = input.Adapt(); var isOk = await _repository.AsInsertable(entity).IgnoreColumns(ignoreNullColumn: true).CallEntityMethod(m => m.Creator()).ExecuteCommandAsync(); if (isOk < 1) throw Oops.Oh(ErrorCode.COM1000); } /// /// 编辑. /// /// 主键值. /// 实体对象. /// [HttpPut("{id}")] public async Task Update(string id, [FromBody] ProvinceUpInput input) { if (await _repository.IsAnyAsync(x => x.Id != id && x.EnCode == input.enCode && x.DeleteMark == null)) throw Oops.Oh(ErrorCode.COM1004); var entity = input.Adapt(); var isOk = await _repository.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).CallEntityMethod(m => m.LastModify()).ExecuteCommandHasChangeAsync(); if (!isOk) throw Oops.Oh(ErrorCode.COM1001); } /// /// 更新行政区划状态. /// /// 主键值 /// [HttpPut("{id}/Actions/State")] public async Task ActionsState(string id) { var isOk = await _repository.AsUpdateable().SetColumns(it => new ProvinceEntity() { EnabledMark = SqlFunc.IIF(it.EnabledMark == 1, 0, 1), LastModifyUserId = _userManager.UserId, LastModifyTime = SqlFunc.GetDate() }).Where(it => it.Id.Equals(id)).ExecuteCommandAsync(); if (isOk < 0) throw Oops.Oh(ErrorCode.COM1003); } /// /// 获取省市区 根据 二维数组 id . /// /// 省市区 二维 数组. /// [HttpPost("GetAreaByIds")] public async Task GetAreaByIds([FromBody] ProvinceGetDataInput input) { var allIds = new List(); var res = new List>(); foreach (var item in input.idsList) { foreach (var it in item) { allIds.Add(it); } } var data = await _repository.AsQueryable().Where(m => allIds.Contains(m.Id) && m.DeleteMark == null). Select(m => new ProvinceEntity() { Id = m.Id, FullName = m.FullName }).ToListAsync(); foreach (var item in input.idsList) { var itemValueList = data.FindAll(x => item.Contains(x.Id)); var valueList = new List(); itemValueList.ForEach(it => { valueList.Add(it.FullName); }); res.Add(valueList); } return res; } #endregion }