using JNPF.Common.Core.Manager; using JNPF.Common.Enums; using JNPF.Common.Security; using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.FriendlyException; using Microsoft.AspNetCore.Mvc; using Microsoft.ClearScript.Util.Web; using SqlSugar; using Tnb.BasicData.Entities; using Tnb.ProductionMgr.Entities; using Tnb.ProductionMgr.Entities.Dto; using Tnb.ProductionMgr.Entities.Dto.PrdManage; using Tnb.ProductionMgr.Interfaces; using Tnb.WarehouseMgr.Entities; using Tnb.WarehouseMgr.Entities.Dto; namespace Tnb.ProductionMgr { /// /// 业务实现:物料签收 /// [ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 700)] [Route("api/[area]/[controller]/[action]")] public class PrdMaterialReceiptService : IPrdMaterialReceiptService, IDynamicApiController, ITransient { private readonly ISqlSugarRepository _repository; private readonly IUserManager _userManager; public PrdMaterialReceiptService( ISqlSugarRepository repository, IUserManager userManager ) { _repository = repository; _userManager = userManager; } [HttpPost] public async Task GetInfoByQrCode(string qrCode) { var db = _repository.AsSugarClient(); var result = await db.Queryable() .Where((a) => a.carry_code == qrCode) .Select(a => new { carry_id = a.id, carry_name = a.carry_name, children = SqlFunc.Subqueryable() .LeftJoin((b,c)=>b.material_id==c.id) .Where((b,c)=>a.id==b.carry_id).ToList((b,c)=>new CarryCodeDetailOutput() { unit_id = c.unit_id, barcode = b.barcode, code_batch = b.code_batch, codeqty = b.codeqty, material_id = b.material_id, material_code = c.code, material_name = c.name }) }).FirstAsync(); return result; } [HttpPost] public async Task SaveData(MaterialReceiptInput input) { var db = _repository.AsSugarClient(); DbResult result = await db.Ado.UseTranAsync(async () => { var moTask = await db.Queryable().FirstAsync(x => x.id == input.mo_task_id); var inputMaterials = await db.Queryable() .Where(x => x.mbom_id == moTask.bom_id && x.mbom_process_id == input.mbom_process_id) .Select(x=>x.material_id) .ToListAsync(); PrdMaterialReceiptH prdMaterialReceiptH = new PrdMaterialReceiptH() { station_id = input.station_id, mo_task_id = input.mo_task_id, process_id = input.process_id, equip_id = input.equip_id, workshop_id = input.workshop_id, carry_id = input.carry_id, workline_id = input.workline_id, carry_code = input.carry_code, remark = input.remark, mbom_process_id = input.mbom_process_id, create_id = _userManager.UserId, create_time = DateTime.Now, org_id = _userManager.GetUserInfo().Result.organizeId }; List list = new List(); if (input.details != null && input.details.Count > 0) { foreach (var item in input.details) { if(!inputMaterials.Contains(item["material_id"])) throw new Exception("该物料不是生产bom投入物料,不能签收"); list.Add(new PrdMaterialReceiptD { material_receipt_id = prdMaterialReceiptH.id, material_id = item["material_id"], num = Convert.ToInt32(item["num"]), batch = item["batch"], unit_id = item["unit_id"], }); } } else { throw new Exception("没有签收物料"); } await db.Insertable(prdMaterialReceiptH).ExecuteCommandAsync(); await db.Insertable(list).ExecuteCommandAsync(); }); if(!result.IsSuccess) throw Oops.Oh(result.ErrorMessage); return result.IsSuccess ? "签收成功" : result.ErrorMessage; } } }