90e6885779
SVN-Revision: r281
509 lines
23 KiB
C#
509 lines
23 KiB
C#
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 Microsoft.WindowsAPICodePack.Shell;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Linq;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.IO;
|
|
using System.Net;
|
|
using System.Windows.Forms;
|
|
|
|
namespace Lskj.PubArtworkDynamic.Control
|
|
{
|
|
public partial class ModuleGrid : UserControl
|
|
{
|
|
/// <summary>
|
|
/// 模块类
|
|
/// </summary>
|
|
public ViewModel MainViewModel;
|
|
/// <summary>
|
|
/// 表格控件
|
|
/// </summary>
|
|
public GridControlEx MainGridEx { get { return gc_Main; } }
|
|
/// <summary>
|
|
/// 明细Model
|
|
/// </summary>
|
|
public GridDetailModel DetailModel;
|
|
/// <summary>
|
|
/// 条件控件
|
|
/// </summary>
|
|
public MyControl SearchMainObj;
|
|
/// <summary>
|
|
/// 左侧节点上方主键
|
|
/// </summary>
|
|
private string leftTopGridIdValue
|
|
{
|
|
get
|
|
{
|
|
ModuleGridDetail moduleGridDetail = (ModuleGridDetail)MainViewModel.LeftTabControl.TabControlObj.SelectedTabPage.Controls[0];
|
|
string rtnString = "";
|
|
DataRow dataRow = moduleGridDetail.TopGridEx.GridView.GetFocusedDataRow();
|
|
if (dataRow != null)
|
|
{
|
|
if (!string.IsNullOrEmpty(MainViewModel.MoudleMainObj.UploadIdValueField) && dataRow.Table.Columns.Contains(MainViewModel.MoudleMainObj.UploadIdValueField))
|
|
{
|
|
rtnString = dataRow[MainViewModel.MoudleMainObj.UploadIdValueField] + "";
|
|
}
|
|
}
|
|
return rtnString;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 左侧节点上方主键
|
|
/// </summary>
|
|
private string leftBottomGridIdValue
|
|
{
|
|
get
|
|
{
|
|
ModuleGridDetail moduleGridDetail = (ModuleGridDetail)MainViewModel.LeftTabControl.TabControlObj.SelectedTabPage.Controls[0];
|
|
string rtnString = "";
|
|
DataRow dataRow = moduleGridDetail.BottomGridEx.GridView.GetFocusedDataRow();
|
|
if (dataRow != null)
|
|
{
|
|
if (!string.IsNullOrEmpty(MainViewModel.MoudleMainObj.UploadIdValueField) && dataRow.Table.Columns.Contains(MainViewModel.MoudleMainObj.UploadIdValueField))
|
|
{
|
|
rtnString = dataRow[MainViewModel.MoudleMainObj.UploadIdValueField] + "";
|
|
}
|
|
}
|
|
return rtnString;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 文件大小
|
|
/// </summary>
|
|
private static readonly string[] suffixes = new string[] { " B", " KB", " MB", " GB", " TB", " PB" };
|
|
/// <summary>
|
|
/// 构造函数
|
|
/// </summary>
|
|
/// <param name="model"></param>
|
|
public ModuleGrid(GridDetailModel model)
|
|
{
|
|
DetailModel = model;
|
|
InitializeComponent();
|
|
Load += OnModuleGridDetailLoad;
|
|
btnAdd.Click += OnBtnAddClick;
|
|
btnDel.Click += OnBtnDelClick;
|
|
}
|
|
/// <summary>
|
|
/// 加载完成后
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void OnModuleGridDetailLoad(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
gc_Main.GridView.OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.RowSelect;
|
|
gc_Main.Tag = DetailModel;
|
|
if (DetailModel.IsReadOnly)
|
|
{
|
|
this.SearchMainObj = new MyControl(DetailModel.DetailSql, gc_Main);//构建主表mycontrol
|
|
}
|
|
else
|
|
{
|
|
this.SearchMainObj = new MyControl(DetailModel.SystemModel.MenuSql, gc_Main);//构建主表mycontrol
|
|
}
|
|
DataTable gridColumns = new DataTable();
|
|
if (!string.IsNullOrEmpty(DetailModel.UnionModule))
|
|
{
|
|
gridColumns = BaseModuleImpl.GetBaseGridColumns(DetailModel.UnionModule);
|
|
}
|
|
else
|
|
{
|
|
gridColumns = ReportImpl.GetReportDetailColumns(MainViewModel.SysModel.ModuleCode, DetailModel.Id + "");
|
|
}
|
|
gc_Main.GridView.OptionsBehavior.Editable = false;
|
|
gc_Main.SetReadOnlyColumns(gridColumns, GridCustomColumnStruct.BaseMainGridView + DetailModel.FormKey);//明细
|
|
DynamicModel dyncModel = new DynamicModuleModel(new string[] { DetailModel.DetailName, ERPInfo.Instance.UserId, ERPInfo.Instance.UserName, MainViewModel.SysModel.Privilege, DetailModel.UnionModule, "0" });
|
|
if (!string.IsNullOrEmpty(DetailModel.SystemModel.ModeCode))
|
|
{
|
|
gc_Main.SetGridRightMenus(BaseModuleImpl.GetBaseGridRightMenus(DetailModel.SystemModel.ModeCode), dyncModel, OnRightMenuCallBack, this.SearchMainObj);
|
|
}
|
|
else if (!string.IsNullOrEmpty(DetailModel.FormKey))
|
|
{
|
|
gc_Main.SetGridRightMenus(BaseModuleImpl.GetBaseGridRightMenus(DetailModel.FormKey), dyncModel, OnRightMenuCallBack, this.SearchMainObj);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageUtil.Show(ex.Message);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 上传按钮点击事件
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void OnBtnAddClick(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
string resultStr = string.Empty;
|
|
OpenFileDialog dialog = new OpenFileDialog();
|
|
dialog.Multiselect = true;//该值确定是否可以选择多个文件
|
|
dialog.Title = "请选择文件";
|
|
string filter = SqlHelper.ExecuteScalar(@"select 合并字段=stuff((select '|'+Mix_apellation+'(*'+bases1 +')'+'|*'+bases1 from P_BaseMixInfoTab b where Tag=a.Tag for xml path('')),1,1,'')
|
|
from P_BaseMixInfoTab a
|
|
where Tag='70700201'
|
|
group by Tag
|
|
") + "";
|
|
dialog.Filter = string.IsNullOrWhiteSpace(filter) ? "所有文件(*.*)|*.*" : filter;
|
|
if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
|
{
|
|
WaitForm.ShowForm("文件上传中...");
|
|
foreach (string fileName in dialog.FileNames)
|
|
{
|
|
string outMsg = "";
|
|
bool isUpload = false;
|
|
if (filter.ToLower().Contains(Path.GetExtension(fileName).ToLower()))
|
|
{
|
|
isUpload = UploadFile(fileName, out outMsg);
|
|
}
|
|
else
|
|
{
|
|
outMsg = "该文件类型不允许上传";
|
|
}
|
|
if (!isUpload)
|
|
{
|
|
resultStr += string.Format("文件{0}上传失败,原因:{1}\r\n", Path.GetFileName(fileName), outMsg);
|
|
}
|
|
}
|
|
if (!string.IsNullOrEmpty(resultStr))
|
|
{
|
|
MessageUtil.Show(resultStr);
|
|
}
|
|
WaitForm.HideForm();
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
}
|
|
finally
|
|
{
|
|
RefushWaitDetail();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 删除操作页签附件数据
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
private void OnBtnDelClick(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
DataTable dataTable = gc_Main.gridControl.DataSource as DataTable;
|
|
int[] rowNumbers = gc_Main.GridView.GetSelectedRows();
|
|
string resultStr = string.Empty;
|
|
foreach (int rowIndex in rowNumbers)
|
|
{
|
|
DataRow rowItem = gc_Main.GridView.GetDataRow(rowIndex);
|
|
bool isDelete = false;
|
|
isDelete = DeleteFile(rowIndex);
|
|
if (!isDelete)
|
|
{
|
|
gc_Main.GridView.UnselectRow(rowIndex);
|
|
resultStr += string.Format("文件{0}删除失败\r\n", rowItem["name"]);
|
|
}
|
|
}
|
|
if (!string.IsNullOrEmpty(resultStr))
|
|
{
|
|
MessageUtil.Show(resultStr);
|
|
}
|
|
gc_Main.GridView.DeleteSelectedRows();
|
|
gc_Main.GridView.SelectRow(dataTable.Rows.Count - 1);
|
|
gc_Main.GridView.FocusedRowHandle = dataTable.Rows.Count - 1;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
}
|
|
finally
|
|
{
|
|
RefushWaitDetail();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 刷新等待区
|
|
/// </summary>
|
|
public void RefushWaitDetail()
|
|
{
|
|
try
|
|
{
|
|
if (MainViewModel.LeftTabControl.TabControlObj.SelectedTabPage != null && MainViewModel.RightTabControl.TabControlObj.SelectedTabPage != null)
|
|
{
|
|
ModuleGridDetail moduleGridDetail = MainViewModel.LeftTabControl.TabControlObj.SelectedTabPage.Controls[0] as ModuleGridDetail;
|
|
DataRow rowItem = moduleGridDetail.TopGridEx.GetViewFocusedDataRow();
|
|
if (rowItem != null && this.MainGridEx.Tag != null && this.MainGridEx.Tag is GridDetailModel)
|
|
{
|
|
GridDetailModel gridDetailModel = this.MainGridEx.Tag as GridDetailModel;
|
|
string sqlValue = this.GetSearchSql(gridDetailModel, rowItem);
|
|
DataTable dataTable = MainImpl.GetDataTableResult(sqlValue);
|
|
this.MainGridEx.SetGridViewDataSource(dataTable);
|
|
this.MainGridEx.LastSearchSql = sqlValue;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageUtil.Show(ex.Message);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 获取查询条件
|
|
/// </summary>
|
|
/// <param name="model"></param>
|
|
/// <param name="rowItem"></param>
|
|
/// <returns></returns>
|
|
private string GetSearchSql(GridDetailModel model, DataRow rowItem)
|
|
{
|
|
string fieldName = !string.IsNullOrEmpty(model.UnionParentField) && rowItem.Table.Columns.Contains(model.UnionParentField) ? model.UnionParentField : MainViewModel.MoudleMainObj.ParmaryKey;
|
|
string sqlValue = model.IsReadOnly || model.IsChart ? model.DetailSql : model.SystemModel.MenuSql;
|
|
|
|
sqlValue = ReplaceHelper.ReplaceRowParam(rowItem, sqlValue);
|
|
|
|
if (ReplaceHelper.IsSelect(sqlValue) && !string.IsNullOrEmpty(model.UnionValue))
|
|
{
|
|
sqlValue = ReplaceHelper.ReplaceWhereCond(sqlValue) + string.Format(" and {0}='{1}'", model.UnionValue, rowItem[fieldName] + "");
|
|
}
|
|
if (!string.IsNullOrEmpty(model.UnionCond))
|
|
{
|
|
string UnionCond = ReplaceHelper.ReplaceRowParam(rowItem, model.UnionCond);
|
|
sqlValue += UnionCond;
|
|
}
|
|
return sqlValue;
|
|
}
|
|
/// <summary>
|
|
/// 上传文件
|
|
/// </summary>
|
|
/// <param name="filePath"></param>
|
|
/// <returns></returns>
|
|
private bool UploadFile(string filePath, out string msg)
|
|
{
|
|
bool isUpload = false;
|
|
string File = filePath;
|
|
string returnMsg = "";
|
|
string postUrl = "";
|
|
try
|
|
{
|
|
//获取文件信息
|
|
System.IO.FileInfo fileInfo = new FileInfo(File);
|
|
string suffix = Path.GetExtension(File);
|
|
//获取Excel等文件信息
|
|
string fileAuthor = "";
|
|
string fileType = "";
|
|
try
|
|
{
|
|
var file = ShellFile.FromFilePath(File);
|
|
string[] oldAuthors = file.Properties.System.Author.Value;//作者
|
|
if (oldAuthors != null && oldAuthors.Length > 0)
|
|
{
|
|
fileAuthor = string.Join(",", oldAuthors);
|
|
}
|
|
else
|
|
{
|
|
fileAuthor = "";
|
|
}
|
|
fileType = file.Properties.System.ItemTypeText.Value + "";
|
|
}
|
|
catch (Exception)
|
|
{
|
|
fileType = Path.GetExtension(File).TrimStart(',');
|
|
}
|
|
string name = fileInfo.Name;
|
|
DateTime creationTime = fileInfo.CreationTime;
|
|
string fileSize = BytesToReadableValue(fileInfo.Length);
|
|
byte[] fileBytes = ConvertFileToBytes(File);
|
|
string fileStream = Convert.ToBase64String(fileBytes);
|
|
string userId = ERPInfo.Instance.UserId;
|
|
DateTime uploadTime = DateTime.Now;
|
|
|
|
//上传文件到服务器目录
|
|
postUrl = "{0}Api/FileUploadApi.ashx?moduleId={1}&idValue={2}&folder={3}&totsize={4}&position={5}&filename={6}&method={7}";
|
|
if (!string.IsNullOrEmpty(leftTopGridIdValue))
|
|
{
|
|
string token = "";
|
|
string loginUrl = $"{SystemInfo.Instance.OAUrl}/Api/SysUserAjaxApi.ashx";
|
|
HttpTools.setting("application/x-www-form-urlencoded", null, null, HttpTools.Encode.UTF8);
|
|
Dictionary<string, string> loginPmsDic = new Dictionary<string, string>();
|
|
loginPmsDic.Add("method", "Login");
|
|
loginPmsDic.Add("username", ERPInfo.Instance.UserName);
|
|
loginPmsDic.Add("password", ERPInfo.Instance.InPassWord);
|
|
HttpWebResponse loginResponse = HttpTools.Post(loginUrl, "", loginPmsDic, HttpTools.Method.POST, out CookieCollection loginCookie, out string loginResult);
|
|
if (loginResponse != null && !string.IsNullOrEmpty(loginResult))
|
|
{
|
|
JObject jObject = JsonConvert.DeserializeObject<JObject>(loginResult);
|
|
if (jObject.ContainsKey("success"))
|
|
{
|
|
if ((jObject["success"] + "").Equals("True"))
|
|
{
|
|
if (jObject.ContainsKey("token"))
|
|
{
|
|
token = jObject["token"] + "";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!string.IsNullOrEmpty(token))
|
|
{
|
|
postUrl = string.Format(postUrl, SystemInfo.Instance.OAUrl, this.MainViewModel.SysModel.ModuleCode, leftTopGridIdValue, "UploadFilesTemp", fileBytes.Length, 0, name, "DoWebUpload");
|
|
HttpTools.setting("application/x-www-form-urlencoded", null, null);
|
|
string result = "";
|
|
CookieCollection cookieCollection = null;
|
|
Dictionary<string, string> headerDic = new Dictionary<string, string>();
|
|
headerDic.Add("Authorization", $"Bearer {token}");
|
|
HttpWebResponse webResponse = HttpTools.Post(postUrl, fileStream, null, headerDic, 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))
|
|
{
|
|
string fileId = jsonObject["other"] + "";
|
|
string webpath = jsonObject["data"]["WebRelPath"] + "";
|
|
string searchSql = @"update P_fm_FileTab set author='{2}',CreationTime='{3}' ,Uploader='{4}',UploaderId='{5}' ,UploadTime='{6}' ,Pid='{1}'
|
|
where dllcoid = '{0}' and fileId='{7}' ";
|
|
searchSql = string.Format(searchSql, this.MainViewModel.SysModel.ModuleCode, this.leftTopGridIdValue, fileAuthor, fileInfo.CreationTime, ERPInfo.Instance.UserName, ERPInfo.Instance.UserId, uploadTime, fileId);
|
|
SqlHelper.ExecuteNonQuery(searchSql);
|
|
isUpload = true;
|
|
}
|
|
else
|
|
{
|
|
if (jsonObject.ContainsKey("msg"))
|
|
{
|
|
returnMsg = jsonObject["msg"] + "";
|
|
}
|
|
isUpload = false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
returnMsg = "上传请求失败";
|
|
isUpload = false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
returnMsg = loginResult;
|
|
isUpload = false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
returnMsg = "上传节点值不能为空";
|
|
isUpload = false;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
returnMsg = ex.Message;
|
|
isUpload = false;
|
|
}
|
|
msg = returnMsg;
|
|
return isUpload;
|
|
}
|
|
/// <summary>
|
|
/// 删除文件
|
|
/// </summary>
|
|
/// <param name="rowIndex"></param>
|
|
/// <returns></returns>
|
|
private bool DeleteFile(int rowIndex)
|
|
{
|
|
DataRow rowItem = gc_Main.GridView.GetDataRow(rowIndex);
|
|
bool isDelete = false;
|
|
try
|
|
{
|
|
string token = "";
|
|
string loginUrl = $"{SystemInfo.Instance.OAUrl}/Api/SysUserAjaxApi.ashx";
|
|
HttpTools.setting("application/x-www-form-urlencoded", null, null, HttpTools.Encode.UTF8);
|
|
Dictionary<string, string> loginPmsDic = new Dictionary<string, string>();
|
|
loginPmsDic.Add("method", "Login");
|
|
loginPmsDic.Add("username", ERPInfo.Instance.UserName);
|
|
loginPmsDic.Add("password", ERPInfo.Instance.InPassWord);
|
|
HttpWebResponse loginResponse = HttpTools.Post(loginUrl, "", loginPmsDic, HttpTools.Method.POST, out CookieCollection loginCookie, out string loginResult);
|
|
if (loginResponse != null && !string.IsNullOrEmpty(loginResult))
|
|
{
|
|
JObject jObject = JsonConvert.DeserializeObject<JObject>(loginResult);
|
|
if (jObject.ContainsKey("success"))
|
|
{
|
|
if ((jObject["success"] + "").Equals("True"))
|
|
{
|
|
if (jObject.ContainsKey("token"))
|
|
{
|
|
token = jObject["token"] + "";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!string.IsNullOrEmpty(token))
|
|
{
|
|
//删除文件
|
|
//string postUrl = "{0}Api/FileUploadApi.ashx?moduleId={1}&idValue={2}&folder={3}&filename={4}&method={5}";
|
|
string postUrl = "{0}Api/FileUploadApi.ashx?fileId={1}&filename={2}&method={3}";
|
|
//postUrl = string.Format(postUrl, SystemInfo.Instance.OAUrl, this.Model.ModuleCode, "", "UploadFilesTemp", rowItem["name"], "DoDelete");
|
|
postUrl = string.Format(postUrl, SystemInfo.Instance.OAUrl, rowItem["fileId"], rowItem["webpath"], "DoDelete");
|
|
HttpTools.setting("application/x-www-form-urlencoded", null, null);
|
|
string result = "";
|
|
CookieCollection cookieCollection = null;
|
|
HttpWebResponse webResponse = HttpTools.Post(postUrl, "", 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))
|
|
{
|
|
isDelete = true;
|
|
}
|
|
else
|
|
{
|
|
isDelete = false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
isDelete = false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
isDelete = false;
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
isDelete = false;
|
|
}
|
|
return isDelete;
|
|
}
|
|
/// <summary>
|
|
/// 获取文件大小的显示字符串
|
|
/// </summary>
|
|
/// <param name="number"></param>
|
|
/// <returns></returns>
|
|
public static string BytesToReadableValue(double number)
|
|
{
|
|
double last = 1;
|
|
for (int i = 0; i < suffixes.Length; i++)
|
|
{
|
|
var current = Math.Pow(1024, i + 1);
|
|
var temp = number / current;
|
|
if (temp < 1)
|
|
{
|
|
return (number / last).ToString("n2") + suffixes[i];
|
|
}
|
|
last = current;
|
|
}
|
|
return number.ToString();
|
|
}
|
|
/// <summary>
|
|
/// 附件转换byte[]
|
|
/// </summary>
|
|
/// <param name="filePath">附件路径</param>
|
|
/// <returns>二进制</retur |