Files
lserp_cs_6.0/插件库/Lskj.EmbeCad/FrmMain.cs
T
cyf ab56a9bcf7 基线 SVN r240
SVN-Revision: r240
2025-02-06 06:46:06 +00:00

1227 lines
54 KiB
C#

using iTextSharp.text.pdf;
using Lskj.Business;
using Lskj.Business.Impl;
using Lskj.Control;
using Lskj.Control.BrowserSetting;
using Lskj.Control.Model;
using Lskj.Core;
using Lskj.Model;
using Lskj.Util;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
namespace Lskj.EmbeCad
{
public partial class FrmMain : BaseForm
{
/// <summary>
/// 枚举
/// </summaryd
public enum ExeType : int
{
All = 0,
None = 1,
Word = 2,
Excel = 3,
PPT = 4,
PDF = 5,
Cad = 6,
PcbDoc = 7,
Pic = 8,
Txt = 9,
WebPage = 10
}
#region 私有变量
private const int GWL_STYLE = -16;
private const int WS_VISIBLE = 0x10000000;
public const int WM_CLOSE = 0x0010;
private bool isFirstOpen = true;
private string lastSaveFilePath = "";
private bool allowChangeFile = true;
private Dictionary<ExeType, string> typeOpenDic = new Dictionary<ExeType, string>();
#endregion
#region 共有变量
public bool isInit = true;
public DynamicPubInvokeExeModel SysModel;
public ModuleModel Model;
public Process proApp;
public IntPtr intPtr = IntPtr.Zero;
public ExeType exeType = ExeType.None;
public string url = string.Empty;
public string mainSql = string.Empty;
public string name = string.Empty;
public string idValue = string.Empty;
public bool isAddSign = false;
public List<string> filePaths = new List<string>();
public string fileSavePath;
public string fileCopyPath;
public string scriptPath;
public DateTime downFileTime;
/// <summary>
/// 外部exe进程
/// </summary>
public Dictionary<ExeType, Process> loadExeProcess = new Dictionary<ExeType, Process>();
#endregion
public FrmMain()
{
InitializeComponent();
this.splitMainContainer.SplitterMoved += OnSplitterPositionChanged;
this.pl_Main.SizeChanged += OnSizeChanged;
}
#region 窗口初始化
/// <summary>
/// <para>说明:窗口初始化</para>
/// <para>创建人:王一帆</para>
/// <para>创建日期: </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
protected void OnLoad(object sender, EventArgs e)
{
try
{
InitSplitPosition();
InitGridControl();
this.frmWebBrowser.FrmLoad("");
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
}
/// <summary>
/// <para>说明:右键菜单执行后刷新数据,刷新规则按照上一次查询条件刷新</para>
/// <para>创建人:王一帆</para>
/// <para>创建日期:2017-11-02 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
protected void OnGridViewRightCallBack(object sender, EventArgs e)
{
try
{
int oldRowHandle = fileGrid.GridView.FocusedRowHandle;
if (!(fileGrid is TreeGridControlEx) && oldRowHandle < 0) return;
DataTable dt = this.fileGrid.GridView.GetGridViewFilteredAndSortedDataToDataTable();
if (fileGrid is TreeGridControlEx) dt = (fileGrid as TreeGridControlEx).GetGridViewDataSource();
if (dt == null || dt.Rows.Count == 0) return;
//DataRow SelectTheLine = fileGrid is TreeGridControlEx ? (fileGrid as TreeGridControlEx).GetViewFocusedDataRow() : dt.Rows[oldRowHandle];
DataTable dataTable = MainImpl.GetDataTableResult(mainSql);
this.fileGrid.gridControl.DataSource = dataTable;
this.fileGrid.GridView.FocusedRowHandle = oldRowHandle;
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex);
MessageUtil.Show(Message, ex.Message);
}
}
/// <summary>
/// 初始化分割条位置
/// </summary>
private void InitSplitPosition()
{
string spliterPosition = IniHelper.Read(string.Format("EmbeCadSpliterPositionMain_{0}", this.SysModel.ModuleCode));
if (!string.IsNullOrEmpty(spliterPosition)) this.splitMainContainer.SplitterDistance = Convert.ToInt32(spliterPosition);
}
/// <summary>
/// 初始主表
/// </summary>
private void InitGridControl()
{
DataRow modelRow = MainImpl.GetSystemdllTab(this.SysModel.ModuleCode);//获取单个模块信息
if (modelRow == null)
{
MessageUtil.Show("模块编号[" + this.SysModel.ModuleCode + "],配置错误!\r\n该模块信息未找到!");
return;
}
this.Model = new ModuleModel(modelRow);// 系统模块实体对象
DataTable _gridColumns = BaseModuleImpl.GetBaseGridColumns(this.SysModel.ModuleCode);
this.fileGrid.SetReadOnlyColumns(_gridColumns, GridCustomColumnStruct.BaseCadGridView + this.Model.FormKey);
this.mainSql = string.IsNullOrWhiteSpace(SysModel.ControlSql) ? Model.MenuSql : ReplaceHelper.ReplaceRowParam(MainImpl.GetDataRowResult(SysModel.ControlSql), Model.MenuSql);
DataTable dataTable = MainImpl.GetDataTableResult(mainSql);
this.fileGrid.gridControl.DataSource = dataTable;
this.fileGrid.GridView.BestFitColumns();
this.fileGrid.GridView.DoubleClick += OnDoubleClick;
DataTable rightMenuTab = BaseModuleImpl.GetBaseGridRightMenus(this.Model.ModeCode);
this.fileGrid.SetGridRightMenus(rightMenuTab, this.SysModel, OnGridViewRightCallBack);
}
/// <summary>
/// 返回句柄操作
/// </summary>
public IntPtr OpenCadExe(string filePath, string downUrl)
{
exeType = ExeType.None;
if (Path.GetExtension(filePath).Equals(".doc", StringComparison.CurrentCultureIgnoreCase) || Path.GetExtension(filePath).Equals(".docx", StringComparison.CurrentCultureIgnoreCase))
{
exeType = ExeType.Word;
}
else if (Path.GetExtension(filePath).Equals(".dwg", StringComparison.CurrentCultureIgnoreCase))
{
exeType = ExeType.Cad;
}
else if (Path.GetExtension(filePath).Equals(".xls", StringComparison.CurrentCultureIgnoreCase) || Path.GetExtension(filePath).Equals(".xlsx", StringComparison.CurrentCultureIgnoreCase))
{
exeType = ExeType.Excel;
}
else if (Path.GetExtension(filePath).Equals(".ppt", StringComparison.CurrentCultureIgnoreCase) || Path.GetExtension(filePath).Equals(".pptx", StringComparison.CurrentCultureIgnoreCase))
{
exeType = ExeType.PPT;
}
else if (Path.GetExtension(filePath).Equals(".pdf", StringComparison.CurrentCultureIgnoreCase))
{
exeType = ExeType.PDF;
}
else if (Path.GetExtension(filePath).Equals(".png", StringComparison.CurrentCultureIgnoreCase) || Path.GetExtension(filePath).Equals(".jpg", StringComparison.CurrentCultureIgnoreCase) || Path.GetExtension(filePath).Equals(".jpeg", StringComparison.CurrentCultureIgnoreCase))
{
exeType = ExeType.Pic;
}
else if (Path.GetExtension(filePath).Equals(".txt", StringComparison.CurrentCultureIgnoreCase))
{
exeType = ExeType.Txt;
}
else if (Path.GetExtension(filePath).Equals(".pcbdoc", StringComparison.CurrentCultureIgnoreCase))
{
//exeType = ExeType.PcbDoc;
}
if (exeType == ExeType.None && (this.fileGrid.gridControl.DataSource as DataTable).Columns.Contains("IsBrowser") && (this.fileGrid.GridView.GetFocusedDataRow()["IsBrowser"] + "").Equals("1"))
{
exeType = ExeType.WebPage;
}
try
{
if (exeType == ExeType.None)
{
if (this.InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
this.TopMost = false;
MessageUtil.Show("不支持的文件格式");
}));
}
return IntPtr.Zero;
}
if (exeType != ExeType.PDF && exeType != ExeType.Pic && exeType != ExeType.Txt && exeType != ExeType.Word && exeType != ExeType.Excel && exeType != ExeType.PPT && exeType != ExeType.WebPage)
{
if (!typeOpenDic.ContainsKey(exeType))
{
StringBuilder stringBuilder = new StringBuilder(1024);
HandleHelper.FindExecutable(filePath, null, stringBuilder);
if (!string.IsNullOrEmpty(stringBuilder + ""))
{
typeOpenDic.Add(exeType, stringBuilder + "");
}
}
if (!typeOpenDic.ContainsKey(exeType))
{
if (this.InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
this.TopMost = false;
MessageUtil.Show("不支持的文件格式");
}));
}
return IntPtr.Zero;
}
}
try
{
if (intPtr != IntPtr.Zero)
{
if (this.InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
//HandleHelper.SetParent(proApp.MainWindowHandle, IntPtr.Zero);
HandleHelper.ShowWindow(intPtr, (int)ProcessWindowStyle.Hidden);
}));
}
}
}
catch (Exception)
{
}
//ExitExeMessage();
ExitExeProcess();
if (!filePaths.Contains(filePath)) filePaths.Add(filePath);
if (exeType != ExeType.PDF && exeType != ExeType.Pic && exeType != ExeType.Txt && exeType != ExeType.Word && exeType != ExeType.Excel && exeType != ExeType.PPT && exeType != ExeType.WebPage)
{
if (this.InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
this.frmWebBrowser.Visible = false;
this.spreadSheetEx.Visible = false;
this.richEditEx.Visible = false;
}));
}
if (!loadExeProcess.ContainsKey(exeType))
{
proApp = new Process();
proApp.StartInfo.FileName = typeOpenDic[exeType];
proApp.StartInfo.Arguments = filePath;
proApp.StartInfo.UseShellExecute = true;
proApp.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
proApp.Start();
proApp.WaitForInputIdle();
List<HandleHelper.WindowInfo> windowInfos = new List<HandleHelper.WindowInfo>();
while (windowInfos.Count == 0 || windowInfos.Where(n => n.IsVisible).Count() == 0)
{
windowInfos = HandleHelper.FindAllWindows(x => x.Title != null && x.Title.Contains(Path.GetFileName(filePath)));
System.Threading.Thread.Sleep(100);
}
HandleHelper.WindowInfo formWindowInfo = windowInfos.Where(n => n.IsVisible).FirstOrDefault();
JobControl clsJobControl = new JobControl();
clsJobControl.AddProcess(formWindowInfo.Hwnd);
EmbedProcess(formWindowInfo.Hwnd, this.pl_Main);
intPtr = formWindowInfo.Hwnd;
loadExeProcess.Add(exeType, proApp);
}
else
{
proApp = loadExeProcess[exeType];
Process.Start(filePath);
List<HandleHelper.WindowInfo> windowInfos = new List<HandleHelper.WindowInfo>();
while (windowInfos.Count == 0 || windowInfos.Where(n => n.IsVisible).Count() == 0)
{
windowInfos = HandleHelper.FindAllWindows(x => x.Title != null && x.Title.Contains(Path.GetFileName(filePath)));
System.Threading.Thread.Sleep(100);
}
HandleHelper.WindowInfo formWindowInfo = windowInfos.Where(n => n.IsVisible).FirstOrDefault();
JobControl clsJobControl = new JobControl();
clsJobControl.AddProcess(formWindowInfo.Hwnd);
EmbedProcess(formWindowInfo.Hwnd, this.pl_Main);
intPtr = formWindowInfo.Hwnd;
}
}
else if (exeType == ExeType.PDF || exeType == ExeType.Pic || exeType == ExeType.Txt || exeType == ExeType.PPT || exeType == ExeType.WebPage)
{
if (this.InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
if (exeType == ExeType.PPT)
{
string OAUrl = !string.IsNullOrEmpty(SystemInfo.Instance.OAUrl) && SystemInfo.Instance.OAUrl.EndsWith("/") ? SystemInfo.Instance.OAUrl : SystemInfo.Instance.OAUrl + "/";
string preViewUrl = $"{OAUrl}Api/ToolsHandler.ashx?method=ViewDoc&url={ this.url}";
HttpWebResponse httpWebResponse = HttpTools.Post(preViewUrl, "", null, null, HttpTools.Method.GET);
downUrl = downUrl.ToLower().Replace("fileroot", "dochtml").Replace("%23", "").Replace(".pptx", "pptx.html").Replace(".ppt", "ppt.html");
}
this.frmWebBrowser.Visible = true;
this.frmWebBrowser.BringToFront();
this.spreadSheetEx.Visible = false;
this.richEditEx.Visible = false;
this.frmWebBrowser.LoadUrl(downUrl);
}));
}
}
else if (exeType == ExeType.Word)
{
if (this.InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
this.richEditEx.Visible = true;
this.richEditEx.BringToFront();
this.frmWebBrowser.Visible = false;
this.spreadSheetEx.Visible = false;
this.richEditEx.RichEditObj.LoadDocument(filePath);
}));
}
}
else if (exeType == ExeType.Excel)
{
if (this.InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
this.spreadSheetEx.Visible = true;
this.spreadSheetEx.BringToFront();
this.frmWebBrowser.Visible = false;
this.richEditEx.Visible = false;
if (Path.GetExtension(downUrl).Equals(".xls", StringComparison.OrdinalIgnoreCase))
{
this.spreadSheetEx.SpreadsheetObj.Document.LoadDocument(filePath, DevExpress.Spreadsheet.DocumentFormat.Xls);
}
else if (Path.GetExtension(downUrl).Equals(".xlsx", StringComparison.OrdinalIgnoreCase))
{
this.spreadSheetEx.SpreadsheetObj.Document.LoadDocument(filePath, DevExpress.Spreadsheet.DocumentFormat.Xlsx);
}
}));
}
}
lastSaveFilePath = filePath;
}
catch (Exception ex)
{
if (this.InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
this.TopMost = false;
MessageUtil.Show(ex.Message);
}));
}
}
return intPtr;
}
/// <summary>
/// 将指定的程序嵌入指定的控件
/// </summary>
private void EmbedProcess(IntPtr appIntptr, System.Windows.Forms.Control control)
{
if (appIntptr == IntPtr.Zero || control == null) return;
try
{
if (this.InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
HandleHelper.SetParent(appIntptr, control.Handle);
}));
}
List<IntPtr> results = new List<IntPtr>();
while (!results.Contains(appIntptr))
{
System.Threading.Thread.Sleep(500);
results = new List<IntPtr>();
if (this.InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
GCHandle listHandle = GCHandle.Alloc(results);
try
{
NativeMethods.EnumWindowProc childProc = new NativeMethods.EnumWindowProc(HandleHelper.EnumWindow);
NativeMethods.EnumChildWindows(this.pl_Main.Handle, childProc, GCHandle.ToIntPtr(listHandle));
}
finally
{
if (listHandle.IsAllocated)
listHandle.Free();
}
if (results.Contains(appIntptr))
{
System.Threading.Thread.Sleep(500);
HandleHelper.MoveWindow(appIntptr, 0, 0, this.pl_Main.Width, this.pl_Main.Height, true);
HandleHelper.ShowWindow(appIntptr, 3);
}
}));
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
#endregion
#region 程序操作事件
/// <summary>
/// 文件双击预载界面
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnDoubleClick(object sender, EventArgs e)
{
if (!this.allowChangeFile)
{
MessageUtil.Show("请等待当前文档加载完成");
return;
}
this.allowChangeFile = false;
this.TopMost = true;
System.Threading.Thread thread = new System.Threading.Thread(() =>
{
try
{
DataRow mSelectRow = this.fileGrid.GridView.GetFocusedDataRow();
if (!mSelectRow.Table.Columns.Contains("url"))
{
if (this.InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
this.TopMost = false;
MessageUtil.Show("未配置附件地址url");
}));
}
return;
}
if (!mSelectRow.Table.Columns.Contains("FileName"))
{
if (this.InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
this.TopMost = false;
MessageUtil.Show("未配置附件文件名FileName");
}));
}
return;
}
if (!mSelectRow.Table.Columns.Contains("idValue"))
{
if (this.InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
this.TopMost = false;
MessageUtil.Show("未配置附件idValue");
}));
}
return;
}
if (!mSelectRow.Table.Columns.Contains("FileId"))
{
if (this.InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
this.TopMost = false;
MessageUtil.Show("未配置附件主键FileId");
}));
}
return;
}
if (!mSelectRow.Table.Columns.Contains("FileSize"))
{
if (this.InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
this.TopMost = false;
MessageUtil.Show("未配置附件文件大小FileSize");
}));
}
return;
}
if (!mSelectRow.Table.Columns.Contains("FileSpeciesNo"))
{
if (this.InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
this.TopMost = false;
MessageUtil.Show("未配置附件节点FileSpeciesNo");
}));
}
return;
}
this.url = mSelectRow["url"] + "";
this.name = mSelectRow["FileName"] + "";
if (Path.GetExtension(this.name).Equals(".pdf", StringComparison.OrdinalIgnoreCase) ||
Path.GetExtension(this.name).Equals(".doc", StringComparison.OrdinalIgnoreCase) ||
Path.GetExtension(this.name).Equals(".docx", StringComparison.OrdinalIgnoreCase))
{
this.plSign.Enabled = true;
}
this.idValue = mSelectRow["idValue"] + "";
int fileId, fileSize;
int.TryParse(mSelectRow["FileId"] + "", out fileId);
int.TryParse(mSelectRow["FileSize"] + "", out fileSize);
string fileSpeciesNo = mSelectRow["FileSpeciesNo"] + "";
if (!string.IsNullOrEmpty(url))
{
string tipMsg;
int result = GetPermission(2, fileSpeciesNo, fileId, this.name, fileSize, out tipMsg);
if (result != 1)
{
if (!string.IsNullOrEmpty(tipMsg))
{
if (this.InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
this.TopMost = false;
MessageUtil.Show(tipMsg);
}));
}
}
else
{
if (this.InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
this.TopMost = false;
MessageUtil.Show("文件预览权限判断错误");
}));
}
}
return;
}
string downUrl = url;
if (!downUrl.StartsWith("http"))
{
string OAUrl = !string.IsNullOrEmpty(SystemInfo.Instance.OAUrl) && SystemInfo.Instance.OAUrl.EndsWith("/") ? SystemInfo.Instance.OAUrl : SystemInfo.Instance.OAUrl + "/";
downUrl = OAUrl + downUrl;
}
fileSavePath = string.Format("{0}\\{1}\\{2}", Application.StartupPath, "ExternalCallFile", name);
fileCopyPath = string.Format("{0}\\{1}\\{2}", Application.StartupPath, "ExternalCallCopyFile", "copyFile" + Path.GetExtension(name));
scriptPath = string.Format("{0}\\{1}\\{2}", Application.StartupPath, "ExternalScriptFile", "CloseTab.scr");
if (fileSavePath.Equals(lastSaveFilePath))
{
return;
}
if (!Directory.Exists(Path.GetDirectoryName(fileSavePath)))
{
Directory.CreateDirectory(Path.GetDirectoryName(fileSavePath));
}
if (!Directory.Exists(Path.GetDirectoryName(fileCopyPath)))
{
Directory.CreateDirectory(Path.GetDirectoryName(fileCopyPath));
}
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(downUrl);
request.Method = "GET";
WebResponse response = request.GetResponse();
Stream stream = new FileStream(fileSavePath, FileMode.Create, FileAccess.ReadWrite);
byte[] bArr = new byte[1024];
int size = response.GetResponseStream().Read(bArr, 0, (int)bArr.Length);
while (size > 0)
{
stream.Write(bArr, 0, size);
size = response.GetResponseStream().Read(bArr, 0, (int)bArr.Length);
}
stream.Close();
response.GetResponseStream().Close();
response.Close();
}
catch (Exception)
{
if (this.InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
this.TopMost = false;
MessageUtil.Show("服务器异常,文件查找失败");
}));
}
}
this.downFileTime = DateTime.Now;
this.Invoke(new Action(() =>
{
this.frmWebBrowser.Visible = false;
this.plSign.Enabled = false;
this.progressPanel.Visible = true;
}));
OpenCadExe(fileSavePath, downUrl);
this.isAddSign = false;
while (!this.InvokeRequired || !this.IsHandleCreated)
{
System.Threading.Thread.Sleep(100);
}
this.Invoke(new Action(() =>
{
this.pl_Main.Focus();
}));
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
if (this.InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
this.TopMost = false;
MessageUtil.Show("参数配置错误,请验证配置!");
}));
}
}
finally
{
if (this.InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
this.TopMost = false;
this.progressPanel.Visible = false;
}));
}
this.allowChangeFile = true;
}
});
thread.Start();
}
/// <summary>
/// 上传文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnBackTopClick(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(fileSavePath))
{
if (this.InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
this.TopMost = false;
MessageUtil.Show("文件不存在");
}));
}
return;
}
if (string.IsNullOrEmpty(url) || string.IsNullOrEmpty(name) || string.IsNullOrEmpty(idValue))
{
if (this.InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
this.TopMost = false;
MessageUtil.Show("未预载文件请双击打开后再上传!");
}));
}
return;
}
try
{
File.Copy(fileSavePath, fileCopyPath, true);
DataRow mSelectRow = this.fileGrid.GridView.GetFocusedDataRow();
this.url = mSelectRow["url"] + "";
this.name = mSelectRow["FileName"] + "";
this.idValue = mSelectRow["idValue"] + "";
int fileId;
int.TryParse(mSelectRow["FileId"] + "", out fileId);
string fileSpeciesNo = mSelectRow["FilespeciesNo"] + "";
byte[] fileBytes = ConvertFileToBytes(fileCopyPath);
int fileSize = fileBytes != null ? fileBytes.Length : 0;
string tipMsg;
int allowUpdate = GetPermission(1, fileSpeciesNo, fileId, this.name, fileSize, out tipMsg);
if (allowUpdate != 1)
{
if (this.InvokeRequired && this.IsHandleCreated)
{
this.Invoke(new Action(() =>
{
this.TopMost = false;
if (!string.IsNullOrEmpty(tipMsg))
{
MessageUtil.Show(tipMsg);
}
else
{
MessageUtil.Show("文件修改权限判断错误");
}
}));
}
return;
}
FileInfo fileInfo = new FileInfo(fileCopyPath);
if (fileInfo.LastWriteTime <= downFileTime)
{
this.TopMost = false;
DialogResult dialogResult = MessageUtil.Show("文件未更新,请修改后上传", MessageBoxButtons.OK);
this.pl_Main.Focus();
return;
}
fileBytes = ConvertFileToBytes(fileCopyPath);
string fileBase64Str = Convert.ToBase64String(fileBytes) + "";
string postUrl = "{0}Api/FileUploadApi.ashx?moduleId={1}&idValue={2}&folder={3}&totsize={4}&position={5}&filename={6}&username={7}&userid={8}&method={9}";
postUrl = string.Format(postUrl, SystemInfo.Instance.OAUrl, this.SysModel.ModuleCode, this.idValue, "UploadFilesTemp", fileBytes.Length, 0, this.name, ERPInfo.Instance.UserName, ERPInfo.Instance.UserId, "DoWebUpload");
//string postUrl = "{0}Api/FileUploadApi.ashx?moduleId={1}&idValue={2}&folder={3}&totsize={4}&position={5}&filename={6}&method={7}";
//postUrl = string.Format(postUrl, SystemInfo.Instance.OAUrl, this.SysModel.ModuleCode, this.SysModel.idValue, "UploadFilesTemp", fileBytes.Length, 0, this.SysModel.name, "DoWebUpload");
HttpTools.setting("application/x-www-form-urlencoded", null, null);
string result = "";
CookieCollection cookieCollection = null;
HttpWebResponse webResponse = HttpTools.Post(postUrl, fileBase64Str, null, HttpTools.Method.POST, out cookieCollection, out result);
if (webResponse != null && !string.IsNullOrEmpty(result))
{
JObject jsonObject = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(result);
string isSuccess = jsonObject["success"] + "";
if (isSuccess.Equals("True", StringComparison.CurrentCultureIgnoreCase))
{
this.TopMost = false;
MessageUtil.Show("上传成功");
RefDataSource();
}
else
{
string msg = "";
if (jsonObject.ContainsKey("msg"))
{
msg = jsonObject["msg"] + "";
}
if (!string.IsNullOrEmpty(msg))
{
this.TopMost = false;
MessageUtil.Show(string.Format("上传失败,原因:{0}", msg));
}
else
{
this.TopMost = false;
MessageUtil.Show("上传失败");
}
}
}
else
{
this.TopMost = false;
MessageUtil.Show("上传失败");
}
}
catch (Exception ex)
{
this.TopMost = false;
MessageUtil.Show(string.Format("上传失败,原因:{0}", ex.Message));
}
}
#endregion
/// <summary>
/// 固定关闭按钮触发事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnplCloseing(object sender, EventArgs e)
{
try
{
this.DialogResult = DialogResult.Cancel;
this.Close();
}
catch (Exception)
{
}
}
/// <summary>
/// 程序关闭时关闭所有相关进程
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnFormClosing(object sender, FormClosingEventArgs e)
{
try
{
ExitExeProcess();
//ExitExeProcess();
string fileSaveDir = string.Format("{0}\\{1}", Application.StartupPath, "ExternalCallFile");
string fileCopyDir = string.Format("{0}\\{1}", Application.StartupPath, "ExternalCallCopyFile");
if (Directory.Exists(fileSaveDir))
{
Directory.Delete(fileSaveDir, true);
}
if (Directory.Exists(fileCopyDir))
{
Directory.Delete(fileCopyDir, true);
}
}
catch (Exception)
{
}
}
/// <summary>
/// 退出关联进程
/// </summary>
private void ExitExeMessage(ExeType exitType = ExeType.All)
{
if (this.exeType != ExeType.PDF && proApp != null && proApp.HasExited == false)
{
try
{
HandleHelper.SendMessage(intPtr, WM_CLOSE, 0, 0);
System.Threading.Thread.Sleep(1000);
while (!proApp.HasExited)
{
System.Threading.Thread.Sleep(1000);
}
}
catch (Exception)
{
}
}
}
private void ExitExeProcess(ExeType exitType = ExeType.All)
{
foreach (Process process in Process.GetProcesses())
{
switch (exitType)
{
case ExeType.Cad:
if (process.ProcessName.Equals("acad", StringComparison.OrdinalIgnoreCase))
{
process.Kill();
process.WaitForExit();
}
break;
case ExeType.Word:
if (process.ProcessName.Equals("WINWORD", StringComparison.OrdinalIgnoreCase) || process.ProcessName.Equals("wps", StringComparison.OrdinalIgnoreCase))
{
process.Kill();
process.WaitForExit();
}
break;
case ExeType.Excel:
if (process.ProcessName.Equals("EXCEL", StringComparison.OrdinalIgnoreCase) || process.ProcessName.Equals("et", StringComparison.OrdinalIgnoreCase))
{
process.Kill();
process.WaitForExit();
}
break;
//case ExeType.PPT:
// if (process.ProcessName.Equals("POWERPNT", StringComparison.OrdinalIgnoreCase) || process.ProcessName.Equals("wpp", StringComparison.OrdinalIgnoreCase))
// {
// process.Kill();
// process.WaitForExit();
// }
// break;
case ExeType.All:
if (process.ProcessName.Equals("acad", StringComparison.OrdinalIgnoreCase) ||
//process.ProcessName.Equals("et", StringComparison.OrdinalIgnoreCase) ||
//process.ProcessName.Equals("wpp", StringComparison.OrdinalIgnoreCase) ||
//process.ProcessName.Equals("wpscloudsvr", StringComparison.OrdinalIgnoreCase) ||
//process.ProcessName.Equals("wps", StringComparison.OrdinalIgnoreCase) ||
//process.ProcessName.Equals("WINWORD", StringComparison.OrdinalIgnoreCase) ||
//process.ProcessName.Equals("EXCEL", StringComparison.OrdinalIgnoreCase) ||
process.ProcessName.Equals("POWERPNT", StringComparison.OrdinalIgnoreCase))
{
process.Kill();
process.WaitForExit();
}
break;
}
}
if (!string.IsNullOrEmpty(lastSaveFilePath) && !lastSaveFilePath.Equals(fileSavePath) && File.Exists(lastSaveFilePath))//删除上一次下载的文件
{
File.Delete(lastSaveFilePath);
}
if (this.loadExeProcess.ContainsKey(exitType))
{
this.loadExeProcess.Remove(exitType);
}
}
/// <summary>
/// 附件转换byte[]
/// </summary>
/// <param name="filePath">附件路径</param>
/// <returns>二进制</returns>
private byte[] ConvertFileToBytes(string filePath)
{
byte[] bytContent = null;
System.IO.FileStream fs = null;
System.IO.BinaryReader br = null;
try
{
fs = new FileStream(filePath, System.IO.FileMode.Open, FileAccess.Read, FileShare.Read);
}
catch (Exception)
{
throw;
}
if (fs != null)
br = new BinaryReader((Stream)fs);
if (br != null)
bytContent = br.ReadBytes((Int32)fs.Length);
if (fs != null)
fs.Dispose();
return bytContent;
}
/// <summary>
/// 分割条位置改变时
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnSplitterPositionChanged(object sender, EventArgs e)
{
if (!isFirstOpen)
{
IniHelper.Write(string.Format("EmbeCadSpliterPositionMain_{0}", this.SysModel.ModuleCode), this.splitMainContainer.SplitterDistance + "");
}
isFirstOpen = false;
}
/// <summary>
/// 窗体大小改变
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnSizeChanged(object sender, EventArgs e)
{
if (intPtr != IntPtr.Zero)
{
HandleHelper.SetParent(intPtr, this.pl_Main.Handle);
HandleHelper.MoveWindow(intPtr, 0, 0, this.pl_Main.Width, this.pl_Main.Height, true);
HandleHelper.ShowWindow(intPtr, 3);
}
if (this.frmWebBrowser.Visible && this.frmWebBrowser.cefBrowserSettings != null)
{
var handle = this.frmWebBrowser.cefBrowserSettings.GetHost().GetWindowHandle();
this.frmWebBrowser.ResizeWindow(handle, this.pl_Main.Width, this.pl_Main.Height);
}
}
/// <summary>
/// 刷新表格数据
/// </summary>
private void RefDataSource()
{
try
{
int index = this.fileGrid.GridView.FocusedRowHandle;
this.mainSql = string.IsNullOrWhiteSpace(SysModel.ControlSql) ? Model.MenuSql : ReplaceHelper.ReplaceRowParam(MainImpl.GetDataRowResult(SysModel.ControlSql), Model.MenuSql);
DataTable dataTable = MainImpl.GetDataTableResult(mainSql);
this.fileGrid.gridControl.DataSource = dataTable;
this.fileGrid.GridView.BestFitColumns();
this.fileGrid.GridView.FocusedRowHandle = index;
}
catch (Exception ex)
{
this.TopMost = false;
MessageUtil.Show(ex.Message);
}
}
/// <summary>
/// 是否存在autoCad进程
/// </summary>
/// <returns></returns>
private bool IsExitCadProgress()
{
bool isExit = false;
try
{
foreach (Process process in Process.GetProcesses())
{
if (process.ProcessName.Equals("acad", StringComparison.OrdinalIgnoreCase))
{
isExit = true;
break;
}
}
}
catch (Exception)
{
}
return isExit;
}
/// <summary>
/// 获取权限
/// </summary>
private int GetPermission(int opertype, string fileSpecisNo, int fileid, string filename, int filesize, out string tipMsg)
{
try
{
SqlParameter pMsg = new SqlParameter("@msg", SqlDbType.VarChar, 2000);
pMsg.Direction = ParameterDirection.Output;
SqlParameter returnValue = new SqlParameter("@return", SqlDbType.Int, 4);
returnValue.Direction = ParameterDirection.ReturnValue;
SqlParameter[] param =
{
new SqlParameter("@opertype",SqlDbType.Int),
new SqlParameter("@operatorid ",SqlDbType.Int),
new SqlParameter("@operatorname ",SqlDbType.VarChar,20),
new SqlParameter("@fileSpecisNo",SqlDbType.VarChar,20),
new SqlParameter("@fileid",SqlDbType.Int),
new SqlParameter("@filename",SqlDbType.VarChar,200),
new SqlParameter("@filesize",SqlDbType.Int),
pMsg,
returnValue
};
param[0].Value = opertype;
param[1].Value = ERPInfo.Instance.UserId;
param[2].Value = ERPInfo.Instance.UserName;
param[3].Value = fileSpecisNo;
param[4].Value = fileid;
param[5].Value = filename;
param[6].Value = filesize;
param[7].Value = "";
DataSet dataSet = SqlHelper.ExecuteDataSet(CommandType.StoredProcedure, "p_SystemAttachOperation", "attachOperation", param);
tipMsg = pMsg.Value.ToString();
return Convert.ToInt32(returnValue.Value + "");
}
catch (Exception ex)
{
tipMsg = ex.Message;
}
return -1;
}
/// <summary>
/// 添加签章到PDF
/// </summary>
/// <param name="signImageUrl"></param>
/// <param name="sourcePath"></param>
/// <param name="savePath"></param>
private void AddSignToPDF(string signImageUrl, string sourcePath, string savePath)
{
try
{
using (FileStream fileStream = new FileStream(savePath, FileMode.Create, FileAccess.ReadWrite))
{
using (iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(sourcePath))
{
PdfStamper stamper = new PdfStamper(reader, fileStream);
int readPageNum = reader.NumberOfPages;
PdfContentByte pdfContentByte = stamper.GetOverContent(1);//获取第1页内容
using (WebClient webClient = new WebClient())
{
using (Stream stream = webClient.OpenRead(signImageUrl))
{
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(stream);//获取签章图片
image.ScaleAbsolute(200, 100);//设置图片比例
image.SetAbsolutePosition(200, 100);//设置图片的绝对位置
pdfContentByte.AddImage(image);
}
}
stamper.Close();
}
}
}
catch (Exception ex)
{
this.TopMost = false;
MessageUtil.Show(ex.Message);
}
}
/// <summary>
/// <para>说明:word通过当前名字自动签章</para>
/// <para>创建人:王一帆</para>
/// <para>创建日期:2023-11-08 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="signImageUrl">插入图层的地址</param>
public void wordInsertlayer(string signImageUrl, string sourcePath)
{
// 创建文档对象
Document document = new Document();
// 加载文档
document.LoadFromFile(sourcePath);
// 获取第一个节
Section section = document.Sections[0];
// 创建图片对象
DocPicture picture = new DocPicture(document);
// 加载图片
picture.LoadImage(signImageUrl);
// 设置图片的绝对位置
picture.HorizontalPosition = 50.0f; // 水平位置,单位磅
picture.VerticalPosition = 100.0f; // 垂直位置,单位磅
// 设置图片布局为浮动,这样可以设置绝对位置
picture.TextWrappingStyle = TextWrappingStyle.Square;
picture.TextWrappingType = TextWrappingType.Both;
// 选择图片位置的参考点
picture.HorizontalOrigin = HorizontalOrigin.Page;
picture.VerticalOrigin = VerticalOrigin.Page;
// 将图片添加到节的子对象中
section.ChildObjects.Add(picture);
// 保存文档
document.SaveToFile(sourcePath);
}
/// <summary>
/// 签章按钮事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void plSign_Click(object sender, EventArgs e)
{
WaitForm.ShowForm();
try
{
if (string.IsNullOrEmpty(fileSavePath))
{
this.TopMost = false;
MessageUtil.Show("文件不存在");
return;
}
if (string.IsNullOrEmpty(url) || string.IsNullOrEmpty(name) || string.IsNullOrEmpty(idValue))
{
this.TopMost = false;
MessageUtil.Show("未预载文件");
return;
}
if (isAddSign)
{
this.TopMost = false;
MessageUtil.Show("当前文件已添加签章");
return;
}
string signUrl = "";
if (exeType == ExeType.PDF)
{
AddSignToPDF(signUrl, fileSavePath, fileCopyPath);
File.Copy(fileCopyPath, fileSavePath, true);
this.frmWebBrowser.LoadUrl(fileSavePath);
this.isAddSign = true;
}
else if (exeType == ExeType.Word)
{
File.Copy(fileSavePath, fileCopyPath, true);
wordInsertlayer(signUrl, fileCopyPath);
this.richEditEx.CloseDocument();
File.Copy(fileCopyPath, fileSavePath, true);
this.richEditEx.RichEditObj.LoadDocument(fileSavePath);
this.isAddSign = true;
}
this.TopMost = false;
MessageUtil.Show("添加签章成功");
}
catch (Exception ex)
{
this.TopMost = false;
MessageUtil.Show(ex.Message);
}
WaitForm.HideForm();
}
/// <summary>
/// 隐藏进程
/// </summary>
//private void HideProcess()
//{
// foreach (string filePath in filePaths)
// {
// try
// {
// if (!filePath.Equals(this.fileSavePath))
// {
// List<HandleHelper.WindowInfo> windowInfos = HandleHelper.FindAllWindows(x => x.Title.Contains(Path.GetFileName(filePath)));
// foreach (HandleHelper.WindowInfo windowInfo in windowInfos)
// {
// HandleHelper.ShowWindow(windowInfo.Hwnd, 0);
// //HandleHelper.SendMessage(windowInfo.Hwnd, WM_CLOSE, 0, 0);
// }
// //HandleHelper.ShowWindow(windowInfo.Hwnd, 0);
// }
// }
// catch (Exception)
// {
// }
// }
//}
}
}