using JNPF.Common.Core.Manager; using JNPF.Common.Security; using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; using Microsoft.AspNetCore.Mvc; using SqlSugar; using Tnb.BasicData.Entities; using Tnb.BasicData.Interfaces; using Tnb.BasicData.Entities.Dto; namespace Tnb.BasicData { /// /// 生产bom /// [ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 1102)] [Route("api/[area]/[controller]/[action]")] [OverideVisualDev(ModelId)] public class BasMbomService : IBasMbomService,IDynamicApiController, ITransient { public const string ModelId = "25574817510421"; private readonly ISqlSugarRepository _repository; private readonly DataBaseManager _dbManager; private readonly IDictionaryDataService _dictionaryDataService; private readonly IUserManager _userManager; public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); public BasMbomService( ISqlSugarRepository repository, DataBaseManager dbManager, IUserManager userManager, IDictionaryDataService dictionaryDataService) { _repository = repository; _dbManager = dbManager; _userManager = userManager; _dictionaryDataService = dictionaryDataService; OverideFuncs.GetAsync = GetInfo; } /// /// 获取编辑信息 /// /// /// public async Task GetInfo(string id) { var db = _repository.AsSugarClient(); BasMbom mbom = await _repository.GetSingleAsync(x=>x.id==id); List processes = await db.Queryable().Where(x => x.mbom_id == id).ToListAsync(); List inputs = await db.Queryable().Where(x => x.mbom_id == id).ToListAsync(); List outputs = await db.Queryable().Where(x => x.mbom_id == id).ToListAsync(); MbomDataOutput mbomDataOutput = new MbomDataOutput(); List mbomProcessOutDtos = new List(); mbomDataOutput.id = mbom.id; mbomDataOutput.ebom_id = mbom.ebom_id; mbomDataOutput.is_first = mbom.is_first; mbomDataOutput.material_id = mbom.material_id; mbomDataOutput.num = mbom.num; mbomDataOutput.remark = mbom.remark; mbomDataOutput.route_id = mbom.route_id; mbomDataOutput.start_time = mbom.start_time; mbomDataOutput.end_time = mbom.end_time; mbomDataOutput.unit_id = mbom.unit_id; mbomDataOutput.version = mbom.version; foreach (BasMbomProcess process in processes) { mbomProcessOutDtos.Add(new MbomProcessOutDto() { mbom_id = mbom.id, process_id = process.process_id, preparation_time = process.preparation_time, station = process.station, byproduct_status = process.byproduct_status, production_method = process.production_method, inputs = inputs.Where(x => x.process_id == process.process_id).ToList(), outputs = outputs.Where(x => x.process_id == process.process_id).ToList(), }); } mbomDataOutput.processes = mbomProcessOutDtos; return mbomDataOutput; } /// /// 保存生产bom /// /// /// [HttpPost] public async Task SaveData(MbomSaveDataInput mbomSaveDataInput) { DbResult result = await _repository.AsSugarClient().Ado.UseTranAsync(async () => { //新增 if (string.IsNullOrEmpty(mbomSaveDataInput.id)) { string mbomId = SnowflakeIdHelper.NextId(); string orgId = _userManager.GetUserInfo().Result.organizeId; BasMbom mbom = new BasMbom() { id = mbomId, org_id = orgId, material_id= mbomSaveDataInput.material_id, num = mbomSaveDataInput.num, unit_id = mbomSaveDataInput.unit_id, version = mbomSaveDataInput.version, start_time = mbomSaveDataInput.start_time, end_time = mbomSaveDataInput.end_time, ebom_id = mbomSaveDataInput.ebom_id, route_id = mbomSaveDataInput.route_id, is_first = mbomSaveDataInput.is_first, remark = mbomSaveDataInput.remark, create_id = _userManager.UserId, create_time = DateTime.Now, }; await _repository.InsertAsync(mbom); List processes = new List(); List inputs = new List(); List outputs = new List(); foreach (var process in mbomSaveDataInput.processes) { string mbomProcessId = SnowflakeIdHelper.NextId(); processes.Add(new BasMbomProcess() { id = mbomProcessId, org_id = orgId, mbom_id= mbomId, process_id = process.process_id, preparation_time = process.preparation_time, station = process.station, byproduct_status = process.byproduct_status, }); foreach (var input in process.inputs) { string inputId = SnowflakeIdHelper.NextId(); inputs.Add(new BasMbomInput() { id = inputId, mbom_id = mbomId, mbom_process_id = mbomProcessId, process_id = process.process_id, material_id = input.material_id, num = input.num, org_id = orgId, }); } foreach (var output in process.outputs) { string outputId = SnowflakeIdHelper.NextId(); outputs.Add(new BasMbomOutput() { id = outputId, mbom_id = mbomId, mbom_process_id = mbomProcessId, process_id = process.process_id, material_id = output.material_id, num = output.num, org_id = orgId, }); } } if (processes.Count > 0) { await _repository.AsSugarClient().Insertable(processes).ExecuteCommandAsync(); } if (inputs.Count > 0) { await _repository.AsSugarClient().Insertable(inputs).ExecuteCommandAsync(); } if (outputs.Count > 0) { await _repository.AsSugarClient().Insertable(outputs).ExecuteCommandAsync(); } } else//修改 { string orgId = _userManager.GetUserInfo().Result.organizeId; await _repository.UpdateAsync(x=>new BasMbom() { // org_id = orgId, material_id= mbomSaveDataInput.material_id, num = mbomSaveDataInput.num, unit_id = mbomSaveDataInput.unit_id, version = mbomSaveDataInput.version, start_time = mbomSaveDataInput.start_time, end_time = mbomSaveDataInput.end_time, ebom_id = mbomSaveDataInput.ebom_id, route_id = mbomSaveDataInput.route_id, is_first = mbomSaveDataInput.is_first, remark = mbomSaveDataInput.remark, modify_id = _userManager.UserId, modify_time = DateTime.Now, },x=>x.id==mbomSaveDataInput.id); List processes = new List(); List inputs = new List(); List outputs = new List(); foreach (var process in mbomSaveDataInput.processes) { string mbomProcessId = SnowflakeIdHelper.NextId(); processes.Add(new BasMbomProcess() { id = mbomProcessId, org_id = orgId, mbom_id= mbomSaveDataInput.id, process_id = process.process_id, preparation_time = process.preparation_time, station = process.station, byproduct_status = process.byproduct_status, production_method = process.production_method, }); foreach (var input in process.inputs) { string inputId = SnowflakeIdHelper.NextId(); inputs.Add(new BasMbomInput() { id = inputId, mbom_id = mbomSaveDataInput.id, mbom_process_id = mbomProcessId, process_id = process.process_id, material_id = input.material_id, num = input.num, org_id = orgId, }); } foreach (var output in process.outputs) { string outputId = SnowflakeIdHelper.NextId(); outputs.Add(new BasMbomOutput() { id = outputId, mbom_id = mbomSaveDataInput.id, mbom_process_id = mbomProcessId, process_id = process.process_id, material_id = output.material_id, num = output.num, org_id = orgId, }); } } await _repository.AsSugarClient().Deleteable().Where(x=>x.mbom_id==mbomSaveDataInput.id).ExecuteCommandAsync(); await _repository.AsSugarClient().Deleteable().Where(x=>x.mbom_id==mbomSaveDataInput.id).ExecuteCommandAsync(); await _repository.AsSugarClient().Deleteable().Where(x=>x.mbom_id==mbomSaveDataInput.id).ExecuteCommandAsync(); if (processes.Count > 0) { await _repository.AsSugarClient().Insertable(processes).ExecuteCommandAsync(); } if (inputs.Count > 0) { await _repository.AsSugarClient().Insertable(inputs).ExecuteCommandAsync(); } if (outputs.Count > 0) { await _repository.AsSugarClient().Insertable(outputs).ExecuteCommandAsync(); } } }); return result.IsSuccess ? "保存成功" : result.ErrorMessage; } } }