freemarker - 在 Freemarker 中对值进行分组时需要帮助
问题描述
有人可以帮我提供示例代码吗?
我的价值观如下
Item Tax code Tax rate Net amount Total tax Total amount
aaa TX1 10 % 100 10 110
Bbb TX1 10 % 50 5 55
ccc TX2 5% 100 5 105
ddd TX1 10 % 30 3 33
eee TX3 15% 200 30 230
fff TX3 15% 100 15 115
并且需要如下值的输出
Tax code Tax rate Net amount Total amount – (Tax amount)
TX1 10 % 180 18
TX2 5% 100 5
TX3 15% 300 45
任何人都可以帮助我提供示例代码,感谢您的帮助。
解决方案
[#assign taxes = [
{"taxCodeSign":"TX1", "taxValue":10},
{"taxCodeSign":"TX2", "taxValue":5},
{"taxCodeSign":"TX3", "taxValue":15}
]]
[#assign items = [
{"itemName":"aaa","taxCode":"TX1","netAmount":100},
{"itemName":"Bbb","taxCode":"TX1","netAmount":50},
{"itemName":"ccc","taxCode":"TX2","netAmount":100},
{"itemName":"ddd","taxCode":"TX1","netAmount":30},
{"itemName":"eee","taxCode":"TX3","netAmount":200},
{"itemName":"fff","taxCode":"TX3","netAmount":100}
]]
[#assign taxCodesWithTotalNetAmounts = getTaxCodesWithTotalNetAmounts(items)]
[#function getTaxCodesWithTotalNetAmounts items]
[#local taxCodesWithTotalNetAmounts = {}]
[#list items as item]
[#local totalNetAmount = taxCodesWithTotalNetAmounts[item.taxCode]!0]
[#local taxCodesWithTotalNetAmounts += {item.taxCode: totalNetAmount + item.netAmount}]
[/#list]
[#return taxCodesWithTotalNetAmounts]
[/#function]
[#function getTaxRate taxCodeSign]
[#list taxes as tax]
[#if tax.taxCodeSign == taxCodeSign]
[#return tax.taxValue]
[/#if]
[/#list]
[/#function]
<table>
<tr>
<td>Tax code</td>
<td>Tax rate</td>
<td>Net amount</td>
<td>Total amount – (Tax amount)</td>
</tr>
[#list taxCodesWithTotalNetAmounts as taxCode,netAmount]
[#assign taxRate = getTaxRate(taxCode)]
[#assign taxAmount = netAmount*taxRate/100]
<tr>
<td>${taxCode}</td>
<td>${taxRate}</td>
<td>${netAmount}</td>
<td>${taxAmount}</td>
</tr>
[/#list]
</table>
推荐阅读
- python - 转置字典列表
- asp.net - 授权和允许匿名 asp.net 核心
- c# - Csharp:根据组合框中的值加载选中的项目列表
- javascript - CKEditor 文件夹系统
- java - 反射错误无法设置字段值
- authorization - 以编程方式检索 Apple 媒体库访问权限
- epplus - 复制到新工作簿中的 EPPlus 工作表在 Excel 中打开时保持选中状态
- node.js - 我可以使用我的域名下的任何电子邮件通过 AWS SES 发送电子邮件吗?
- java - catch 语句重复执行
- python - 为什么我从 python 中的请求中得到不正确的 response_json