StepTraceInfoVM.cs 6.91 KB
using HHECS.Application.Enums;
using HHECS.BllModel;
using HHECS.Dal;
using HHECS.Infrastructure.CommonHelper;
using HHECS.Model.Entities;
using HHECS.WinCommon.ViewModel;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Windows;
using MessageBox = HandyControl.Controls.MessageBox;

namespace HHECS.WinClient.View.TaskInfo
{
    public class StepTraceInfoVM : VMBase
    {
        public PageInfo PageInfo { get; set; } = new PageInfo();
        public string Id { get; set; }
        public string FirstStatus { get; set; }
        public string LastStatus { get; set; }
        public string LineCode { get; set; }
        public string NowStation { get; set; }
        public string NextStation { get; set; }

        public DateTime? StartTime { get; set; } = DateTime.Now.Date.AddDays(-7);

        public DateTime? EndTime { get; set; } = DateTime.Now.Date.AddDays(2).AddSeconds(-1);

        public Dictionary<string, object> Stations { get; set; }

        public Dictionary<string, object> LineCodes { get; set; }

        public Dictionary<string, object> Statuss { get; set; }

        List<BaseProcessRouteDetail> ProcessRouteDetails { get; set; } = new List<BaseProcessRouteDetail>();

        List<BaseWorkStation> WorkStations { get; set; } = new List<BaseWorkStation>();

        List<BaseStepTrace> StepTraces { get; set; } = new List<BaseStepTrace>();
        List<Line> Lines { get; set; } = new List<Line>();

        public StepTraceInfoVM()
        {
            var result1 = App.TaskService.GetStations(t => true);
            if (result1.Success)
            {
                WorkStations = result1.Data;
                Stations = result1.Data.ToDictionary(t => t.WorkStationName, x => (object)x.Id);
            }

            var result = App.TaskService.GetLines(t => true);
            if (result.Success)
            {
                Lines = result.Data;
                LineCodes = result.Data.ToDictionary(t => t.lineName, x => (object)x.lineCode);
            }

            var statu = EnumHelper.EnumListDicString<StepTraceStatus>("全部", "");
            Statuss = statu;

            ProcessRouteDetails = DALHelper.GetFreeSql().GetRepository<BaseProcessRouteDetail>().Where(x => true).ToList();
        }

        public Expression<Func<BaseStepTrace, bool>> GetStepTraceExpression()
        {
            Expression<Func<BaseStepTrace, bool>> filter = a => true;
            if (!string.IsNullOrWhiteSpace(Id))
            {
                filter = filter.And(a => a.Id.ToString() == Id);
            }
            if (!string.IsNullOrWhiteSpace(FirstStatus))
            {
                filter = filter.And(a => a.Status.ToString() == FirstStatus);
            }
            if (!string.IsNullOrWhiteSpace(LastStatus))
            {
                filter = filter.And(a => a.Status.ToString() == LastStatus);
            }
            if (!string.IsNullOrWhiteSpace(LineCode))
            {
                filter = filter.And(a => a.LineId.ToString() == LineCode);
            }
            if (StartTime != null)
            {
                filter = filter.And(a => a.LineInTime >= StartTime);
            }
            if (EndTime != null)
            {
                filter = filter.And(a => a.LineInTime <= EndTime);
            }
            return filter;
        }

        public void Query()
        {
            Expression<Func<BaseStepTrace, bool>> filter = GetStepTraceExpression();
            var result = App.TaskService.GetAllStepTraces(filter, PageInfo.PageIndex, PageInfo.PageSize, out long totalCount);
            if (result.Success)
            {
                PageInfo.TotalCount = totalCount;
                var stepTraces = result.Data;

                stepTraces.ForEach(t =>
                {
                    //t.WoTypeDesc = WoTypes[t.WoType];
                    t.ProcessRouteDetail = ProcessRouteDetails.FirstOrDefault(a => a.Id == t.ProcessRouteDetailId);
                    t.NextProcessRouteDetail = ProcessRouteDetails.FirstOrDefault(a => a.Id == t.NextProcessRouteDetailId);
                    t.StationIdVM = WorkStations?.FirstOrDefault(a => a.Id == t.StationId);
                    t.NextStationIdVM = WorkStations?.FirstOrDefault(a => a.Id == t.NextStationId);
                    t.LineVM = Lines.FirstOrDefault(a => a.Id == t.LineId);
                });
                StepTraces = stepTraces.OrderByDescending(pet => pet.Id).ToList();
            }
            else
            {
                MessageBox.Show($"查询失败:{result.Msg}", "提示", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }


        public void Complete(List<BaseStepTrace> stepTraces)
        {
            if (stepTraces == null || stepTraces.Count() != 1)
            {
                MessageBox.Show("请选中一条任务后继续", "警告", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
            else
            {
                var stepTrace = stepTraces[0];
                if (MessageBox.Show($"是否要强制完成在制品:{stepTrace.Id};这可能导致未知异常发生!", "警告", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
                {
                    var result = App.TaskService.StepTraceExceptionOver(stepTrace.Id, App.User.UserCode);
                    if (result.Success)
                    {
                        MessageBox.Show($"完成在制品{stepTrace.Id}成功");
                        Query();
                    }
                    else
                    {
                        MessageBox.Show($"完成在制品{stepTrace.Id}失败:{result.Msg}");
                    }
                }
            }
        }


        /// <summary>
        /// 任务维护
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void Maintain(List<BaseStepTrace> stepTraces)
        {
            if (stepTraces == null || stepTraces.Count() != 1)
            {
                MessageBox.Show("请选中一条任务后继续", "警告", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
            else
            {
                WinStepTraceMaintain winStepTraceMaintain = new WinStepTraceMaintain(stepTraces[0].Id);
                winStepTraceMaintain.ShowDialog();
                Query();
            }
        }

        //public void QueryCarTask(List<BaseStepTrace> stepTraces)
        //{
        //    if (stepTraces == null || stepTraces.Count() != 1)
        //    {
        //        MessageBox.Show("请选中一条任务后继续", "注意", MessageBoxButton.OK, MessageBoxImage.Warning);
        //    }
        //    else
        //    {
        //        var winCarTaskInfo = new WinCarTaskInfo(stepTraces[0].Id)
        //        {
        //            //Owner = this.Owner
        //        };
        //        winCarTaskInfo.Show();
        //    }
        //}
    }
}