DeviceManager/DeviceRepairAndOptimization/Pages/FormVersion/Page_FormVersionAdd.cs

397 lines
16 KiB
C#
Raw Permalink Normal View History

2024-05-28 14:36:38 +00:00
using System;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using NPOI.SS.UserModel;
using System.IO;
using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;
using System.Text.RegularExpressions;
using DeviceRepair.Models;
using DeviceRepairAndOptimization.Common;
using DeviceRepairAndOptimization.Biz;
using Newtonsoft.Json;
2024-07-17 02:32:45 +00:00
using DeviceRepair.Utils;
2024-05-28 14:36:38 +00:00
namespace DeviceRepairAndOptimization.Pages.FormVersion
{
public partial class Page_FormVersionAdd : XtraForm
{
private int AutoId = 0;
public string Caption;
private MaintenanceFormVersionInfo subData;
2024-07-17 02:32:45 +00:00
Biz.PreserveTemplate.BaseTemplate template = null;
2024-05-28 14:36:38 +00:00
private int FileVer
{
get
{
return (int)radioGroup1.EditValue;
}
}
public Page_FormVersionAdd(string FormTitle)
{
InitializeComponent();
Caption = FormTitle;
}
public Page_FormVersionAdd(string FormTitle, int AutoID)
{
InitializeComponent();
Caption = FormTitle;
AutoId = AutoID;
}
private void Page_FormVersionAdd_Load(object sender, EventArgs e)
{
try
{
this.Text = Caption;
xtraOpenFileDialog1.FileName = string.Empty;
xtraOpenFileDialog1.Filter = "(*.xls)|*.xls;*.xlsx";
xtraOpenFileDialog1.Multiselect = false;
xtraOpenFileDialog1.Title = "请选择待导入的点检表Excel文件";
if (AutoId != 0)
{
splashScreenManager1.ShowWaitForm();
2024-07-22 07:50:10 +00:00
radioGroup1.SelectedIndexChanged -= radioGroup1_SelectedIndexChanged;
2024-05-28 14:36:38 +00:00
APIResponseData apiResponseData = FormManager.Instance.GetSingle(AutoId);
if (!apiResponseData.IsSuccess)
throw new Exception(apiResponseData.Message);
subData = apiResponseData.ToDeserializeObject<MaintenanceFormVersionInfo>();
//暂时禁用,后面改为替换
txt_FilePath.Enabled = false;
2024-06-05 17:09:59 +00:00
radioGroup1.Enabled = false;
2024-05-28 14:36:38 +00:00
txt_FormName.Text = subData.FormName;
txt_Number.Text = subData.VersionCode;
txt_Rev.Text = subData.VersionRev;
txt_Remark.Text = subData.Remarks;
radioGroup1.EditValue = subData.VersionCode;
2024-07-17 02:32:45 +00:00
txt_FilePath.Text = subData.FormFileName ?? Path.GetFileName(subData.FormPath);
2024-07-08 02:44:57 +00:00
splashScreenManager1.TryCloseWait();
2024-05-28 14:36:38 +00:00
}
}
catch (Exception ex)
{
subData = null;
splashScreenManager1.TryCloseWait();
XtraMessageBoxHelper.Error(ex.Message);
this.DialogResult = DialogResult.Abort;
}
}
private async void btn_Submit_Click(object sender, EventArgs e)
{
try
{
splashScreenManager1.ShowWaitForm();
if (subData == null)
throw new Exception("请选择要上传的点检表");
if (txt_Remark.Text.Length >= 2000)
{
splashScreenManager1.TryCloseWait();
XtraMessageBoxHelper.Warn($"说明字段长度超出限制,请不要超过2000个字符");
return;
}
if (subData.AutoID > 0)
{
subData.ChangeUser = GlobalInfo.CurrentUser.AutoID;
subData.Remarks = txt_Remark.Text.Trim();
APIResponseData apiResponseData = FormManager.Instance.ChangeRemark(subData);
splashScreenManager1.TryCloseWait();
if (apiResponseData.IsSuccess)
XtraMessageBoxHelper.Info("操作成功!");
else
XtraMessageBoxHelper.Error(apiResponseData.Message);
}
else
{
//新增
//上传到webservice
APIResponseData apiResponseData = await FormManager.Instance.UploadFile(txt_FilePath.Text);
if (!apiResponseData.IsSuccess)
{
splashScreenManager1.TryCloseWait();
XtraMessageBoxHelper.Error(apiResponseData.Message);
return;
}
2024-07-17 02:32:45 +00:00
subData.FormFileName = Path.GetFileName(txt_FilePath.Text);
2024-05-28 14:36:38 +00:00
subData.FormPath = apiResponseData.Data + "";
subData.CreatUser = GlobalInfo.CurrentUser.AutoID;
subData.Remarks = txt_Remark.Text.Trim();
subData.FormStatus = true;
2024-07-08 02:44:57 +00:00
subData.FormBelong = "PM";
2024-05-28 14:36:38 +00:00
apiResponseData = FormManager.Instance.InsertSingle(subData);
splashScreenManager1.TryCloseWait();
if (apiResponseData.IsSuccess)
XtraMessageBoxHelper.Info("操作成功!");
else
XtraMessageBoxHelper.Error(apiResponseData.Message);
}
}
catch (Exception ex)
{
splashScreenManager1.TryCloseWait();
XtraMessageBoxHelper.Error(ex.Message);
2024-06-05 17:09:59 +00:00
return;
2024-05-28 14:36:38 +00:00
}
this.DialogResult = DialogResult.OK;
}
private void btn_Cancel_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
}
private void txt_FilePath_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
{
string FilePath = string.Empty;
2024-06-10 17:33:11 +00:00
2024-07-01 16:52:48 +00:00
if (xtraOpenFileDialog1.ShowDialog(this) == DialogResult.OK)
2024-05-28 14:36:38 +00:00
{
// 将选择的文件路径显示在 ButtonEdit 控件中
txt_FilePath.Text = xtraOpenFileDialog1.FileName;
FilePath = xtraOpenFileDialog1.FileName;
try
{
splashScreenManager1.ShowWaitForm();
if (AutoId > 0)
subData = new MaintenanceFormVersionInfo() { AutoID = AutoId };
else
subData = new MaintenanceFormVersionInfo();
ReadInformation(FilePath);
splashScreenManager1.TryCloseWait();
}
catch (Exception ex)
{
subData = null;
txt_FormName.Text = "";
txt_Number.Text = "";
txt_Rev.Text = "";
txt_Remark.Text = "";
txt_FilePath.Text = "";
splashScreenManager1.TryCloseWait();
2024-09-26 02:47:56 +00:00
XtraMessageBoxHelper.Error(ex.Message);
2024-05-28 14:36:38 +00:00
}
splashScreenManager1.TryCloseWait();
}
}
/// <summary>
/// 读取Excel内容
/// </summary>
/// <param name="filePath"></param>
void ReadInformation(string filePath)
{
2024-07-17 02:32:45 +00:00
template = null;
2024-05-28 14:36:38 +00:00
if (!string.IsNullOrEmpty(filePath))
{
// 检查文件类型是否是 Excel 文件
if (Path.GetExtension(filePath).Equals(".xls", StringComparison.OrdinalIgnoreCase) ||
Path.GetExtension(filePath).Equals(".xlsx", StringComparison.OrdinalIgnoreCase))
{
try
{
MaintenanceFormVersionInfo entity = null;
using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
string fileExtension = Path.GetExtension(filePath);
if (fileExtension.Equals(".xls", StringComparison.OrdinalIgnoreCase))
{
// 如果是 .xls 文件
HSSFWorkbook workbook = new HSSFWorkbook(fileStream);
entity = ReadHeaderFromWorkbook(workbook);
}
else if (fileExtension.Equals(".xlsx", StringComparison.OrdinalIgnoreCase))
{
// 如果是 .xlsx 文件
XSSFWorkbook workbook = new XSSFWorkbook(fileStream);
entity = ReadHeaderFromWorkbook(workbook);
}
else
{
// 不支持的文件类型
throw new NotSupportedException("不支持的文件类型");
}
}
2024-07-17 02:32:45 +00:00
DevExpress.XtraSpreadsheet.SpreadsheetControl spreadsheetControl1 = new DevExpress.XtraSpreadsheet.SpreadsheetControl();
spreadsheetControl1.BeginUpdate();
spreadsheetControl1.LoadDocument(IOExtend.FileToByteArray(filePath));
spreadsheetControl1.EndUpdate();
if (spreadsheetControl1.Document.Worksheets.Contains("正文"))
spreadsheetControl1.Document.Worksheets.ActiveWorksheet = spreadsheetControl1.Document.Worksheets["正文"];
else
{
throw new NotSupportedException("非标准设备保养表单!");
}
switch (entity.VersionCode)
{
case Biz.PreserveTemplate.TemplateConstValue.CompositeTemplateV2:
template = new Biz.PreserveTemplate.TemplateIndexV2(spreadsheetControl1.Document.Worksheets.ActiveWorksheet);
break;
case Biz.PreserveTemplate.TemplateConstValue.CompositeTemplateV1:
template = new Biz.PreserveTemplate.TemplateIndexV1(spreadsheetControl1.Document.Worksheets.ActiveWorksheet);
break;
case Biz.PreserveTemplate.TemplateConstValue.DailyTemplateV2:
template = new Biz.PreserveTemplate.Template_AM_01(spreadsheetControl1.Document.Worksheets.ActiveWorksheet);
break;
case Biz.PreserveTemplate.TemplateConstValue.DailyTemplateV1:
template = new Biz.PreserveTemplate.Template_AM_15(spreadsheetControl1.Document.Worksheets.ActiveWorksheet);
break;
case Biz.PreserveTemplate.TemplateConstValue.MonthTemplateV1:
template = new Biz.PreserveTemplate.Template_AM_17(spreadsheetControl1.Document.Worksheets.ActiveWorksheet);
break;
default:
template = null;
break;
}
2024-05-28 14:36:38 +00:00
if (entity != null)
{
//检测当前文档是否存在
APIResponseData apiResponseData = FormManager.Instance.DataIsExists(entity);
if (!apiResponseData.IsSuccess)
throw new Exception(apiResponseData.Message);
if (Convert.ToBoolean(apiResponseData.Data))
{
throw new Exception("当前点检表已存在!");
}
//返回到UI
2024-07-17 02:32:45 +00:00
subData.ContentData = JsonConvert.SerializeObject(template);
2024-05-28 14:36:38 +00:00
subData.FormName = entity.FormName;
subData.VersionCode = entity.VersionCode;
subData.VersionRev = entity.VersionRev;
txt_FormName.Text = entity.FormName;
txt_Number.Text = entity.VersionCode;
txt_Rev.Text = entity.VersionRev;
}
else
{
throw new Exception("请选择点检表文件!");
}
}
catch (Exception)
{
throw;
}
}
else
{
new Exception("请选择有效的 Excel 文件!");
}
}
else
{
new Exception("请选择要上传的文件!");
}
}
/// <summary>
/// 从工作簿中读取页眉
/// </summary>
/// <param name="workbook"></param>
/// <returns></returns>
private MaintenanceFormVersionInfo ReadHeaderFromWorkbook(IWorkbook workbook)
{
MaintenanceFormVersionInfo maintenance = new MaintenanceFormVersionInfo();
// 获取第一个工作表
ISheet CurrentSheet = null;
int SheetCount = workbook.NumberOfSheets;
for (int i = 0; i < SheetCount; i++)
{
ISheet sheet = workbook.GetSheetAt(i);
if (sheet.SheetName.Equals("正文"))
{
CurrentSheet = sheet;
}
}
if (CurrentSheet == null)
{
throw new Exception("读取文档信息出错,当前文档不存在【正文】Sheet页!");
}
// 获取页眉
if (CurrentSheet != null && CurrentSheet.Header != null)
{
//文档名称
string FormName = CurrentSheet.Header.Center;
if (!string.IsNullOrEmpty(FormName))
maintenance.FormName = patternToRemoveString(FormName).Trim();
if (maintenance.FormName.Length > 100)
{
throw new Exception("操作失败点检表名称长度超限最大长度为100字!");
}
string Other = CurrentSheet.Header.Right;
if (!string.IsNullOrEmpty(Other))
{
string[] os = patternToRemoveString(Other).Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
if (os.Length == 3)
{
maintenance.VersionCode = os[0].Trim().ToUpper();
if (maintenance.VersionCode != radioGroup1.EditValue + "")
{
throw new Exception("操作失败,点检表版本与选定的版本不一致!");
}
2024-06-10 17:33:11 +00:00
maintenance.VersionRev = patternToRemoveString(os[1], "Rev版本:(\\s{0,})").Trim();
2024-05-28 14:36:38 +00:00
}
else
{
throw new Exception("操作失败,点检表文档编号或点检表版本不能为空!!");
}
}
}
return maintenance;
}
/// <summary>
/// 正则去除字符串
/// </summary>
/// <param name="inputText"></param>
/// <returns></returns>
string patternToRemoveString(string inputText, string patternToRemove = "&\"\\S*?\"")
{
return Regex.Replace(inputText, patternToRemove, string.Empty);
}
2024-06-10 17:33:11 +00:00
private void radioGroup1_SelectedIndexChanged(object sender, EventArgs e)
{
subData = null;
txt_FormName.Text = "";
txt_Number.Text = "";
txt_Rev.Text = "";
txt_Remark.Text = "";
txt_FilePath.Text = "";
}
2024-05-28 14:36:38 +00:00
}
}