using iWare.Wms.Core; using Furion.DatabaseAccessor; using Furion.DatabaseAccessor.Extensions; using Furion.DependencyInjection; using Furion.DynamicApiController; using Furion.Extras.iWare.Wms.Util.LowCode.Front.Model; using Furion.FriendlyException; using Mapster; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; namespace iWare.Wms.Application { /// /// 字典值服务 /// [ApiDescriptionSettings(Name = "DictData", Order = 100)] [AllowAnonymous] [Route("api")] public class SysDictDataService : ISysDictDataService, IDynamicApiController, ITransient { private readonly IRepository _sysDictDataRep; // 字典类型表仓储 private readonly IRepository _sysDictTypeRep; // 字典类型表仓储 public SysDictDataService(IRepository sysDictDataRep, IRepository sysDictTypeRep) { _sysDictDataRep = sysDictDataRep; _sysDictTypeRep = sysDictTypeRep; } /// /// 分页查询字典值 /// /// /// [HttpGet("sysDictData/page")] public async Task> QueryDictDataPageList([FromQuery] DictDataPageInput input) { bool supperAdmin = CurrentUserInfo.IsSuperAdmin; var code = !string.IsNullOrEmpty(input.Code?.Trim()); var value = !string.IsNullOrEmpty(input.Value?.Trim()); var dictDatas = await _sysDictDataRep.DetachedEntities .Where(u => u.TypeId == input.TypeId) .Where((code, u => EF.Functions.Like(u.Code, $"%{input.Code.Trim()}%")), (value, u => EF.Functions.Like(u.Value, $"%{input.Value.Trim()}%"))) .Where(u => (u.Status != CommonStatus.DELETED && !supperAdmin) || (u.Status <= CommonStatus.DELETED && supperAdmin)) .OrderBy(u => u.Sort) .ProjectToType() .ToADPagedListAsync(input.PageNo, input.PageSize); return dictDatas; } /// /// 获取某个字典类型下字典值列表 /// /// [HttpGet("sysDictData/list")] public async Task> GetDictDataList([FromQuery] QueryDictDataListInput input) { return await _sysDictDataRep.DetachedEntities.Where(u => u.TypeId == input.TypeId) .Where(u => u.Status != CommonStatus.DELETED) .OrderBy(u => u.Sort) .ToListAsync(); } /// /// 获取某个字典类型下字典值列表 /// /// [HttpGet("sysDictData/listbycode")] public async Task> GetDictDataListByCode([FromQuery] QueryDictDataListByCodeInput input) { var typeid = await _sysDictTypeRep.Where(x => x.Code == input.Code).Select(x => x.Id).FirstOrDefaultAsync(); return await _sysDictDataRep.DetachedEntities.Where(u => u.TypeId == typeid) .Where(u => u.Status != CommonStatus.DELETED) .OrderBy(u => u.Sort) .Select(u => new Front_Option() { Label = u.Value, Value = u.Code }) .ToListAsync(); } /// /// 增加字典值 /// /// /// [HttpPost("sysDictData/add")] public async Task AddDictData(AddDictDataInput input) { var isExist = await _sysDictDataRep.AnyAsync(u => (u.Code == input.Code || u.Value == input.Value) && u.TypeId == input.TypeId, false); if (isExist) throw Oops.Oh(ErrorCode.D3003); var dictData = input.Adapt(); await _sysDictDataRep.InsertAsync(dictData); } /// /// 删除字典值 /// /// /// [HttpPost("sysDictData/delete")] public async Task DeleteDictData(DeleteDictDataInput input) { var dictData = await _sysDictDataRep.FirstOrDefaultAsync(u => u.Id == input.Id); if (dictData == null) throw Oops.Oh(ErrorCode.D3004); if (dictData.Status == CommonStatus.DELETED) { await dictData.DeleteAsync(); } else { dictData.Status = CommonStatus.DELETED; dictData.IsDeleted = true; } } /// /// 更新字典值 /// /// /// [HttpPost("sysDictData/edit")] public async Task UpdateDictData(UpdateDictDataInput input) { var isExist = await _sysDictDataRep.AnyAsync(u => u.Id == input.Id, false); if (!isExist) throw Oops.Oh(ErrorCode.D3004); // 排除自己并且判断与其他是否相同 isExist = await _sysDictDataRep.AnyAsync(u => (u.Value == input.Value || u.Code == input.Code) && u.TypeId == input.TypeId && u.Id != input.Id, false); if (isExist) throw Oops.Oh(ErrorCode.D3003); var dictData = input.Adapt(); await _sysDictDataRep.UpdateAsync(dictData, ignoreNullValues: true); } /// /// 字典值详情 /// /// /// [HttpGet("sysDictData/detail")] public async Task GetDictData([FromQuery] QueryDictDataInput input) { return await _sysDictDataRep.FirstOrDefaultAsync(u => u.Id == input.Id, false); } /// /// 修改字典值状态 /// /// /// [HttpPost("sysDictData/changeStatus")] public async Task ChangeDictDataStatus(ChageStateDictDataInput input) { var dictData = await _sysDictDataRep.FirstOrDefaultAsync(u => u.Id == input.Id); if (dictData == null) throw Oops.Oh(ErrorCode.D3004); if (!Enum.IsDefined(typeof(CommonStatus), input.Status)) throw Oops.Oh(ErrorCode.D3005); dictData.Status = input.Status; dictData.IsDeleted = false; } /// /// 根据字典类型Id获取字典值集合 /// /// /// [NonAction] public async Task> GetDictDataListByDictTypeId(long dictTypeId) { return await _sysDictDataRep.DetachedEntities.Where(u => u.SysDictType.Id == dictTypeId) .Where(u => u.Status == CommonStatus.ENABLE).OrderBy(u => u.Sort) .ToListAsync(); } /// /// 删除字典下所有值 /// /// [NonAction] public async Task DeleteByTypeId(long dictTypeId) { var dictDatas = await _sysDictDataRep.Where(u => u.TypeId == dictTypeId).ToListAsync(); await _sysDictDataRep.DeleteAsync(dictDatas); } } }