实现层逻辑如下:
@Override
public DesignChangeChangedAmountVo queryChangedAmounts() {
List<DesignChange> designChangeList = this.lambdaQuery()
.eq(DesignChange::getStatus, Constants.DesignChangeStatus.SHEN_PI_TONG_GUO)
.eq(DesignChange::getDelFlag, CommonConstant.DEL_FLAG_0)
.list();
DesignChangeChangedAmountVo result = new DesignChangeChangedAmountVo();
//根据合同分组
Map<String, List<DesignChange>> contractMap = designChangeList.stream()
.collect(Collectors.groupingBy(DesignChange::getContractId));
List<DesignChangeChangedAmountVo.ContractTotalChangedAmounts> contracts = new ArrayList<>();
contractMap.keySet().forEach(i -> {
List<DesignChange> ls = contractMap.get(i);
DesignChangeChangedAmountVo.ContractTotalChangedAmounts info = new DesignChangeChangedAmountVo.ContractTotalChangedAmounts();
info.setContractId(ls.get(0).getContractId());
info.setContractName(ls.get(0).getContractName());
//累计造价咨询单位审核金额
BigDecimal totalChangedAmount = ls.stream().map(DesignChange::getCostConsultUnitAuditAmount)
.filter(Objects::nonNull)
.reduce(BigDecimal.ZERO, BigDecimal::add);
info.setContractTotalChangedAmount(totalChangedAmount);