using ComponentFactory.Krypton.Navigator;
using ComponentFactory.Krypton.Toolkit;
using ComponentFactory.Krypton.Workspace;
using NXWMS.Client.Code.Excel;
using NXWMS.Client.Code.Extends;
using NXWMS.Client.Code.Serialize;
using NXWMS.Client.Model.AppModels.Condition.Common;
using NXWMS.Client.Model.AppModels.Condition.Rule;
using NXWMS.Client.Model.AppModels.Result;
using NXWMS.Client.Model.AppModels.Result.Common;
using NXWMS.Client.Model.AppModels.Result.Rule;
using NXWMS.Client.Model.CoreModels;
using NXWMS.Client.String.Enums;
using NXWMS.Commons;
using NXWMS.Services;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace NXWMS.Forms.Rule
{
public partial class frmTempImportData : Form
{
private string _TemplateCode;
private string _BatchNo;
private int _selectIndex;
private int _selectId;
private string _selectNo;
private int _pageSize;
private int _pageIndex;
private int _totalCount;
private bool _IsCheck;
///
/// 模版列表
///
private List _clientFieldOrderTemplateList;
///
/// 临时数据列表
///
private List _clientFieldOrderBatchList;
///
/// 导入数据列表
///
private List _clientFieldOrderDataList;
///
/// 导入模版选择列表
///
private List _importTemplateSelectList;
///
/// 导入模版列表
///
private List _importTemplateList;
///
/// 界面功能类型
///
public EnumFunctionType _FunctionType;
///
/// 功能类型
///
public enum EnumFunctionType
{
Import,
Search,
}
public frmTempImportData(string templateCode = "", string batchNo = "")
{
InitializeComponent();
_TemplateCode = templateCode;
_BatchNo = batchNo;
InitData();
InitControl();
}
///
/// 控件初始化
///
private void InitControl()
{
CheckForIllegalCrossThreadCalls = false;
dataGridViewBatch.BuildDataGridView(CommonUtil.GetFieldOrderDic(_clientFieldOrderBatchList), false);
dataGridViewFile.BuildDataGridView(CommonUtil.GetFieldOrderDic(_clientFieldOrderDataList), false, false);
dataGridViewTemplate.BuildDataGridView(CommonUtil.GetFieldOrderDic(_clientFieldOrderTemplateList), false, false);
this.SetFormSizeLocation();
//功能类型
switch (_FunctionType)
{
case EnumFunctionType.Import:
txtSearchBatchNo.Text = _BatchNo;
cmbSearchImport.SelectedValue = _TemplateCode;
cmbSearchImport.Enabled = false;
cmbSearchStatus.SelectedValue = (int)TempImportStatus.Init;
txtSearchBatchNo.Text = _TemplateCode.ToUpper().Replace("FRM", "").First()
+ DateTime.Now.ToString("yyyyMMDDHHmmss");
var loadfrm = new frmLoading();
loadfrm.Show();
var message = loadfrm.EventCalExec(LoadSearchTemplate, _pageIndex, _pageSize);
if (!string.IsNullOrWhiteSpace(message))
{
KryptonMessageBox.Show($"查询失败!\r\n{message}", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
break;
case EnumFunctionType.Search:
break;
}
_pageIndex = 1;
_pageSize = 20;
}
///
/// 数据初始化
///
private void InitData()
{
//批次组
_clientFieldOrderBatchList = new List();
_clientFieldOrderBatchList.Add(new ClientFieldOrderResult { FieldName = "BATCH_NO", FieldDesc = "批次单号" });
_clientFieldOrderBatchList.Add(new ClientFieldOrderResult { FieldName = "IMPORT_DATA_NUMBER", FieldDesc = "导入行数" });
_clientFieldOrderBatchList.Add(new ClientFieldOrderResult { FieldName = "ImportStatusName", FieldDesc = "导入状态" });
_clientFieldOrderBatchList.Add(new ClientFieldOrderResult { FieldName = "LAST_CHECK_TIME", FieldDesc = "最后检查时间" });
_clientFieldOrderBatchList.Add(new ClientFieldOrderResult { FieldName = "LAST_CHECK_MESSAGE", FieldDesc = "最后检查消息" });
_clientFieldOrderBatchList.Add(new ClientFieldOrderResult { FieldName = "LAST_IMPORT_TIME", FieldDesc = "最后导入时间" });
_clientFieldOrderBatchList.Add(new ClientFieldOrderResult { FieldName = "LAST_IMPORT_MESSAGE", FieldDesc = "最后导入消息" });
_clientFieldOrderBatchList.Add(new ClientFieldOrderResult { FieldName = "ImportTemplateCode", FieldDesc = "导入模版编码" });
_clientFieldOrderBatchList.Add(new ClientFieldOrderResult { FieldName = "ImportTemplateName", FieldDesc = "导入模版名称" });
_clientFieldOrderBatchList.Add(new ClientFieldOrderResult { FieldName = "ImportModeName", FieldDesc = "导入方式" });
_clientFieldOrderBatchList.Add(new ClientFieldOrderResult { FieldName = "TargetObjectTypeName", FieldDesc = "目标对象编码" });
_clientFieldOrderBatchList.Add(new ClientFieldOrderResult { FieldName = "TargetObjectCode", FieldDesc = "目标对象名称" });
_clientFieldOrderBatchList.Add(new ClientFieldOrderResult { FieldName = "TargetObjectName", FieldDesc = "目标对象类型" });
_clientFieldOrderBatchList.Add(new ClientFieldOrderResult { FieldName = "IMPORT_DATA_JSON", FieldDesc = "导入数据JSON" });
_clientFieldOrderBatchList.Add(new ClientFieldOrderResult { FieldName = "DESCRIBE", FieldDesc = "描述" });
_clientFieldOrderBatchList.Add(new ClientFieldOrderResult { FieldName = "CreateName", FieldDesc = "创建人" });
_clientFieldOrderBatchList.Add(new ClientFieldOrderResult { FieldName = "CREATE_TIME", FieldDesc = "创建时间" });
_clientFieldOrderBatchList.Add(new ClientFieldOrderResult { FieldName = "UpdateName", FieldDesc = "更新人" });
_clientFieldOrderBatchList.Add(new ClientFieldOrderResult { FieldName = "UPDATE_TIME", FieldDesc = "更新时间" });
//Excel数据
_clientFieldOrderDataList = new List();
_clientFieldOrderDataList.Add(new ClientFieldOrderResult { FieldName = "Data", FieldDesc = "Excel数据" });
//模版数据
_clientFieldOrderTemplateList = new List();
_clientFieldOrderTemplateList.Add(new ClientFieldOrderResult { FieldName = "IMPORT_TEMPLATE_CODE", FieldDesc = "导入模版编号" });
_clientFieldOrderTemplateList.Add(new ClientFieldOrderResult { FieldName = "IMPORT_TEMPLATE_NAME", FieldDesc = "导入模版名称" });
_clientFieldOrderTemplateList.Add(new ClientFieldOrderResult { FieldName = "ImportModeName", FieldDesc = "导入方式" });
_clientFieldOrderTemplateList.Add(new ClientFieldOrderResult { FieldName = "TARGET_OBJECT_CODE", FieldDesc = "源对象编码" });
_clientFieldOrderTemplateList.Add(new ClientFieldOrderResult { FieldName = "TARGET_OBJECT_NAME", FieldDesc = "源对象名称" });
_clientFieldOrderTemplateList.Add(new ClientFieldOrderResult { FieldName = "TargetObjectType", FieldDesc = "源对象类型" });
_clientFieldOrderTemplateList.Add(new ClientFieldOrderResult { FieldName = "SOURCE_CODE", FieldDesc = "源结构编码" });
_clientFieldOrderTemplateList.Add(new ClientFieldOrderResult { FieldName = "SOURCE_NAME", FieldDesc = "源结构名称" });
_clientFieldOrderTemplateList.Add(new ClientFieldOrderResult { FieldName = "SourceTypeName", FieldDesc = "源结构类型" });
_clientFieldOrderTemplateList.Add(new ClientFieldOrderResult { FieldName = "SourceLength", FieldDesc = "源结构长度" });
_clientFieldOrderTemplateList.Add(new ClientFieldOrderResult { FieldName = "SourceRequiredFlagName", FieldDesc = "源结构必填标识" });
_clientFieldOrderTemplateList.Add(new ClientFieldOrderResult { FieldName = "TARGET_CODE", FieldDesc = "目标结构编码" });
_clientFieldOrderTemplateList.Add(new ClientFieldOrderResult { FieldName = "TARGET_NAME", FieldDesc = "目标结构名称" });
_clientFieldOrderTemplateList.Add(new ClientFieldOrderResult { FieldName = "TargetTypeName", FieldDesc = "目标结构类型" });
_clientFieldOrderTemplateList.Add(new ClientFieldOrderResult { FieldName = "TargetLength", FieldDesc = "目标结构长度" });
_clientFieldOrderTemplateList.Add(new ClientFieldOrderResult { FieldName = "TargetRequiredFlagName", FieldDesc = "目标结构必填标识" });
_clientFieldOrderTemplateList.Add(new ClientFieldOrderResult { FieldName = "TargetRelationTypeName", FieldDesc = "目标关联类型编码" });
_clientFieldOrderTemplateList.Add(new ClientFieldOrderResult { FieldName = "TargetRelationContent", FieldDesc = "目标关联类型内容" });
var importTemplateResult = RuleServices.importTemplateService.GetList(new ImportTemplateSearchCondition { IsUsed = true, ItemSQL = "IMPORT_TEMPLATE_CODE,IMPORT_TEMPLATE_NAME" });
if (importTemplateResult.Status == OperateStatus.Success)
{
_importTemplateSelectList = importTemplateResult.Data.RowData.ToList();
}
var fieldList = new List().Add(new FieldValue { Code = "", Name = "全部" });
cmbSearchImport.DataSource = fieldList.GetFieldValueIdList(_importTemplateSelectList, "IMPORT_TEMPLATE_CODE", "IMPORT_TEMPLATE_NAME");
cmbSearchImport.DisplayMember = "Name";
cmbSearchImport.ValueMember = "Id";
cmbSearchImport.SelectedIndex = -1;
fieldList = new List().Add(new FieldValue { Id = "", Name = "全部" });
cmbSearchStatus.DataSource = new List().GetFieldValueIdList();
cmbSearchStatus.DisplayMember = "Name";
cmbSearchStatus.ValueMember = "Id";
cmbSearchStatus.SelectedIndex = -1;
}
private void btnSelect_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Files|*.xls;*.xlsx";
openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
var filePath = openFileDialog.FileName;
var loadfrm = new frmLoading();
loadfrm._message = "正在加载文件数据,请耐心等待......";
loadfrm.Show();
Thread.Sleep(500);
Application.DoEvents();
var message = loadfrm.EventCalExec(LoadFileData, dataGridViewFile, filePath);
if (!string.IsNullOrWhiteSpace(message))
{
KryptonMessageBox.Show($"加载失败!\r\n{message}", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
txtFilePath.Text = filePath;
dataGridViewFile.Columns.Add("$INFO", "执行结果");
dataGridViewFile.Columns["$INFO"].ReadOnly = true;
dataGridViewFile.Columns["$INFO"].DisplayIndex = 0;
navigatorTool.SelectedPage = pagImportFile;
}
}
///
/// 加载文件数据
///
///
///
///
private string LoadFileData(DataGridView dataGridView, string filePath)
{
dataGridView.Columns.Clear();
dataGridView.DataSource = SDExcelHelper.GetDataTable(filePath);
return string.Empty;
}
private void btnSearch_Click(object sender, EventArgs e)
{
_pageIndex = 1;
var loadfrm = new frmLoading();
loadfrm.Show();
var message = loadfrm.EventCalExec(LoadSearchBatch, this.pageTool.PageIndex, this.pageTool.PageSize);
pageTool.DataCount = _totalCount;
if (!string.IsNullOrWhiteSpace(message))
{
KryptonMessageBox.Show($"查询失败!\r\n{message}", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private string LoadSearchBatch(int pageIndex, int pageSize)
{
var result = TempServices.tempImportService.GetList(new TempImportSearchCondition
{
OperationUserId = AppConfig.UserLoginResult.UserInfo.UserId,
BatchNo = txtSearchBatchNo.Text,
ImportStatus = cmbSearchImport.SelectedValue.GetObjectToInt(),
PageIndex = pageIndex,
PageSize = pageSize
});
if (result.Status == OperateStatus.Success)
{
_totalCount = result.Data.TotalCount;
_pageIndex = pageIndex;
_pageSize = pageSize;
if (result.Data.RowData.Any())
{
dataGridViewBatch.Columns.Clear();
dataGridViewBatch.DataSource = result.Data.RowData.ToList();
dataGridViewBatch.BuildDataGridView(CommonUtil.GetFieldOrderDic(_clientFieldOrderBatchList));
}
else
{
if (dataGridViewBatch.DataSource != null)
{
dataGridViewBatch.DataSource = new List();
}
dataGridViewBatch.BuildDataGridView(CommonUtil.GetFieldOrderDic(_clientFieldOrderBatchList), false);
}
return string.Empty;
}
else
{
return result.Message;
}
}
private string LoadSearchTemplate(int pageIndex, int pageSize)
{
var result = RuleServices.importTemplateService.GetDetailList(new ImportTemplateDetailSearchCondition { IsUsed = true, TemplateCode = _TemplateCode });
if (result.Status == OperateStatus.Success)
{
_importTemplateList = result.Data.ToList();
if (result.Data.Any())
{
dataGridViewTemplate.Columns.Clear();
dataGridViewTemplate.DataSource = result.Data;
dataGridViewTemplate.BuildDataGridView(CommonUtil.GetFieldOrderDic(_clientFieldOrderTemplateList));
}
else
{
if (dataGridViewTemplate.DataSource != null)
{
dataGridViewTemplate.DataSource = new List();
}
dataGridViewTemplate.BuildDataGridView(CommonUtil.GetFieldOrderDic(_clientFieldOrderTemplateList), false);
}
navigatorTool.SelectedPage = pagTemplate;
return string.Empty;
}
else
{
return result.Message;
}
}
private void btnCheck_Click(object sender, EventArgs e)
{
if (dataGridViewFile.Rows.Count > 0)
{
txtSearchBatchNo.Enabled = false;
var data = (DataTable)dataGridViewFile.DataSource;
int index = 0;
foreach (DataRow dr in data.Rows)
{
DataRow[] dataTemp = { dr };
var detail = new TempImportDetailCondition
{
DataJson = dataTemp.CopyToDataTable(),
BatchNo = txtSearchBatchNo.Text,
ImportTemplateId = _importTemplateList.FirstOrDefault().IMPORT_TEMPLATE_ID,
TempImportExecType = TempImportExecType.Check,
};
//添入临时表
var addResult = TempServices.tempImportService.Add(new TempImportCondition
{
OperationUserId = AppConfig.UserLoginResult.UserInfo.UserId,
DetailList = new List().Add(detail),
});
if (addResult.Status == OperateStatus.Success)
{
dataGridViewFile.Rows[index].Cells["$INFO"].Value = "导入成功!开始执行检查...";
//检查数据
var checkResult = TempServices.tempImportService.Exec(new TempImportExecCondition
{
OperationUserId = AppConfig.UserLoginResult.UserInfo.UserId,
BatchNo = txtSearchBatchNo.Text,
TempImportExecType = TempImportExecType.Check,
});
Application.DoEvents();
//检查成功
if (checkResult.Status == OperateStatus.Success)
{
dataGridViewFile.Rows[index].Cells["$INFO"].Value = "检查成功!可进行导入!";
dataGridViewFile.Rows[index].Cells["$INFO"].Style.ForeColor = Color.Green;
}
else
{
dataGridViewFile.Rows[index].Cells["$INFO"].Value = "检查失败!" + checkResult.Message;
dataGridViewFile.Rows[index].Cells["$INFO"].Style.ForeColor = Color.Red;
}
}
else
{
dataGridViewFile.Rows[index].Cells["$INFO"].Value = "出现位置错误!"+addResult.Message;
dataGridViewFile.Rows[index].Cells["$INFO"].Style.ForeColor = Color.Violet;
}
index++;
}
_IsCheck = true;
}
else
{
_IsCheck = false;
KryptonMessageBox.Show($"请选择导入文件!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void btnImport_Click(object sender, EventArgs e)
{
if (!_IsCheck)
{
KryptonMessageBox.Show($"请先执行检查数据!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
if (dataGridViewFile.Rows.Count > 0)
{
//导入
var checkResult = TempServices.tempImportService.Exec(new TempImportExecCondition
{
OperationUserId = AppConfig.UserLoginResult.UserInfo.UserId,
BatchNo = txtSearchBatchNo.Text,
TempImportExecType = TempImportExecType.Import,
});
Application.DoEvents();
int index = 0;
//检查成功
if (checkResult.Status == OperateStatus.Success)
{
foreach(DataRow item in dataGridViewFile.Rows)
{
dataGridViewFile.Rows[index].Cells["$INFO"].Value = "导入成功!";
dataGridViewFile.Rows[index].Cells["$INFO"].Style.ForeColor = Color.Green;
}
}
else
{
dataGridViewFile.Rows[index].Cells["$INFO"].Value = "导入失败!" + checkResult.Message;
dataGridViewFile.Rows[index].Cells["$INFO"].Style.ForeColor = Color.Red;
}
index++;
_IsCheck = false;
txtSearchBatchNo.Enabled = true;
txtSearchBatchNo.Text = "";
txtFilePath.Text = "";
dataGridViewFile.DataSource = new DataTable();
}
else
{
KryptonMessageBox.Show($"请选择导入文件!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
}