diff --git a/DOAN.Admin.WebApi/Controllers/JobKanban/WorkOrderProgressController.cs b/DOAN.Admin.WebApi/Controllers/JobKanban/WorkOrderProgressController.cs index c68e171..e549b1a 100644 --- a/DOAN.Admin.WebApi/Controllers/JobKanban/WorkOrderProgressController.cs +++ b/DOAN.Admin.WebApi/Controllers/JobKanban/WorkOrderProgressController.cs @@ -183,21 +183,6 @@ public class WorkOrderProgressController : BaseController return SUCCESS(response); } - //TODO 无需防错就报工 - /// - /// 无需防错就报工 - /// - /// 工单 - /// 报工数 - /// - [HttpGet("no_errorProofingAndReportingReport")] - public IActionResult NoErrorProofingAndReportingReport(string workorder,int reportNum) - { - if (string.IsNullOrEmpty(workorder) || reportNum<=0) - throw new CustomException("workorder或者报工数为0"); - var response = workorderProgressService.NoErrorProofingAndReportingReport(workorder, reportNum); - return SUCCESS(response); - } /// /// TODO 完成 工单 diff --git a/DOAN.Admin.WebApi/Controllers/Mobile/product/PADReportWorkController.cs b/DOAN.Admin.WebApi/Controllers/Mobile/product/PADReportWorkController.cs index 29200de..ae34847 100644 --- a/DOAN.Admin.WebApi/Controllers/Mobile/product/PADReportWorkController.cs +++ b/DOAN.Admin.WebApi/Controllers/Mobile/product/PADReportWorkController.cs @@ -17,11 +17,28 @@ namespace DOAN.Admin.Mobile.Controllers /// /// 报工表接口 /// - private readonly IProReportworkService _ProReportworkService; + private readonly IPADReportWorkService padReportWorkService; - public PADReportWorkController(IProReportworkService _ProReportworkService) + public PADReportWorkController(IPADReportWorkService padReportWorkService) { - this._ProReportworkService = _ProReportworkService; + this.padReportWorkService = padReportWorkService; + } + + + //TODO 无需防错就报工 + /// + /// 无需防错就报工 + /// + /// 工单 + /// 报工数 + /// + [HttpGet("no_errorProofingAndReportingReport")] + public IActionResult NoErrorProofingAndReportingReport(string workorder,int reportNum) + { + if (string.IsNullOrEmpty(workorder) || reportNum<=0) + throw new CustomException("workorder或者报工数为0"); + var response = padReportWorkService.NoErrorProofingAndReportingReport(workorder, reportNum); + return SUCCESS(response); } } } diff --git a/DOAN.Service/JobKanban/IService/IWorkorderProgressService.cs b/DOAN.Service/JobKanban/IService/IWorkorderProgressService.cs index 74c758d..43e4c99 100644 --- a/DOAN.Service/JobKanban/IService/IWorkorderProgressService.cs +++ b/DOAN.Service/JobKanban/IService/IWorkorderProgressService.cs @@ -37,7 +37,6 @@ namespace DOAN.Service.JobKanban.IService int ErrorProofingAndReportingWork(string workorder, string labelContext); - int NoErrorProofingAndReportingReport(string wokorder, int reportNum); int FinishWorkorder(string workorder, int finish_num); diff --git a/DOAN.Service/JobKanban/WorkorderProgressService.cs b/DOAN.Service/JobKanban/WorkorderProgressService.cs index 4a1201b..c7418a0 100644 --- a/DOAN.Service/JobKanban/WorkorderProgressService.cs +++ b/DOAN.Service/JobKanban/WorkorderProgressService.cs @@ -259,50 +259,6 @@ public class WorkorderProgressService : BaseService, IWorkorderPro } - public int NoErrorProofingAndReportingReport(string wokorder, int reportNum) - { - int result = 0; - - - var selected_workorder = Context.Queryable().Where(it => it.Workorder == wokorder) - .First(); - if (selected_workorder != null) - { - //修改 - result = Context.Updateable().Where(it => it.FkWorkorder == wokorder) - .SetColumns(it => it.FinishedNum == reportNum) - .SetColumns(it => it.UpdatedTime == DateTime.Now) - .SetColumns(it => it.UpdatedBy == "PDA") - .ExecuteCommand(); - } - else - { - //新增 - var reportWork = new ProReportwork(); - reportWork.Id = XueHua; - reportWork.FkWorkorder = wokorder; - reportWork.DispatchNum = selected_workorder.DeliveryNum; - reportWork.FinishedNum = reportNum; - reportWork.GroupCode = selected_workorder.GroupCode; - reportWork.LineCode = selected_workorder.LineCode; - reportWork.CreatedTime = DateTime.Now; - reportWork.CreatedBy = "kanban"; - reportWork.UpdatedBy = "kanban"; - reportWork.UpdatedTime = DateTime.Now; - result = Context.Insertable(reportWork).ExecuteCommand(); - } - - #region 线边库出库 - - linesideInventoryDeductions(wokorder, reportNum); - - #endregion - - - return result; - } - - public int FinishWorkorder(string workorder, int finish_num) { var result = 0; diff --git a/DOAN.Service/Mobile/IService/IPADReportWorkService.cs b/DOAN.Service/Mobile/IService/IPADReportWorkService.cs new file mode 100644 index 0000000..24f92b0 --- /dev/null +++ b/DOAN.Service/Mobile/IService/IPADReportWorkService.cs @@ -0,0 +1,6 @@ +namespace DOAN.Service.Mobile.IService; + +public interface IPADReportWorkService +{ + int NoErrorProofingAndReportingReport(string wokorder, int reportNum); +} \ No newline at end of file diff --git a/DOAN.Service/Mobile/PADReportWorkService.cs b/DOAN.Service/Mobile/PADReportWorkService.cs new file mode 100644 index 0000000..2007cf9 --- /dev/null +++ b/DOAN.Service/Mobile/PADReportWorkService.cs @@ -0,0 +1,150 @@ +using DOAN.Model.MES.base_; +using DOAN.Model.MES.mm; +using DOAN.Model.MES.product; +using DOAN.Service.Mobile.IService; +using Infrastructure.Attribute; + + + + +namespace DOAN.Service.Mobile +{ + [AppService(ServiceType = typeof(IPADReportWorkService), ServiceLifetime = LifeTime.Transient)] + public class PADReportWorkService : BaseService, IPADReportWorkService + { + /// + /// 不防错直接报工 + /// + /// + /// + /// + public int NoErrorProofingAndReportingReport(string wokorder, int reportNum) + { + int result = 0; + + + var selected_workorder = Context.Queryable().Where(it => it.Workorder == wokorder) + .First(); + if (selected_workorder != null) + { + //修改 + result = Context.Updateable().Where(it => it.FkWorkorder == wokorder) + .SetColumns(it => it.FinishedNum == reportNum) + .SetColumns(it => it.UpdatedTime == DateTime.Now) + .SetColumns(it => it.UpdatedBy == "PDA") + .ExecuteCommand(); + } + else + { + //新增 + var reportWork = new ProReportwork(); + reportWork.Id = XueHua; + reportWork.FkWorkorder = wokorder; + reportWork.DispatchNum = selected_workorder.DeliveryNum; + reportWork.FinishedNum = reportNum; + reportWork.GroupCode = selected_workorder.GroupCode; + reportWork.LineCode = selected_workorder.LineCode; + reportWork.CreatedTime = DateTime.Now; + reportWork.CreatedBy = "kanban"; + reportWork.UpdatedBy = "kanban"; + reportWork.UpdatedTime = DateTime.Now; + result = Context.Insertable(reportWork).ExecuteCommand(); + } + + #region 线边库出库 + + linesideInventoryDeductions(wokorder, reportNum); + + #endregion + + + return result; + } + + + /// + /// 线边库 库存扣除 + /// + /// + private void linesideInventoryDeductions(string workorder, int reportNum) + { + var selected_workorder = Context.Queryable().Where(it => it.Workorder == workorder).First(); + + if (selected_workorder == null) + { + return; + } + //TODO 获取实际报工数量 作为线边库库存 出库 + // 查询这个工单的BOM + List SubMaterialList = Context.Queryable() + .Where(it => it.InvCode == selected_workorder.ProductionCode) + .ToList(); + if (SubMaterialList.Count > 0) + { + List InsertedSubMaterialOutboundAndInboundList = + new List(); + List needReduceLinesidebarInventories = new List(); + // 添加出库记录 + // 扣除库存记录 + string[] SubMaterialArray = SubMaterialList.Select(it => it.InvCode).ToArray(); + //线边库存 + List SideInventoryList = Context.Queryable() + .Where(it => it.LineCode == selected_workorder.LineCode) + .Where(it => SubMaterialArray.Contains(it.MaterialCode)).ToList(); + + foreach (var subMaterial in SubMaterialList) + { + //物料在线边库存 + if (SideInventoryList.Where(it => it.MaterialCode == subMaterial.SubInvCode).Any()) + { + // 记录需要扣除的线边库存 + MmLinesidebarInventory sideInventory = new MmLinesidebarInventory(); + sideInventory.LineCode = selected_workorder.LineCode; + sideInventory.MaterialCode = subMaterial.SubInvCode; + var seleced = SideInventoryList.Where(it => it.MaterialCode == subMaterial.SubInvCode).First(); + + sideInventory.LogicQuantity = + seleced.LogicQuantity - + reportNum * Convert.ToDecimal(subMaterial.Iusequantity); //库存------需要扣减的数量 + needReduceLinesidebarInventories.Add(sideInventory); + + MmLinesidebarInventoryOutboundAndInbound outbound = + new MmLinesidebarInventoryOutboundAndInbound(); + outbound.Id = XueHua; + outbound.LineCode = selected_workorder.LineCode; + outbound.MaterialCode = subMaterial.SubInvCode; + outbound.MaterialName = subMaterial.SubInvName; + outbound.Action = 1; + outbound.Quantity = reportNum * Convert.ToDecimal(subMaterial.Iusequantity); + outbound.Remark = $"(正常)触摸屏报工,工单号为{workorder}"; + outbound.CreatedBy = "kanban"; + outbound.CreatedTime = DateTime.Now; + InsertedSubMaterialOutboundAndInboundList.Add(outbound); + } + else + { + MmLinesidebarInventoryOutboundAndInbound outbound = + new MmLinesidebarInventoryOutboundAndInbound(); + outbound.Id = XueHua; + outbound.LineCode = selected_workorder.LineCode; + outbound.MaterialCode = subMaterial.SubInvCode; + outbound.MaterialName = subMaterial.SubInvName; + outbound.Action = 1; + outbound.Quantity = reportNum * Convert.ToDecimal(subMaterial.Iusequantity); + outbound.Remark = $"(异常)触摸屏报工,工单号为{workorder},物料不在这个线边库"; + outbound.CreatedBy = "kanban"; + outbound.CreatedTime = DateTime.Now; + InsertedSubMaterialOutboundAndInboundList.Add(outbound); + } + } + + UseTran2(() => + { + Context.Updateable(needReduceLinesidebarInventories).UpdateColumns(it => new { it.LogicQuantity }) + .WhereColumns(it => new { it.LineCode, it.MaterialCode }).ExecuteCommand(); + Context.Insertable(InsertedSubMaterialOutboundAndInboundList).ExecuteCommand(); + }); + } + } + } +} \ No newline at end of file