using JNPF; using JNPF.Common.Core.Manager; using JNPF.Common.Enums; using JNPF.Common.Security; using JNPF.DependencyInjection; using JNPF.DynamicApiController; using JNPF.Extras.CollectiveOAuth.Models; using JNPF.Extras.CollectiveOAuth.Utils; using JNPF.FriendlyException; using JNPF.Logging; using JNPF.Systems.Interfaces.System; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using SqlSugar; using Tnb.BasicData.Entities; using Tnb.ProductionMgr.Entities; using Tnb.ProductionMgr.Entities.Dto; using Tnb.ProductionMgr.Interfaces; using Tnb.WarehouseMgr.Entities; using Tnb.WarehouseMgr.Entities.Dto; using Tnb.ProductionMgr.Entities.Consts; using Tnb.ProductionMgr.Entities; using Tnb.ProductionMgr.Entities.Dto; using Tnb.ProductionMgr.Interfaces; using Tnb.ProductionMgr.Entities.Consts; using Tnb.WarehouseMgr; using Tnb.WarehouseMgr.Entities; using Tnb.BasicData; 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; private readonly IBillRullService _billRullService; public PrdMaterialReceiptService( ISqlSugarRepository repository, IBillRullService billRullService, IUserManager userManager ) { _repository = repository; _userManager = userManager; _billRullService = billRullService; } [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(); if (await db.Queryable() .AnyAsync(x => x.member_carry_code == qrCode && x.is_all_feeding == 0)) { var result = await db.Queryable() .LeftJoin((a, b) => a.carry_id == b.id) .Where((a) => a.member_carry_code == qrCode && a.is_all_feeding == 0) .Select((a, b) => new FeedingDetailOutput { carry_id = b.id, carry_name = b.carry_name, children = SqlFunc.Subqueryable() .LeftJoin((c, d) => c.material_id == d.id) .Where((c, d) => a.member_carry_code == c.member_carry_code && c.is_all_feeding == 0) .ToList((c, d) => new CarryCodeDetailOutput() { unit_id = d.unit_id, // barcode = c.barcode, // code_batch = c.code_batch, code_batch = c.batch, codeqty = c.num, material_id = c.material_id, material_code = d.code, material_name = d.name }) }).FirstAsync(); return result; } else { var result = await db.Queryable() .LeftJoin((a, b) => a.carry_id == b.id) .Where((a) => a.carry_code == qrCode) .Select((a, b) => new FeedingDetailOutput { carry_id = a.carry_id, carry_name = b.carry_name, children = SqlFunc.Subqueryable() .LeftJoin((c, d) => c.material_id == d.id) .Where((c, d) => a.id == c.material_receipt_id && c.is_all_feeding==0).ToList((c, d) => new CarryCodeDetailOutput() { unit_id = d.unit_id, // barcode = c.barcode, // code_batch = c.code_batch, code_batch = c.batch, codeqty = c.num, material_id = c.material_id, material_code = d.code, material_name = d.name }) }).FirstAsync(); return result; } } [HttpPost] public async Task SaveData(MaterialReceiptInput input) { var db = _repository.AsSugarClient(); DbResult result2 = new DbResult(); PrdMaterialReceiptH prdMaterialReceiptH = null; List list = new List(); 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) .WhereIF(!string.IsNullOrEmpty(input.mbom_process_id),x=>x.mbom_process_id==input.mbom_process_id) .Select(x=>x.material_id) .ToListAsync(); string code = await _billRullService.GetBillNumber(Tnb.BasicData.CodeTemplateConst.MATERIAL_RECEIPT_CODE); prdMaterialReceiptH = new PrdMaterialReceiptH() { code = code, 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 }; 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.ToDecimal(item["num"]), batch = item["batch"], unit_id = item["unit_id"], carry_id = input.carry_id, is_all_feeding = 0, member_carry_id = item["member_carry_id"], member_carry_code = item["member_carry_code"], feeding_num = 0, }); } } else { throw new Exception("没有签收物料"); } // await db.Insertable(prdMaterialReceiptH).ExecuteCommandAsync(); // await db.Insertable(list).ExecuteCommandAsync(); }); if (result.IsSuccess) { //签收后调用载具签收接口 // await _wmsSignForDeliveryService.MESCarrySign(new MESCarrySignInput() // { // org_id = _userManager.GetUserInfo().Result.organizeId, // create_id = _userManager.UserId, // carry_code = input.carry_code ?? "", // }); var mesCarrySignInput = new MESCarrySignInput() { org_id = _userManager.GetUserInfo().Result.organizeId, create_id = _userManager.UserId, carry_code = input.carry_code ?? "", }; string domain = (App.HttpContext.Request.IsHttps ? "https://" : "http://") + App.HttpContext.Request.Host; Dictionary header = new Dictionary() { ["Authorization"] = App.HttpContext.Request.Headers["Authorization"] }; var sendResult = HttpUtils.RequestPost(domain + WebApiConst.MES_CARRY_SIGN,JsonConvert.SerializeObject(mesCarrySignInput),header); Log.Information(sendResult); AuthResponse authResponse = JsonConvert.DeserializeObject(sendResult); if (authResponse.code != 200) { throw Oops.Bah(authResponse.msg); } else { result2 = await db.Ado.UseTranAsync(async () => { await db.Insertable(prdMaterialReceiptH).ExecuteCommandAsync(); await db.Insertable(list).ExecuteCommandAsync(); }); } } if(!result.IsSuccess) throw Oops.Bah(result.ErrorMessage); if(!result2.IsSuccess) throw Oops.Bah(result2.ErrorMessage); return "签收成功"; } } }