From c7add3bfe50937ea4f8f1ed18a785f0e869139e5 Mon Sep 17 00:00:00 2001 From: zhoukeda <1315948824@qq.com> Date: Fri, 3 Nov 2023 14:29:22 +0800 Subject: [PATCH] =?UTF-8?q?=E9=BD=90=E5=A5=97=E5=87=BA=E5=BA=93=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BasicData/Tnb.BasicData/BasQrcodeService.cs | 9 +- .../Dto/PrdManage/KittingOutNewInput.cs | 27 ++++ .../Tnb.ProductionMgr/PrdKittingOutService.cs | 142 +++++++++++++++++- 3 files changed, 176 insertions(+), 2 deletions(-) create mode 100644 ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/KittingOutNewInput.cs diff --git a/BasicData/Tnb.BasicData/BasQrcodeService.cs b/BasicData/Tnb.BasicData/BasQrcodeService.cs index 796891dc..c3875673 100644 --- a/BasicData/Tnb.BasicData/BasQrcodeService.cs +++ b/BasicData/Tnb.BasicData/BasQrcodeService.cs @@ -10,6 +10,7 @@ using Tnb.BasicData.Entities.Dto; using Tnb.BasicData.Entitys.Dto.BasProcess; using Tnb.BasicData.Interfaces; using Tnb.EquipMgr.Entities; +using Tnb.WarehouseMgr.Entities; namespace Tnb.BasicData { @@ -41,8 +42,10 @@ namespace Tnb.BasicData .LeftJoin((a, b) => a.source_id == b.Id) .LeftJoin((a, b, c) => a.source_id == c.id) .LeftJoin((a, b, c, d) => a.source_id == d.id) + .LeftJoin((a,b,c,d,e)=>a.source_id==e.id) + .LeftJoin((a,b,c,d,e,f)=>a.source_id==f.id) .Where((a, b, c, d) => a.code == code) - .Select((a, b, c, d) => new + .Select((a, b, c, d,e,f) => new { id = a.id, source_id = a.source_id, @@ -52,6 +55,10 @@ namespace Tnb.BasicData equip_code = a.code, equip_name = c.name, tool_location_code = d.location_code, + bas_location_name = e.location_name, + bas_location_code = e.location_code, + carry_name = f.carry_name, + carry_code = f.carry_code, }).FirstAsync(); return result; } diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/KittingOutNewInput.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/KittingOutNewInput.cs new file mode 100644 index 00000000..bf98ca2b --- /dev/null +++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Dto/PrdManage/KittingOutNewInput.cs @@ -0,0 +1,27 @@ +namespace Tnb.ProductionMgr.Entities.Dto +{ + public class KittingOutNewInput + { + + /// + /// 目标库位编号 + /// + public string location_code { get; set; } = string.Empty; + + + /// + /// 齐套搭配方案ID + /// + public string collocation_scheme_id { get; set; } = string.Empty; + + /// 所属工位 + /// + public string? workstation_id { get; set; } + + /// + /// 任务单 + /// + public string? mo_task_id { get; set; } + + } +} \ No newline at end of file diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdKittingOutService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdKittingOutService.cs index e94f3915..fd32c7c9 100644 --- a/ProductionMgr/Tnb.ProductionMgr/PrdKittingOutService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/PrdKittingOutService.cs @@ -8,6 +8,7 @@ using JNPF.Extras.CollectiveOAuth.Utils; using JNPF.FriendlyException; using JNPF.Logging; using JNPF.Systems.Entitys.Permission; +using JNPF.Systems.Entitys.System; using JNPF.Systems.Interfaces.Permission; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; @@ -23,11 +24,12 @@ using Tnb.ProductionMgr.Entities; using Tnb.ProductionMgr.Interfaces; using Tnb.WarehouseMgr.Entities.Dto.Inputs; using Tnb.ProductionMgr.Entities.Dto; +using Tnb.WarehouseMgr.Entities; namespace Tnb.ProductionMgr { /// - /// 生产领料 + /// 齐套出库 /// [ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 700)] [Route("api/[area]/[controller]/[action]")] @@ -262,5 +264,143 @@ namespace Tnb.ProductionMgr } } + + + /// + /// 齐套出库申请 + /// + /// + /// + /// + [HttpPost] + public async Task KittingOutNew(KittingOutNewInput kittingOutInput) + { + PrdKittingOutH prdKittingOutH = new PrdKittingOutH(); + string warehouse_id = "26103348825381";//二楼缓存仓 + try + { + var db = _repository.AsSugarClient(); + PrdMoTask prdMoTask = await db.Queryable().SingleAsync(x=>x.id==kittingOutInput.mo_task_id); + BasMaterial basMaterial = await db.Queryable().SingleAsync(x=>x.id==prdMoTask.material_id); + WmsCollocationSchemeH wmsCollocationSchemeH = await db.Queryable().SingleAsync(x=>x.id==kittingOutInput.collocation_scheme_id); + List wmsCollocationSchemeDs = await db.Queryable().Where(x=>x.bill_id==kittingOutInput.collocation_scheme_id).ToListAsync(); + List materialIds = wmsCollocationSchemeDs.Select(x => x.material_id).ToList(); + List basMaterials = await db.Queryable().Where(x=>materialIds.Contains(x.id)).ToListAsync(); + Dictionary unitIdDic = await db.Queryable() + .LeftJoin((a, b) => b.EnCode == DictConst.MeasurementUnit) + .LeftJoin((a, b, c) => b.Id == c.DictionaryTypeId && a.unit_id == c.EnCode) + .Where((a,b,c)=>materialIds.Contains(a.id)) + .Select((a, b, c) => new + { + key = a.id, + value = c.Id + }) + .ToDictionaryAsync(x => x.key, x => x.value); + Dictionary unitCodeDic = basMaterials.ToDictionary(x => x.id, x => x.unit_id); + OrganizeEntity workline = await _organizeService.GetAnyParentByWorkstationId(kittingOutInput.workstation_id, DictConst.RegionCategoryWorklineCode); + + List input = new List(); + input.Add(new MESKittingOutStkInput() + { + org_id = _userManager.GetUserInfo().Result.organizeId, + bill_date = DateTime.Now, + warehouse_id = warehouse_id, + location_code = kittingOutInput.location_code, + material_id = prdMoTask.material_id, + material_code = basMaterial.code, + collocation_scheme_id = kittingOutInput.collocation_scheme_id, + collocation_scheme_code = wmsCollocationSchemeH.bill_code, + source_id = prdKittingOutH.id, + seq = 0, + create_id = _userManager.UserId, + wmsKittingoutDs = new List(), + }); + + foreach (var item in wmsCollocationSchemeDs) + { + input[0].wmsKittingoutDs.Add(new MESKittingOutStkDInput() + { + material_id = item.material_id, + material_code = item.material_code, + unit_id = unitIdDic.ContainsKey(item.material_id) ? unitIdDic[item.material_id].ToString() : "", + unit_code = unitCodeDic.ContainsKey(item.material_id) ? unitCodeDic[item.material_id].ToString() : "", + pr_qty = item.qty, + code_batch = "", + box = item.box, + }); + } + + 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_KITTING_OUT_STK,JsonConvert.SerializeObject(input),header); + Log.Information(sendResult); + + AuthResponse authResponse = JsonConvert.DeserializeObject(sendResult); + if (authResponse.code != 200) + { + throw Oops.Bah(authResponse.msg); + } + else + { + prdKittingOutH.code = await _billRullService.GetBillNumber(CodeTemplateConst.PRDKITTINGOUTSTOCK_CODE); + prdKittingOutH.warehouse_id = warehouse_id; + prdKittingOutH.location_code = kittingOutInput.location_code; + prdKittingOutH.material_id = basMaterial.id; + prdKittingOutH.material_code = basMaterial.code; + prdKittingOutH.collocation_scheme_id = kittingOutInput.collocation_scheme_id; + prdKittingOutH.collocation_scheme_code = wmsCollocationSchemeH.bill_code; + prdKittingOutH.workline_id = workline?.Id ?? ""; + prdKittingOutH.workstation_id = kittingOutInput.workstation_id; + prdKittingOutH.mo_task_id = kittingOutInput.mo_task_id; + prdKittingOutH.seq = "0"; + prdKittingOutH.create_id = _userManager.UserId; + prdKittingOutH.create_time = DateTime.Now; + prdKittingOutH.org_id = _userManager.GetUserInfo().Result.organizeId; + List prdKittingOutDs = new List(); + foreach (var item in wmsCollocationSchemeDs) + { + prdKittingOutDs.Add(new PrdKittingOutD() + { + material_id = item.material_id, + material_code = item.material_code, + unit_id = unitIdDic.ContainsKey(item.material_id) ? unitIdDic[item.material_id].ToString() : "", + unit_code = unitCodeDic.ContainsKey(item.material_id) ? unitCodeDic[item.material_id].ToString() : "", + pr_qty = item.qty, + code_batch = "", + box = item.box, + kitting_out_id = prdKittingOutH.id, + }); + } + + // VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleId, true); + // await _runService.Create(templateEntity, visualDevModelDataCrInput); + + DbResult result = await _repository.AsSugarClient().Ado.UseTranAsync(async () => + { + await _repository.InsertAsync(prdKittingOutH); + if (prdKittingOutDs.Count > 0) + { + await db.Insertable(prdKittingOutDs).ExecuteCommandAsync(); + } + }); + + if (!result.IsSuccess) + { + throw Oops.Bah(result.ErrorMessage); + } + } + return await Task.FromResult(true); + } + catch (Exception e) + { + Console.WriteLine(e); + Log.Error(e.Message); + throw Oops.Bah(e.Message); + } + + } } } \ No newline at end of file