添加变量名称导入

This commit is contained in:
dell
2023-07-27 15:19:54 +08:00
parent 01d9e60036
commit f897bdeae0
19 changed files with 1478 additions and 76 deletions

View File

@ -9,6 +9,9 @@ using HT.Cloud.Service;
using Microsoft.AspNetCore.Authorization;
using HT.Cloud.Service.DevicesManage;
using System.Text.RegularExpressions;
using HT.Cloud.Domain.DevicesManage;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
namespace HT.Cloud.Web.Areas.DevicesManage.Controllers
{
@ -73,6 +76,57 @@ namespace HT.Cloud.Web.Areas.DevicesManage.Controllers
var data = await _metaTagService.GetGroupVarTreeTable(groupIId);
return Content(data);
}
[HttpPost]
public async Task<ActionResult> ImportExcelToTableData(string[] groupId)
{
//var data = await _metaTagService.ImportExcelToTableData(metaTags);
var list = JsonConvert.DeserializeObject<List<Meta_Tag>>(groupId[0].Remove(0, 17).Remove(groupId[0].Length - 17 - 2, 2));
list.Remove(list[0]);
List<MetaTagEntity> metaTags = new List<MetaTagEntity>();
foreach (var item in list)
{
try
{
MetaTagEntity metaTag = new MetaTagEntity();
metaTag.TagID = int.Parse(item.TagID);
metaTag.TagName = item.TagName;
metaTag.DataType = short.Parse(item.TagID);
metaTag.DataSize = int.Parse(item.DataSize);
metaTag.Address = item.Address;
metaTag.GroupID = int.Parse(item.GroupID);
metaTag.IsActive = true;
metaTag.Archive = true;
metaTag.DefaultValue = item.DefaultValue;
metaTag.Description = item.Description;
metaTag.Maximum = float.Parse(item.Maximum);
metaTag.Minimum = float.Parse(item.Minimum);
metaTag.Cycle = int.Parse(item.Cycle);
metaTag.Subsystem = item.Subsystem;
metaTag.Units = item.Units;
metaTag.WriteAddress = item.WriteAddress;
metaTag.SysType = item.SysType;
metaTag.SysAddress = item.SysAddress;
if (item.IFloatPlaces == "")
{
metaTag.IFloatPlaces = 0;
}
else
{
metaTag.IFloatPlaces = short.Parse(item.IFloatPlaces);
}
metaTags.Add(metaTag);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
var data = await _metaTagService.ImportExcelToTableData(metaTags);
return Content(data);
}
[HttpPost]
public async Task<ActionResult> SaveArgument(string driverId, string name, string value)
{
@ -80,5 +134,32 @@ namespace HT.Cloud.Web.Areas.DevicesManage.Controllers
return Content(data);
}
}
public class Meta_Tag
{
public string TagID { get; set; }
public string TagName { get; set; }
public string DataType { get; set; }
public string DataSize { get; set; }
public string Address { get; set; }
public string GroupID { get; set; }
public string IsActive { get; set; }
public string Archive { get; set; }
public string DefaultValue { get; set; }
public string Description { get; set; }
public string Maximum { get; set; }
public string Minimum { get; set; }
public string Cycle { get; set; }
public string Subsystem { get; set; }
public string Units { get; set; }
public string WriteAddress { get; set; }
public string SysType { get; set; }
public string SysAddress { get; set; }
public string IFloatPlaces { get; set; }
}
}
}

View File

