当前位置: 首页 > article >正文

谷神后端$vs.proc.invoke.stock.loadMap

loadMap
// 调用
@loadMap($src, $field, $strTableName, $key, $target, $other, $systemId)



/**
 * loadMap
 * 加载map。
 *
 * @param $src:list:列表。
 * @param $field:string:参数域。
 * @param $strTableName:string:表名。
 * @param $key:string:键。
 * @param $target:string:落地属性。
 * @param $other:map:其它条件。
 * @param $systemId:string:系统id。
 *
 * @return list:加载数据后的列表。
 *
 */
#function loadMap($src, $field, $strTableName, $key, $target, $other, $systemId)
	// 参数处理
	#set($where = $vs.util.newMap())
	#if ($vs.util.isMap($other))
		$where.putAll($other)
	#end

	// 数据收集
	#set($fields = @collectSet($src, $field))
	// 查询条件
	$where.put($key, $fields)

	// 列表数据
	#set($list = $vs.util.newList())
	#if ($vs.util.isString($systemId))
		#set($list = @remoteList($systemId, $strTableName, '*', $where))
	#else
		#set($list = $vs.dbTools.select($strTableName, $where))
	#end

	// 列表分组
	#set($map = @list2map($list, $key, null))
	// 数据组装
	@listPut($src, $map, $field, $target)

	// 初始化默认值
	#foreach ($row in $src)
		#if (!$vs.util.isMap($row.get($target)))
			$row.put($target, $vs.util.newMap())
		#end
	#end

	// 返回
	return $src
#end



/**
 * collectSet
 * 集合数据收集list实现:判空、去重。
 *
 * @param $list:list:列表。
 * @param $field:string:字段。
 *
 * @return list
 *
 */
#function collectSet($list, $field)
	#if ($vs.util.isList($list))
		#set($result = $vs.util.newList())
		#set($set = $vs.util.newList())
		#foreach($row in $list)
			#set($value = $row)
			#if ($vs.util.isNotNull($field))
				#set($value = $row.get($field))
			#end
			#if ($vs.util.isNotNull($value) and !$set.contains($value))
				$result.add($value)
				$set.add($value)
			#end
		#end
		return $result
	#end
	return null
#end

/**
 * remoteList
 * 远程列表。
 *
 * @param $systemId:string:系统id。
 * @param $strTableName:string:表。
 * @param $strColumns:string:字段。
 * @param $where:map:条件。
 *
 * @return list:列表。
 *
 */
#function remoteList($systemId, $strTableName, $strColumns, $where)
	#if ($vs.util.isBlankOne($strTableName, $systemId))
		return null
	#end
	#if ($vs.util.isNull($strColumns))
		#set($strColumns = ' * ')
	#end
	#set($strSql = `
		select
			${$strColumns}
		from
			${strTableName}
		where 1 = 1
	`)
	#set($strSql = $strSql + @andWhere($where))
	return $vs.dbTools.remoteList($systemId, $strSql ,$where)
#end

/**
 * andWhere
 * 条件。
 * 
 * @param $where:map:条件
 *
 * @return string:sql。
 *
 */
#function andWhere($where)
	#set($sql = '')
	#if ($vs.util.isMap($where))
		#foreach ($key in $vs.util.getMapKeys($where))
			#set($value = $where.get($key))
			#if ($vs.util.isList($value))
				#set($sql = $sql + " and " + $vs.sqlHelper.listIn($value, $key))
			#else
				#set($sql = $sql + $vs.sqlHelper.and($where, $key))
			#end
		#end
	#end
	return $sql
#end

/**
 * list2map
 * list转map:支持全量映射、单字段映射。
 * 
 * @param $list:list:列表。
 * @param $key:string:键字段域。
 * @param $field:string:值字段域。
 *
 * @return map
 *
 */ 
#function list2map($list, $key, $field)
	#if ($vs.util.isList($list))
		#set($map = $vs.util.newMap())
		#foreach($row in $list)
			#set($value = $row)
			#if (!$vs.util.isNull($field))
				#set($value = $row.get($field))
			#end
			$map.put($row.get($key), $value)
		#end
		return $map
	#end
	return null
#end

/**
 * listPut
 * 数据组装。
 *
 * @param $list:list:列表。
 * @param $map:map:映射。
 * @param $key:string:键。
 * @param $field:string:域。
 *
 * @return null
 *
 */ 
#function listPut($list, $map, $key, $field)
	#if ($vs.util.isList($list) and $vs.util.isMap($map) and $vs.util.isString($key))
		#if ($vs.util.isNull($field))
			#set($field = 'data')
		#end
		#foreach($item in $list)
			#set($itemKey = $item.get($key))
			#set($data = $map.get($itemKey))
			$item.put($field, $data)
		#end
	#end
	return null
#end

http://www.kler.cn/a/325619.html

相关文章:

  • 【MySQL-4】表的基本查询
  • 【Redis】实现异步秒杀功能
  • 详细描述一下Elasticsearch搜索的过程?
  • 蓝桥杯每日真题 - 第16天
  • 学习threejs,通过SkinnedMesh来创建骨骼和蒙皮动画
  • More Effective C++ Item 7:区别使用()和{}创建对象
  • golang语法基础
  • 【大数据应用开发】2023年全国职业院校技能大赛赛题第01套
  • 基于php的助农生鲜销售系统
  • vmware 操作系统安装
  • 常见框架漏洞复现
  • IT运维挑战与对策:构建高效一体化运维管理体系
  • Chapter 2 - 1. Understanding Congestion in Fibre Channel Fabrics
  • Redis: RDB与AOF的选择和容灾备份以及Redis数据持久化的优化方案
  • X86架构(九)——保护模式的进入
  • Hive数仓操作(三)
  • 使用Vue.extend( ) 模仿 elementui 创建一个类似 message 消息提示框
  • AI大模型之旅-最强开源文生图工具Stable Diffusion WebUI 教程
  • Safari 浏览器中的 <audio> 标签的控件无效 - 解决方法
  • linux信号 | 学习信号三步走 | 全解析信号的产生方式
  • 数据结构双链表和循环链表
  • 高级主题:接口性能测试与压力测试
  • 0基础跟德姆(dom)一起学AI 数据处理和统计分析08-日期类型处理,Matplotlib介绍
  • 事务的四大特性(ACID)
  • 直接用Bash发送HTTP请求 —— 筑梦之路
  • 【代码随想录Day27】贪心算法Part01