using JNPF.Common.Core.Manager; using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.Systems.Entitys.System; using JNPF.Systems.Interfaces.System; using Microsoft.AspNetCore.Mvc; using SqlSugar; using Tnb.BasicData.Entitys; using Tnb.BasicData.Entitys.Entity; using Tnb.BasicData.Entitys.Dto; namespace Tnb.BasicData { /// /// 物料清单 /// [ApiDescriptionSettings(Tag = "BasicData", Name = "ParentMaterial", Order = 701)] [Route("api/basic/[controller]")] public class ParentMaterialService : IDynamicApiController, ITransient { private readonly ISqlSugarRepository _repository; private readonly DataBaseManager _dbManager; private readonly IDictionaryDataService _dictionaryDataService; public ParentMaterialService( ISqlSugarRepository repository,DataBaseManager dbManager,IDictionaryDataService dictionaryDataService) { _repository = repository; _dbManager = dbManager; _dictionaryDataService = dictionaryDataService; } /// /// 获取物料清单树. /// /// 获取物料清单树. /// [HttpPost("[action]")] public async Task GetTree(ParentMaterialTreeQueryInput queryInput) { var db = _repository.AsSugarClient(); var dic = await _dictionaryDataService.GetDicByKey(DicTypeKey.MeasurementUnit); var momDbLink = await _repository.AsSugarClient().Queryable().FirstAsync(x => x.FullName == DbName.TNBMON); if (momDbLink != null) { db = _dbManager.ChangeDataBase(momDbLink); } if (string.IsNullOrEmpty(queryInput.materialId)) { var data = await db.Queryable() .LeftJoin((a,b)=>a.ParentMaterialId==b.Id) .LeftJoin((a,b,c)=>a.MaterialId==c.Id) .Where((a,b,c)=>a.ParentMaterialId==queryInput.parentMaterialId) .Select((a,b,c)=>new ParentMaterialTreeOutput { material_id = c.MaterialName, material_id_extras = c.Extras, material_id_id=c.Id, material_id_minpacking = c.Minpacking, material_id_remark = c.Remark, material_id_unitid = c.Unitid, hasChildren = SqlFunc.Subqueryable().Where(x=>x.MaterialId==a.MaterialId).Any(), }).Mapper(it => { it.material_id_unitid = dic[it.material_id_unitid].ToString(); }).ToListAsync(); return data; } else { var data = await db.Queryable() .LeftJoin((a,b)=>a.ParentMaterialId==b.Id) .LeftJoin((a,b,c)=>a.MaterialId==c.Id) .Where((a,b,c)=>b.MaterialId==queryInput.materialId && a.ParentMaterialId==b.Id) .Select((a,b,c)=>new ParentMaterialTreeOutput { material_id = c.MaterialName, material_id_extras = c.Extras, material_id_id=c.Id, material_id_minpacking = c.Minpacking, material_id_remark = c.Remark, material_id_unitid = c.Unitid, hasChildren = SqlFunc.Subqueryable().Where(x=>x.MaterialId==a.MaterialId).Any(), }).Mapper(it => { it.material_id_unitid = dic[it.material_id_unitid].ToString(); }).ToListAsync(); return data; } } } }