From 3f122ab4efcb027f2fea82d4359eef461c91567e Mon Sep 17 00:00:00 2001 From: "qianhao.xu" Date: Fri, 20 Sep 2024 10:18:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E4=BA=A7=E7=BA=BF=E5=92=8C?= =?UTF-8?q?=E6=97=A5=E6=9C=9F=E6=9F=A5=E8=AF=A2=E7=89=A9=E6=96=99=E9=9C=80?= =?UTF-8?q?=E6=B1=82=E8=AE=A1=E5=88=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MES/mm/MmRequirePlanController.cs | 11 ++ .../MES/mm/Dto/MmPreparationTaskLineDto.cs | 44 ++++++ DOAN.Model/MES/mm/Dto/MmRequirePlanDto.cs | 13 ++ DOAN.Model/MES/mm/MmPreparationTaskLine.cs | 70 ++++++++++ .../MES/mm/IService/IMmRequirePlanService.cs | 4 + DOAN.Service/MES/mm/MmRequirePlanService.cs | 130 ++++++++++++++++++ 6 files changed, 272 insertions(+) create mode 100644 DOAN.Model/MES/mm/Dto/MmPreparationTaskLineDto.cs create mode 100644 DOAN.Model/MES/mm/MmPreparationTaskLine.cs diff --git a/DOAN.Admin.WebApi/Controllers/MES/mm/MmRequirePlanController.cs b/DOAN.Admin.WebApi/Controllers/MES/mm/MmRequirePlanController.cs index 66d392e..f2e4575 100644 --- a/DOAN.Admin.WebApi/Controllers/MES/mm/MmRequirePlanController.cs +++ b/DOAN.Admin.WebApi/Controllers/MES/mm/MmRequirePlanController.cs @@ -146,6 +146,17 @@ namespace DOAN.Admin.WebApi.Controllers } + //TODO 根据产线和日期查询物料需求计划 + + [HttpPost("get_material_require_plan_byline")] + public IActionResult GetMaterialRequirePlanByline([FromBody] MmRequirePlanQueryDto2 parm) + { + var response = _MmRequirePlanService.GetMaterialRequirePlanByline(parm); + return SUCCESS(response); + + + } + } } \ No newline at end of file diff --git a/DOAN.Model/MES/mm/Dto/MmPreparationTaskLineDto.cs b/DOAN.Model/MES/mm/Dto/MmPreparationTaskLineDto.cs new file mode 100644 index 0000000..420ea23 --- /dev/null +++ b/DOAN.Model/MES/mm/Dto/MmPreparationTaskLineDto.cs @@ -0,0 +1,44 @@ +using System.ComponentModel.DataAnnotations; + + +namespace DOAN.Model.MES.mm.Dto +{ + /// + /// 产前备料任务 以线为单位查询对象 + /// + public class MmPreparationTaskLineQueryDto : PagerInfo + { + } + + /// + /// 产前备料任务 以线为单位输入输出对象 + /// + public class MmPreparationTaskLineDto + { + [Required(ErrorMessage = "雪花id不能为空")] + public string Id { get; set; } + + public int? SerialNum { get; set; } + + [Required(ErrorMessage = "任务code(工单号_no)不能为空")] + public string TaskCode { get; set; } + + public string LineCode { get; set; } + + [Required(ErrorMessage = "任务日期不能为空")] + public DateTime? TaskDate { get; set; } + + public int? PreparationStatus { get; set; } + + public string CreatedBy { get; set; } + + public DateTime? CreatedTime { get; set; } + + public string UpdatedBy { get; set; } + + public DateTime? UpdatedTime { get; set; } + + + + } +} \ No newline at end of file diff --git a/DOAN.Model/MES/mm/Dto/MmRequirePlanDto.cs b/DOAN.Model/MES/mm/Dto/MmRequirePlanDto.cs index 6149dac..7fe2e60 100644 --- a/DOAN.Model/MES/mm/Dto/MmRequirePlanDto.cs +++ b/DOAN.Model/MES/mm/Dto/MmRequirePlanDto.cs @@ -13,6 +13,19 @@ namespace DOAN.Model.MES.mm.Dto public DateTime? RequireDate { get; set; } } + public class MmRequirePlanQueryDto2 : PagerInfo + { + public string MaterialCode { get; set; } + + public string MaterialName { get; set; } + + public DateTime? RequireDate { get; set; } + + /// + /// 产线code + /// + public string line_code { get; set; } + } /// /// 物料需求计划输入输出对象 diff --git a/DOAN.Model/MES/mm/MmPreparationTaskLine.cs b/DOAN.Model/MES/mm/MmPreparationTaskLine.cs new file mode 100644 index 0000000..b35f081 --- /dev/null +++ b/DOAN.Model/MES/mm/MmPreparationTaskLine.cs @@ -0,0 +1,70 @@ +namespace DOAN.Model.MES.mm +{ + /// + /// 产前备料任务 以线为单位 + /// + [SugarTable("mm_preparation_task_line")] + public class MmPreparationTaskLine + { + /// + /// 雪花id + /// + [SugarColumn(IsPrimaryKey = true, IsIdentity = false)] + public string Id { get; set; } + + /// + /// 序号 + /// + [SugarColumn(ColumnName = "serial_num")] + public int? SerialNum { get; set; } + + /// + /// 任务code(工单号_no) + /// + [SugarColumn(IsPrimaryKey = true, IsIdentity = false, ColumnName = "task_code")] + public string TaskCode { get; set; } + + /// + /// 产线code + /// + [SugarColumn(ColumnName = "line_code")] + public string LineCode { get; set; } + + /// + /// 任务日期 + /// + [SugarColumn(ColumnName = "task_date")] + public DateTime? TaskDate { get; set; } + + /// + /// 备货状态(1 未备料,2 备料完成) + /// + [SugarColumn(ColumnName = "preparation_status")] + public int? PreparationStatus { get; set; } + + /// + /// 创建人 + /// + [SugarColumn(ColumnName = "cREATED_BY")] + public string CreatedBy { get; set; } + + /// + /// 创建时间 + /// + [SugarColumn(ColumnName = "cREATED_TIME")] + public DateTime? CreatedTime { get; set; } + + /// + /// 更新人 + /// + [SugarColumn(ColumnName = "uPDATED_BY")] + public string UpdatedBy { get; set; } + + /// + /// 更新时间 + /// + [SugarColumn(ColumnName = "uPDATED_TIME")] + public DateTime? UpdatedTime { get; set; } + + } +} \ No newline at end of file diff --git a/DOAN.Service/MES/mm/IService/IMmRequirePlanService.cs b/DOAN.Service/MES/mm/IService/IMmRequirePlanService.cs index 9943c55..58b52c0 100644 --- a/DOAN.Service/MES/mm/IService/IMmRequirePlanService.cs +++ b/DOAN.Service/MES/mm/IService/IMmRequirePlanService.cs @@ -3,6 +3,7 @@ using DOAN.Model; using DOAN.Model.MES.mm.Dto; using DOAN.Model.MES.mm; using System.Collections.Generic; +using Microsoft.AspNetCore.Mvc; namespace DOAN.Service.group.IService { @@ -26,5 +27,8 @@ namespace DOAN.Service.group.IService int AllUpdateMaterialStatus(DateTime? handledate, int status, string name); bool CheckCommunicationERPInventory(); + + + PagedInfo GetMaterialRequirePlanByline(MmRequirePlanQueryDto2 parm); } } diff --git a/DOAN.Service/MES/mm/MmRequirePlanService.cs b/DOAN.Service/MES/mm/MmRequirePlanService.cs index 280bf0a..bfc569d 100644 --- a/DOAN.Service/MES/mm/MmRequirePlanService.cs +++ b/DOAN.Service/MES/mm/MmRequirePlanService.cs @@ -15,6 +15,7 @@ using DOAN.Model.MES.base_; using Microsoft.Extensions.Logging; using NPOI; using DOAN.Model.MES.ERP; +using Mapster; namespace DOAN.Service.group { @@ -279,5 +280,134 @@ namespace DOAN.Service.group return childDb.Queryable().Any(); } + + /// + /// 根据产线和日期查询物料需求计划 + /// + /// + /// + public PagedInfo GetMaterialRequirePlanByline(MmRequirePlanQueryDto2 parm) + { + //查询当日线下所有工单 + parm.RequireDate = parm.RequireDate.Value.ToLocalTime().Date; + + int result = 0; + + Dictionary need_Materials = new Dictionary(); + Dictionary> need_Materials_workOrder = new Dictionary>(); + List mmRequirePlans = new List(); + //获取当天所有工单 + List ProWorkorderList = Context.Queryable().Where(it => it.LineCode == parm.line_code) + .Where(it => it.WorkorderDate == parm.RequireDate).ToList(); + if (ProWorkorderList != null && ProWorkorderList.Count > 0) + { + foreach (var workorder_item in ProWorkorderList) + { + + //遍历每个工单的产品 + if (!string.IsNullOrEmpty(workorder_item.ProductionCode)) + { + + //每个产品的原材料 BOM + //var query= Context.Queryable().Where(it => it.InvCode == workorder_item.ProductionCode); + List boms = Context.Queryable().Where(it => it.InvCode == workorder_item.ProductionCode).ToList(); + if (boms != null && boms.Count > 0) + { + + //遍历所有子件 + foreach (var item in boms) + { + float need_num = (workorder_item.DeliveryNum ?? 1) * (float.Parse(item.Iusequantity)); + if (need_Materials.ContainsKey(item.SubInvCode)) + { + float pre_num = need_Materials[item.SubInvCode]; + need_Materials[item.SubInvCode] = pre_num + need_num; + } + else + { + need_Materials.Add(item.SubInvCode, need_num); + } + if (need_Materials_workOrder.ContainsKey(item.SubInvCode)) + { + + need_Materials_workOrder[item.SubInvCode].Add(workorder_item.Workorder); + } + else + { + need_Materials_workOrder.Add(item.SubInvCode, new HashSet() { workorder_item.Workorder }); + } + + } + } + } + } + } + + if (need_Materials.Count > 0) + { + string[] SubInvCode = need_Materials.Keys.ToArray(); + List baseMaterialList = Context.Queryable().Where(it => SubInvCode.Contains(it.Code)).ToList(); + + if (baseMaterialList != null && baseMaterialList.Count() > 0) + { + string[] search_codes = baseMaterialList.Select(it => it.Code).ToArray(); + var childDb = Context.AsTenant().GetConnectionWithAttr(); + var search_code_List = childDb.Queryable().Where(it => search_codes.Contains(it.InvCode)).ToList(); + foreach (var item in baseMaterialList) + { + + decimal IQuantity = search_code_List.Where(it => it.InvCode == item.Code).Select(it => it.IQuantity).FirstOrDefault(); + + MmRequirePlan mmRequirePlan = new MmRequirePlan(); + mmRequirePlan.Id = XueHua; + mmRequirePlan.MaterialCode = item.Code; + mmRequirePlan.MaterialName = item.Name; + mmRequirePlan.RequireNum = (decimal)(need_Materials.TryGetValue(item.Code, out float value) ? value : default(float)); + mmRequirePlan.WhQuantity = IQuantity; + mmRequirePlan.RequireDate = parm.RequireDate; + if (mmRequirePlan.RequireNum > mmRequirePlan.WhQuantity) + { + mmRequirePlan.IsSufficient = 1; + } + else + { + mmRequirePlan.IsSufficient = 2; + } + + mmRequirePlan.CreatedBy = ""; + mmRequirePlan.CreatedTime = DateTime.Now; + + + if (need_Materials_workOrder.ContainsKey(item.Code)) + { + + mmRequirePlan.WorkorderArray = String.Join(", ", need_Materials_workOrder[item.Code].ToArray()); + } + + + mmRequirePlans.Add(mmRequirePlan); + + } + + } + + + + + + } + + + + PagedInfo pagedInfo = new PagedInfo(); + pagedInfo.PageSize= parm.PageSize; + pagedInfo.PageIndex = (parm.PageNum - 1) * parm.PageSize; + pagedInfo.TotalNum = mmRequirePlans.Count(); + pagedInfo.Result = mmRequirePlans.Skip((parm.PageNum - 1) * parm.PageSize).Take(parm.PageSize).ToList().Adapt>(); + + + + return pagedInfo; + } } } \ No newline at end of file