| | |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | import java.util.*; |
| | | |
| | | import com.ruoyi.common.enums.SystemDataNoEnum; |
| | | import com.ruoyi.common.exception.ServiceException; |
| | |
| | | String noByKey = systemDataNoService.getNoByKey(SystemDataNoEnum.YS); |
| | | receivableFeeManagement.setSystemNo(noByKey); |
| | | |
| | | // 计算应收金额字符串描述 |
| | | if (receivableFeeManagement.getReceivableFeeDetailList() != null && !receivableFeeManagement.getReceivableFeeDetailList().isEmpty()) { |
| | | String receivableAmountStr = calculateReceivableAmountStr(receivableFeeManagement.getReceivableFeeDetailList()); |
| | | receivableFeeManagement.setReceivableAmountStr(receivableAmountStr); |
| | | } |
| | | |
| | | // 保存主表信息 |
| | | int result = receivableFeeManagementMapper.insertReceivableFeeManagement(receivableFeeManagement); |
| | | |
| | |
| | | public int updateReceivableFeeManagement(ReceivableFeeManagement receivableFeeManagement) |
| | | { |
| | | receivableFeeManagement.setUpdateTime(DateUtils.getNowDate()); |
| | | |
| | | // 计算应收金额字符串描述 |
| | | if (receivableFeeManagement.getReceivableFeeDetailList() != null && !receivableFeeManagement.getReceivableFeeDetailList().isEmpty()) { |
| | | String receivableAmountStr = calculateReceivableAmountStr(receivableFeeManagement.getReceivableFeeDetailList()); |
| | | receivableFeeManagement.setReceivableAmountStr(receivableAmountStr); |
| | | } |
| | | |
| | | // 1. 更新主表信息 |
| | | int result = receivableFeeManagementMapper.updateReceivableFeeManagement(receivableFeeManagement); |
| | |
| | | return i; |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 根据关联账单编号批量更新应收费用管理记录 |
| | |
| | | public int updateReceivableFeeManagementByRelatedBillNo(String relatedBillNo) { |
| | | return receivableFeeManagementMapper.updateReceivableFeeManagementByRelatedBillNo(relatedBillNo); |
| | | } |
| | | |
| | | /** |
| | | * 计算应收金额字符串描述 |
| | | * 根据明细列表按币种汇总金额,格式如:"200港币100人民币" |
| | | * |
| | | * @param detailList 应收费用明细列表 |
| | | * @return 应收金额字符串描述 |
| | | */ |
| | | private String calculateReceivableAmountStr(List<ReceivableFeeDetail> detailList) { |
| | | if (detailList == null || detailList.isEmpty()) { |
| | | return ""; |
| | | } |
| | | |
| | | // 按币种汇总金额 |
| | | Map<String, BigDecimal> currencyAmountMap = new HashMap<>(); |
| | | for (ReceivableFeeDetail detail : detailList) { |
| | | String currency = detail.getCurrency(); |
| | | BigDecimal billingAmount = detail.getBillingAmount(); |
| | | |
| | | if (currency != null && billingAmount != null) { |
| | | currencyAmountMap.merge(currency, billingAmount, BigDecimal::add); |
| | | } |
| | | } |
| | | |
| | | // 构建字符串描述 |
| | | StringBuilder sb = new StringBuilder(); |
| | | for (Map.Entry<String, BigDecimal> entry : currencyAmountMap.entrySet()) { |
| | | if (sb.length() > 0) { |
| | | sb.append(" "); |
| | | } |
| | | sb.append(entry.getValue().stripTrailingZeros().toPlainString()); |
| | | |
| | | // 根据币种显示对应的货币名称 |
| | | String currency = entry.getKey(); |
| | | if ("CNY".equals(currency)) { |
| | | sb.append("人民币"); |
| | | } else if ("HKD".equals(currency)) { |
| | | sb.append("港币"); |
| | | } else if ("USD".equals(currency)) { |
| | | sb.append("美元"); |
| | | } else { |
| | | sb.append(currency); |
| | | } |
| | | } |
| | | |
| | | return sb.toString(); |
| | | } |
| | | } |