2
schangxiang@126.com
2024-06-12 84e21901f4548f6f2df3560668a0c5a45b51d5b5
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
{
@@ -106,7 +108,7 @@
                                               QualityDataInfoID = process.QualityDataInfoID,
                                               OperationType = process.OperationType,
                                               CreateUserName = process.CreatedUserName
                                           }).OrderBy(o => o.StartTime)
                                           }).OrderByDescending(o => o.StartTime)
             .ProjectToType<WorkPieceProcessOutput>()
              .ToADPagedListAsync(input.PageNo, input.PageSize);
@@ -204,7 +206,7 @@
                                                     EndTime = process.EndTime.ToString(),
                                                     //QualityState = process.QualityState,
                                                     CreateUserName = process.CreatedUserName
                                                 }).OrderBy(o => o.StartTime).Distinct()
                                                 }).OrderByDescending(o => o.StartTime).Distinct()
            .ProjectToType<WorkPieceProcessExcelOutput>()
             .ToListAsync();
@@ -250,6 +252,112 @@
            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
            })
            .OrderBy(x => x.WorkingProcedureCurrent)
              .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>导出的Excel文件</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>
        /// 分页查询工件加工(工件信息表)
        /// </summary>