谷神子列表数据导入

导出模板
exportTmpl
/**
 * exportTmpl
 * 导出模板
 * 
 * @param detailTable:子列表。
 * 
 * @return
 * 
 */
function exportTmpl (detailTable) {
	let allDiscolumns = detailTable.getAllDisColumns()
	let columnColIds = allDiscolumns.map(column => column.colId)
	let columnKeys = columnColIds.filter(item => !['select', "_OPT_FIELD_"].includes(item))
	detailTable.table.api.exportDataAsExcel({
		columnKeys,
		onlySelected: true,
	})
}
上传模版
SELECT NULL AS MID,
       NULL AS FILE_PATH,
       NULL AS FILE_NAME
FROM DUAL;
顺序模式
getTitlesList
/**
 * getTitlesList
 * 获取标题列表。
 * 
 * @param detailTable:子列表。
 * 
 * @return titlesList
 * 
 */
function getTitlesList (detailTable) {
	let titlesList = []
	detailTable.getAllDisColumns().forEach((column, index) => {
		let {colDef: {field}} = column
		titlesList.push(field)
	})
	return titlesList
}
readExcelByList
/**
 * readExcelByList
 * 顺序模式。
 * 
 * @param $titles:list:标题
 * @param $rows:list:行数据
 * @param $titlesList:list:标题列表
 *
 * @return list
 *
 */
#function readExcel ($titles, $rows, $titlesList)
	#set($list = $vs.util.newList())
	#foreach ($row in $rows)
		#set($item = $vs.util.newMap())
		#set($datasMap = @list2mapByScript($row.datas, 'celIndex'))
		#foreach ($itile in $titles)
			#set($data = $datasMap.get($itile.celIndex))
			$item.put($titlesList.get($itile.celIndex), $data.data)
		#end
		$list.add($item)
	#end
	return $list
#end
映射模式
getTitlesMap
/**
 * getTitlesMap
 * 获取标题映射。
 * 
 * @param detailTable:子列表。
 * 
 * @return titlesMap
 * 
 */
function getTitlesMap (detailTable) {
	let titlesMap = {}
	detailTable.getAllDisColumns().forEach(column => {
		let {colDef: {field, headerName}} = column
		if (!['select', "_OPT_FIELD_"].includes(field)) {
			titlesMap[headerName] = field
		}
	})
	return titlesMap
}
readExcelByMap
/**
 * readExcelByMap
 * 映射模式。
 * 
 * @param $titles:list:标题。
 * @param $rows:list:行数据。
 * @param $titlesMap:map:标题映射。
 *
 * @return list
 *
 */
#function readExcelByMap ($titles, $rows, $titlesMap)
	#if (!$vs.util.isList($titles) or !$vs.util.isList($rows))
		return null
	#end
	#if (!$vs.util.isMap($titlesMap))
		return null
	#end
	#set($list = $vs.util.newList())
	#foreach ($row in $rows)
		#set($item = $vs.util.newMap())
		#set($datasMap = @list2mapByScript($row.datas, 'celIndex'))
		#foreach ($itile in $titles)
			#set($data = $datasMap.get($itile.celIndex))
			#set($key = $titlesMap.get($itile.data))
			#if ($vs.util.isNull($key))
				#set($key = $itile.data)
			#end
			$item.put($key, $data.data)
		#end
		$list.add($item)
	#end
	return $list
#end
checkTitles
/**
 * checkTitles
 * 校验$titles与$titlesMap的列是否相同
 *
 * @param $titles:list
 * @param $titlesMap:map
 *
 * @return boolean
 *
 */
#function checkTitles ($titles, $titlesMap)
	#set($left = $vs.util.newList())
	#foreach($title in $titles)
		#set($value = $title.data)
		#if ($vs.util.isNotNull($value) and !$left.contains($value))
			$left.add($value)
		#end
	#end
	#set($right = $vs.util.getMapKeys($titlesMap))
	#if ($vs.util.isList($left) and $vs.util.isList($right))
		#if ($left.size() ne $right.size())
			return false
		#end
		#foreach ($row in $left)
			#if (!$right.contains($row))
				return false
			#end
		#end
		return true
	#else
		return false
	#end
#end
公共引用
list2mapByScript
/**
 * list2mapByScript
 * 动态脚本模式。 
 *
 * @param $list:list:列表。
 * @param $key:string:键。
 *
 * @return map
 *
 */
#function list2mapByScript ($list, $key)
	#set($map = $vs.util.newMap())
	#foreach($row in $list)
		#set($script = 'return $row.' + $key)
		$map.put($vs.proc.executeScript($script, $vs.util.newMap('row', $row)), $row)
	#end
	return $map
#end
代码模板
// 参数校验
$vs.util.checkInput($form, '参数不能为空!')
$vs.util.checkInput($form.FILE_PATH, '文件路径不能为空!')
$vs.util.checkInput($form.titlesList, '标题列表不能为空!') // 顺序模式校验
$vs.util.checkInput($form.titlesMap, '标题映射不能为空!') // 映射模式校验

// 自定义标题列表使用
#set($form.titlesList = $vs.util.newList())
// 自定义标题映射使用
#set($form.titlesMap = $vs.util.newMap())

// 导入处理
#try
	// 读取Excel文件
	#set($excel = $vs.file.readExcelFileSheet($form.FILE_PATH, 1))
#catch($e)
	$vs.log.error($e)
	$vs.exception.throwException("请按照系统模版进行导入")
#end

// 校验$titles与$titlesMap的列是否相同
@checkTitles($titles, $titlesMap)

// 数据转换
#set($list = @readExcel($excel.titles, $excel.rows, $form.titlesList)) // 顺序模式调用
#set($list = @readExcelByMap($excel.titles, $excel.rows, $form.titlesMap)) // 映射模式调用
内容概要:本文介绍了流量整形(Traffic Shaping)与增强传输选择(Enhanced Transmission Selection, ETS)技术在多虚拟函数(VFs)共享单个物理网络接口控制器(NIC)端口情况下的应用。流量整形通过对数据发送速率进行限制来管理网络流量,确保节点不会超过设定的最大带宽,同时保证最小带宽。ETS是IEEE 802.1Qaz标准的一部分,旨在数据中心桥接环境中为不同类型的流量分配带宽。文章详细描述了在多VF组中实现每类流量带宽保证的技术挑战和解决方案,包括使用令牌桶算法、加权循环调度(DWRR)、多队列优先级(MQPRIO)以及信任模式(Trust Mode)进行流量分类。此外,还探讨了如何通过扩展devlink-rate工具指定每个流量类别的带宽比例。 适合人群:网络工程师、系统管理员、云服务提供商以及对网络流量管理和优化感兴趣的IT专业人员。 使用场景及目标:①理解流量整形的基本概念及其在网络通信中的作用;②掌握如何配置虚拟功能(VF)以实现对特定流量类别的带宽控制;③学习如何利用ETS机制确保关键业务获得足够的网络资源;④了解最新的devlink-rate扩展功能及其在实际部署中的应用。 其他说明:本文基于Netdev 0x19会议上的演讲整理而成,提供了从背景介绍到具体实施步骤的全面讲解,并附有详细的参考资料链接供进一步研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值