diff --git a/SlnMesnac.Business/business/DatabaseHandleBusniess.cs b/SlnMesnac.Business/business/DatabaseHandleBusniess.cs
index b4d71ea..3e0c41e 100644
--- a/SlnMesnac.Business/business/DatabaseHandleBusniess.cs
+++ b/SlnMesnac.Business/business/DatabaseHandleBusniess.cs
@@ -190,6 +190,15 @@ namespace SlnMesnac.Business.business
return monitorInfo;
}
+ ///
+ /// 获取最后一条明细的结束时间
+ ///
+ public ProdPlanDetail GetLastDetailEndTime(string planCode)
+ {
+ ProdPlanDetail prodPlanDetail = new ProdPlanDetail();
+ prodPlanDetail = _prodPlanDetailService.GetLastPlanDetailByPlanCode(planCode);
+ return prodPlanDetail;
+ }
/////
///// 设置员工下班时间
/////
diff --git a/SlnMesnac.Repository/service/Impl/ProdPlanDetailServiceImpl.cs b/SlnMesnac.Repository/service/Impl/ProdPlanDetailServiceImpl.cs
index adafd0a..99d3d9e 100644
--- a/SlnMesnac.Repository/service/Impl/ProdPlanDetailServiceImpl.cs
+++ b/SlnMesnac.Repository/service/Impl/ProdPlanDetailServiceImpl.cs
@@ -49,18 +49,42 @@ namespace SlnMesnac.Repository.service.Impl
public List GetPlanDetailsByPlanCode(string planCode)
{
- List prodPlanDetails = _rep.AsQueryable().WhereIF(!string.IsNullOrEmpty(planCode),x=>x.PlanCode == planCode).OrderByDescending(x => x.ObjId).ToList();
+ List prodPlanDetails = new List();
+ try
+ {
+ prodPlanDetails = _rep.AsQueryable().WhereIF(!string.IsNullOrEmpty(planCode), x => x.PlanCode == planCode).OrderByDescending(x => x.ObjId).ToList();
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError($"查询对应计划的所有明细异常:{ex.Message}");
+ throw;
+ }
return prodPlanDetails;
}
+ public ProdPlanDetail GetLastPlanDetailByPlanCode(string planCode)
+ {
+ ProdPlanDetail prodPlanDetail = new ProdPlanDetail();
+ try
+ {
+ prodPlanDetail = _rep.AsQueryable().WhereIF(!string.IsNullOrEmpty(planCode), x => x.PlanCode == planCode).OrderByDescending(x => x.EndTime).First();
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError($"查询对应计划的最新一条明细异常:{ex.Message}");
+ throw;
+ }
+ return prodPlanDetail;
+ }
+
public bool DeleteByPlanCodeBatchNumber(string planCode, int number)
{
bool result = false;
try
{
//_rep.AsQueryable().WhereIF(!string.IsNullOrEmpty(planCode), x => x.PlanCode == planCode && x.BatchNumber == number).OrderByDescending(x => x.ObjId).First();
- ProdPlanDetail temp = _rep.AsQueryable().Where(x => x.PlanCode == planCode && x.BatchNumber == number).OrderByDescending(x => x.ObjId).First();
- result = _rep.Delete(temp);
+ List tempList = _rep.AsQueryable().Where(x => x.PlanCode == planCode && x.BatchNumber == number).OrderByDescending(x => x.ObjId).ToList();
+ result = _rep.Delete(tempList);
}
catch (Exception ex)
{
diff --git a/SlnMesnac.Repository/service/ProdPlanDetailService.cs b/SlnMesnac.Repository/service/ProdPlanDetailService.cs
index 4ece434..f4fc1de 100644
--- a/SlnMesnac.Repository/service/ProdPlanDetailService.cs
+++ b/SlnMesnac.Repository/service/ProdPlanDetailService.cs
@@ -29,6 +29,13 @@ namespace SlnMesnac.Repository.service
///
List GetPlanDetailsByPlanCode(string planCode);
+ ///
+ /// 根据计划编号查询最新的一条明细
+ ///
+ ///
+ ///
+ ProdPlanDetail GetLastPlanDetailByPlanCode(string planCode);
+
///
/// 根据工单号删除锅数为0的明细
///
diff --git a/SlnMesnac.WPF/UserControls/EmployeeLoginPage.xaml b/SlnMesnac.WPF/UserControls/EmployeeLoginPage.xaml
index 9cc2138..9c54d10 100644
--- a/SlnMesnac.WPF/UserControls/EmployeeLoginPage.xaml
+++ b/SlnMesnac.WPF/UserControls/EmployeeLoginPage.xaml
@@ -157,7 +157,7 @@
RowHeight="35" AutoGenerateColumns="False" RowHeaderWidth="0"
GridLinesVisibility="None" ScrollViewer.HorizontalScrollBarVisibility="Hidden"
BorderThickness="0" CanUserAddRows="False"
- Foreground="#FFFFFF" SelectedItem="{Binding SelectedDataItem}">
+ Foreground="#FFFFFF" >
diff --git a/SlnMesnac.WPF/UserControls/ExecutePage.xaml b/SlnMesnac.WPF/UserControls/ExecutePage.xaml
index 781ec23..5ec983e 100644
--- a/SlnMesnac.WPF/UserControls/ExecutePage.xaml
+++ b/SlnMesnac.WPF/UserControls/ExecutePage.xaml
@@ -338,11 +338,11 @@
-
diff --git a/SlnMesnac.WPF/ViewModel/ExecuteViewModel.cs b/SlnMesnac.WPF/ViewModel/ExecuteViewModel.cs
index 1977c01..6c2331a 100644
--- a/SlnMesnac.WPF/ViewModel/ExecuteViewModel.cs
+++ b/SlnMesnac.WPF/ViewModel/ExecuteViewModel.cs
@@ -38,6 +38,7 @@ namespace SlnMesnac.WPF.ViewModel
private RfidHandleBusniess _RfidHandleBusniess;
private DatabaseHandleBusniess _databaseHandleBusniess;
private ProdPlanInfoService _prodPlanInfoService;
+ private ProdOrderInfoService _prodOrderInfoService;
private List prodPlanInfos;
private ProdPlanDetailService _prodPlanDetailService;
private IRecordStaffAttendanceService _recordStaffAttendanceService;
@@ -48,7 +49,7 @@ namespace SlnMesnac.WPF.ViewModel
private string ProcessCode;
public static bool isComplete = true;
public static string theStartTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");//记录每个明细的开始时间
- public static string intervalvalTime = "2023-11-11 00:00:00";
+ //public static string intervalvalTime = "2023-11-11 00:00:00";
public static int stations = 0;
private string theOrderCode = "";
private ProdPLanInfo pLanInfo;
@@ -57,6 +58,7 @@ namespace SlnMesnac.WPF.ViewModel
private string executeText = "待执行";
private int isSearch = 0;
public static string lastReportTime;
+ private int refreshOrNot = 1;//是否刷新
//public static string batchNums = "";//批次
#region 定义命令
@@ -95,6 +97,8 @@ namespace SlnMesnac.WPF.ViewModel
public delegate void RefreshDelegate(ProdPLanInfo pLanInfo);
public static event RefreshDelegate? RefreshEvent;
+ public static Action ClearOrderCodeAction;
+
///
/// 按钮文字转换事件
///
@@ -139,9 +143,16 @@ namespace SlnMesnac.WPF.ViewModel
public string MaterialCodeTextBox
{
get { return materialCodeTextBox; }
- set { materialCodeTextBox = value; OnPropertyChanged("MaterialNameTextBox"); }
+ set { materialCodeTextBox = value; OnPropertyChanged("MaterialCodeTextBox"); }
}
+ //private string materialNameTextBox;
+ //public string MaterialNameTextBox
+ //{
+ // get { return materialNameTextBox; }
+ // set { materialNameTextBox = value; OnPropertyChanged("MaterialNameTextBox"); }
+ //}
+
///
/// 工位
///
@@ -201,7 +212,7 @@ namespace SlnMesnac.WPF.ViewModel
///
/// 订单Text
///
- private string orderCodeText;
+ private string orderCodeText = string.Empty;
public string OrderCodeText
{
get { return orderCodeText; }
@@ -271,8 +282,10 @@ namespace SlnMesnac.WPF.ViewModel
public ExecuteViewModel()
{
+
_logger = App.ServiceProvider.GetService>();
_prodPlanInfoService = App.ServiceProvider.GetService();
+ _prodOrderInfoService = App.ServiceProvider.GetService();
_prodPlanDetailService = App.ServiceProvider.GetService();
_recordStaffAttendanceService = App.ServiceProvider.GetService();
_recordStaffRealTimeService = App.ServiceProvider.GetService();
@@ -299,6 +312,12 @@ namespace SlnMesnac.WPF.ViewModel
{
updateStationName(stationName);
};
+ ProductionReportViewModel.RefrashClearAction += num =>
+ {
+ refreshOrNot = num;
+ Clear();
+ }
+ ;
DeviceCode = configuration.GetSection("AppConfig")["DeviceCode"];
ProcessCode = configuration.GetSection("AppConfig")["ProcessCode"];
HandoverCommand = new RelayCommand(Handover);
@@ -368,7 +387,6 @@ namespace SlnMesnac.WPF.ViewModel
StationTextBox = EmployeeLoginViewModel.stationName;
}
-
///
/// 换班弹窗
///
@@ -396,7 +414,11 @@ namespace SlnMesnac.WPF.ViewModel
reportWin.WindowStartupLocation = WindowStartupLocation.CenterScreen; // 让窗体出现在屏幕中央
reportWin.ShowDialog();//窗体出现后禁止后面的用户控件
Search();
- Refresh(pLanInfo);
+ if (refreshOrNot == 1)
+ {
+ Refresh(pLanInfo);
+ }
+ refreshOrNot = 1;
ShowTeamMember();
if (stations >= 3)
{
@@ -468,42 +490,46 @@ namespace SlnMesnac.WPF.ViewModel
///
private void HandleOrderCode(string orderCode)
{
- theOrderCode = orderCode;
if (isComplete)
{
- if (isSearch == 1)
+ var order = _prodOrderInfoService.GetProdOrderInfoByOrderCode(orderCode);
+ if (order != null)
{
- //更新当前工单状态
- _databaseHandleBusniess.UpdateOrderInfoStatus(orderCode,"1");
- //判断当前工位的工单编号是否存在
- var plan = _prodPlanInfoService.GetProdPLanInfoByOrderCode(RfidHandleBusniess.stationCode, orderCode);
- if (plan == null)//不存在,就在生产工单表中新增一条当前工位的订单,且执行状态改为4,重新检索,并高亮这条工单,执行按钮可用
+ if (isSearch == 1)
{
- foreach(var item in RfidHandleBusniess.stationList)
+ ClearOrderCodeAction?.Invoke();
+ //更新当前工单状态
+ _databaseHandleBusniess.UpdateOrderInfoStatus(order.OrderCode, "1");
+ //判断当前工位的工单编号是否存在
+ var plan = _prodPlanInfoService.GetProdPLanInfoByOrderCode(RfidHandleBusniess.stationCode, order.OrderCode);
+ if (plan == null)//不存在,就在生产工单表中新增一条当前工位的订单,且执行状态改为4,重新检索,并高亮这条工单,执行按钮可用
{
- //现扫描一个订单码,同时插入三张(出布包胶成型)工单表
- _databaseHandleBusniess.AddNewPlanInfo(orderCode, item , DeviceCode, ProcessCode, "0");
- }
- }
- else//存在,将本条数据的执行状态改为4高亮这条工单,执行按钮可用
- {
- //判断这条工单状态是否为待执行或未执行
- //var info = _databaseHandleBusniess.SelectPlanStatus(orderCode, RfidHandleBusniess.stationCode, DeviceCode, ProcessCode, "0");
- if (plan.PlanStatus != "2")
- {
- _databaseHandleBusniess.UpdatePlanStatus(orderCode, RfidHandleBusniess.stationCode, DeviceCode, ProcessCode, "4");
+ foreach (var item in RfidHandleBusniess.stationList)
+ {
+ //现扫描一个订单码,同时插入三张(出布包胶成型)工单表
+ _databaseHandleBusniess.AddNewPlanInfo(order.OrderCode, item, DeviceCode, ProcessCode, "0");
+ }
}
- else
+ else//存在,将本条数据的执行状态改为4高亮这条工单,执行按钮可用
{
- MessageBox.Show("此工单已完成");
+ //判断这条工单状态是否为待执行或未执行
+ //var info = _databaseHandleBusniess.SelectPlanStatus(orderCode, RfidHandleBusniess.stationCode, DeviceCode, ProcessCode, "0");
+ if (plan.PlanStatus != "2")
+ {
+ _databaseHandleBusniess.UpdatePlanStatus(order.OrderCode, RfidHandleBusniess.stationCode, DeviceCode, ProcessCode, "4");
+ }
+ else
+ {
+ MessageBox.Show("此工单已完成");
+ }
}
+ Search();
}
- Search();
}
- //else
- //{
- // MessageBox.Show("请先检索工单!");
- //}
+ else
+ {
+ MessageBox.Show("此订单不存在,请联系管理员!");
+ }
}
else
{
@@ -524,6 +550,9 @@ namespace SlnMesnac.WPF.ViewModel
{
try
{
+
+ var Info = OrderCodeText.GetHashCode();
+
// 将当前记录存为实体,可以通过parameter获取当前记录的信息
string orderCode = _selectedRow.OrderCode.ToString();
string planCode = _selectedRow.PlanCode.ToString();
@@ -605,6 +634,18 @@ namespace SlnMesnac.WPF.ViewModel
//}
}
+ ///
+ /// 清空右边信息和明细
+ ///
+ private void Clear()
+ {
+ PlanCodeText = "";
+ OrderCodeText = "";
+ MaterialNameText = "";
+ ProdPLanDetailDataGrid.Clear();
+
+ }
+
///
/// 显示班组成员
///
diff --git a/SlnMesnac.WPF/ViewModel/MainWindowViewModel.cs b/SlnMesnac.WPF/ViewModel/MainWindowViewModel.cs
index 080e0eb..5a46793 100644
--- a/SlnMesnac.WPF/ViewModel/MainWindowViewModel.cs
+++ b/SlnMesnac.WPF/ViewModel/MainWindowViewModel.cs
@@ -173,6 +173,7 @@ namespace SlnMesnac.WPF.ViewModel
{
info = OrderCodeText;
};
+ ExecuteViewModel.ClearOrderCodeAction += ClearOrderCode;
}
///
@@ -209,6 +210,14 @@ namespace SlnMesnac.WPF.ViewModel
}
#endregion
+ ///
+ /// 清空订单编码
+ ///
+ private void ClearOrderCode()
+ {
+ OrderCodeText = "";
+ }
+
///
/// 窗体控制
///
diff --git a/SlnMesnac.WPF/ViewModel/ProductionReportViewModel.cs b/SlnMesnac.WPF/ViewModel/ProductionReportViewModel.cs
index fae8d10..cbe5fb8 100644
--- a/SlnMesnac.WPF/ViewModel/ProductionReportViewModel.cs
+++ b/SlnMesnac.WPF/ViewModel/ProductionReportViewModel.cs
@@ -29,6 +29,7 @@ namespace SlnMesnac.WPF.ViewModel
private double newAmountDouble;
private double result;
+
#region
///
/// 按钮文字转换事件
@@ -38,6 +39,8 @@ namespace SlnMesnac.WPF.ViewModel
//刷新委托
public delegate void RefreshDelegate(ProdPLanInfo pLanInfo);
public static event RefreshDelegate RefreshDelegateEvent;
+
+ public static Action? RefrashClearAction;
#endregion
public ProductionReportViewModel()
@@ -60,7 +63,7 @@ namespace SlnMesnac.WPF.ViewModel
private void Init()
{
- planInfo = _prodPlanInfoService.GetRecordStaffAttendancesByConditions("", "", "", RfidHandleBusniess.stationCode, "1").FirstOrDefault();
+ planInfo = _prodPlanInfoService.GetPlanInfoByConditions("", "", "", RfidHandleBusniess.stationCode, "1").FirstOrDefault();
if (planInfo != null)
{
complateRate = GetComplateRate(Convert.ToDouble(planInfo.CompleteAmount), planInfo.PlanAmount);
@@ -158,90 +161,88 @@ namespace SlnMesnac.WPF.ViewModel
///
private void Confirm()
{
- DateTime startTime = DateTime.Parse(ExecuteViewModel.intervalvalTime);
- if ((DateTime.Now - startTime).TotalMinutes > 15)
+ // 获取最新工单明细的结束时间
+ var detail = _databaseHandleBusniess.GetLastDetailEndTime(planInfo.PlanCode);
+
+ // 如果最新工单明细没有结束时间,跳过时间判断
+ if (!string.IsNullOrEmpty(detail.EndTime))
{
- if (EmployeeLoginViewModel.isOnDuty == true)//是否有班组当班,无当班时操作无效
+ DateTime startTime = DateTime.Parse(detail.EndTime);
+ if ((DateTime.Now - startTime).TotalMinutes <= 15)
{
- var monitor = _databaseHandleBusniess.GetMonitor(RfidHandleBusniess.stationCode);
- if (monitor != null)
- {
- string newAmount = NewAmountText;
- RfidHandleBusniess.theNewAmount = NewAmountText;
- if (newAmount != "")
- {
- bool isNum = true;
- foreach (char x in newAmount)
- {
- if (!char.IsNumber(x) && x != '.')
- {
- isNum = false;
- }
- }
- if (isNum)
- {
- HintText = "请撤回最新工单明细!";
- //将新增产量加到实际产量中
- currentAmountDouble = Convert.ToDouble(planInfo.CompleteAmount);
- newAmountDouble = Convert.ToDouble(newAmount);
- result = currentAmountDouble + newAmountDouble;
- //planDetail = new ProdPlanDetail();
- planDetail.CurrentStaffId = monitor.staffId;//取班长ID
- planDetail.CreatedBy = monitor.staffName;//存班长名
- planDetail.CompleteAmount = newAmountDouble.ToString();
- planInfo.CompleteAmount = result.ToString();
- if (planDetail.EndTime == null)//第一条明细
- {
- planDetail.BeginTime = ExecuteViewModel.theStartTime;
- }
- else
- {
- planDetail.BeginTime = planDetail.EndTime;
- }
- planDetail.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
- ExecuteViewModel.intervalvalTime = planDetail.EndTime;
- planDetail.BatchNumber += 1;
- //ExecuteViewModel.batchNums = planDetail.BatchNumber.ToString();
- //保存工单的执行人员
- List realTimes = _databaseHandleBusniess.GetRecordStaffRealTimes();
- _prodPlanDetailService.Insert(planDetail);
- _prodPlanInfoService.Update(planInfo);
- _databaseHandleBusniess.InsertPlanExecuteUser(planInfo, planDetail, realTimes);
- Refresh();
- HintText = "已提交!";
- RefreshDelegateEvent?.Invoke(planInfo);
- //ExecuteViewModel.isComplete = true;
- complateRate = GetComplateRate(result, PlanAmountText);
- if (complateRate > 0.9)
- {
- EndButtonColor = "#FF11B514";
- }
- }
- else
- {
- //提示框提示错误信息
- HintText = "输入有误,请输入阿拉伯数字!";
- }
- }
- else
- {
- HintText = "不能为空!";
- }
- }
- else
- {
- HintText = "班长未打卡,无法执行此操作!";
- }
- }
- else
- {
- HintText = "没有班组当班,无法执行此操作!";
+ HintText = "当前工单距离上次提交不足15分钟!";
+ return;
}
}
- else
+
+ // 如果没有班组当班,直接返回
+ if (!EmployeeLoginViewModel.isOnDuty)
{
- HintText = "当前工单距离上次提交不足15分钟!";
+ HintText = "没有班组当班,无法执行此操作!";
+ return;
}
+
+ // 获取班组长信息
+ var monitor = _databaseHandleBusniess.GetMonitor(RfidHandleBusniess.stationCode);
+ if (monitor == null)
+ {
+ HintText = "班长未打卡,无法执行此操作!";
+ return;
+ }
+
+ // 获取新输入的产量
+ string newAmount = NewAmountText?.Trim();
+ if (string.IsNullOrEmpty(newAmount))
+ {
+ HintText = "不能为空!";
+ return;
+ }
+
+ // 验证输入的产量是否为数字
+ if (!IsNumeric(newAmount))
+ {
+ HintText = "输入有误,请输入阿拉伯数字!";
+ return;
+ }
+
+ // 更新计划信息
+ RfidHandleBusniess.theNewAmount = newAmount;
+ double currentAmountDouble = Convert.ToDouble(planInfo.CompleteAmount);
+ double newAmountDouble = Convert.ToDouble(newAmount);
+ double result = currentAmountDouble + newAmountDouble;
+
+ // 设置工单明细
+ planDetail.CurrentStaffId = monitor.staffId; // 班长ID
+ planDetail.CreatedBy = monitor.staffName; // 班长名称
+ planDetail.CompleteAmount = newAmountDouble.ToString();
+ planInfo.CompleteAmount = result.ToString();
+ planDetail.BeginTime = planDetail.EndTime ?? ExecuteViewModel.theStartTime;
+ planDetail.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+ planDetail.BatchNumber += 1;
+
+ // 保存数据
+ var realTimes = _databaseHandleBusniess.GetRecordStaffRealTimes();
+ _prodPlanDetailService.Insert(planDetail);
+ _prodPlanInfoService.Update(planInfo);
+ _databaseHandleBusniess.InsertPlanExecuteUser(planInfo, planDetail, realTimes);
+
+ // 刷新并更新UI
+ Refresh();
+ HintText = "已提交!";
+ RefreshDelegateEvent?.Invoke(planInfo);
+
+ // 更新完成率
+ complateRate = GetComplateRate(result, PlanAmountText);
+ if (complateRate > 0.9)
+ {
+ EndButtonColor = "#FF11B514";
+ }
+ }
+
+ // 检查字符串是否为有效数字
+ private bool IsNumeric(string value)
+ {
+ return value.All(c => char.IsDigit(c) || c == '.');
}
///
@@ -250,45 +251,53 @@ namespace SlnMesnac.WPF.ViewModel
public ICommand EndPlanCommand { get; private set; }
private void EndPlan()
{
- //判断工单实际产量与目标产量的差距,满足才能执行结束
+ // 判断工单实际产量与目标产量的差距,满足才能执行结束
if (complateRate > 0.9)
{
- if (EmployeeLoginViewModel.isOnDuty == true)//是否有班组当班,无当班时操作无效
+ if (EmployeeLoginViewModel.isOnDuty == true) // 是否有班组当班,无当班时操作无效
{
if (planDetail != null && planInfo != null)
{
- //planDetail.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+ // planDetail.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//_prodPlanDetailService.Insert(planDetail);
planInfo.PlanStatus = "2";
planInfo.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
double planAmountDouble = Convert.ToDouble(planInfo.PlanAmount);
double completeAmountDouble = Convert.ToDouble(planInfo.CompleteAmount);
+
ExecuteViewModel.isComplete = true;
- if (planAmountDouble == completeAmountDouble)
+
+ // 使用 switch-case 来处理完成情况
+ switch (planAmountDouble.CompareTo(completeAmountDouble))
{
- planInfo.CompFlag = "0";//正常完成
- }
- else if (planAmountDouble > completeAmountDouble)
- {
- planInfo.CompFlag = "1";//不足目标产量降级处理
- }
- else
- {
- planInfo.CompFlag = "2";//超额完成
+ case 0: // 完成量等于计划量
+ planInfo.CompFlag = "0"; // 正常完成
+ break;
+ case int n when (n > 0): // 完成量小于计划量
+ planInfo.CompFlag = "1"; // 不足目标产量降级处理
+ break;
+ case int n when (n < 0): // 完成量大于计划量
+ planInfo.CompFlag = "2"; // 超额完成
+ break;
}
+
_prodPlanInfoService.Update(planInfo);
ExecuteViewModel.stations += 1;
}
- //关闭窗口
+
+ // 关闭窗口
Application.Current.Windows.OfType().First().Close();
+ RefrashClearAction?.Invoke(0);
}
}
else
{
MessageBox.Show("完成产量与计划数量差距过大!");
- }
+ }
}
+
///
/// 继续执行
///
@@ -310,6 +319,7 @@ namespace SlnMesnac.WPF.ViewModel
ExecuteViewModel.isComplete = true;
//关闭窗口
Application.Current.Windows.OfType().First().Close();
+ RefrashClearAction?.Invoke(0);
}