| | |
| | | package com.ruoyi.cwgl.service.impl; |
| | | |
| | | import java.util.List; |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import com.ruoyi.common.utils.DateUtils; |
| | | import javax.annotation.Resource; |
| | | |
| | | import com.ruoyi.cwgl.domain.DispatchOrderItem; |
| | | import com.ruoyi.cwgl.domain.vo.DispatchOrderItemVo; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.scheduling.annotation.Async; |
| | |
| | | @Override |
| | | public List<DispatchOrder> selectDispatchOrderList2(DispatchOrder dispatchOrder) |
| | | { |
| | | return dispatchOrderMapper.selectDispatchOrderList(dispatchOrder); |
| | | return dispatchOrderMapper.selectDispatchOrderList2(dispatchOrder); |
| | | } |
| | | |
| | | /** |
| | |
| | | { |
| | | return dispatchOrderMapper.deleteDispatchOrderById(id); |
| | | } |
| | | |
| | | @DataSource(DataSourceType.CWSJ) |
| | | @Override |
| | | public List<DispatchOrderItemVo> selectDispatchOrderItem(String no) { |
| | | // 使用Map来临时存储分组结果 |
| | | Map<String, DispatchOrderItemVo> summaryMap = new HashMap<>(); |
| | | |
| | | List<DispatchOrderItem> dispatchOrderItems=dispatchOrderMapper.selectDispatchOrderItemByNo(no); |
| | | Set<String> settableFeeItemSet = null; |
| | | for (DispatchOrderItem dispatchOrderItem : dispatchOrderItems) { |
| | | String settableFeeItems = dispatchOrderItem.getSettableFeeItems(); |
| | | if (settableFeeItemSet==null) { |
| | | settableFeeItemSet = new HashSet<>( |
| | | Arrays.asList(settableFeeItems.split(","))); |
| | | } |
| | | // 判断是否可结算 |
| | | String feeItem = dispatchOrderItem.getFeeItem(); |
| | | int isSettable = isFeeItemSettable(feeItem, settableFeeItemSet); |
| | | // 如果Map中不存在该费用类型,则创建新条目 |
| | | if (!summaryMap.containsKey(feeItem)) { |
| | | DispatchOrderItemVo summary = new DispatchOrderItemVo(); |
| | | summary.setFeeItem(feeItem); |
| | | summary.setReceivableFee(BigDecimal.ZERO); |
| | | summary.setActualFee(BigDecimal.ZERO); |
| | | summary.setIsSettlement(isSettable); |
| | | summaryMap.put(feeItem, summary); |
| | | } |
| | | // 根据账单类型累加金额 |
| | | DispatchOrderItemVo summary = summaryMap.get(feeItem); |
| | | if ("R".equals(dispatchOrderItem.getBillType())) { // 应收 |
| | | summary.setReceivableFee(summary.getReceivableFee().add(dispatchOrderItem.getSettleFee())); |
| | | summary.setReceivableFeeCurrency(dispatchOrderItem.getCurrencyType()); |
| | | } else if ("P".equals(dispatchOrderItem.getBillType())) { // 应付 |
| | | summary.setActualFee(summary.getActualFee().add(dispatchOrderItem.getSettleFee())); |
| | | summary.setActualFeeCurrency(dispatchOrderItem.getCurrencyType()); |
| | | |
| | | } |
| | | } |
| | | // 转换为List并过滤、排序 |
| | | return summaryMap.values().stream() |
| | | // 过滤掉应收应付都为0的记录 |
| | | .filter(dto -> dto.getReceivableFee().compareTo(BigDecimal.ZERO) != 0 |
| | | || dto.getActualFee().compareTo(BigDecimal.ZERO) != 0) |
| | | // 排序:可结算的在前,不可结算的在后;然后按总金额降序 |
| | | .sorted(Comparator.comparing(DispatchOrderItemVo::getIsSettlement).reversed() |
| | | .thenComparing(dto -> dto.getReceivableFee().add(dto.getActualFee()), |
| | | Comparator.reverseOrder())) |
| | | .collect(Collectors.toList()); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 判断费用类型是否可结算 |
| | | */ |
| | | private static int isFeeItemSettable(String feeItem, Set<String> settableFeeItemSet) { |
| | | if (feeItem == null || settableFeeItemSet == null) { |
| | | return 0; |
| | | } |
| | | |
| | | |
| | | if (settableFeeItemSet.contains(feeItem)) { |
| | | return 1; |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | | } |