439 lines
17 KiB
C#
439 lines
17 KiB
C#
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);
|
||
}
|
||
}
|
||
}
|
||
} |