首页 > 解决方案 > 在 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

任何人都可以帮助我提供示例代码,感谢您的帮助。

标签: freemarker

解决方案


[#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>

在此处输入图像描述


推荐阅读