DeviceManager/DeviceRepairAndOptimization/Pages/Plan/page_MaintenancePlan.cs
2024-06-11 01:33:11 +08:00

439 lines
17 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using DevExpress.XtraEditors;
using DevExpress.XtraSplashScreen;
using DeviceRepair.Models;
using DeviceRepair.Models.Enum;
using DeviceRepairAndOptimization.Biz;
using DeviceRepairAndOptimization.Common;
using DeviceRepairAndOptimization.Pages.Plan;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading;
using System.Windows.Forms;
namespace DeviceRepairAndOptimization.Pages
{
public partial class page_MaintenancePlan : FormBase
{
public List<AnnualMaintenancePlan> Datas { get; set; }
AnnualMaintenancePlan CurrentModel;
#region
public page_MaintenancePlan()
{
InitializeComponent();
gridView1.RowCellStyle += GridView1_RowCellStyle;
}
/// <summary>
/// 单元格变色
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void GridView1_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e)
{
DevExpress.XtraGrid.Views.Grid.GridView view = sender as DevExpress.XtraGrid.Views.Grid.GridView;
if (e.RowHandle >= 0)
{
string fileName = e.Column.FieldName + "Status";
AnnualMaintenancePlan item = view.GetRow(e.RowHandle) as AnnualMaintenancePlan;
if (item.GetType().GetProperty(fileName) == null)
return;
EnumPlanCompleteStatus value = (EnumPlanCompleteStatus)item.GetType().GetProperty(fileName).GetValue(item, null);
switch (value)
{
case EnumPlanCompleteStatus.None:
break;
case EnumPlanCompleteStatus.TimeOut:
e.Appearance.BackColor = Color.FromArgb(255, 126, 126);
break;
case EnumPlanCompleteStatus.Complete:
e.Appearance.BackColor = Color.FromArgb(192, 255, 192);
break;
case EnumPlanCompleteStatus.Current:
e.Appearance.BackColor = Color.FromArgb(255, 255, 129);
break;
case EnumPlanCompleteStatus.Future:
break;
default:
break;
}
}
}
#endregion
#region
/// <summary>
/// 初始化加载数据
/// </summary>
public void InitializeGridData()
{
// 获取维修数据
Datas = PlanManager.Instance.GetDatas();
int Years = EditYear.Text.IsNullOrWhiteSpace() ? DateTime.Today.Year : Convert.ToInt32(EditYear.Text);
// 如果搜索框为空,则将数据源设置为当前年份的维修数据
if (EditSearch.Text.IsNullOrWhiteSpace())
{
gridControl.DataSource = Datas.Where(x => x.MaintenanceYear == Years)?.ToList();
}
// 否则将数据源设置为当前年份的维修数据并且设备ID或名称包含搜索框的内容
else
{
gridControl.DataSource = Datas.Where(x => x.MaintenanceYear == Years && (x.DisplayEquipmentID == EditSearch.Text || x.EquipmentName.Contains(EditSearch.Text)))?.ToList();
}
// 绑定行点击事件
gridView1.RowCellClick += GridView1_RowCellClick;
}
private void GridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
CurrentModel = gridView1.GetRow(e.RowHandle) as AnnualMaintenancePlan;
contextMenuStrip1.Show(gridControl, e.Location);
return;
}
}
#endregion
#region
private void page_MaintenancePlan_Load(object sender, EventArgs e)
{
try
{
splashScreenManager1.ShowWaitForm();
// 关闭列头右键菜单
gridView1.OptionsMenu.EnableColumnMenu = false;
//this.tb_pnl_Content.RowStyles[0].Height = 45f;
this.EditSearch.Height = 31;
EditYear.ToYearStyle();
this.EditYear.Properties.NullValuePrompt = DateTime.Today.Year + "";
//btn_Import.Size = new Size(44, 44);
//btn_Import.Location = new Point(btn_Import.Location.X, 0);
//btn_Export.Size = new Size(44, 44);
//btn_Export.Location = new Point(btn_Export.Location.X, 0);
//lb_Caption.Size = new Size(lb_Caption.Width, 44);
//lb_Caption.Location = new Point(lb_Caption.Location.X, 0);
InitializeGridData();
splashScreenManager1.TryCloseWait();
}
catch (Exception ex)
{
splashScreenManager1.TryCloseWait();
XtraMessageBoxHelper.Error(ex.Message);
}
}
/// <summary>
/// 导入
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_Import_Click(object sender, EventArgs e)
{
try
{
// 判断当前账号是否具有此操作的权限
if (!GlobalInfo.HasRole("BIZ_PLAN_IMPORT"))
{
XtraMessageBoxHelper.Error($"当前账号缺少此操作的权限");
return;
}
// 打开对话框
using (page_PlanExcelImport dia = new page_PlanExcelImport())
{
if (dia.ShowDialog() == DialogResult.OK)
{
// 初始化表格数据
Invoke(new Action(() => { InitializeGridData(); }));
XtraMessageBoxHelper.Info("操作成功!");
}
}
}
// 捕获异常
catch (Exception ex)
{
// 初始化表格数据
Invoke(new Action(() => { InitializeGridData(); }));
XtraMessageBoxHelper.Error(ex.Message);
}
}
/// <summary>
/// 导出
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_Export_Click(object sender, EventArgs e)
{
try
{
if (!GlobalInfo.HasRole("BIZ_PLAN_EXPORT"))
{
XtraMessageBoxHelper.Error($"当前账号缺少此操作的权限");
return;
}
FolderBrowserDialog dlg = new FolderBrowserDialog();
if (dlg.ShowDialog() == DialogResult.OK)
{
string path = dlg.SelectedPath.ToString();
SplashScreenManager.ShowDefaultWaitForm("数据加载...");
try
{
int Years = EditYear.Text.IsNullOrWhiteSpace() ? DateTime.Today.Year : Convert.ToInt32(EditYear.Text);
List<View_YearsMaintenancePlansExport> lst = PlanManager.Instance.ExportXlsxDatas(Years);
if (lst == null)
{
XtraMessageBox.Show("数据为空,无法导出。", "出错");
return;
}
SplashScreenManager.Default.SetWaitFormCaption("数据加载成功");
Thread.Sleep(300);
SplashScreenManager.Default.SetWaitFormCaption("Excel生成中");
IWorkbook workbook = new XSSFWorkbook();
ISheet sheet = workbook.CreateSheet($"{Years}年度OEM设备PM计划");
SplashScreenManager.Default.SetWaitFormCaption("创建Sheet表头");
// 创建表头
IRow headerRow = sheet.CreateRow(0);
PropertyInfo[] properties = typeof(View_YearsMaintenancePlansExport).GetProperties();
for (int i = 0; i < properties.Length; i++)
{
ICell cell = headerRow.CreateCell(i);
DisplayNameAttribute[] attrs =
(DisplayNameAttribute[])properties[i]
.GetCustomAttributes(typeof(DisplayNameAttribute), true);
cell.SetCellValue(attrs[0].DisplayName);
}
SplashScreenManager.Default.SetWaitFormCaption("Sheet数据填充");
// 填充数据
for (int rowIndex = 0; rowIndex < lst.Count; rowIndex++)
{
IRow dataRow = sheet.CreateRow(rowIndex + 1);
for (int colIndex = 0; colIndex < properties.Length; colIndex++)
{
ICell cell = dataRow.CreateCell(colIndex);
object value = properties[colIndex].GetValue(lst[rowIndex]);
cell.SetCellValue(value + "");
}
}
SplashScreenManager.Default.SetWaitFormCaption("正在保存");
using (FileStream fs =
new FileStream(
Path.Combine(path,
$"{Years}年度OEM设备PM计划-{DateTime.Now.ToString("yyyyMMddhhmmssfff")}.xlsx"),
FileMode.Create, FileAccess.Write))
{
workbook.Write(fs);
SplashScreenManager.Default.SetWaitFormCaption("保存成功");
SplashScreenManager.CloseDefaultWaitForm();
}
}
catch (Exception ex)
{
XtraMessageBox.Show(ex.Message, "出错");
}
}
}
catch (Exception ex)
{
SplashScreenManager.CloseDefaultWaitForm();
XtraMessageBox.Show(ex.Message, "出错");
}
}
/// <summary>
/// 搜索查询
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void EditSearch_TextChanged(object sender, EventArgs e)
{
//int Years = EditYear.Text.IsNullOrWhiteSpace() ? DateTime.Today.Year : Convert.ToInt32(EditYear.Text);
//gridControl.DataSource = Datas.Where(x => x.MaintenanceYear == Years &&
// (x.DisplayEquipmentID.Contains(EditSearch.Text) ||
// x.EquipmentName.Contains(EditSearch.Text) ||
// x.Remarks.Contains(EditSearch.Text)))?.ToList();
}
private void EditYear_EditValueChanged(object sender, EventArgs e)
{
int Years = EditYear.Text.IsNullOrWhiteSpace() ? DateTime.Today.Year : Convert.ToInt32(EditYear.Text);
gridControl.DataSource = Datas.Where(x => x.MaintenanceYear == Years)?.ToList();
}
/// <summary>
/// 修改
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_Edit_Click(object sender, EventArgs e)
{
try
{
if (!GlobalInfo.HasRole("BIZ_PLAN_EDIT"))
{
throw new Exception($"当前账号缺少此操作的权限");
}
AnnualMaintenancePlan model = (AnnualMaintenancePlan)gridView1.GetFocusedRow();
if (model == null)
{
throw new Exception("请先选择要编辑的行!");
}
if (new page_PlanEdit(model).ShowDialog() == DialogResult.OK)
{
XtraMessageBox.Show("操作成功!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
InitializeGridData();
}
catch (Exception ex)
{
InitializeGridData();
XtraMessageBoxHelper.Error(ex.Message);
}
}
/// <summary>
/// 新增
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_add_Click(object sender, EventArgs e)
{
try
{
if (!GlobalInfo.HasRole("BIZ_PLAN_ADD"))
{
throw new Exception($"当前账号缺少此操作的权限");
}
int Years = EditYear.Text.IsNullOrWhiteSpace() ? DateTime.Today.Year : Convert.ToInt32(EditYear.Text);
if (new page_PlanEdit(new AnnualMaintenancePlan { MaintenanceYear = Years }).ShowDialog() == DialogResult.OK)
{
XtraMessageBox.Show("操作成功!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
InitializeGridData();
}
}
catch (Exception ex)
{
InitializeGridData();
XtraMessageBoxHelper.Error(ex.Message);
}
}
private void btn_delete_Click(object sender, EventArgs e)
{
try
{
if (!GlobalInfo.HasRole("BIZ_PLAN_DELETE"))
{
XtraMessageBoxHelper.Error($"当前账号缺少此操作的权限");
return;
}
AnnualMaintenancePlan model = (AnnualMaintenancePlan)gridView1.GetFocusedRow();
if (model == null)
{
XtraMessageBoxHelper.Error("请先选择要删除的行!");
return;
}
if (XtraMessageBox.Show("确认删除该条数据?", "信息", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
SplashScreenManager.ShowDefaultWaitForm("提交中", "请稍等...");
APIResponseData apiResponseData = PlanManager.Instance.GetPlanRecordProgress(model.EquipmentID, model.MaintenanceYear);
if (apiResponseData.IsSuccess)
{
List<PlanProgress> progress = apiResponseData.ToDeserializeObject<List<PlanProgress>>();
if (progress != null && progress.Count > 0)
{
throw new Exception("当前计划下存在保养数据,无法删除。");
}
}
if (PlanManager.Instance.DeleteByYearAndEquipmentPk(model.MaintenanceYear, model.EquipmentID).Code > 0)
{
SplashScreenManager.Default.SetWaitFormCaption("操作成功!");
}
else
{
SplashScreenManager.Default.SetWaitFormCaption("操作失败,请重试!");
}
InitializeGridData();
// 关闭等待窗口
SplashScreenManager.CloseDefaultWaitForm();
}
}
catch (Exception ex)
{
InitializeGridData();
// 关闭等待窗口
SplashScreenManager.CloseDefaultWaitForm();
XtraMessageBoxHelper.Error(ex.Message);
}
}
private void btn_Filter_Click(object sender, EventArgs e)
{
InitializeGridData();
}
#endregion
/// <summary>
/// 设备年度计划详情
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
try
{
if (CurrentModel == null)
throw new Exception("请选中要操作的设备数据行!");
(new pageDevicePlans(CurrentModel.EquipmentID, CurrentModel.MaintenanceYear)).ShowDialog();
}
catch (Exception ex)
{
XtraMessageBoxHelper.Error(ex.Message);
}
}
}
}