222
schangxiang@126.com
2025-09-24 68941a04cb2320daa22ba0d5ac79a4447c29998d
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,13 +27,15 @@
    /// </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;
        private readonly IRepository<SysDictData, MasterDbContextLocator> _sysDictDataRep;
        private readonly IRepository<WorkPieceLog, MasterDbContextLocator> _workPieceLogRep;
        /// <summary>
@@ -43,13 +47,15 @@
        /// <param name="sysDictTypeRep"></param>
        /// <param name="sysDictDataRep"></param>
        public WorkPieceProcessService(
            IRepository<WorkPieceProcess,MasterDbContextLocator> workPieceProcessRep,
            IRepository<WorkPieceLog, MasterDbContextLocator> workPieceLogRep,
            IRepository<WorkPieceProcess, MasterDbContextLocator> workPieceProcessRep,
            IRepository<WorkPieceInfo, MasterDbContextLocator> workPieceInfoRep,
            IRepository<EquipmentBaseInfo, MasterDbContextLocator> equipmentBaseInfoRep,
            IRepository<SysDictType, MasterDbContextLocator> sysDictTypeRep,
            IRepository<SysDictData, MasterDbContextLocator> sysDictDataRep
        )
        {
            _workPieceLogRep = workPieceLogRep;
            _workPieceInfoRep = workPieceInfoRep;
            _workPieceProcessRep = workPieceProcessRep;
            _equipmentBaseInfoRep = equipmentBaseInfoRep;
@@ -65,100 +71,62 @@
        [HttpGet("workPieceProcessMachiningPage")]
        public async Task<PageResult<WorkPieceProcessOutput>> WorkPieceProcessMachiningPage([FromQuery] WorkPieceProcessSearch input)
        {
            //var LeftJoin = from emp in ListOfEmployees
            //               join dept in ListOfDepartment
            //               on emp.DeptID equals dept.ID into JoinedEmpDept
            //               from dept in JoinedEmpDept.DefaultIfEmpty()
            //               select new
            //               {
            //                   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()
                        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)
                                           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.CreatedUserName.Contains(string.IsNullOrEmpty(input.createUserName) ? "" : input.createUserName)
                     && process.UpdatedUserName.Contains(string.IsNullOrEmpty(input.updatedUserName) ? "" : input.updatedUserName)
                     && (
                      (input.IsHaveOP80Code == "N" && string.IsNullOrEmpty(workPiece2.OP80NewCode))
                      || (input.IsHaveOP80Code == "Y" && !string.IsNullOrEmpty(workPiece2.OP80NewCode))
                      || (string.IsNullOrEmpty(input.IsHaveOP80Code) && 1 == 1)
                     )
                     && 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
                                           {
                                               JiaJuGongWei = process.JiaJuGongWei,
                                               UpdatedUserName = process.UpdatedUserName,
                                               DataCapturePointCname = process.DataCapturePointCname,
                                               UpdateDataCapturePointCname = process.UpdateDataCapturePointCname,
                                               QualityNoOk = process.QualityNoOk,
                                               QualityNoOkReason = process.QualityNoOkReason,
                                               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
                                           }).OrderByDescending(o => o.StartTime)
             .ProjectToType<WorkPieceProcessOutput>()
              .ToADPagedListAsync(input.PageNo, input.PageSize);
            //    var workPieceProcesss1 = _workPieceProcessRep.DetachedEntities.GroupJoin(_equipmentBaseInfoRep.DetachedEntities
            //    , process => process.EquipmentID
            //, baseinfo => baseinfo.EquipmentId
            //, (process, baseinfo) => new { a = process, b = baseinfo.FirstOrDefault() })
            // .Where(!string.IsNullOrEmpty(input.WorkPieceID), u => u.a.WorkPieceID.Contains(input.WorkPieceID))
            //.Where(!string.IsNullOrEmpty(input.QualityState.ToString()), u => u.a.QualityState == input.QualityState)
            //.Where(!string.IsNullOrEmpty(input.EquipmentID), u => u.a.EquipmentID.Equals(input.EquipmentID))
            //.Where(!string.IsNullOrEmpty(input.WorkingProcedureCurrent), u => u.a.WorkingProcedureCurrent.Equals(input.WorkingProcedureCurrent))
            //.Where(!string.IsNullOrEmpty(input.StartTime.ToString()), u => u.a.StartTime >= input.StartTime)
            //.Where(!string.IsNullOrEmpty(input.EndTime.ToString()), u => u.a.EndTime <= input.EndTime)
            //.Select(s => new WorkPieceProcessOutput
            //{
            //    Id = s.a.Id,
            //    WorkPieceID = s.a.WorkPieceID,
            //    EquipmentID = s.a.EquipmentID,
            //    EquipmentName = (s.b == null ? "" : s.b.EquipmentName),
            //    WorkingProcedureCurrent = s.a.WorkingProcedureCurrent,
            //    StartTime = s.a.StartTime,
            //    EndTime = s.a.EndTime,
            //    QualityState = s.a.QualityState,
            //    QualityDataInfoID = s.a.QualityDataInfoID
            //}).ToList();
            //   .OrderBy(PageInputOrder.OrderBuilder<WorkPieceProcessSearch>(input))
            //.ProjectToType<WorkPieceProcessOutput>()
            // .ToADPagedListAsync(input.PageNo, input.PageSize)
            ;
            //var workPieceProcesss = await _workPieceProcessRep.DetachedEntities
            //  .Join(_equipmentBaseInfoRep.DetachedEntities, a => a.EquipmentID, b => b.EquipmentId, (a, b) => new { a, b })
            //  .Join(_sysDictDataRep.DetachedEntities, e => e.a.QualityState.ToString(), f => f.Code, (e, f) => new { e, f })
            //  .Join(_sysDictTypeRep.DetachedEntities, g => g.f.TypeId, h => h.Id, (f, g) => new { f, g })
            //  .Where(x => (x.g.Code.Equals("quality_state")))
            //  .Where(!string.IsNullOrEmpty(input.WorkPieceID), u => u.f.e.a.WorkPieceID.Contains(input.WorkPieceID))
            //  .Where(!string.IsNullOrEmpty(input.EquipmentID), u => u.f.e.a.EquipmentID.Equals(input.EquipmentID))
            //  .Where(!string.IsNullOrEmpty(input.QualityState.ToString()), u => u.f.e.a.QualityState == input.QualityState)
            //  .Where(!string.IsNullOrEmpty(input.WorkingProcedureCurrent), u => u.f.e.a.WorkingProcedureCurrent.Equals(input.WorkingProcedureCurrent))
            //  .Where(input.OnlineTimeBeginTime != null, u => u.f.e.a.StartTime >= input.OnlineTimeBeginTime)
            //  .Where(input.OnlineTimeEndTime != null, u => u.f.e.a.StartTime <= input.OnlineTimeEndTime)
            //   .Select(s => new WorkPieceProcessOutput
            //   {
            //       Id = s.f.e.a.Id,
            //       WorkPieceID = s.f.e.a.WorkPieceID,
            //       WorkingProcedureCurrent = s.f.e.a.WorkingProcedureCurrent,
            //       EquipmentID = s.f.e.a.EquipmentID,
            //       EquipmentName = s.f.e.b.EquipmentName,
            //       StartTime = s.f.e.a.StartTime,
            //       EndTime = s.f.e.a.EndTime,
            //       QualityStateName = s.f.f.Value,
            //   })
            //  .Distinct()
            //  .OrderBy(PageInputOrder.OrderBuilder<WorkPieceProcessSearch>(input))
            //  .ProjectToType<WorkPieceProcessOutput>()
            //  .ToADPagedListAsync(input.PageNo, input.PageSize);
            return workPieceProcesss;
        }
