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