@ -8,9 +8,9 @@
padding-right: 0px;
}
</style>
<script type="text/javascript" src="~/lib/xlsx/dist/xlsx.full.min.js"></script>
<script>
layui.use(['jquery', 'form', 'table', 'common','tree','util', 'dtree', 'commonTable', 'optimizeSelectOption'], function () {
layui.use(['jquery', 'form', 'table', 'common', 'tree', 'util', 'dtree', 'commonTable', 'optimizeSelectOption','excel'], function () {
var $ = layui.jquery,
form = layui.form,
commonTable = layui.commonTable,
@ -19,6 +19,7 @@
layer = layui.layer,
util = layui.util,
tree = layui.tree,
excel = layui.excel,
//echarts = layui.echarts,
common = layui.common;
//加载数据
@ -92,16 +93,71 @@
data: { driverId: datapa },
success: function (redata) {
//在此判断cpu类型并展现不同的表单。
var argumentFormSiemens = document.getElementById('argumentFormSiemens');
argumentFormSiemens.style.display = 'block';
debugger;
document.getElementById('ServerName_Siemens').value = redata.ServerName;
document.getElementById('Rack_Siemens').value = redata.Rack;
document.getElementById('Slot_Siemens').value = redata.Slot;
document.getElementById('TimeOut_Siemens').value = redata.TimeOut;
document.getElementById('Alias_Siemens').value = redata.Alias;
//document.getElementById('PLCType_Siemens').value = redata.PLCType;
select_value("PLCType_Siemens", redata.PLCType);
if (redata.DriverType == 'DriverSiemensS7'){
var argumentFormSiemens = document.getElementById('argumentFormSiemens');
var argumentFormAllenBradley = document.getElementById('argumentFormAllenBradley');
var argumentFormSchneideir = document.getElementById('argumentFormSchneideir');
var argumentFormOpc = document.getElementById('argumentFormOpc');
argumentFormSiemens.style.display = 'block';
argumentFormAllenBradley.style.display = 'none';
argumentFormSchneideir.style.display = 'none';
argumentFormOpc.style.display = 'none';
debugger;
document.getElementById('ServerName_Siemens').value = redata.ServerName;
document.getElementById('Rack_Siemens').value = redata.Rack;
document.getElementById('Slot_Siemens').value = redata.Slot;
document.getElementById('TimeOut_Siemens').value = redata.TimeOut;
document.getElementById('Alias_Siemens').value = redata.Alias;
//document.getElementById('PLCType_Siemens').value = redata.PLCType;
select_value("PLCType_Siemens", redata.PLCType);
} else if (redata.DriverType == 'AllenBradleyEIP') {
var argumentFormSiemens = document.getElementById('argumentFormSiemens');
var argumentFormAllenBradley = document.getElementById('argumentFormAllenBradley');
var argumentFormSchneideir = document.getElementById('argumentFormSchneideir');
var argumentFormOpc = document.getElementById('argumentFormOpc');
argumentFormSiemens.style.display = 'none';
argumentFormAllenBradley.style.display = 'block';
argumentFormSchneideir.style.display = 'none';
argumentFormOpc.style.display = 'none';
debugger;
document.getElementById('ServerName_AllenBradley').value = redata.ServerName;
document.getElementById('Port_AllenBradley').value = redata.Port;
document.getElementById('Slot_AllenBradley').value = redata.Slot;
document.getElementById('TimeOut_AllenBradley').value = redata.TimeOut;
document.getElementById('Alias_AllenBradley').value = redata.Alias;
//select_value("PLCType_AllenBradley", redata.PLCType);
} else if (redata.DriverType == 'ModbusTcp'){
var argumentFormSiemens = document.getElementById('argumentFormSiemens');
var argumentFormAllenBradley = document.getElementById('argumentFormAllenBradley');
var argumentFormSchneideir = document.getElementById('argumentFormSchneideir');
var argumentFormOpc = document.getElementById('argumentFormOpc');
argumentFormSiemens.style.display = 'none';
argumentFormAllenBradley.style.display = 'none';
argumentFormSchneideir.style.display = 'block';
argumentFormOpc.style.display = 'none';
debugger;
document.getElementById('ServerName_Schneideir').value = redata.ServerName;
document.getElementById('Port_Schneideir').value = redata.Port;
document.getElementById('SlaveID_Schneideir').value = redata.SlaveID;
document.getElementById('TimeOut_Schneideir').value = redata.TimeOut;
document.getElementById('Alias_Schneideir').value = redata.Alias;
//select_value("PLCType_Schneideir", redata.PLCType);
} else if (redata.DriverType == 'OpcUaClient') {
var argumentFormSiemens = document.getElementById('argumentFormSiemens');
var argumentFormAllenBradley = document.getElementById('argumentFormAllenBradley');
var argumentFormSchneideir = document.getElementById('argumentFormSchneideir');
var argumentFormOpc = document.getElementById('argumentFormOpc');
argumentFormSiemens.style.display = 'none';
argumentFormAllenBradley.style.display = 'none';
argumentFormSchneideir.style.display = 'none';
argumentFormOpc.style.display = 'block';
debugger;
document.getElementById('ServerName_Opc').value = redata.ServerName;
document.getElementById('Port_Opc').value = redata.Port;
document.getElementById('ServerUri_Opc').value = redata.ServerUri;
document.getElementById('TimeOut_Opc').value = redata.TimeOut;
document.getElementById('Alias_Opc').value = redata.Alias;
}
}
});
}
@ -114,9 +170,11 @@
}
}
}
var rrid = "0";
async function LaodTagList(row) {
debugger;
var group_Id = row.id.toString();
rrid = group_Id;
var datapa = new Array;
datapa.push(group_Id);
var tableHeight = showTag.style.height - 10;
@ -140,48 +198,60 @@
traditional: true,//这里设置为true
data: { groupId: datapa },
success: function (redata) {
var options ={
elem: '#metaTable',
height:'full-10',
data: redata.data,
editTrigger:'dblclick',
//page:true,
//limit:20,
treeIdName: 'TreeId',
treePidName: 'F_TreeId',
cols:[[
{ type: 'checkbox' },
{ field: 'Subsystem', title: '子系统', edit: 'text'},
{ field: 'Description' , title:'变量名称' , edit:'text'},
//{ field: 'Address', title: '起始地址', edit: 'text' },
//{ field: 'DataType' , title:'数值类型' , edit:'text'},
{ field: 'Units' , title:'变量单位' , edit:'text'},
//{ field: 'TagID', title: 'ID' },
]],
if (group_Id == "B25091")
{
var options ={
elem: '#metaTable',
height:'full-10',
data: redata.data,
editTrigger:'dblclick',
//page:true,
//limit:20,
treeIdName: 'TreeId',
treePidName: 'F_TreeId',
cols:[[
{ type: 'checkbox' },
{ field: 'Subsystem', title: '子系统', edit: 'text'},
{ field: 'Description' , title:'变量名称' , edit:'text'},
{ field: 'Address', title: '起始地址', edit: 'text' },
{ field: 'DataType' , title:'数值类型' , edit:'text'},
{ field: 'Units' , title:'变量单位' , edit:'text'},
{ field: 'SysType', title: '变量分类', edit: 'text' },
{ field: 'IFloatPlaces', title: '小数位数', edit: 'text' },
//{ field: 'TagID', title: 'ID' },
]],
}
commonTable.rendertreetable(options);
}
commonTable.rendertreetable(options);
//table.render({
// elem: '#metaTable',
// height:'full-10',
// data: redata.data,
// editTrigger:'dblclick',
// cols:[[
// { type: 'checkbox' },
// { field: 'Subsystem', title: '子系统', edit: 'text'},
else
{
var options ={
elem: '#metaTable',
height:'full-10',
data: redata.data,
editTrigger:'dblclick',
cols:[[
{ type: 'checkbox' },
{ field: 'Subsystem', title: '子系统', edit: 'text'},
// { field: 'Description' , title:'变量名称' , edit:'text'},
// //{ field: 'TagName' , title:'变量编码' , edit:'text'},
// { field: 'Address', title: '起始地址', edit: 'text' },
// { field: 'DataType' , title:'数值类型' , edit:'text'},
{ field: 'Description' , title:'变量名称' , edit:'text'},
//{ field: 'TagName' , title:'变量编码' , edit:'text'},
{ field: 'Address', title: '起始地址', edit: 'text' },
{ field: 'DataType' , title:'数值类型' , edit:'text'},
// //{ field: 'RtValue' , title:'当前值' , edit:'text'},
// { field: 'Units' , title:'变量单位' , edit:'text'},
// { field: 'TagID', title: 'ID', sort: true },
//{ field: 'RtValue' , title:'当前值' , edit:'text'},
{ field: 'Units' , title:'变量单位' , edit:'text'},
{ field: 'SysType', title: '变量分类', edit: 'text' },
{ field: 'IFloatPlaces', title: '小数位数', edit: 'text' },
//{ field: 'TagID', title: 'ID', sort: true },
// ]],
// page:true,
// limit:20,
//});
]],
page:true,
limit:20,
}
commonTable.rendertable(options);
}
}
});
}
@ -226,6 +296,188 @@
height: "699px",
});
}
openImport = function () {
var htmlContent = '<div style="width:100%;height:100%;text-align: center;">'
htmlContent += '<div class="layui-upload-drag" id="importData" >';
htmlContent += '<input multiple="multiple" type="file" style="cursor:pointer;opacity: 0.0; position: absolute; top: 0; left: 0; bottom: 0; right: 0; width: 100%; height:100%;">';
htmlContent += '<i class="layui-icon"></i>';
htmlContent += '<p id="filename">点击选择文件,或将文件拖拽到此处,支持多文件导入</p>';
htmlContent += '</div>';
htmlContent += '<div ">';
htmlContent += '<button id="downloadFiles" class="layui-btn" style="margin-top:10px;margin-bottom:10px;">下载模板</button>';
htmlContent += '</div>';
htmlContent += '</div>';
layer.open({
type: 1
, offset: "auto"
, id: 'layer_importData'
, title: '导入'
, area: '400px'
, content: htmlContent //需要打开的模板
, btnAlign: 'c' //按钮居中
, shade: 0 //不显示遮罩
, success: function (layero, index) {
// 监听上传文件的事件
$('#importData').change(function (e) {
var files = e.target.files;
debugger;
uploadExcel(files);
});
//下载模板
}
});
}
async function uploadExcel(files) {
debugger;
excel.importExcel(files, {
// 读取数据的同时梳理数据
fields: {
'TagID': 'A'
, 'TagName': 'B'
, 'DataType': 'C'
, 'DataSize': 'D'
, 'Address': 'E'
, 'GroupID': 'F'
, 'IsActive': 'G'
, 'Archive': 'H'
, 'DefaultValue': 'I'
, 'Description': 'J'
, 'Maximum': 'K'
, 'Minimum': 'L'
, 'Cycle': 'M'
, 'Subsystem': 'N'
, 'Units': 'O'
, 'WriteAddress': 'P'
, 'SysType': 'Q'
, 'SysAddress': 'R'
, 'IFloatPlaces':'S'
}
},async function (data) {
// 还可以再进行数据梳理
///* data = excel.filterImportData(data, {
// 'collection_point': 'A'
// , 'pass': 'B'
// , 'jump_out': 'C'
// , 'input': 'D'
//*/
console.log("data", data, "files", files);
var datapa = new Array;
datapa.push(JSON.stringify(data).toString());
await $.ajax({
url: "/DevicesManage/MetaTag/ImportExcelToTableData",//GetGroupVarTable
type: "Post",
dataType: "json",
traditional: true,//这里设置为true
data: {groupId: datapa },
success: function (redata) {
debugger;
//var group_Id = row.id.toString();
debugger;
if (rrid == "B25091") {
var options = {
elem: '#metaTable',
height: 'full-10',
data: redata.data,
editTrigger: 'dblclick',
//page:true,
//limit:20,
treeIdName: 'TreeId',
treePidName: 'F_TreeId',
cols: [[
{ type: 'checkbox' },
{ field: 'Subsystem', title: '子系统', edit: 'text' },
{ field: 'Description', title: '变量名称', edit: 'text' },
{ field: 'Address', title: '起始地址', edit: 'text' },
{ field: 'DataType', title: '数值类型', edit: 'text' },
{ field: 'Units', title: '变量单位', edit: 'text' },
{ field: 'SysType', title: '变量分类', edit: 'text' },
{ field: 'IFloatPlaces', title: '小数位数', edit: 'text' },
//{ field: 'TagID', title: 'ID' },
]],
}
commonTable.rendertreetable(options);
}
else {
var options = {
elem: '#metaTable',
height: 'full-10',
data: redata.data,
editTrigger: 'dblclick',
cols: [[
{ type: 'checkbox' },
{ field: 'Subsystem', title: '子系统', edit: 'text' },
{ field: 'Description', title: '变量名称', edit: 'text' },
//{ field: 'TagName' , title:'变量编码' , edit:'text'},
{ field: 'Address', title: '起始地址', edit: 'text' },
{ field: 'DataType', title: '数值类型', edit: 'text' },
//{ field: 'RtValue' , title:'当前值' , edit:'text'},
{ field: 'Units', title: '变量单位', edit: 'text' },
{ field: 'SysType', title: '变量分类', edit: 'text' },
{ field: 'IFloatPlaces', title: '小数位数', edit: 'text' },
//{ field: 'TagID', title: 'ID', sort: true },
]],
page: true,
limit: 20,
}
commonTable.rendertable(options);
}
}
});
//layer.close(index);
//layer.close(index - 1);
//layer.close(sLayer);
})
}
newDriver = function () {
@ -322,18 +574,134 @@
</div>
</form>
</div>
<div id="argumentFormAllen-Bradley" class="formList" style="height:100%;width:100%;display:none">
<div id="argumentFormAllenBradley" class="formList" style="height:100%;width:100%;display:none">
<form class="layui-form" action="">
<div class="layui-form-item">
<label class="layui-form-label">CPU地址<em class="dotRed">*</em></label>
<div class="layui-input-block">
<input type="text" id="ServerName_AllenBradley" name="ServerName" placeholder="请输入地址" class="layui-input" style="width: 320px;">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">CPU别名<em class="dotRed">*</em></label>
<div class="layui-input-block">
<input type="text" id="Alias_AllenBradley" name="Alias" placeholder="请设置CPU别名" class="layui-input" style="width: 320px;">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">Port<em class="dotRed">*</em></label>
<div class="layui-input-block">
<input type="text" id="Port_AllenBradley" name="Port" placeholder="请输入Port" class="layui-input" style="width: 320px;">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">Slot<em class="dotRed">*</em></label>
<div class="layui-input-block">
<input type="text" id="Slot_AllenBradley" name="Slot" placeholder="请输入Slot" class="layui-input" style="width: 320px;">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">超时时间<em class="dotRed">*</em></label>
<div class="layui-input-block">
<input type="text" id="TimeOut_AllenBradley" name="TimeOut" placeholder="请输入超时时间" class="layui-input" style="width: 320px;">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formDemo">确认修改</button>
</div>
</div>
</form>
</div>
<div id="argumentFormSchneideir" class="formList" style="height:100%;width:100%;display:none">
<form class="layui-form" action="">
<div class="layui-form-item">
<label class="layui-form-label">CPU地址<em class="dotRed">*</em></label>
<div class="layui-input-block">
<input type="text" id="ServerName_Schneideir" name="ServerName" placeholder="请输入地址" class="layui-input" style="width: 320px;">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">CPU别名<em class="dotRed">*</em></label>
<div class="layui-input-block">
<input type="text" id="Alias_Schneideir" name="Alias" placeholder="请设置CPU别名" class="layui-input" style="width: 320px;">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">Port<em class="dotRed">*</em></label>
<div class="layui-input-block">
<input type="text" id="Port_Schneideir" name="Port" placeholder="请输入Port" class="layui-input" style="width: 320px;">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">从站ID<em class="dotRed">*</em></label>
<div class="layui-input-block">
<input type="text" id="SlaveID_Schneideir" name="Slot" placeholder="请输入从站ID" class="layui-input" style="width: 320px;">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">超时时间<em class="dotRed">*</em></label>
<div class="layui-input-block">
<input type="text" id="TimeOut_Schneideir" name="TimeOut" placeholder="请输入超时时间" class="layui-input" style="width: 320px;">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formDemo">确认修改</button>
</div>
</div>
</form>
</div>
<div id="argumentFormOpc" class="formList" style="height:100%;width:100%;display:none">
<form class="layui-form" action="">
<div class="layui-form-item">
<label class="layui-form-label">CPU地址<em class="dotRed">*</em></label>
<div class="layui-input-block">
<input type="text" id="ServerName_Opc" name="ServerName" placeholder="请输入地址" class="layui-input" style="width: 320px;">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">CPU别名<em class="dotRed">*</em></label>
<div class="layui-input-block">
<input type="text" id="Alias_Opc" name="Alias" placeholder="请设置CPU别名" class="layui-input" style="width: 320px;">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">Port<em class="dotRed">*</em></label>
<div class="layui-input-block">
<input type="text" id="Port_Opc" name="Port" placeholder="请输入Port" class="layui-input" style="width: 320px;">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">服务地址<em class="dotRed">*</em></label>
<div class="layui-input-block">
<input type="text" id="ServerUri_Opc" name="ServerUri" placeholder="请输入服务地址" class="layui-input" style="width: 320px;">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">超时时间<em class="dotRed">*</em></label>
<div class="layui-input-block">
<input type="text" id="TimeOut_Opc" name="TimeOut" placeholder="请输入超时时间" class="layui-input" style="width: 320px;">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formDemo">确认修改</button>
</div>
</div>
</form>
</div>
</div>
<div id="showTag" style="height:100%;width:100%">@*;background:black*@
<div class="layui-btn-container" id="toolbar">
<button id="NF-add" name="NF-add" authorize class="layui-btn layui-btn-sm layui-btn-normal " lay-event="add" onclick="openForm()"><i class="layui-icon">&#xe654;</i>新增</button>
<button id="NF-edit" name="NF-edit" authorize class="layui-btn layui-btn-sm layui-btn-warm " lay-event="edit" onclick="openEdit()"><i class="layui-icon">&#xe642;</i>修改</button>
<button id="NF-import" name="NF-import" authorize class="layui-btn layui-btn-sm layui-btn-normal " lay-event="import" onclick="openImport()"><i class="layui-icon">&#xe654;</i>导入</button>
<button id="NF-delete" name="NF-delete" authorize class="layui-btn layui-btn-sm layui-btn-danger " lay-event="delete"> <i class="layui-icon">&#xe640;</i>删除</button>
@*<button id="NF-details" name="NF-details" authorize class="layui-btn layui-btn-sm layui-btn-normal " lay-event="details"> <i class="layui-icon">&#xe60b;</i>查看</button>*@
</div>