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 = "Ebom", Order = 701)] [Route("api/basic/[controller]")] public class EbomService : IDynamicApiController, ITransient { private readonly ISqlSugarRepository _repository; private readonly DataBaseManager _dbManager; private readonly IDictionaryDataService _dictionaryDataService; public EbomService( ISqlSugarRepository repository,DataBaseManager dbManager,IDictionaryDataService dictionaryDataService) { _repository = repository; _dbManager = dbManager; _dictionaryDataService = dictionaryDataService; } /// /// 获取物料清单树. /// /// 获取物料清单树. /// [HttpPost("[action]")] public async Task GetTree(EbomTreeQueryInput 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.EbomId==b.Id) .LeftJoin((a,b,c)=>a.MaterialId==c.Id) .LeftJoin((a,b,c,d)=>a.MaterialId==d.MaterialId) .Where((a,b,c)=>a.EbomId==queryInput.ebomId) .Select((a,b,c,d)=>new EbomTreeOutput { 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, feeding_control = a.FeedingControl, loss_rate = a.LossRate, quantity = a.Quantity, require_weight = a.RequireWeight, substitute_material = a.SubstituteMaterial, routing = d.Routing, version = d.Version, 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.EbomId==b.Id) .LeftJoin((a,b,c)=>a.MaterialId==c.Id) .LeftJoin((a,b,c,d)=>a.MaterialId==d.MaterialId) .Where((a,b,c)=>b.MaterialId==queryInput.materialId && a.EbomId==b.Id) .Select((a,b,c,d)=>new EbomTreeOutput { 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, feeding_control = a.FeedingControl, loss_rate = a.LossRate, quantity = a.Quantity, require_weight = a.RequireWeight, substitute_material = a.SubstituteMaterial, routing = d.Routing, version = d.Version, 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; } } [HttpPost("[action]")] public async Task> GetEbomVersionAndRouteName(string materialId) { var db = _repository.AsSugarClient(); var momDbLink = await _repository.AsSugarClient().Queryable().FirstAsync(x => x.FullName == DbName.TNBMON); if (momDbLink != null) { db = _dbManager.ChangeDataBase(momDbLink); } var ebom = await db.Queryable() .LeftJoin((a,b)=>a.Routing==b.Id) .Where((a,b) => a.MaterialId == materialId) .Select((a,b)=>new { a.Version, b.Name, }).SingleAsync(); return new Dictionary() { ["version"] = ebom?.Version, ["routeName"] = ebom?.Name , }; } } }