341 lines
13 KiB
C#
341 lines
13 KiB
C#
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;
|
||
|
||
namespace DeviceRepairAndOptimization.Pages.FormVersion
|
||
{
|
||
public partial class Page_FormVersionAdd : XtraForm
|
||
{
|
||
private int AutoId = 0;
|
||
public string Caption;
|
||
private MaintenanceFormVersionInfo subData;
|
||
|
||
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();
|
||
APIResponseData apiResponseData = FormManager.Instance.GetSingle(AutoId);
|
||
if (!apiResponseData.IsSuccess)
|
||
throw new Exception(apiResponseData.Message);
|
||
|
||
subData = apiResponseData.ToDeserializeObject<MaintenanceFormVersionInfo>();
|
||
|
||
//暂时禁用,后面改为替换
|
||
txt_FilePath.Enabled = false;
|
||
radioGroup1.Enabled = false;
|
||
txt_FormName.Text = subData.FormName;
|
||
txt_Number.Text = subData.VersionCode;
|
||
txt_Rev.Text = subData.VersionRev;
|
||
txt_Remark.Text = subData.Remarks;
|
||
radioGroup1.EditValue = subData.VersionCode;
|
||
txt_FilePath.Text = "";
|
||
FormExtended.TryCloseWait(splashScreenManager1);
|
||
}
|
||
}
|
||
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;
|
||
}
|
||
|
||
subData.FormPath = apiResponseData.Data + "";
|
||
subData.CreatUser = GlobalInfo.CurrentUser.AutoID;
|
||
subData.Remarks = txt_Remark.Text.Trim();
|
||
subData.FormStatus = true;
|
||
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);
|
||
return;
|
||
}
|
||
|
||
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;
|
||
if (xtraOpenFileDialog1.ShowDialog() == DialogResult.OK)
|
||
{
|
||
// 将选择的文件路径显示在 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();
|
||
XtraMessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||
}
|
||
splashScreenManager1.TryCloseWait();
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 读取Excel内容
|
||
/// </summary>
|
||
/// <param name="filePath"></param>
|
||
void ReadInformation(string filePath)
|
||
{
|
||
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("不支持的文件类型");
|
||
}
|
||
}
|
||
|
||
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
|
||
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("操作失败,点检表版本与选定的版本不一致!");
|
||
}
|
||
|
||
maintenance.VersionRev = patternToRemoveString(os[1], "Rev版本:(\\s).?").Trim();
|
||
}
|
||
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);
|
||
}
|
||
}
|
||
} |