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

countDetail
// 调用
@countDetail($src, $fieldId, $strTableName, $key, $target, $other, $systemId)



/**
 * countDetail
 *
 * @param $src:list:源列表
 * @param $fieldId:string:源列表主键
 * @param $strTableName:string:明细数据表
 * @param $key:string:明细数据表外键
 * @param $target:string:源列表目标属性
 * @param $other:map:其它条件
 * @param $systemId:string:系统ID
 *
 * @return list:加工后的源列表
 *
 */
#function countDetail($src, $fieldId, $strTableName, $key, $target, $other, $systemId)
	// 参数处理
	#if ($vs.util.isNull($other))
		#set($other = $vs.util.newMap())
	#end

	// 数据收集
	#set($ids = @collectSet($src, $fieldId))
	// 查询条件
	$other.put($key, $ids)

	// 统计信息
	#set($counts = @countGroup($strTableName, $key, $other, $systemId))

	// 统计信息转map
	#set($countMap = @list2map($counts, $fieldId, 'COUNT'))

	// 数据组装
	@listPut($src, $countMap, $fieldId, $target)

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

	// 返回
	return $src
#end



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

/**
 * countGroup
 * 分组统计/批量统计
 *
 * @param $strTableName:string:表
 * @param $groupColumns:string:分组字段
 * @param $where:map:条件
 * @param $systemId:string:系统ID
 *
 * @return list
 *
 */
#function countGroup ($strTableName, $groupColumns, $where, $systemId)
	#set($whereSql = @andWhere($where))
	#set($strSql = `
		select
			${$groupColumns},
			count(1) as count
		from ${$strTableName}
		where 1 = 1 ${$whereSql}
		group by ${$groupColumns}
	`)
	#if ($vs.util.isNull($systemId))
		return $vs.dbTools.list($strSql, $where)
	#else
		return $vs.dbTools.remoteList($systemId, $strSql ,$where)
	#end
#end

/**
 * andWhere
 * 
 * @param $where:map:条件
 *
 * @return string
 *
 */
#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 $keyField:string:键字段域
 * @param $valueField:string:值字段域
 *
 * @return map
 *
 */ 
#function list2map ($list, $keyField, $valueField)
	#set($map = $vs.util.newMap())
	#if ($vs.util.isList($list))
		#foreach($row in $list)
			#set($value = $row)
			#if (!$vs.util.isNull($valueField))
				#set($value = $row.get($valueField))
			#end
			$map.put($row.get($keyField), $value)
		#end
	#end
	return $map
#end

/**
 * listPut
 *
 * @param $list:list:列表
 * @param $dataMap:map:需要组装到列表的数据映射
 * @param $keyFieldId:string:数据映射属性ID
 * @param $dataFieldId:string:组装数据属性ID
 *
 * @return list
 *
 */ 
#function listPut($list, $dataMap, $keyFieldId, $dataFieldId)
	#if ($vs.util.isBlankOne($list, $dataMap, $keyFieldId))
		return $list
	#end
	#if ($vs.util.isNull($dataFieldId))
		#set($dataFieldId = 'data')
	#end
	#foreach($item in $list)
		#set($fieldValue = $item.get($keyFieldId))
		#set($data = $dataMap.get($fieldValue))
		$item.put($dataFieldId, $data)
	#end
	return $list
#end
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值