From 3cb377cb86b24c06d9b6dae03f508e05d8ae7cc2 Mon Sep 17 00:00:00 2001 From: zhoukeda <1315948824@qq.com> Date: Fri, 16 Jun 2023 16:59:53 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E6=8A=95=E6=96=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Consts/DictionaryConstants.cs | 10 ++ .../Entity/PrdFeedingD.cs | 57 ++++++++ .../Entity/PrdFeedingH.cs | 102 +++++++++++++ .../Entity/PrdMaterialReceiptD.cs | 15 ++ .../IPrdFeedingService.cs | 18 +++ .../IPrdMaterialReceiptService.cs | 5 + .../Tnb.ProductionMgr/PrdFeedingService.cs | 138 ++++++++++++++++++ .../PrdMaterialReceiptService.cs | 13 +- .../Consts/WmsCarryConst.cs | 5 - 9 files changed, 352 insertions(+), 11 deletions(-) create mode 100644 ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdFeedingD.cs create mode 100644 ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdFeedingH.cs create mode 100644 ProductionMgr/Tnb.ProductionMgr.Interfaces/IPrdFeedingService.cs create mode 100644 ProductionMgr/Tnb.ProductionMgr/PrdFeedingService.cs diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Consts/DictionaryConstants.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Consts/DictionaryConstants.cs index a72a4fcb..a97b121c 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entities/Consts/DictionaryConstants.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Consts/DictionaryConstants.cs @@ -19,6 +19,16 @@ namespace Tnb.ProductionMgr.Entities.Consts /// 待排产 /// public const string WaitProductId = "25019244276501"; + + /// + /// 物料签收编码 + /// + public const string MATERIAL_RECEIPT_CODE = "MaterialReceipt"; + + /// + /// 生产投料编码 + /// + public const string FEEDING_CODE = "Feeding"; } diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdFeedingD.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdFeedingD.cs new file mode 100644 index 00000000..29bc4b6c --- /dev/null +++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdFeedingD.cs @@ -0,0 +1,57 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.ProductionMgr.Entities; + +/// +/// 生产投料子表 +/// +[SugarTable("prd_feeding_d")] +public partial class PrdFeedingD : BaseEntity +{ + public PrdFeedingD() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 生产投料id + /// + public string feeding_id { get; set; } = string.Empty; + + /// + /// 物料id + /// + public string material_id { get; set; } = string.Empty; + + /// + /// 数量 + /// + public decimal num { get; set; } + + /// + /// 批次 + /// + public string? batch { get; set; } + + /// + /// 单位id + /// + public string? unit_id { get; set; } + + /// + /// 载具id + /// + public string carry_id { get; set; } = string.Empty; + + /// + /// 物料签收单id + /// + public string? material_receipt_id { get; set; } + + /// + /// 物料签收单子表id + /// + public string? material_receipt_detail_id { get; set; } + +} \ No newline at end of file diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdFeedingH.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdFeedingH.cs new file mode 100644 index 00000000..c761f0ec --- /dev/null +++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdFeedingH.cs @@ -0,0 +1,102 @@ +using JNPF.Common.Contracts; +using JNPF.Common.Security; +using SqlSugar; + +namespace Tnb.ProductionMgr.Entities; + +/// +/// 生产投料主表 +/// +[SugarTable("prd_feeding_h")] +public partial class PrdFeedingH : BaseEntity +{ + public PrdFeedingH() + { + id = SnowflakeIdHelper.NextId(); + } + /// + /// 工位id + /// + public string station_id { get; set; } = string.Empty; + + /// + /// 任务单id + /// + public string? mo_task_id { get; set; } + + /// + /// 工序id + /// + public string? process_id { get; set; } + + /// + /// 设备id + /// + public string? equip_id { get; set; } + + /// + /// 车间id + /// + public string? workshop_id { get; set; } + + /// + /// 载具id + /// + public string? carry_id { get; set; } + + /// + /// 产线id + /// + public string? workline_id { get; set; } + + /// + /// 创建用户 + /// + public string? create_id { get; set; } + + /// + /// 创建时间 + /// + public DateTime? create_time { get; set; } + + /// + /// 二维码信息 + /// + public string? carry_code { get; set; } + + /// + /// 备注 + /// + public string? remark { get; set; } + + /// + /// 流程引擎Id + /// + public string? f_flowid { get; set; } + + /// + /// 流程任务Id + /// + public string? f_flowtaskid { get; set; } + + /// + /// 所属组织 + /// + public string? org_id { get; set; } + + /// + /// 生产bom工序id + /// + public string? mbom_process_id { get; set; } + + /// + /// 投料单号 + /// + public string code { get; set; } = string.Empty; + + /// + /// 物料签收单id + /// + public string? material_receipt_id { get; set; } + +} \ No newline at end of file diff --git a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdMaterialReceiptD.cs b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdMaterialReceiptD.cs index dec2b972..71ade71f 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdMaterialReceiptD.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Entities/Entity/PrdMaterialReceiptD.cs @@ -39,4 +39,19 @@ public partial class PrdMaterialReceiptD : BaseEntity /// public string? unit_id { get; set; } + /// + /// 载具id + /// + public string carry_id { get; set; } = string.Empty; + + /// + /// 是否全部投料 + /// + public int is_all_feeding { get; set; } + + /// + /// 已投料数量 + /// + public decimal feeding_num { get; set; } + } \ No newline at end of file diff --git a/ProductionMgr/Tnb.ProductionMgr.Interfaces/IPrdFeedingService.cs b/ProductionMgr/Tnb.ProductionMgr.Interfaces/IPrdFeedingService.cs new file mode 100644 index 00000000..0cbfd649 --- /dev/null +++ b/ProductionMgr/Tnb.ProductionMgr.Interfaces/IPrdFeedingService.cs @@ -0,0 +1,18 @@ +using Tnb.ProductionMgr.Entities.Dto; + +namespace Tnb.ProductionMgr.Interfaces +{ + /// + /// 物料签收服务接口 + /// + public interface IPrdFeedingService + { + + /// + /// 保存数据 + /// + /// + /// + public Task SaveData(MaterialReceiptInput input); + } +} \ No newline at end of file diff --git a/ProductionMgr/Tnb.ProductionMgr.Interfaces/IPrdMaterialReceiptService.cs b/ProductionMgr/Tnb.ProductionMgr.Interfaces/IPrdMaterialReceiptService.cs index 3810560c..460fbbcc 100644 --- a/ProductionMgr/Tnb.ProductionMgr.Interfaces/IPrdMaterialReceiptService.cs +++ b/ProductionMgr/Tnb.ProductionMgr.Interfaces/IPrdMaterialReceiptService.cs @@ -14,6 +14,11 @@ namespace Tnb.ProductionMgr.Interfaces /// public Task GetInfoByQrCode(string qrCode); + /// + /// 保存数据 + /// + /// + /// public Task SaveData(MaterialReceiptInput input); } } \ No newline at end of file diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdFeedingService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdFeedingService.cs new file mode 100644 index 00000000..06c5e640 --- /dev/null +++ b/ProductionMgr/Tnb.ProductionMgr/PrdFeedingService.cs @@ -0,0 +1,138 @@ +using JNPF.Common.Core.Manager; +using JNPF.Common.Enums; +using JNPF.Common.Security; +using JNPF.DependencyInjection; +using JNPF.DynamicApiController; +using JNPF.FriendlyException; +using JNPF.Systems.Interfaces.System; +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.Interfaces; +using Tnb.ProductionMgr.Entities.Consts; + +namespace Tnb.ProductionMgr +{ + /// + /// 业务实现:物料签收 + /// + [ApiDescriptionSettings(Tag = ModuleConst.Tag, Area = ModuleConst.Area, Order = 700)] + [Route("api/[area]/[controller]/[action]")] + public class PrdFeedingService : IPrdFeedingService, IDynamicApiController, ITransient + { + private readonly ISqlSugarRepository _repository; + private readonly IUserManager _userManager; + private readonly IBillRullService _billRullService; + + + public PrdFeedingService( + ISqlSugarRepository repository, + IBillRullService billRullService, + IUserManager userManager + ) + { + _repository = repository; + _userManager = userManager; + _billRullService = billRullService; + } + + + [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(); + + string code = await _billRullService.GetBillNumber(MoStatus.FEEDING_CODE); + PrdFeedingH prdFeedingH = new PrdFeedingH() + { + 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 + }; + + 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投入物料,不能签收"); + + var detail = await db.Queryable() + .Where(x => x.carry_id == input.carry_id && x.is_all_feeding == 0).FirstAsync(); + decimal num = Convert.ToDecimal(item["num"]); + list.Add(new PrdFeedingD + { + feeding_id = prdFeedingH.id, + material_receipt_detail_id = detail?.id, + material_id = item["material_id"], + num = num, + batch = item["batch"], + unit_id = item["unit_id"], + carry_id = input.carry_id, + }); + + if (detail != null) + { + if(detail.feeding_num + num > detail.num) + { + throw new Exception("投料数量不能大于签收数量"); + }else if (detail.feeding_num + num == detail.num) + { + await db.Updateable() + .SetColumns(x => x.feeding_num == x.feeding_num + num) + .SetColumns(x => x.is_all_feeding == 1) + .Where(x => x.id == detail.id) + .ExecuteCommandAsync(); + } + else + { + await db.Updateable() + .SetColumns(x => x.feeding_num == x.feeding_num + num) + .Where(x => x.id == detail.id) + .ExecuteCommandAsync(); + } + } + else + { + throw new Exception("没有签收单,无法投料"); + } + } + } + else + { + throw new Exception("没有签收物料"); + } + + + await db.Insertable(prdFeedingH).ExecuteCommandAsync(); + await db.Insertable(list).ExecuteCommandAsync(); + + }); + + if(!result.IsSuccess) throw Oops.Oh(result.ErrorMessage); + return result.IsSuccess ? "签收成功" : result.ErrorMessage; + } + } +} \ No newline at end of file diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdMaterialReceiptService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdMaterialReceiptService.cs index 5493423d..7a2baec7 100644 --- a/ProductionMgr/Tnb.ProductionMgr/PrdMaterialReceiptService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/PrdMaterialReceiptService.cs @@ -6,16 +6,14 @@ using JNPF.DynamicApiController; using JNPF.FriendlyException; using JNPF.Systems.Interfaces.System; 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; -using Tnb.WarehouseMgr.Entities.Consts; +using Tnb.ProductionMgr.Entities.Consts; namespace Tnb.ProductionMgr { @@ -26,13 +24,13 @@ namespace Tnb.ProductionMgr [Route("api/[area]/[controller]/[action]")] public class PrdMaterialReceiptService : IPrdMaterialReceiptService, IDynamicApiController, ITransient { - private readonly ISqlSugarRepository _repository; + private readonly ISqlSugarRepository _repository; private readonly IUserManager _userManager; private readonly IBillRullService _billRullService; public PrdMaterialReceiptService( - ISqlSugarRepository repository, + ISqlSugarRepository repository, IBillRullService billRullService, IUserManager userManager ) @@ -81,7 +79,7 @@ namespace Tnb.ProductionMgr .Select(x=>x.material_id) .ToListAsync(); - string code = await _billRullService.GetBillNumber(WmsCarryConst.MATERIAL_RECEIPT_CODE); + string code = await _billRullService.GetBillNumber(MoStatus.MATERIAL_RECEIPT_CODE); PrdMaterialReceiptH prdMaterialReceiptH = new PrdMaterialReceiptH() { code = code, @@ -115,6 +113,9 @@ namespace Tnb.ProductionMgr num = Convert.ToDecimal(item["num"]), batch = item["batch"], unit_id = item["unit_id"], + carry_id = input.carry_id, + is_all_feeding = 0, + feeding_num = 0, }); } } diff --git a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsCarryConst.cs b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsCarryConst.cs index 468463fd..df345851 100644 --- a/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsCarryConst.cs +++ b/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/WmsCarryConst.cs @@ -13,11 +13,6 @@ namespace Tnb.WarehouseMgr.Entities.Consts /// public const string WMS_CARRY_REPLACE_ENCODE = "WmsCarryReplace"; - /// - /// 物料签收编码 - /// - public const string MATERIAL_RECEIPT_CODE = "MaterialReceipt"; - } }