LIS报告单模板管理工具
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

170 lines
7.4 KiB

using DevExpress.XtraGrid.Columns;
using ReportTemplateTool.Models;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Forms;
namespace ReportTool.Views
{
public partial class LisReportFileForm : BaseView
{
private string _reportFileCode = "";
private List<DictReportFile> _reportFiles = new List<DictReportFile>();
public LisReportFileForm(string code)
{
InitializeComponent();
Load += (s, e) =>
{
this.GetReportFileAllData();
};
this._reportFileCode = code;
UploadBtn.Click += UploadBtnClick;
DownloadBtn.Click += DownloadBtnClick;
DelBtn.Click += DelBtnClick;
SaveBtn.Click += SaveBtnClick;
}
private void GetReportFileAllData()
{
_reportFiles = _db.DictReportFile.Where(p => p.Code == _reportFileCode).ToList();
if (this._reportFileCode == "Lis")
{
foreach (DictReportFile file in _reportFiles)
{
file.SampleCodes = string.Join(",", _db.DictReport.Where(p => (p.FileName + ".frx") == file.FileName).Select(p => p.SampleCode).ToList());
}
}
Invoke(new Action(() => { ReportFileControl.DataSource = _reportFiles; }));
}
private void UploadBtnClick(object sender, EventArgs e)
{
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
openFileDialog.InitialDirectory = "D:\\ProgramCode\\company\\LisWeb\\liswebsvn\\LisWeb\\ReportFiles";
openFileDialog.RestoreDirectory = true;
openFileDialog.Multiselect = true;
openFileDialog.Title = "选择多个文件";
openFileDialog.Filter = "模版文件 (*.frx)|*.frx";
openFileDialog.FilterIndex = 2;
//openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
List<DictReportFile> _addReportFiles = new List<DictReportFile>();
List<DictReportFile> _updateReportFiles = new List<DictReportFile>();
foreach (string filePath in openFileDialog.FileNames)
{
FileInfo fileInfo = new FileInfo(filePath);
DictReportFile _reportFile = _reportFiles.FirstOrDefault(p => p.FileName == fileInfo.Name);
if (_reportFile != null)
{
_reportFile.File = File.ReadAllBytes(filePath);
_reportFile.UpdateTime = DateTime.Now;
_updateReportFiles.Add(_reportFile);
}
else
{
_addReportFiles.Add(new DictReportFile
{
Code = _reportFileCode,
FileName = fileInfo.Name,
File = File.ReadAllBytes(filePath),
UpdateTime = DateTime.Now
});
}
}
string message = $"新上传文件{_addReportFiles.Count}个";
if (_updateReportFiles.Count > 0)
{
message += $",{string.Join(",", _updateReportFiles.Select(p => p.FileName).ToList())}等已存储文件将会被更新,是否确认上传?";
}
DialogResult result = MessageBox.Show( message, "操作确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
_db.DictReportFile.AddRange(_addReportFiles);
_db.SaveChanges();
}
this.GetReportFileAllData();
}
}
}
private void DownloadBtnClick(object sender, EventArgs e)
{
if (ReportFileGrid.SelectedRowsCount > 0)
{
using (FolderBrowserDialog folderDialog = new FolderBrowserDialog())
{
List<string> failFile = new List<string>();
int successCount = ReportFileGrid.SelectedRowsCount;
if (folderDialog.ShowDialog() == DialogResult.OK)
{
foreach (var file in _reportFiles.Where(p => ReportFileGrid.GetSelectedRows().Contains(_reportFiles.IndexOf(p))))
{
if (file != null)
{
bool saveStatus = DownloadFile(file, folderDialog.SelectedPath);
if (!saveStatus)
{
failFile.Add(file.FileName);
successCount--;
}
}
}
MessageBox.Show($"选择文件{ReportFileGrid.SelectedRowsCount}个,下载成功{successCount}个,下载失败{failFile.Count}个!", "成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
else
{
MessageBox.Show("请先选择要下载的文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
private bool DownloadFile(DictReportFile file, string savePath)
{
try
{
string _filename = file.FileName;
if (!_filename.Contains(".frx")) _filename += ".frx";
File.WriteAllBytes(Path.Combine(savePath, _filename), file.File);
return true;
}
catch (Exception ex)
{
return false;
}
}
private void DelBtnClick(object sender, EventArgs e)
{
if (ReportFileGrid.SelectedRowsCount == 0) return;
DialogResult result = MessageBox.Show($"是否删除所选中的{ReportFileGrid.SelectedRowsCount}个报告单模版文件数据?", "操作确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
foreach (var file in _reportFiles.Where(p => ReportFileGrid.GetSelectedRows().Contains(_reportFiles.IndexOf(p))))
{
_db.DictReportFile.Remove(file);
}
_db.SaveChanges();
this.GetReportFileAllData();
}
}
private void SaveBtnClick(object sender, EventArgs e)
{
for (int i = 0; i < ReportFileGrid.DataRowCount; i++)
{
long ID = Convert.ToInt64(ReportFileGrid.GetRowCellValue(i, "ID").ToString());
string fileName = (ReportFileGrid.GetRowCellValue(i, "FileName").ToString() as string);
_db.Database.ExecuteSqlCommand($"update Dict_ReportFile set FileName = '{fileName}', UpdateTime = '{DateTime.Now}' where ID = {ID} and FileName <> '{fileName}'");
}
this.GetReportFileAllData();
}
}
}