using DeviceRepair.Models;
using DeviceRepair.Models.Enum;
using DeviceRepairAndOptimization.Biz.AM;
using DeviceRepairAndOptimization.Common;
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.Reflection;
using System.Windows.Forms;
namespace DeviceRepairAndOptimization.Pages.AM.Plan
{
public partial class pageAmMaintenancePlanView : FormBase
{
AnnualMaintenancePlan CurrentModel;
public int PlanYear
{
get
{
return teYear.DateTime.Year;
}
}
public string FilterText
{
get
{
return txtFilter.EditValue + "";
}
}
public pageAmMaintenancePlanView()
{
InitializeComponent();
// 关闭列头右键菜单
gridView1.OptionsMenu.EnableColumnMenu = false;
gridView1.OptionsBehavior.Editable = false;
gridView1.OptionsBehavior.ReadOnly = true;
gridView1.OptionsSelection.EnableAppearanceFocusedCell = false;
gridView1.OptionsScrollAnnotations.ShowSelectedRows = DevExpress.Utils.DefaultBoolean.False;
foreach (DevExpress.XtraGrid.Columns.GridColumn item in gridView1.Columns)
{
item.OptionsColumn.AllowEdit = false;
item.OptionsColumn.AllowGroup = DevExpress.Utils.DefaultBoolean.True;
item.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False;
item.OptionsColumn.AllowShowHide = false;
}
gridView1.CustomDrawRowIndicator += GridView1_CustomDrawRowIndicator;
}
private void pageAmMaintenancePlanView_Load(object sender, EventArgs e)
{
try
{
// 绑定行点击事件
gridView1.RowCellClick += GridView1_RowCellClick;
splashScreenManager1.ShowWaitForm();
GridDataInitialize();
splashScreenManager1.TryCloseWait();
}
catch (Exception ex)
{
splashScreenManager1.TryCloseWait();
XtraMessageBoxHelper.Error(ex.Message);
}
}
///
/// 自增长行号
///
///
///
private void GridView1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
{
if (e.Info.IsRowIndicator && e.RowHandle >= 0)
{
e.Info.DisplayText = (e.RowHandle + 1).ToString();
e.Appearance.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
e.Appearance.TextOptions.VAlignment = DevExpress.Utils.VertAlignment.Center;
}
}
void GridDataInitialize()
{
try
{
// 获取维修数据
APIResponseData apiResponseData = PlanManager.Instance.GetDatas(FilterText, PlanYear);
if (!apiResponseData.IsSuccess)
throw new Exception(apiResponseData.Message);
List Datas = apiResponseData.ToDeserializeObject>();
gridControl1.BeginUpdate();
gridControl1.DataSource = null;
gridControl1.DataSource = Datas;
gridControl1.EndUpdate();
// 设置行号列宽度
SizeF size = this.CreateGraphics().MeasureString(Datas.Count.ToString(), this.Font);
gridView1.IndicatorWidth = Convert.ToInt32(size.Width) + 30;
if (Datas != null && Datas.Count > 0)
GridView1_RowCellClick(this.gridView1, new DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs(new DevExpress.Utils.DXMouseEventArgs(MouseButtons.Left, 1, 1, 1, 1), 0, gcDisplayEquipmentID));
}
catch (Exception ex)
{
throw ex;
}
}
///
/// 单元格点击事件 - 显示右键菜单
///
///
///
private void GridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e)
{
CurrentModel = gridView1.GetRow(e.RowHandle) as AnnualMaintenancePlan;
if (e.Button == MouseButtons.Right)
{
contextMenuStrip1.Show(gridControl1, e.Location);
return;
}
}
///
/// 右键菜单
///
///
///
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
try
{
if (CurrentModel == null)
throw new Exception("请选中要操作的设备数据行!");
(new PagePlanDetail(CurrentModel, CurrentModel.MaintenanceYear)).ShowDialog(this);
}
catch (Exception ex)
{
XtraMessageBoxHelper.Error(ex.Message);
}
}
///
/// 搜索
///
///
///
private void txtFilter_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
{
try
{
splashScreenManager1.ShowWaitForm();
GridDataInitialize();
splashScreenManager1.TryCloseWait();
}
catch (Exception ex)
{
splashScreenManager1.TryCloseWait();
XtraMessageBoxHelper.Error(ex.Message);
}
}
///
/// 删除
///
///
///
private void btn_Remove_Click(object sender, EventArgs e)
{
try
{
if (!GlobalInfo.HasRole(AuthCodeConstValue.BIZ_PLAN_AM_03))
{
XtraMessageBoxHelper.Error($"当前账号缺少此操作的权限");
return;
}
AnnualMaintenancePlan model = (AnnualMaintenancePlan)gridView1.GetFocusedRow();
if (model == null)
{
XtraMessageBoxHelper.Error("请先选择要删除的行!");
return;
}
if (XtraMessageBoxHelper.AskYesNo("确认删除该条数据?") == DialogResult.Yes)
{
splashScreenManager1.ShowWaitForm();
APIResponseData apiResponseData = PlanManager.Instance.GetPlanRecordProgress(model.EquipmentID, model.MaintenanceYear);
if (apiResponseData.IsSuccess)
{
List progress = apiResponseData.ToDeserializeObject>();
if (progress != null && progress.Count > 0)
{
throw new Exception("当前计划下存在保养数据,无法删除。");
}
}
apiResponseData = PlanManager.Instance.DeleteByYearAndEquipmentPk(model.MaintenanceYear, model.EquipmentID);
if (!apiResponseData.IsSuccess)
throw new Exception(apiResponseData.Message);
GridDataInitialize();
splashScreenManager1.TryCloseWait();
XtraMessageBoxHelper.Info("操作成功!");
}
}
catch (Exception ex)
{
GridDataInitialize();
// 关闭等待窗口
splashScreenManager1.TryCloseWait();
XtraMessageBoxHelper.Error(ex.Message);
}
}
///
/// 数据导出
///
///
///
private void btnExport_Click(object sender, EventArgs e)
{
try
{
if (!GlobalInfo.HasRole(AuthCodeConstValue.BIZ_PLAN_AM_05))
{
XtraMessageBoxHelper.Error($"当前账号缺少此操作的权限");
return;
}
FolderBrowserDialog dlg = new FolderBrowserDialog();
if (dlg.ShowDialog(this) == DialogResult.OK)
{
string path = dlg.SelectedPath.ToString();
try
{
splashScreenManager1.ShowWaitForm();
APIResponseData apiResponseData = PlanManager.Instance.ExportXlsxDatas(PlanYear);
if (!apiResponseData.IsSuccess)
throw new Exception(apiResponseData.Message);
List lst = apiResponseData.ToDeserializeObject>();
if (lst == null || lst.Count == 0)
throw new Exception("数据为空,无法导出。");
IWorkbook workbook = new XSSFWorkbook();
ISheet sheet = workbook.CreateSheet($"{PlanYear}年度OEM设备AM计划");
// 样式获取
ICellStyle headStyle = DeviceRepairAndOptimization.Common.NpoiExtend.StyleConst.Instance.HeadStyle(workbook);
ICellStyle contentStyle = DeviceRepairAndOptimization.Common.NpoiExtend.StyleConst.Instance.ContentStyle(workbook);
// 创建表头
IRow headerRow = sheet.CreateRow(0);
PropertyInfo[] properties = typeof(View_YearsMaintenancePlansExport).GetProperties();
for (int i = 0; i < properties.Length; i++)
{
DisplayNameAttribute[] attrs =
(DisplayNameAttribute[])properties[i]
.GetCustomAttributes(typeof(DisplayNameAttribute), true);
if (attrs[0].DisplayName.Equals("RootName", StringComparison.CurrentCultureIgnoreCase))
{
continue;
}
ICell cell = headerRow.CreateCell(i);
cell.SetCellValue(attrs[0].DisplayName);
ICellStyle styleContent = workbook.CreateCellStyle();
styleContent.CloneStyleFrom(headStyle);
headerRow.GetCell(i).CellStyle = styleContent;
headerRow.GetCell(i).CellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Medium;
headerRow.GetCell(i).CellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Medium;
headerRow.GetCell(i).CellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Medium;
headerRow.GetCell(i).CellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Medium;
}
// 填充数据
for (int rowIndex = 0; rowIndex < lst.Count; rowIndex++)
{
IRow dataRow = sheet.CreateRow(rowIndex + 1);
for (int colIndex = 0; colIndex < properties.Length; colIndex++)
{
DisplayNameAttribute[] attrs =
(DisplayNameAttribute[])properties[colIndex]
.GetCustomAttributes(typeof(DisplayNameAttribute), true);
if (attrs[0].DisplayName.Equals("RootName", StringComparison.CurrentCultureIgnoreCase))
{
continue;
}
ICell cell = dataRow.CreateCell(colIndex);
object value = properties[colIndex].GetValue(lst[rowIndex]);
if (properties[colIndex].PropertyType == typeof(DateTime))
{
DateTime date = ((DateTime)value);
if (DateTime.MinValue == date)
{
value = "";
}
else
{
value = date.ToString("yyyy-MM");
}
}
cell.SetCellValue(value + "");
//int columnWidth = sheet.GetColumnWidth(colIndex) / 256;
//int length = System.Text.Encoding.Default.GetBytes(cell.ToString()).Length;
//columnWidth = columnWidth < length ? length : columnWidth;
ICellStyle styleContent = workbook.CreateCellStyle();
styleContent.CloneStyleFrom(contentStyle);
dataRow.GetCell(colIndex).CellStyle = styleContent;
// 第一列
if (colIndex == 0)
dataRow.GetCell(colIndex).CellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Medium;
else if (colIndex == properties.Length - 2)
{
// 最后一列
dataRow.GetCell(colIndex).CellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Medium;
}
if (rowIndex == properties.Length - 2)
dataRow.GetCell(colIndex).CellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Medium;
}
}
for (int i = 0; i < properties.Length; i++)
{
sheet.AutoSizeColumn(i);
}
using (FileStream fs =
new FileStream(
Path.Combine(path,
$"OEM{PlanYear}年度设备保养计划-{DateTime.Now.ToString("yyyyMMddhhmmssfff")}.xlsx"),
FileMode.Create, FileAccess.Write))
{
workbook.Write(fs);
splashScreenManager1.TryCloseWait();
XtraMessageBoxHelper.Info("操作成功!");
}
}
catch (Exception ex)
{
throw ex;
}
}
}
catch (Exception ex)
{
splashScreenManager1.TryCloseWait();
XtraMessageBoxHelper.Error(ex.Message);
}
}
///
/// 新增
///
///
///
private void btnAdd_Click(object sender, EventArgs e)
{
try
{
if (!GlobalInfo.HasRole(AuthCodeConstValue.BIZ_PLAN_AM_01))
{
throw new Exception($"当前账号缺少此操作的权限");
}
if (new pageDevicePlanEdit(new AnnualMaintenancePlan { MaintenanceYear = PlanYear }).ShowDialog(this) == DialogResult.OK)
{
XtraMessageBoxHelper.Info("操作成功!");
GridDataInitialize();
}
}
catch (Exception ex)
{
GridDataInitialize();
XtraMessageBoxHelper.Error(ex.Message);
}
}
///
/// 修改
///
///
///
private void btnEdit_Click(object sender, EventArgs e)
{
try
{
if (!GlobalInfo.HasRole(AuthCodeConstValue.BIZ_PLAN_AM_02))
{
throw new Exception($"当前账号缺少此操作的权限");
}
if (CurrentModel == null)
{
throw new Exception($"没有选择内容");
}
if (new pageDevicePlanEdit(CurrentModel).ShowDialog(this) == DialogResult.OK)
{
GridDataInitialize();
XtraMessageBoxHelper.Info("操作成功!");
}
}
catch (Exception ex)
{
GridDataInitialize();
XtraMessageBoxHelper.Error(ex.Message);
}
}
///
/// 导入
///
///
///
private void btnImport_Click(object sender, EventArgs e)
{
try
{
if (!GlobalInfo.HasRole(AuthCodeConstValue.BIZ_PLAN_AM_04))
{
throw new Exception($"当前账号缺少此操作的权限");
}
using (pagePlanImport view = new pagePlanImport())
{
if (view.ShowDialog(this) == DialogResult.OK)
{
XtraMessageBoxHelper.Info("操作成功!");
GridDataInitialize();
}
}
}
catch (Exception ex)
{
GridDataInitialize();
XtraMessageBoxHelper.Error(ex.Message);
}
}
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;
}
}
}
}
}