You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

367 lines
14 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using GalaSoft.MvvmLight.Command;
using Microsoft.AspNetCore.Components.Forms;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.IdentityModel.Protocols;
using SlnMesnac.Business.business;
using SlnMesnac.Model.domain;
using SlnMesnac.Model.dto;
using SlnMesnac.Repository.service;
using SlnMesnac.WPF.Page;
using SlnMesnac.WPF.Views;
using SqlSugar;
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Configuration;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Documents;
using System.Windows.Input;
namespace SlnMesnac.WPF.ViewModel
{
public class ExecuteViewModel : INotifyPropertyChanged
{
public ObservableCollection<string> OrderCodeComboBoxItems { get; set; }
public ObservableCollection<string> PlanCodeComboBoxItems { get; set; }
public ObservableCollection<string> MaterialNameComboBoxItems { get; set; }
private RfidHandleBusniess _RfidHandleBusniess;
private ProdPlanInfoService _prodPlanInfoService;
private List<ProdPLanInfo> prodPlanInfos;
private ProdPlanDetailService _prodPlanDetailService;
private IRecordStaffAttendanceService _recordStaffAttendanceService;
private IBaseStaffService _baseStaffService;
private string StationCode;
public static bool isComplete = true;
private ProdPLanInfo pLanInfo;
/// <summary>
/// 按钮文字转换事件
/// </summary>
public event PropertyChangedEventHandler PropertyChanged = delegate { };
/// <summary>
/// 检索命令
/// </summary>
public ICommand SearchCommand { get; private set; }
/// <summary>
/// 换班命令
/// </summary>
public ICommand HandoverCommand { get; private set; }
/// <summary>
/// 报工命令
/// </summary>
public ICommand ProductionReportCommand { get; private set; }
/// <summary>
/// 工艺信息命令
/// </summary>
public ICommand TechnologicalInformationCommand { get; private set; }
/// <summary>
/// 执行命令
/// </summary>
public ICommand ExecuteCommand { get; private set; }
#region 委托
public delegate void RefreshDelegate(ProdPLanInfo pLanInfo);
public static event RefreshDelegate? RefreshEvent;
#endregion
public ExecuteViewModel()
{
_prodPlanInfoService = App.ServiceProvider.GetService<ProdPlanInfoService>();
_prodPlanDetailService = App.ServiceProvider.GetService<ProdPlanDetailService>();
_recordStaffAttendanceService = App.ServiceProvider.GetService<IRecordStaffAttendanceService>();
_RfidHandleBusniess = App.ServiceProvider.GetService<RfidHandleBusniess>();
_baseStaffService = App.ServiceProvider.GetService<IBaseStaffService>();
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder()
.SetBasePath(System.AppContext.BaseDirectory)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
IConfigurationRoot configuration = configurationBuilder.Build();
pLanInfo = _prodPlanInfoService.GetRecordStaffAttendancesByConditions("", "", "", "", "1").FirstOrDefault();
Refresh(pLanInfo);
// 从配置文件中获取ProductLineNameTextBlock的值
stationTextBlock = configuration.GetSection("AppConfig")["ProductLineName"];
StationCode = configuration.GetSection("AppConfig")["ProductLineCode"];
HandoverCommand = new RelayCommand(Handover);
ProductionReportCommand = new RelayCommand(ProductionReport);
TechnologicalInformationCommand = new RelayCommand(TechnologicalInformation);
SearchCommand = new RelayCommand(Search);
ExecuteCommand = new RelayCommand(Execute);
ProductionReportViewModel.RefreshDelegateEvent += Refresh;
EmployeeLoginViewModel.TransmitUserDelegateEvent += ShowTeamMember;
}
/// <summary>
/// 换班弹窗
/// </summary>
private void Handover()
{
var handOverWin = new HandOverWin();
handOverWin.Owner = Application.Current.MainWindow; // 设置父窗口为当前主窗口
handOverWin.WindowStartupLocation = WindowStartupLocation.CenterScreen; // 让窗体出现在屏幕中央
handOverWin.ShowDialog();//窗体出现后禁止后面的用户控件
}
/// <summary>
/// 报工弹窗
/// </summary>
private void ProductionReport()
{
var reportWin = new ProductionReportWin();
reportWin.Owner = Application.Current.MainWindow; // 设置父窗口为当前主窗口
reportWin.WindowStartupLocation = WindowStartupLocation.CenterScreen; // 让窗体出现在屏幕中央
reportWin.ShowDialog();//窗体出现后禁止后面的用户控件
}
/// <summary>
/// 工艺信息弹窗,单例模式保证只显示一个
/// </summary>
private static TechnologicalWin instance;
private void TechnologicalInformation()
{
if (instance == null)
{
instance = new TechnologicalWin();
instance.WindowStartupLocation = WindowStartupLocation.CenterScreen;
instance.Closed += (sender, e) => { instance = null; }; // 窗口关闭时重置instance为null以便下次可以重新打开窗口
instance.Show();
}
else
{
instance.Focus(); // 如果窗口已经存在,则将焦点放在该窗口上
}
}
/// <summary>
/// 检索事件
/// </summary>
private void Search()
{
// 在这里执行其他操作可以通过InputText获取用户输入的信息
//Console.WriteLine("用户输入的信息:" + OrderCodeTextBox + PlanCodeTextBox + MaterialCodeTextBox);
//ProductLineNameTextBlock = ConfigurationManager.AppSettings["ProductLineNameTextBlock"];
List<ProdPLanInfo> list = _prodPlanInfoService.GetRecordStaffAttendancesByConditions(OrderCodeTextBox, PlanCodeTextBox, MaterialCodeTextBox, StationCode,"0");
System.Windows.Application.Current.Dispatcher.Invoke((Action)(async () =>
{
ProdPLanInfoDataGrid.Clear();
list.ForEach(item =>
{
ProdPLanInfoDataGrid.Add(item);
});
}));
}
// 新增的执行事件
private void Execute()
{
//判断是否有班组当班,查询打卡记录表4小时内最后一次打卡类型为上班的班组
if(EmployeeLoginViewModel.isOnDuty == true)
{
if (isComplete)//判断是否完成,未完成不能执行其他工单
{
// 将当前记录存为实体可以通过parameter获取当前记录的信息
string orderCode = _selectedRow.OrderCode.ToString();
string planCode = _selectedRow.PlanCode.ToString();
pLanInfo = _prodPlanInfoService.GetRecordStaffAttendancesByConditions(orderCode, planCode, "", "", "0").First();
RecordStaffAttendance currentRecord = _recordStaffAttendanceService.GetLastestOnRecord();
BaseStaffInfo staffInfo = _baseStaffService.GetMonitorByTeamCode(currentRecord.TeamCode);
RecordStaffAttendance nextRecord = _recordStaffAttendanceService.GetLastestOffRecord();
// 向detail表里插入一条数据
ProdPlanDetail prodPlanDetail = new ProdPlanDetail
{
PlanCode = pLanInfo.PlanCode,
MaterialCode = pLanInfo.MaterialCode,
PlanAmount = pLanInfo.PlanAmount,
CompleteAmount = pLanInfo.CompleteAmount,
BeginTime = DateTime.Now.ToString(),
CurrentStaffId = staffInfo.StaffId
//NextStaffId = nextRecord.StaffId,
};
_prodPlanDetailService.Insert(prodPlanDetail);
//按钮文字变成执行中并锁定,其他的订单执行按钮也禁用
pLanInfo.BeginTime = DateTime.Now.ToString();
pLanInfo.PlanStatus = "1";
_prodPlanInfoService.Update(pLanInfo);
Search();
//查明细表显示出来
Refresh(pLanInfo);
isComplete = false;
}
}
}
//刷新明细
private void Refresh(ProdPLanInfo pLanInfo)
{
if(pLanInfo != null)
{
ProdPlanDetail planDetail = _prodPlanDetailService.GetPlanDetailsByPlanCode(pLanInfo.PlanCode);
PlanCodeText = planDetail.PlanCode;
OrderCodeText = pLanInfo.OrderCode;
MaterialCodeText = planDetail.MaterialCode;
StationCodeText = pLanInfo.StationCode;
System.Windows.Application.Current.Dispatcher.Invoke((Action)(async () =>
{
ProdPLanDetailDataGrid.Clear();
ProdPLanDetailDataGrid.Add(planDetail);
}));
}
}
/// <summary>
/// 显示班组成员
/// </summary>
/// <param name="baseStaffInfo"></param>
private void ShowTeamMember(BaseStaffInfo baseStaffInfo)
{
if(baseStaffInfo != null)
{
TeamMember = _RfidHandleBusniess.SpliceTeamMember(baseStaffInfo);
}
}
#region
/// <summary>
/// 班组成员
/// </summary>
private string teamMember;
public string TeamMember
{
get { return teamMember; }
set { teamMember = value; OnPropertyChanged("TeamMember"); }
}
/// <summary>
/// 订单
/// </summary>
private string orderCodeTextBox;
public string OrderCodeTextBox
{
get { return orderCodeTextBox; }
set { orderCodeTextBox = value; OnPropertyChanged("OrderCodeTextBox"); }
}
/// <summary>
/// 工单
/// </summary>
private string planCodeTextBox;
public string PlanCodeTextBox
{
get { return planCodeTextBox; }
set { planCodeTextBox = value; OnPropertyChanged("PlanCodeTextBox"); }
}
/// <summary>
/// 原料
/// </summary>
private string materialCodeTextBox;
public string MaterialCodeTextBox
{
get { return materialCodeTextBox; }
set { materialCodeTextBox = value; OnPropertyChanged("MaterialNameTextBox"); }
}
/// <summary>
/// 工位
/// </summary>
private string stationTextBlock;
public string StationTextBox
{
get { return stationTextBlock; }
set { stationTextBlock = value; new PropertyChangedEventArgs(nameof(StationTextBox)); }
}
/// <summary>
/// PlanDataGrid
/// </summary>
private ObservableCollection<ProdPLanInfo> prodPLanInfoDataGrid = new ObservableCollection<ProdPLanInfo>();
public ObservableCollection<ProdPLanInfo> ProdPLanInfoDataGrid
{
get { return prodPLanInfoDataGrid; }
set { prodPLanInfoDataGrid = value; OnPropertyChanged("ProdPLanInfoDataGrid"); }
}
/// <summary>
/// DetailDataGrid
/// </summary>
private ObservableCollection<ProdPlanDetail> prodPLanDetailDataGrid = new ObservableCollection<ProdPlanDetail>();
public ObservableCollection<ProdPlanDetail> ProdPLanDetailDataGrid
{
get { return prodPLanDetailDataGrid; }
set { ProdPLanDetailDataGrid = value; OnPropertyChanged("ProdPLanDetailDataGrid"); }
}
/// <summary>
/// 选中行
/// </summary>
public ProdPLanInfo _selectedRow;
public ProdPLanInfo SelectedRow
{
get { return _selectedRow; }
set
{
_selectedRow = value; OnPropertyChanged(nameof(SelectedRow));
}
}
/// <summary>
/// 订单Text
/// </summary>
private string orderCodeText;
public string OrderCodeText
{
get { return orderCodeText; }
set { orderCodeText = value; OnPropertyChanged("OrderCodeText"); }
}
/// <summary>
/// 工单Text
/// </summary>
private string planCodeText;
public string PlanCodeText
{
get { return planCodeText; }
set { planCodeText = value; OnPropertyChanged("PlanCodeText"); }
}
/// <summary>
/// 原料Text
/// </summary>
private string materialCodeText;
public string MaterialCodeText
{
get { return materialCodeText; }
set { materialCodeText = value; OnPropertyChanged("MaterialCodeText"); }
}
/// <summary>
/// 订单
/// </summary>
private string stationCodeText;
public string StationCodeText
{
get { return stationCodeText; }
set { stationCodeText = value; OnPropertyChanged("StationCodeText"); }
}
#endregion
public void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}