using JNPF.Common.Core.Manager; using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.Systems.Interfaces.System; using Microsoft.AspNetCore.Mvc; using SqlSugar; using Tnb.BasicData.Entities; using Tnb.BasicData.Entities.Dto; using Tnb.BasicData.Interfaces; namespace Tnb.BasicData { /// /// 物料清单 /// [ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 1102)] [Route("api/[area]/[controller]/[action]")] public class BasEbomService : IBasEbomService,IDynamicApiController, ITransient { private readonly ISqlSugarRepository _repository; private readonly DataBaseManager _dbManager; private readonly IDictionaryDataService _dictionaryDataService; public BasEbomService( ISqlSugarRepository repository,DataBaseManager dbManager,IDictionaryDataService dictionaryDataService) { _repository = repository; _dbManager = dbManager; _dictionaryDataService = dictionaryDataService; } /// /// 获取物料清单树. /// /// 获取物料清单树. /// [HttpPost] public async Task GetTree(EbomTreeQueryInput queryInput) { var db = _repository.AsSugarClient(); var dic = await _dictionaryDataService.GetDicByKey(DictConst.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.ebom_id==b.id) .LeftJoin((a,b,c)=>a.material_id==c.id) .LeftJoin((a,b,c,d)=>a.material_id==d.material_id) .LeftJoin((a,b,c,d,e)=>d.route_id==e.id) .LeftJoin((a,b,c,d,e,f)=>a.substitute_material_id==f.id) .Where((a,b,c)=>a.ebom_id==queryInput.ebomId) .Select((a,b,c,d,e,f)=>new EbomTreeOutput { material_id = c.name, material_id_descrip = c.descrip, material_id_remark = c.remark, material_id_unit_id = c.unit_id, material_id_id = c.id, feeding_control = a.feeding_control, loss_rate = a.loss_rate, quantity = a.quantity, require_weight = a.require_weight, route_name = e.name, version = d.version, substitute_material_id = f.name, hasChildren = SqlFunc.Subqueryable().Where(x=>x.material_id==a.material_id).Any(), }).Mapper(it => { it.material_id_unit_id = dic[it.material_id_unit_id].ToString(); }).ToListAsync(); return data; } else { var data = await db.Queryable() .LeftJoin((a,b)=>a.ebom_id==b.id) .LeftJoin((a,b,c)=>a.material_id==c.id) .LeftJoin((a,b,c,d)=>a.material_id==d.material_id) .LeftJoin((a,b,c,d,e)=>d.route_id==e.id) .LeftJoin((a,b,c,d,e,f)=>a.substitute_material_id==f.id) .Where((a,b,c)=>b.material_id==queryInput.materialId && a.ebom_id==b.id) .Select((a,b,c,d,e,f)=>new EbomTreeOutput { material_id = c.name, material_id_descrip = c.descrip, material_id_remark = c.remark, material_id_unit_id = c.unit_id, material_id_id = c.id, feeding_control = a.feeding_control, loss_rate = a.loss_rate, quantity = a.quantity, require_weight = a.require_weight, route_name = e.name, version = d.version, substitute_material_id = f.name, hasChildren = SqlFunc.Subqueryable().Where(x=>x.material_id==a.material_id).Any(), }).Mapper(it => { it.material_id_unit_id = dic[it.material_id_unit_id].ToString(); }).ToListAsync(); return data; } } /// /// 根据物料ID获取版本号和工艺路线 /// /// 物料id materialId /// [HttpPost] public async Task> GetEbomVersionAndRouteName(Dictionary parameters) { string materialId = parameters["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.route_id==b.id) .OrderByDescending((a,b)=>a.create_time) .Where((a,b) => a.material_id == materialId) .Select((a,b)=>new { a.id, a.version, b.name, }).FirstAsync(); return new Dictionary() { ["version"] = ebom?.version, ["routeName"] = ebom?.name, ["routeId"] = ebom?.id , }; } } }