diff --git a/DOAN.Admin.WebApi/Controllers/MES/product/ProWorkorderController.cs b/DOAN.Admin.WebApi/Controllers/MES/product/ProWorkorderController.cs index da88968..a2341ee 100644 --- a/DOAN.Admin.WebApi/Controllers/MES/product/ProWorkorderController.cs +++ b/DOAN.Admin.WebApi/Controllers/MES/product/ProWorkorderController.cs @@ -384,5 +384,31 @@ namespace DOAN.Admin.WebApi.Controllers return SUCCESS(response); } + + //TODO 获取甘特图 + [HttpPost("getGanttChart")] + [AllowAnonymous] + public IActionResult GetGanttChart([FromBody] GanttChartQueryDto query) + { + var response = _ProWorkorderService.GetGanttChart(query); + + return SUCCESS(response); + } + + /// + /// 班组列表 + /// + /// + /// + [HttpPost("GroupList")] + [AllowAnonymous] + public IActionResult GetGroupList([FromBody] ProWorkorderQueryDto parm) + { + parm.WorkorderDate[0] = ConvertDateTime.ConvertLocalDate(parm.WorkorderDate[0]); + parm.WorkorderDate[1] = ConvertDateTime.ConvertLocalDate(parm.WorkorderDate[1]); + + var response = _ProWorkorderService.GetList(parm); + return SUCCESS(response); + } } } diff --git a/DOAN.Model/MES/product/Dto/ProWorkorderDto.cs b/DOAN.Model/MES/product/Dto/ProWorkorderDto.cs index 235f978..7456824 100644 --- a/DOAN.Model/MES/product/Dto/ProWorkorderDto.cs +++ b/DOAN.Model/MES/product/Dto/ProWorkorderDto.cs @@ -1,4 +1,5 @@ using System.ComponentModel.DataAnnotations; +using static DOAN.Model.MES.product.Dto.GanttChartChildrenDto; namespace DOAN.Model.MES.product.Dto { @@ -368,6 +369,42 @@ namespace DOAN.Model.MES.product.Dto public int? ActualNum { get; set; } } + /// + /// 甘特图接收参数DTO + /// + public class GanttChartQueryDto + { + /// + /// 组别 + /// + public List GroupCode { get; set; } + /// + /// 日期 + /// + public DateTime QueryDate { get; set; } + } + /// + /// 工单甘特图 + /// + public class GanttChartDto + { + public string GroupCode { get; set; } + + public double AllWorkTime { get; set; } + public List Workorders { get; set; } + } + + // 工单详情DTO + public class GanttChartChildrenDto + { + public string Workorder { get; set; } + public string ProductionName { get; set; } + public double DeliveryNum { get; set; } + public double Beat { get; set; } + public DateTime? StartTime { get; set; } + public DateTime? EndTime { get; set; } + public double CalculatedValue { get; set; } + } } \ No newline at end of file diff --git a/DOAN.Service/MES/product/IService/IProWorkorderService.cs b/DOAN.Service/MES/product/IService/IProWorkorderService.cs index f1ec106..773711e 100644 --- a/DOAN.Service/MES/product/IService/IProWorkorderService.cs +++ b/DOAN.Service/MES/product/IService/IProWorkorderService.cs @@ -62,5 +62,7 @@ namespace DOAN.Service.MES.product.IService List SearchBOMNum(string workorder_num); int WorkOrderLog(string workorder, string log, string Operator); + + public List GetGanttChart(GanttChartQueryDto query); } } diff --git a/DOAN.Service/MES/product/ProWorkorderService.cs b/DOAN.Service/MES/product/ProWorkorderService.cs index 0f788bd..1d794e8 100644 --- a/DOAN.Service/MES/product/ProWorkorderService.cs +++ b/DOAN.Service/MES/product/ProWorkorderService.cs @@ -1,42 +1,43 @@ -using System; -using SqlSugar; -using Infrastructure.Attribute; +using Aliyun.OSS; using DOAN.Model; - +using DOAN.Model.MES.base_; +using DOAN.Model.MES.base_.Dto; +using DOAN.Model.MES.BI.Dto; +using DOAN.Model.MES.exception; +using DOAN.Model.MES.group; using DOAN.Model.MES.product; using DOAN.Model.MES.product.Dto; - +using DOAN.Model.System; using DOAN.Repository; using DOAN.Service.MES.product.IService; - -using System.Linq; -using SqlSugar.Extensions; -using MimeKit.Tnef; -using DOAN.Model.MES.base_; -using Microsoft.AspNetCore.Http; -using DOAN.Model.System; -using MiniExcelLibs; -using NPOI.SS.Formula.Functions; -using NPOI.SS.UserModel; -using NPOI.XSSF.UserModel; -using System.Data.Common; -using NPOI.XWPF.UserModel; -using NPOI.HSSF.UserModel; -using Microsoft.AspNetCore.Components.Forms; -using System.Globalization; -using System.ComponentModel; -using NPOI.Util; -using DOAN.Model.MES.base_.Dto; -using Aliyun.OSS; -using DOAN.Model.MES.group; +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Converter; using Mapster; using Microsoft.AspNetCore.Authentication; -using System.Reflection; -using DOAN.Model.MES.exception; -using Infrastructure; -using Infrastructure.Converter; -using Microsoft.Extensions.Logging; +using Microsoft.AspNetCore.Components.Forms; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.HttpResults; +using Microsoft.Extensions.Logging; +using Microsoft.IdentityModel.Tokens; +using MimeKit.Tnef; +using MiniExcelLibs; +using NPOI.HSSF.UserModel; +using NPOI.SS.Formula.Functions; +using NPOI.SS.UserModel; +using NPOI.Util; +using NPOI.XSSF.UserModel; +using NPOI.XWPF.UserModel; +using Org.BouncyCastle.Asn1.Pkcs; +using SqlSugar; +using SqlSugar.Extensions; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data.Common; +using System.Globalization; +using System.Linq; +using System.Reflection; namespace DOAN.Service.MES.product { @@ -1272,9 +1273,74 @@ namespace DOAN.Service.MES.product } + return result; + } + + /// + /// 甘特图 + /// + /// + /// + public List GetGanttChart(GanttChartQueryDto query) + { + List groupCodes = new List(); + + // 确定要查询的组别(全部或指定) + if (query == null || query.GroupCode == null || !query.GroupCode.Any()) + { + groupCodes = Context.Queryable() + .Where(p => !string.IsNullOrEmpty(p.GroupCode)) + .Select(p => p.GroupCode) + .Distinct() + .ToList(); + } + else + { + groupCodes = query.GroupCode + .Where(item => !string.IsNullOrEmpty(item)) + .ToList(); + } + + var result = new List(); + + // 遍历每个组别,获取该组的所有工单 + foreach (var groupCode in groupCodes) + { + var workorders = Context.Queryable() + .Where(p => p.GroupCode == groupCode) + .WhereIF(query != null && query.QueryDate > DateTime.MinValue, + p => p.WorkorderDate.Value == query.QueryDate) + .Select(p => new GanttChartChildrenDto + { + Workorder = p.Workorder, + ProductionName = p.ProductionName, + DeliveryNum = (double)p.DeliveryNum, + Beat = (double)p.Beat, + StartTime = p.StartTime, + EndTime = p.EndTime, + CalculatedValue = (double)(p.DeliveryNum * p.Beat /3600) + }) + .ToList(); + + // 重新计算每组内的工单时间(从0点开始顺序排列) + var lastEndTime = new DateTime(query.QueryDate.Year, query.QueryDate.Month, query.QueryDate.Day, 8, 0, 0); // 当天0点 + foreach (var workorder in workorders) + { + workorder.StartTime = lastEndTime; + workorder.EndTime = lastEndTime.AddHours(workorder.CalculatedValue); + lastEndTime = (DateTime)workorder.EndTime; + } + + // 将当前组的数据添加到结果中 + result.Add(new GanttChartDto + { + GroupCode = groupCode, + Workorders = workorders, + AllWorkTime = Math.Round(workorders.Sum(w => w.CalculatedValue), 1) + }); + } + return result; } } - - } \ No newline at end of file