| | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.util.Collections; |
| | | import java.util.Comparator; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | d.setId(null); |
| | | d.setTemplateId(templateId); |
| | | d.setDelFlag(false); |
| | | if (d.getStartTime() == null) { |
| | | d.setStartTime(""); |
| | | } |
| | | if (d.getEndTime() == null) { |
| | | d.setEndTime(""); |
| | | } |
| | | detailMapper.insert(d); |
| | | } |
| | | } |
| | |
| | | if (CollectionUtils.isEmpty(details)) { |
| | | throw new IllegalArgumentException("请填写费率明细"); |
| | | } |
| | | // 时间段连续性 |
| | | List<TBillingTemplateDetail> sorted = details.stream() |
| | | .sorted(Comparator.comparing(TBillingTemplateDetail::getStartTime)) |
| | | .collect(Collectors.toList()); |
| | | boolean firstValid = sorted.isEmpty() || !sorted.get(0).getStartTime().equals(sorted.get(sorted.size() - 1).getEndTime()); |
| | | boolean continuous = sorted.stream() |
| | | .skip(1) |
| | | .allMatch(d -> d.getStartTime().equals(sorted.get(sorted.indexOf(d) - 1).getEndTime())); |
| | | if (firstValid || !continuous) { |
| | | throw new IllegalArgumentException("计费模板时间设置有误差"); |
| | | } |
| | | // 同阶段价格一致 |
| | | Map<Integer, BigDecimal> phaseElectrovalence = new HashMap<>(); |
| | | Map<Integer, BigDecimal> phaseServiceFee = new HashMap<>(); |
| | | Map<Integer, BigDecimal> phaseCostServiceFee = new HashMap<>(); |
| | | for (TBillingTemplateDetail d : details) { |
| | | Integer type = d.getType(); |
| | | BigDecimal electrovalence = defaultZero(d.getElectrovalence()); |
| | | BigDecimal serviceCharge = defaultZero(d.getServiceCharge()); |
| | | BigDecimal costServiceCharge = defaultZero(d.getCostServiceCharge()); |
| | | if (phaseElectrovalence.containsKey(type)) { |
| | | if (phaseElectrovalence.get(type).compareTo(d.getElectrovalence()) != 0 |
| | | || phaseServiceFee.get(type).compareTo(d.getServiceCharge()) != 0 |
| | | || phaseCostServiceFee.get(type).compareTo(d.getCostServiceCharge()) != 0) { |
| | | if (phaseElectrovalence.get(type).compareTo(electrovalence) != 0 |
| | | || phaseServiceFee.get(type).compareTo(serviceCharge) != 0 |
| | | || phaseCostServiceFee.get(type).compareTo(costServiceCharge) != 0) { |
| | | throw new IllegalArgumentException("同阶段费率值需一致"); |
| | | } |
| | | } else { |
| | | phaseElectrovalence.put(type, d.getElectrovalence()); |
| | | phaseServiceFee.put(type, d.getServiceCharge()); |
| | | phaseCostServiceFee.put(type, d.getCostServiceCharge()); |
| | | phaseElectrovalence.put(type, electrovalence); |
| | | phaseServiceFee.put(type, serviceCharge); |
| | | phaseCostServiceFee.put(type, costServiceCharge); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private BigDecimal defaultZero(BigDecimal value) { |
| | | return value == null ? BigDecimal.ZERO : value; |
| | | } |
| | | } |