diff --git a/BasicData/Tnb.BasicData.Entities/Consts/CodeTemplateConst.cs b/BasicData/Tnb.BasicData.Entities/Consts/CodeTemplateConst.cs index 96890e79..39390136 100644 --- a/BasicData/Tnb.BasicData.Entities/Consts/CodeTemplateConst.cs +++ b/BasicData/Tnb.BasicData.Entities/Consts/CodeTemplateConst.cs @@ -24,5 +24,10 @@ namespace Tnb.BasicData /// 备件领用 /// public const string SPAREPARTSREQUISITION_CODE = "SparePartsRequisition"; + + /// + /// 生产齐套领料 + /// + public const string PRDKITTINGOUTSTOCK_CODE = "PrdKittingOutStocK"; } } \ No newline at end of file diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdKittingOutService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdKittingOutService.cs index 598f9a33..8b6a4da7 100644 --- a/ProductionMgr/Tnb.ProductionMgr/PrdKittingOutService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/PrdKittingOutService.cs @@ -13,6 +13,7 @@ using JNPF.VisualDev.Entitys; using JNPF.VisualDev.Interfaces; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using SqlSugar; using Tnb.BasicData; using Tnb.BasicData.Entities; @@ -32,32 +33,30 @@ namespace Tnb.ProductionMgr { private const string ModuleId = "27565198830357"; private readonly ISqlSugarRepository _repository; - private readonly ISqlSugarClient _db; private readonly IRunService _runService; private readonly IVisualDevService _visualDevService; - private readonly IDictionaryDataService _dictionaryDataService; private readonly IUserManager _userManager; + private readonly IBillRullService _billRullService; public OverideVisualDevFunc OverideFuncs { get; } = new OverideVisualDevFunc(); - public PrdKittingOutService(ISqlSugarRepository repository, IRunService runService, IUserManager userManager,IVisualDevService visualDevService, IDictionaryDataService dictionaryDataService) + public PrdKittingOutService(ISqlSugarRepository repository, IRunService runService, IBillRullService billRullService,IUserManager userManager,IVisualDevService visualDevService) { - _db = repository.AsSugarClient(); _runService = runService; _visualDevService = visualDevService; - _dictionaryDataService = dictionaryDataService; _repository = repository; _userManager = userManager; + _billRullService = billRullService; OverideFuncs.CreateAsync = Create; } private async Task Create(VisualDevModelDataCrInput visualDevModelDataCrInput) { + PrdKittingOutH prdKittingOutH = new PrdKittingOutH(); try { var db = _repository.AsSugarClient(); List input = new List(); - visualDevModelDataCrInput.data["code"] = "111"; input.Add(new MESKittingOutStkInput() { org_id = _userManager.GetUserInfo().Result.organizeId, @@ -68,8 +67,7 @@ namespace Tnb.ProductionMgr material_code = visualDevModelDataCrInput.data.ContainsKey("material_code") ? visualDevModelDataCrInput.data["material_code"].ToString() : "", collocation_scheme_id = visualDevModelDataCrInput.data.ContainsKey("collocation_scheme_id") ? visualDevModelDataCrInput.data["collocation_scheme_id"].ToString() : "", collocation_scheme_code = visualDevModelDataCrInput.data.ContainsKey("collocation_scheme_code") ? visualDevModelDataCrInput.data["collocation_scheme_code"].ToString() : "", - source_id = visualDevModelDataCrInput.data.ContainsKey("code") ? visualDevModelDataCrInput.data["code"].ToString() : "", - // source_id = "123", + source_id = prdKittingOutH.id, seq = visualDevModelDataCrInput.data.ContainsKey("seq") ? (int)visualDevModelDataCrInput.data["seq"] : 0, create_id = _userManager.UserId, wmsKittingoutDs = new List(), @@ -91,8 +89,52 @@ namespace Tnb.ProductionMgr } else { - VisualDevEntity? templateEntity = await _visualDevService.GetInfoById(ModuleId, true); - await _runService.Create(templateEntity, visualDevModelDataCrInput); + prdKittingOutH.code = await _billRullService.GetBillNumber(CodeTemplateConst.PRDKITTINGOUTSTOCK_CODE); + prdKittingOutH.warehouse_id = visualDevModelDataCrInput.data.ContainsKey("warehouse_id") ? visualDevModelDataCrInput.data["warehouse_id"].ToString() : ""; + prdKittingOutH.location_code = visualDevModelDataCrInput.data.ContainsKey("location_code") ? visualDevModelDataCrInput.data["location_code"].ToString() : ""; + prdKittingOutH.material_id = visualDevModelDataCrInput.data.ContainsKey("material_id") ? visualDevModelDataCrInput.data["material_id"].ToString() : ""; + prdKittingOutH.material_code = visualDevModelDataCrInput.data.ContainsKey("material_code") ? visualDevModelDataCrInput.data["material_code"].ToString() : ""; + prdKittingOutH.collocation_scheme_id = visualDevModelDataCrInput.data.ContainsKey("collocation_scheme_id") ? visualDevModelDataCrInput.data["collocation_scheme_id"].ToString() : ""; + prdKittingOutH.collocation_scheme_code = visualDevModelDataCrInput.data.ContainsKey("collocation_scheme_code") ? visualDevModelDataCrInput.data["collocation_scheme_code"].ToString() : ""; + prdKittingOutH.worklinei_d = visualDevModelDataCrInput.data.ContainsKey("worklinei_d") ? visualDevModelDataCrInput.data["worklinei_d"].ToString() : ""; + prdKittingOutH.workstation_id = visualDevModelDataCrInput.data.ContainsKey("workstation_id") ? visualDevModelDataCrInput.data["workstation_id"].ToString() : ""; + prdKittingOutH.mo_task_id = visualDevModelDataCrInput.data.ContainsKey("mo_task_id") ? visualDevModelDataCrInput.data["mo_task_id"].ToString() : ""; + prdKittingOutH.seq = visualDevModelDataCrInput.data.ContainsKey("seq") ? visualDevModelDataCrInput.data["seq"]?.ToString() : "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 (JArray)visualDevModelDataCrInput.data["tableField115"]) + { + prdKittingOutDs.Add(new PrdKittingOutD() + { + material_id = item.Value("material_id"), + material_code = item.Value("material_code"), + unit_id = item.Value("unit_id"), + unit_code = item.Value("unit_code"), + pr_qty = item.Value("pr_qty"), + code_batch = item.Value("code_batch"), + box = item.Value("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); } diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdMoService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdMoService.cs index 0c36460f..16b52328 100644 --- a/ProductionMgr/Tnb.ProductionMgr/PrdMoService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/PrdMoService.cs @@ -11,6 +11,7 @@ using JNPF.DynamicApiController; using JNPF.Extensitions.EventBus; using JNPF.FriendlyException; using JNPF.Logging; +using JNPF.Systems.Entitys.System; using JNPF.Systems.Interfaces.System; using JNPF.VisualDev; using JNPF.VisualDev.Entitys; @@ -42,7 +43,8 @@ namespace Tnb.ProductionMgr [OverideVisualDev(ModuleId)] public class PrdMoService : IOverideVisualDevService, IPrdMoService, IDynamicApiController, ITransient { - private const string ModuleId = "25018860321301"; + // private const string ModuleId = "25018860321301"; + private const string ModuleId = "26900026924053"; private readonly ISqlSugarRepository _repository; private readonly IDataBaseManager _dataBaseManager; private readonly IUserManager _userManager; @@ -91,7 +93,17 @@ namespace Tnb.ProductionMgr { row.Add("material_name", material.name); row.Add($"material_attribute", material.attribute); + if (dic.ContainsKey("material_id")) + { + row["material_id"] = material.code + "/" + material.name; + } + } + if (dic.ContainsKey("unit_id")) + { + string unitId = dic["unit_id"]?.ToString() ?? ""; + var unit = await db.Queryable().SingleAsync(x => x.Id == unitId); + row["unit_id"] = unit?.FullName ?? ""; } } } diff --git a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs index f6014392..9d759fd6 100644 --- a/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs +++ b/ProductionMgr/Tnb.ProductionMgr/PrdMoTaskService.cs @@ -1313,6 +1313,13 @@ namespace Tnb.ProductionMgr var report = await db.Queryable().FirstAsync(it => it.mo_task_id == input.mo_task_id); var prdMoTask = await db.Queryable().SingleAsync(x => x.id == input.mo_task_id); + + bool flag = (prdMoTask.reported_work_qty ?? 0) + (prdMoTask.scrap_qty ?? 0) + input.reported_qty == prdMoTask.scheduled_qty; + if ((prdMoTask.reported_work_qty ?? 0) + (prdMoTask.scrap_qty ?? 0) + input.reported_qty > prdMoTask.scheduled_qty) + { + throw Oops.Bah("已完成数量不能大于任务单数量"); + } + report = input.Adapt(); report.id = SnowflakeIdHelper.NextId(); report.reported_qty = input.reported_qty; @@ -1346,6 +1353,7 @@ namespace Tnb.ProductionMgr await db.Updateable() // .SetColumns(x => x.complete_qty == x.complete_qty + input.reported_qty) .SetColumns(x => x.reported_work_qty == input.reported_qty) + .SetColumnsIF(flag,x=>x.mo_task_status==DictConst.ComplatedEnCode) .Where(x => x.id == input.mo_task_id).ExecuteCommandAsync(); } else @@ -1353,6 +1361,7 @@ namespace Tnb.ProductionMgr await db.Updateable() // .SetColumns(x => x.complete_qty == x.complete_qty + input.reported_qty) .SetColumns(x => x.reported_work_qty == x.reported_work_qty + input.reported_qty) + .SetColumnsIF(flag,x=>x.mo_task_status==DictConst.ComplatedEnCode) .Where(x => x.id == input.mo_task_id).ExecuteCommandAsync(); } @@ -1366,11 +1375,13 @@ namespace Tnb.ProductionMgr { await db.Updateable() .SetColumns(x => x.last_process_complete_qty == input.reported_qty) + .SetColumnsIF(flag,x=>x.mo_task_status==DictConst.ComplatedEnCode) .Where(x => x.id == prdMoTask.parent_id).ExecuteCommandAsync(); }else if (parentMoTask?.last_process_complete_qty != null) { await db.Updateable() .SetColumns(x => x.last_process_complete_qty == x.last_process_complete_qty + input.reported_qty) + .SetColumnsIF(flag,x=>x.mo_task_status==DictConst.ComplatedEnCode) .Where(x => x.id == prdMoTask.parent_id).ExecuteCommandAsync(); } } @@ -1386,81 +1397,81 @@ namespace Tnb.ProductionMgr //扣除生产投料 按最先投入的依次扣除 - List prdFeedingDs = await db.Queryable() - .LeftJoin((a,b)=>a.id==b.feeding_id) - .Where((a,b) => a.workline_id == prdMoTask.workline_id && (b.status=="0" || b.status=="1")) - .OrderBy((a,b) => b.create_time) - .Select((a,b)=>b) - .ToListAsync(); - - if (prdFeedingDs != null && prdFeedingDs.Count>0) - { - - BasMbom basMbom = await db.Queryable().SingleAsync(x => x.id == prdMoTask.bom_id); - List basMbomInputs = await db.Queryable().Where(x => - x.mbom_id == prdMoTask.bom_id && x.mbom_process_id == prdMoTask.mbom_process_id).ToListAsync(); - - foreach (var item in basMbomInputs) - { - var details = prdFeedingDs.Where(x => x.material_id == item.material_id).OrderBy(x=>x.create_time).ToList(); - if (details?.Count>0) - { - decimal deductNum = input.reported_qty * item.num / basMbom.num; - decimal? notUseNum = details.Sum(x => x.num - x.use_num); - if (notUseNum > deductNum) - { - - foreach (var detail in details) - { - - if (deductNum - (detail.num - detail.use_num) < 0) - { - await db.Updateable().SetColumns(x => x.use_num == x.use_num+deductNum) - .SetColumns(x=>x.status=="1") - .Where(x => x.id == detail.id).ExecuteCommandAsync(); - - } - else - { - await db.Updateable().SetColumns(x => x.use_num == x.num) - .SetColumns(x=>x.status=="2") - .Where(x => x.id == detail.id).ExecuteCommandAsync(); - - } - - deductNum = deductNum - (detail.num - detail.use_num); - - if (deductNum <= 0) - break; - } - - if (deductNum > 0) - { - throw new Exception("投入物料不足"); - } - } - else if(notUseNum == deductNum) - { - foreach (var detail in details) - { - await db.Updateable().SetColumns(x => x.use_num == x.num) - .SetColumns(x=>x.status=="2") - .Where(x => x.id == detail.id).ExecuteCommandAsync(); - - } - } - else - { - throw new Exception("投入物料不足"); - } - - } - else - { - //throw new Exception("无投入物料"); - } - } - } + // List prdFeedingDs = await db.Queryable() + // .LeftJoin((a,b)=>a.id==b.feeding_id) + // .Where((a,b) => a.workline_id == prdMoTask.workline_id && (b.status=="0" || b.status=="1")) + // .OrderBy((a,b) => b.create_time) + // .Select((a,b)=>b) + // .ToListAsync(); + // + // if (prdFeedingDs != null && prdFeedingDs.Count>0) + // { + // + // BasMbom basMbom = await db.Queryable().SingleAsync(x => x.id == prdMoTask.bom_id); + // List basMbomInputs = await db.Queryable().Where(x => + // x.mbom_id == prdMoTask.bom_id && x.mbom_process_id == prdMoTask.mbom_process_id).ToListAsync(); + // + // foreach (var item in basMbomInputs) + // { + // var details = prdFeedingDs.Where(x => x.material_id == item.material_id).OrderBy(x=>x.create_time).ToList(); + // if (details?.Count>0) + // { + // decimal deductNum = input.reported_qty * item.num / basMbom.num; + // decimal? notUseNum = details.Sum(x => x.num - x.use_num); + // if (notUseNum > deductNum) + // { + // + // foreach (var detail in details) + // { + // + // if (deductNum - (detail.num - detail.use_num) < 0) + // { + // await db.Updateable().SetColumns(x => x.use_num == x.use_num+deductNum) + // .SetColumns(x=>x.status=="1") + // .Where(x => x.id == detail.id).ExecuteCommandAsync(); + // + // } + // else + // { + // await db.Updateable().SetColumns(x => x.use_num == x.num) + // .SetColumns(x=>x.status=="2") + // .Where(x => x.id == detail.id).ExecuteCommandAsync(); + // + // } + // + // deductNum = deductNum - (detail.num - detail.use_num); + // + // if (deductNum <= 0) + // break; + // } + // + // if (deductNum > 0) + // { + // throw new Exception("投入物料不足"); + // } + // } + // else if(notUseNum == deductNum) + // { + // foreach (var detail in details) + // { + // await db.Updateable().SetColumns(x => x.use_num == x.num) + // .SetColumns(x=>x.status=="2") + // .Where(x => x.id == detail.id).ExecuteCommandAsync(); + // + // } + // } + // else + // { + // throw new Exception("投入物料不足"); + // } + // + // } + // else + // { + // throw new Exception("无投入物料"); + // } + // } + // } });