using JNPF.Common.Core.Manager; using JNPF.Common.Filter; using JNPF.Common.Security; using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; using JNPF.VisualDev.Entitys.Dto.VisualDevModelData; 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]")] [OverideVisualDev(ModelId)] public class BasEbomService : IBasEbomService, IOverideVisualDevService, IDynamicApiController, ITransient { public const string ModelId = "25487105536805"; private readonly ISqlSugarRepository _repository; private readonly DataBaseManager _dbManager; private readonly IDictionaryDataService _dictionaryDataService; public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); public BasEbomService( ISqlSugarRepository repository, DataBaseManager dbManager, IDictionaryDataService dictionaryDataService) { _repository = repository; _dbManager = dbManager; _dictionaryDataService = dictionaryDataService; OverideFuncs.GetListAsync = GetList; } /// /// 物料清单列表 /// /// /// public async Task GetList(VisualDevModelListQueryInput input) { ISqlSugarClient db = _repository.AsSugarClient(); Dictionary? queryJson = (input == null || string.IsNullOrEmpty(input.queryJson)) ? null : input.queryJson.ToObject>(); string materialInfo = queryJson?["query_info"]?.ToString() ?? ""; SqlSugarPagedList list = await db.Queryable((a, b, c) => new object[] { JoinType.Left, a.material_id == b.id, JoinType.Left, a.route_id == c.id, }) .WhereIF(!string.IsNullOrEmpty(materialInfo), (a, b, c) => b.code.Contains(materialInfo) || b.name.Contains(materialInfo)) .Select((a, b, c) => new EbomListOutput { id = a.id, material_id = b.code + "-" + b.name, material_id_id = b.id, status = SqlFunc.IIF(a.status == "0", "禁用", "启用"), descrip = a.descrip, // quantity = a.quantity, version = a.version, route_id = c.name, route_id_id = c.id, }).ToPagedListAsync(input?.currentPage ?? 1, input?.pageSize ?? 50); return PageResult.SqlSugarPageResult(list); } /// /// 获取物料清单树. /// /// [HttpPost] public async Task GetTree(EbomTreeQueryInput queryInput) { ISqlSugarClient db = _repository.AsSugarClient(); Dictionary 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)) { List 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, molecule = a.molecule, denominator = a.denominator, 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 = !string.IsNullOrEmpty(it.material_id_unit_id) ? dic[it.material_id_unit_id].ToString() : ""; }).ToListAsync(); return data; } else { List 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, molecule = a.molecule, denominator = a.denominator, 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 = !string.IsNullOrEmpty(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"]; ISqlSugarClient 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 ?? "" , }; } } }