@@ -174,17 +142,33 @@
                                                 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.CreatedUserName.Contains(string.IsNullOrEmpty(input.createUserName) ? "" : input.createUserName)
                     && process.UpdatedUserName.Contains(string.IsNullOrEmpty(input.updatedUserName) ? "" : input.updatedUserName)
                      && (
                      (input.IsHaveOP80Code == "N" && string.IsNullOrEmpty(workPiece2.OP80NewCode))
                      || (input.IsHaveOP80Code == "Y" && !string.IsNullOrEmpty(workPiece2.OP80NewCode))
                      || (string.IsNullOrEmpty(input.IsHaveOP80Code) && 1 == 1)
                     )
                    && 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,41 +177,16 @@
                                                     WorkingProcedureCurrent = process.WorkingProcedureCurrent,
                                                     StartTime = process.StartTime.ToString(),
                                                     EndTime = process.EndTime.ToString(),
                                                     QualityState = process.QualityState,
                                                     CreateUserName=process.CreatedUserName
                                                 }).OrderBy(o => o.StartTime).Distinct()
                                                     //QualityState = process.QualityState,
                                                     CreateUserName = process.CreatedUserName
                                                 }).OrderByDescending(o => o.StartTime).Distinct()
            .ProjectToType<WorkPieceProcessExcelOutput>()
             .ToListAsync();
            //var workPieceMachiningInfos = await _workPieceProcessRep.DetachedEntities
            //  .Join(_equipmentBaseInfoRep.DetachedEntities, a => a.EquipmentID, b => b.EquipmentId, (a, b) => new { a, b })
            //  .Join(_sysDictDataRep.DetachedEntities, e => e.a.QualityState.ToString(), f => f.Code, (e, f) => new { e, f })
            //  .Join(_sysDictTypeRep.DetachedEntities, g => g.f.TypeId, h => h.Id, (f, g) => new { f, g })
            //  .Where(x => (x.g.Code.Equals("quality_state")))
            //  .Where(!string.IsNullOrEmpty(input.WorkPieceID), u => u.f.e.a.WorkPieceID.Contains(input.WorkPieceID))
            //  .Where(!string.IsNullOrEmpty(input.EquipmentID), u => u.f.e.a.EquipmentID.Equals(input.EquipmentID))
            //  .Where(!string.IsNullOrEmpty(input.QualityState.ToString()), u => u.f.e.a.QualityState == input.QualityState)
            //  .Where(!string.IsNullOrEmpty(input.WorkingProcedureCurrent), u => u.f.e.a.WorkingProcedureCurrent.Equals(input.WorkingProcedureCurrent))
            //  .Where(input.OnlineTimeBeginTime != null, u => u.f.e.a.StartTime >= input.OnlineTimeBeginTime)
            //  .Where(input.OnlineTimeEndTime != null, u => u.f.e.a.StartTime <= input.OnlineTimeEndTime)
            //  .Select(s => new WorkPieceProcessExcelOutput
            //  {
            //      Id = s.f.e.a.Id,
            //      WorkPieceID = s.f.e.a.WorkPieceID,
            //      WorkingProcedureCurrent = s.f.e.a.WorkingProcedureCurrent,
            //      EquipmentName = s.f.e.b.EquipmentName,
            //      StartTime = s.f.e.a.StartTime.ToString(),
            //      EndTime = s.f.e.a.EndTime.ToString(),
            //      QualityStateName = s.f.f.Value,
            //  })
            //  .Distinct()
            //  .OrderBy(PageInputOrder.OrderBuilder<WorkPieceProcessSearch>(input))
            //  .ProjectToType<WorkPieceProcessExcelOutput>()
            //   .ToListAsync();
            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 +199,143 @@
            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,
                                                WorkPieceID = process.WorkPieceID,
                                                //StartTime = grouped.Key.StartTime,
                                                YieldCount = 0
                                            }).Distinct().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);
            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
        #region 采集日志查询 [Editby shaocx,2024-06-08]
        /// <summary>
        /// 采集日志查询
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("queryWorkPieceLogYield")]
        public async Task<PageResult<QueryWorkPieceLogYieldOutput>> QueryWorkPieceLogYield([FromQuery] WorkPieceLogYieldInput input)
        {
            var resutlt = await _workPieceLogRep.DetachedEntities
                                    .Where(!string.IsNullOrEmpty(input.WorkPieceID), u => u.WorkPieceID.Contains(input.WorkPieceID))
                                    .Where(!string.IsNullOrEmpty(input.workingProcedure), u => u.WorkingProcedure.Contains(input.workingProcedure))
                                      .Where(!string.IsNullOrEmpty(input.createdUserName), u => u.CreatedUserName.Contains(input.createdUserName))
                                        .Where(!string.IsNullOrEmpty(input.DataCapturePointCname), u => u.DataCapturePointCname.Contains(input.DataCapturePointCname))
                                       .Where(!string.IsNullOrEmpty(input.PieceLogTypeName), u => u.PieceLogTypeName.Contains(input.PieceLogTypeName))
                                       .Where(input.PieceLogType != null, u => u.PieceLogType == input.PieceLogType)
                                       .Where(!string.IsNullOrEmpty(input.remarks), u => u.Remarks.Contains(input.remarks))
                                    .Where(!string.IsNullOrEmpty(input.StartTimeBeginTime.ToString()), u => u.CreatedTime >= input.StartTimeBeginTime)
                                    .Where(!string.IsNullOrEmpty(input.StartTimeEndTime.ToString()), u => u.CreatedTime <= input.StartTimeEndTime)
                                    .OrderBy(PageInputOrder.OrderBuilder<WorkPieceLogYieldInput>(input))
                                    .ProjectToType<QueryWorkPieceLogYieldOutput>()
                                    .ToADPagedListAsync(input.PageNo, input.PageSize);
            return resutlt;
        }
        /// <summary>
        /// 导出采集日志查询
        /// </summary>
        /// <param name="input"></param>
        /// <returns>导出的Excel文件</returns>
        [HttpGet("exportWorkPieceLogYield")]
        public async Task<IActionResult> ExportWorkPieceLogYield([FromQuery] WorkPieceLogYieldInput input)
        {
            input.PageNo = 1;
            input.PageSize = 1000000;
            var workPieceMachiningInfos2 = QueryWorkPieceLogYield(input);
            var workPieceMachiningInfos = workPieceMachiningInfos2.Result.Rows.ToList();
            var daList = workPieceMachiningInfos.Adapt<List<ExportYQueryWorkPieceLogYieldOutput>>();
            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,16 +351,24 @@
               .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(input.IsHaveOP80Code == "Y", u => !string.IsNullOrEmpty(u.f.e.a.OP80NewCode))
                .Where(input.IsHaveOP80Code == "N", u => string.IsNullOrEmpty(u.f.e.a.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
               {
                   QualityNoOk = s.f.e.a.QualityNoOk,
                   QualityNoOkReason = s.f.e.a.QualityNoOkReason,
                   Id = s.f.e.a.Id,
                   WorkPieceID = s.f.e.a.WorkPieceID,
                   WorkPieceState = s.f.e.a.WorkPieceState,
                   WorkPieceStateName = s.f.f.Value,
@@ -276,7 +380,8 @@
                   QualityState = s.f.e.a.QualityState,
                   EquipmentID = s.f.e.a.EquipmentID,
                   EquipmentName = s.f.e.b.EquipmentName,
                   OperationType = "正常"
                   OperationType = "正常",
                   OP80NewCode = s.f.e.a.OP80NewCode,
               })
               .OrderBy(PageInputOrder.OrderBuilder<WorkPieceProcessSearch>(input))
               .ProjectToType<WorkPieceInfoMachiningPageOutput>()
@@ -299,6 +404,11 @@
              .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(input.IsHaveOP80Code == "Y", u => !string.IsNullOrEmpty(u.f.e.a.OP80NewCode))
                .Where(input.IsHaveOP80Code == "N", u => string.IsNullOrEmpty(u.f.e.a.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 +425,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))