From bc42866b302006865a605da028a447592b5dbda9 Mon Sep 17 00:00:00 2001 From: schangxiang@126.com <schangxiang@126.com> Date: 周二, 11 6月 2024 15:04:36 +0800 Subject: [PATCH] 工序产量查询 --- iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceProcess/WorkPieceProcessService.cs | 190 ++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 155 insertions(+), 35 deletions(-) diff --git a/iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceProcess/WorkPieceProcessService.cs b/iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceProcess/WorkPieceProcessService.cs index e4456f8..a5bd838 100644 --- a/iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceProcess/WorkPieceProcessService.cs +++ b/iWara.SCADA.Code/iWare.Wms.Application/Service/WorkPieceProcess/WorkPieceProcessService.cs @@ -16,7 +16,9 @@ using System.Linq; using System.Linq.Dynamic.Core; using System.Text; +using System.Text.RegularExpressions; using System.Web; +using static OfficeOpenXml.FormulaParsing.EpplusExcelDataProvider; namespace iWare.Wms.Application { @@ -25,9 +27,10 @@ /// </summary> [ApiDescriptionSettings("鏁版嵁鏌ヨ鏈嶅姟", Name = "WorkPieceProcess", Order = 100)] [Route("api/[Controller]")] + [DisableOpLog] public class WorkPieceProcessService : IWorkPieceProcessService, IDynamicApiController, ITransient { - private readonly IRepository<WorkPieceProcess,MasterDbContextLocator> _workPieceProcessRep; + private readonly IRepository<WorkPieceProcess, MasterDbContextLocator> _workPieceProcessRep; private readonly IRepository<WorkPieceInfo, MasterDbContextLocator> _workPieceInfoRep; private readonly IRepository<EquipmentBaseInfo, MasterDbContextLocator> _equipmentBaseInfoRep; private readonly IRepository<SysDictType, MasterDbContextLocator> _sysDictTypeRep; @@ -43,7 +46,7 @@ /// <param name="sysDictTypeRep"></param> /// <param name="sysDictDataRep"></param> public WorkPieceProcessService( - IRepository<WorkPieceProcess,MasterDbContextLocator> workPieceProcessRep, + IRepository<WorkPieceProcess, MasterDbContextLocator> workPieceProcessRep, IRepository<WorkPieceInfo, MasterDbContextLocator> workPieceInfoRep, IRepository<EquipmentBaseInfo, MasterDbContextLocator> equipmentBaseInfoRep, IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep, @@ -74,34 +77,38 @@ // EmployeeName = emp.Name, // DepartmentName = dept != null ? dept.Name : null // }; - var workPieceProcesss = await(from process in _workPieceProcessRep.DetachedEntities - join baseinfo in _equipmentBaseInfoRep.DetachedEntities - on process.EquipmentID equals baseinfo.EquipmentId into joinedEmpty - from baseinfo2 in joinedEmpty.DefaultIfEmpty() - where process.IsDeleted == false && process.WorkPieceID.Contains(string.IsNullOrEmpty(input.WorkPieceID)?"": input.WorkPieceID) - && process.QualityState == (input.QualityState.HasValue? input.QualityState.Value: process.QualityState) - && process.EquipmentID == (string.IsNullOrEmpty(input.EquipmentID) ? process.EquipmentID : input.EquipmentID) - && process.WorkingProcedureCurrent == (string.IsNullOrEmpty(input.WorkingProcedureCurrent) ? process.WorkingProcedureCurrent : input.WorkingProcedureCurrent) - && process.EquipmentID == (string.IsNullOrEmpty(input.EquipmentID) ? process.EquipmentID : input.EquipmentID) - && process.OperationType==(string.IsNullOrEmpty(input.OperationType) ? process.OperationType : input.OperationType) - && !string.IsNullOrEmpty(process.WorkPieceID) - &&process.StartTime>= (input.StartTimeBeginTime.HasValue?input.StartTimeBeginTime:DateTime.MinValue) - && process.StartTime <= (input.StartTimeEndTime.HasValue ? input.StartTimeEndTime : DateTime.MaxValue) - select new WorkPieceProcessOutput - { + var workPieceProcesss = await (from process in _workPieceProcessRep.DetachedEntities + join baseinfo in _equipmentBaseInfoRep.DetachedEntities on process.EquipmentID equals baseinfo.EquipmentId into joinedEmpty + from baseinfo2 in joinedEmpty.DefaultIfEmpty() + join workPiece in _workPieceInfoRep.DetachedEntities on process.WorkPieceID equals workPiece.WorkPieceID into joined2Empty + from workPiece2 in joined2Empty.DefaultIfEmpty() + where process.IsDeleted == false && process.WorkPieceID.Contains(string.IsNullOrEmpty(input.WorkPieceID) ? "" : input.WorkPieceID) + && process.QualityState == (input.QualityState.HasValue ? input.QualityState.Value : process.QualityState) + && process.EquipmentID == (string.IsNullOrEmpty(input.EquipmentID) ? process.EquipmentID : input.EquipmentID) + && process.WorkingProcedureCurrent == (string.IsNullOrEmpty(input.WorkingProcedureCurrent) ? process.WorkingProcedureCurrent : input.WorkingProcedureCurrent) + && workPiece2.OP80NewCode == (string.IsNullOrEmpty(input.OP80NewCode) ? workPiece2.OP80NewCode : input.OP80NewCode) + && process.EquipmentID == (string.IsNullOrEmpty(input.EquipmentID) ? process.EquipmentID : input.EquipmentID) + && process.OperationType == (string.IsNullOrEmpty(input.OperationType) ? process.OperationType : input.OperationType) + && !string.IsNullOrEmpty(process.WorkPieceID) + && process.StartTime >= (input.StartTimeBeginTime.HasValue ? input.StartTimeBeginTime : DateTime.MinValue) + && process.StartTime <= (input.StartTimeEndTime.HasValue ? input.StartTimeEndTime : DateTime.MaxValue) + select new WorkPieceProcessOutput + { - Id = process.Id, - WorkPieceID = process.WorkPieceID, - EquipmentID = process.EquipmentID, - EquipmentName = (baseinfo2 == null ? "" : baseinfo2.EquipmentName), - WorkingProcedureCurrent = process.WorkingProcedureCurrent, - StartTime = process.StartTime, - EndTime = process.EndTime, - QualityState = process.QualityState, - QualityDataInfoID = process.QualityDataInfoID, - OperationType=process.OperationType, - CreateUserName=process.CreatedUserName - }).OrderBy(o=>o.StartTime) + Id = process.Id, + WorkPieceID = process.WorkPieceID, + EquipmentID = process.EquipmentID, + EquipmentName = (baseinfo2 == null ? "" : baseinfo2.EquipmentName), + OP80NewCode = workPiece2.OP80NewCode, + + WorkingProcedureCurrent = process.WorkingProcedureCurrent, + StartTime = process.StartTime, + EndTime = process.EndTime, + QualityState = process.QualityState, + QualityDataInfoID = process.QualityDataInfoID, + OperationType = process.OperationType, + CreateUserName = process.CreatedUserName + }).OrderBy(o => o.StartTime) .ProjectToType<WorkPieceProcessOutput>() .ToADPagedListAsync(input.PageNo, input.PageSize); @@ -174,17 +181,21 @@ join baseinfo in _equipmentBaseInfoRep.DetachedEntities on process.EquipmentID equals baseinfo.EquipmentId into joinedEmpty from baseinfo2 in joinedEmpty.DefaultIfEmpty() + join workPiece in _workPieceInfoRep.DetachedEntities on process.WorkPieceID equals workPiece.WorkPieceID into joined2Empty + from workPiece2 in joined2Empty.DefaultIfEmpty() where process.IsDeleted == false && process.WorkPieceID.Contains(string.IsNullOrEmpty(input.WorkPieceID) ? "" : input.WorkPieceID) && process.QualityState == (input.QualityState.HasValue ? input.QualityState.Value : process.QualityState) && process.EquipmentID == (string.IsNullOrEmpty(input.EquipmentID) ? process.EquipmentID : input.EquipmentID) && process.WorkingProcedureCurrent == (string.IsNullOrEmpty(input.WorkingProcedureCurrent) ? process.WorkingProcedureCurrent : input.WorkingProcedureCurrent) && process.EquipmentID == (string.IsNullOrEmpty(input.EquipmentID) ? process.EquipmentID : input.EquipmentID) + && workPiece2.OP80NewCode == (string.IsNullOrEmpty(input.OP80NewCode) ? workPiece2.OP80NewCode : input.OP80NewCode) && process.OperationType == (string.IsNullOrEmpty(input.OperationType) ? process.OperationType : input.OperationType) && !string.IsNullOrEmpty(process.WorkPieceID) && process.StartTime >= (input.StartTimeBeginTime.HasValue ? input.StartTimeBeginTime : DateTime.MinValue) && process.StartTime <= (input.StartTimeEndTime.HasValue ? input.StartTimeEndTime : DateTime.MaxValue) select new WorkPieceProcessExcelOutput { + OP80NewCode = workPiece2.OP80NewCode, Id = process.Id, WorkPieceID = process.WorkPieceID, @@ -193,8 +204,8 @@ WorkingProcedureCurrent = process.WorkingProcedureCurrent, StartTime = process.StartTime.ToString(), EndTime = process.EndTime.ToString(), - QualityState = process.QualityState, - CreateUserName=process.CreatedUserName + //QualityState = process.QualityState, + CreateUserName = process.CreatedUserName }).OrderBy(o => o.StartTime).Distinct() .ProjectToType<WorkPieceProcessExcelOutput>() .ToListAsync(); @@ -227,7 +238,7 @@ foreach (WorkPieceProcessExcelOutput item in workPieceMachiningInfos) { - item.StartTime = string.IsNullOrEmpty(item.StartTime) ? "" :Convert.ToDateTime(item.StartTime).ToString("yyyy-MM-dd hh:mm:ss"); + item.StartTime = string.IsNullOrEmpty(item.StartTime) ? "" : Convert.ToDateTime(item.StartTime).ToString("yyyy-MM-dd hh:mm:ss"); item.EndTime = string.IsNullOrEmpty(item.EndTime) ? "" : Convert.ToDateTime(item.EndTime).ToString("yyyy-MM-dd hh:mm:ss"); } @@ -240,6 +251,111 @@ var fileName = HttpUtility.UrlEncode($"{sheetName}[{DateTimeOffset.Now:yyyy-MM-dd}].xlsx", Encoding.GetEncoding("UTF-8")); return new FileStreamResult(ms, "application/octet-stream") { FileDownloadName = fileName }; } + + + #region 浜ч噺鏌ヨ [Editby shaocx,2024-06-08] + + /// <summary> + /// 浜ч噺鏌ヨ + /// </summary> + /// <param name="input"></param> + /// <returns></returns> + [HttpGet("queryYield")] + public async Task<PageResult<QueryYieldOutput>> QueryYield([FromQuery] WorkPieceProcessSearch input) + { + + var workPieceProcesss2 = await (from process in _workPieceProcessRep.DetachedEntities + //join baseinfo in _equipmentBaseInfoRep.DetachedEntities on process.EquipmentID equals baseinfo.EquipmentId into joinedEmpty + //from baseinfo2 in joinedEmpty.DefaultIfEmpty() + //join workPiece in _workPieceInfoRep.DetachedEntities on process.WorkPieceID equals workPiece.WorkPieceID into joined2Empty + //from workPiece2 in joined2Empty.DefaultIfEmpty() + where process.IsDeleted == false && process.WorkPieceID.Contains(string.IsNullOrEmpty(input.WorkPieceID) ? "" : input.WorkPieceID) + && process.QualityState == (input.QualityState.HasValue ? input.QualityState.Value : process.QualityState) + && process.EquipmentID == (string.IsNullOrEmpty(input.EquipmentID) ? process.EquipmentID : input.EquipmentID) + && process.WorkingProcedureCurrent == (string.IsNullOrEmpty(input.WorkingProcedureCurrent) ? process.WorkingProcedureCurrent : input.WorkingProcedureCurrent) + //&& workPiece2.OP80NewCode == (string.IsNullOrEmpty(input.OP80NewCode) ? workPiece2.OP80NewCode : input.OP80NewCode) + && process.EquipmentID == (string.IsNullOrEmpty(input.EquipmentID) ? process.EquipmentID : input.EquipmentID) + && process.OperationType == (string.IsNullOrEmpty(input.OperationType) ? process.OperationType : input.OperationType) + && !string.IsNullOrEmpty(process.WorkPieceID) + && process.StartTime >= (input.StartTimeBeginTime.HasValue ? input.StartTimeBeginTime : DateTime.MinValue) + && process.StartTime <= (input.StartTimeEndTime.HasValue ? input.StartTimeEndTime : DateTime.MaxValue) + select new QueryYieldOutput + { + //EquipmentID = process.EquipmentID, + //EquipmentName = baseinfo2.EquipmentName, + WorkingProcedureCurrent = process.WorkingProcedureCurrent, + //StartTime = grouped.Key.StartTime, + YieldCount = 0 + }).ToListAsync(); + + var workPieceProcesss = workPieceProcesss2.GroupBy(x => new { x.WorkingProcedureCurrent }).Select(y => new QueryYieldOutput + { + //EquipmentID = y.Key.EquipmentID, + //EquipmentName = y.Key.EquipmentName, + WorkingProcedureCurrent = y.Key.WorkingProcedureCurrent, + //StartTime = grouped.Key.StartTime, + YieldCount = y.ToList().Count + }) + .ToADPagedList(input.PageNo, input.PageSize); + + //var workPieceProcesss = await (from process in _workPieceProcessRep.DetachedEntities + // join baseinfo in _equipmentBaseInfoRep.DetachedEntities on process.EquipmentID equals baseinfo.EquipmentId into joinedEmpty + // from baseinfo2 in joinedEmpty.DefaultIfEmpty() + // join workPiece in _workPieceInfoRep.DetachedEntities on process.WorkPieceID equals workPiece.WorkPieceID into joined2Empty + // from workPiece2 in joined2Empty.DefaultIfEmpty() + // where process.IsDeleted == false && process.WorkPieceID.Contains(string.IsNullOrEmpty(input.WorkPieceID) ? "" : input.WorkPieceID) + // && process.QualityState == (input.QualityState.HasValue ? input.QualityState.Value : process.QualityState) + // && process.EquipmentID == (string.IsNullOrEmpty(input.EquipmentID) ? process.EquipmentID : input.EquipmentID) + // && process.WorkingProcedureCurrent == (string.IsNullOrEmpty(input.WorkingProcedureCurrent) ? process.WorkingProcedureCurrent : input.WorkingProcedureCurrent) + // && workPiece2.OP80NewCode == (string.IsNullOrEmpty(input.OP80NewCode) ? workPiece2.OP80NewCode : input.OP80NewCode) + // && process.EquipmentID == (string.IsNullOrEmpty(input.EquipmentID) ? process.EquipmentID : input.EquipmentID) + // && process.OperationType == (string.IsNullOrEmpty(input.OperationType) ? process.OperationType : input.OperationType) + // && !string.IsNullOrEmpty(process.WorkPieceID) + // && process.StartTime >= (input.StartTimeBeginTime.HasValue ? input.StartTimeBeginTime : DateTime.MinValue) + // && process.StartTime <= (input.StartTimeEndTime.HasValue ? input.StartTimeEndTime : DateTime.MaxValue) + // //group new { process, baseinfo2 } by new { process.WorkingProcedureCurrent, process.EquipmentID, baseinfo2.EquipmentName } into grouped + // //group process by new { process.WorkingProcedureCurrent, process.EquipmentID } into grouped + // group process by new { process.WorkingProcedureCurrent } into grouped + // select new QueryYieldOutput + // { + // // EquipmentID = grouped.Key.EquipmentID, + // //EquipmentName = grouped.Key.EquipmentName, + // WorkingProcedureCurrent = grouped.Key.WorkingProcedureCurrent, + // //StartTime = grouped.Key.StartTime, + // YieldCount = grouped.ToList().Count, + + // }).OrderBy(o => o.StartTime) + // .ProjectToType<QueryYieldOutput>() + // .ToADPagedListAsync(input.PageNo, input.PageSize); + + return workPieceProcesss; + } + + /// <summary> + /// 瀵煎嚭浜ч噺鏌ヨ + /// </summary> + /// <param name="input"></param> + /// <returns>瀵煎嚭鐨凟xcel鏂囦欢</returns> + [HttpGet("exportYield")] + public async Task<IActionResult> ExportYield([FromQuery] WorkPieceProcessSearch input) + { + input.PageNo = 1; + input.PageSize = 1000000; + var workPieceMachiningInfos2 = QueryYield(input); + var workPieceMachiningInfos = workPieceMachiningInfos2.Result.Rows.ToList(); + var daList = workPieceMachiningInfos.Adapt<List<ExportYieldOutput>>(); + + MemoryStream ms = new(); + DataConvertUtil.ToExcelData(daList, _sysDictTypeRep, _sysDictDataRep, out List<string> headers, + out List<List<object>> data, out string sheetName); + + ExcelUtil.ToExcel(headers, data, sheetName, ms); + ms.Position = 0; + var fileName = HttpUtility.UrlEncode($"{sheetName}[{DateTimeOffset.Now:yyyy-MM-dd}].xlsx", Encoding.GetEncoding("UTF-8")); + return new FileStreamResult(ms, "application/octet-stream") { FileDownloadName = fileName }; + } + + #endregion /// <summary> /// 鍒嗛〉鏌ヨ宸ヤ欢鍔犲伐(宸ヤ欢淇℃伅琛�) @@ -255,13 +371,14 @@ .Join(_sysDictTypeRep.DetachedEntities, g => g.f.TypeId, h => h.Id, (f, g) => new { f, g }) .Where(x => (x.g.Code.Equals("workpiece_state") && (string.IsNullOrEmpty(input.WorkPieceState.ToString()) ? true : x.f.f.Code.Equals(input.WorkPieceState.ToString())))) .Where(!string.IsNullOrEmpty(input.WorkPieceID), u => u.f.e.a.WorkPieceID.Contains(input.WorkPieceID)) + .Where(!string.IsNullOrEmpty(input.OP80NewCode), u => u.f.e.a.OP80NewCode.Contains(input.OP80NewCode)) .Where(!string.IsNullOrEmpty(input.WorkPieceState.ToString()), u => u.f.e.a.WorkPieceState == input.WorkPieceState) .Where(!string.IsNullOrEmpty(input.EquipmentID), u => u.f.e.a.EquipmentID.Equals(input.EquipmentID)) .Where(!string.IsNullOrEmpty(input.WorkingProcedureCurrent), u => u.f.e.a.WorkingProcedureCurrent.Equals(input.WorkingProcedureCurrent)) .Where(!string.IsNullOrEmpty(input.StartTimeBeginTime.ToString()), u => u.f.e.a.WorkPieceinitOnlineTime >= input.StartTimeBeginTime) .Where(!string.IsNullOrEmpty(input.StartTimeEndTime.ToString()), u => u.f.e.a.WorkPieceinitOnlineTime <= input.StartTimeEndTime) .Where(o => !string.IsNullOrEmpty(o.f.e.a.WorkPieceID)) - .Where(o=>o.f.e.a.QualityState== (input.QualityState.HasValue ? input.QualityState.Value : o.f.e.a.QualityState)) + .Where(o => o.f.e.a.QualityState == (input.QualityState.HasValue ? input.QualityState.Value : o.f.e.a.QualityState)) .Select(s => new WorkPieceInfoMachiningPageOutput { Id = s.f.e.a.Id, @@ -276,7 +393,8 @@ QualityState = s.f.e.a.QualityState, EquipmentID = s.f.e.a.EquipmentID, EquipmentName = s.f.e.b.EquipmentName, - OperationType = "姝e父" + OperationType = "姝e父", + OP80NewCode = s.f.e.a.OP80NewCode, }) .OrderBy(PageInputOrder.OrderBuilder<WorkPieceProcessSearch>(input)) .ProjectToType<WorkPieceInfoMachiningPageOutput>() @@ -299,6 +417,7 @@ .Join(_sysDictTypeRep.DetachedEntities, g => g.f.TypeId, h => h.Id, (f, g) => new { f, g }) .Where(x => (x.g.Code.Equals("workpiece_state") && (string.IsNullOrEmpty(input.WorkPieceState.ToString()) ? true : x.f.f.Code.Equals(input.WorkPieceState.ToString())))) .Where(!string.IsNullOrEmpty(input.WorkPieceID), u => u.f.e.a.WorkPieceID.Contains(input.WorkPieceID)) + .Where(!string.IsNullOrEmpty(input.OP80NewCode), u => u.f.e.a.OP80NewCode.Contains(input.OP80NewCode)) .Where(!string.IsNullOrEmpty(input.WorkPieceState.ToString()), u => u.f.e.a.WorkPieceState == input.WorkPieceState) .Where(!string.IsNullOrEmpty(input.EquipmentID), u => u.f.e.a.EquipmentID.Equals(input.EquipmentID)) .Where(!string.IsNullOrEmpty(input.WorkingProcedureCurrent), u => u.f.e.a.WorkingProcedureCurrent.Equals(input.WorkingProcedureCurrent)) @@ -315,7 +434,8 @@ WorkPieceLastOfflineTime = s.f.e.a.WorkPieceLastOfflineTime.ToString(), WorkPieceStateName = s.f.f.Value, EquipmentName = s.f.e.b.EquipmentName, - QualityState = s.f.e.a.QualityState, + //QualityState = s.f.e.a.QualityState, + OP80NewCode = s.f.e.a.OP80NewCode, }) .Distinct() .OrderBy(PageInputOrder.OrderBuilder<WorkPieceProcessSearch>(input)) -- Gitblit v1.9.3