|
@@ -110,6 +110,7 @@ import com.yc.ship.module.trade.utils.AgencyAuthUtils;
|
|
|
import com.yc.ship.module.trade.utils.excel.ExcelStyleHandler;
|
|
import com.yc.ship.module.trade.utils.excel.ExcelStyleHandler;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
+import org.apache.poi.hpsf.Decimal;
|
|
|
import org.apache.poi.ss.usermodel.*;
|
|
import org.apache.poi.ss.usermodel.*;
|
|
|
import org.apache.poi.ss.util.CellRangeAddress;
|
|
import org.apache.poi.ss.util.CellRangeAddress;
|
|
|
import org.apache.poi.ss.util.RegionUtil;
|
|
import org.apache.poi.ss.util.RegionUtil;
|
|
@@ -2749,6 +2750,13 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private File getFile(TradeOrderPageReqVO reqVO,InputStream template, int fileType) {
|
|
private File getFile(TradeOrderPageReqVO reqVO,InputStream template, int fileType) {
|
|
|
|
|
+ List<Integer> orderStatus = reqVO.getOrderStatus();
|
|
|
|
|
+ // 排除状态为 -2 的订单
|
|
|
|
|
+ if (orderStatus != null && orderStatus.contains(-2)) {
|
|
|
|
|
+ orderStatus.remove(Integer.valueOf(-2));
|
|
|
|
|
+ reqVO.setOrderStatus(orderStatus.isEmpty() ? null : orderStatus);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// 1. 查询订单基础信息(船名、航期、航向)
|
|
// 1. 查询订单基础信息(船名、航期、航向)
|
|
|
Map<String, Object> baseInfo = tradeOrderMapper.selectTouristExportBase(reqVO);
|
|
Map<String, Object> baseInfo = tradeOrderMapper.selectTouristExportBase(reqVO);
|
|
|
// 查询订单表头信息
|
|
// 查询订单表头信息
|
|
@@ -2887,8 +2895,16 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
Collectors.toList()
|
|
Collectors.toList()
|
|
|
));
|
|
));
|
|
|
|
|
|
|
|
- // 按订单号计算 payAmount 总和
|
|
|
|
|
|
|
+ // 先按 orderId 分组取每个订单的 payAmount(同一订单不重复计算)
|
|
|
|
|
+ // 再按 orderNo 分组累加 payAmount
|
|
|
Map<String, BigDecimal> orderPayAmountMap = visitorList.stream()
|
|
Map<String, BigDecimal> orderPayAmountMap = visitorList.stream()
|
|
|
|
|
+ .collect(Collectors.toMap(
|
|
|
|
|
+ TouristExportVisitorVO::getOrderId,
|
|
|
|
|
+ v -> v,
|
|
|
|
|
+ (v1, v2) -> v1, // orderId 相同时保留第一个
|
|
|
|
|
+ LinkedHashMap::new
|
|
|
|
|
+ ))
|
|
|
|
|
+ .values().stream()
|
|
|
.collect(Collectors.groupingBy(
|
|
.collect(Collectors.groupingBy(
|
|
|
TouristExportVisitorVO::getOrderNo,
|
|
TouristExportVisitorVO::getOrderNo,
|
|
|
LinkedHashMap::new,
|
|
LinkedHashMap::new,
|
|
@@ -2899,6 +2915,44 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
)
|
|
)
|
|
|
));
|
|
));
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+ Map<String, BigDecimal> orderAmountMap = visitorList.stream()
|
|
|
|
|
+ .collect(Collectors.toMap(
|
|
|
|
|
+ TouristExportVisitorVO::getOrderId,
|
|
|
|
|
+ v -> v,
|
|
|
|
|
+ (v1, v2) -> v1, // orderId 相同时保留第一个
|
|
|
|
|
+ LinkedHashMap::new
|
|
|
|
|
+ ))
|
|
|
|
|
+ .values().stream()
|
|
|
|
|
+ .collect(Collectors.groupingBy(
|
|
|
|
|
+ TouristExportVisitorVO::getOrderNo,
|
|
|
|
|
+ LinkedHashMap::new,
|
|
|
|
|
+ Collectors.reducing(
|
|
|
|
|
+ BigDecimal.ZERO,
|
|
|
|
|
+ v -> v.getAmount() != null ? v.getAmount() : BigDecimal.ZERO,
|
|
|
|
|
+ BigDecimal::add
|
|
|
|
|
+ )
|
|
|
|
|
+ ));
|
|
|
|
|
+
|
|
|
|
|
+ // 定金
|
|
|
|
|
+ Map<String, BigDecimal> orderDeposiMap = visitorList.stream()
|
|
|
|
|
+ .collect(Collectors.toMap(
|
|
|
|
|
+ TouristExportVisitorVO::getOrderId,
|
|
|
|
|
+ v -> v,
|
|
|
|
|
+ (v1, v2) -> v1, // orderId 相同时保留第一个
|
|
|
|
|
+ LinkedHashMap::new
|
|
|
|
|
+ ))
|
|
|
|
|
+ .values().stream()
|
|
|
|
|
+ .collect(Collectors.groupingBy(
|
|
|
|
|
+ TouristExportVisitorVO::getOrderNo,
|
|
|
|
|
+ LinkedHashMap::new,
|
|
|
|
|
+ Collectors.reducing(
|
|
|
|
|
+ BigDecimal.ZERO,
|
|
|
|
|
+ v -> v.getDeposi() != null ? v.getDeposi() : BigDecimal.ZERO,
|
|
|
|
|
+ BigDecimal::add
|
|
|
|
|
+ )
|
|
|
|
|
+ ));
|
|
|
|
|
+
|
|
|
// 房间序号从1开始累加
|
|
// 房间序号从1开始累加
|
|
|
int roomIndex = 1;
|
|
int roomIndex = 1;
|
|
|
for (List<TouristExportVisitorVO> orderVisitors : orderGroupMap.values()) {
|
|
for (List<TouristExportVisitorVO> orderVisitors : orderGroupMap.values()) {
|
|
@@ -2926,18 +2980,17 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
item.put("groupNo", StringUtils.isEmpty(visitor.getGroupNo()) ? "" : visitor.getGroupNo()); // 团号
|
|
item.put("groupNo", StringUtils.isEmpty(visitor.getGroupNo()) ? "" : visitor.getGroupNo()); // 团号
|
|
|
item.put("direction", StringUtils.isEmpty(visitor.getDirection()) ? "" : visitor.getDirection()); // 航向(宜昌-重庆/重庆-宜昌)
|
|
item.put("direction", StringUtils.isEmpty(visitor.getDirection()) ? "" : visitor.getDirection()); // 航向(宜昌-重庆/重庆-宜昌)
|
|
|
item.put("travelDate", StringUtils.isEmpty(visitor.getTravelDate()) ? "" : visitor.getTravelDate()); // 航期(格式:yyyy.M.d)
|
|
item.put("travelDate", StringUtils.isEmpty(visitor.getTravelDate()) ? "" : visitor.getTravelDate()); // 航期(格式:yyyy.M.d)
|
|
|
- item.put("amount", visitor.getAmount() != null ? visitor.getAmount() : BigDecimal.ZERO); // 应收款
|
|
|
|
|
|
|
+ item.put("amount", orderAmountMap.getOrDefault(visitor.getOrderNo(), BigDecimal.ZERO)); // 应收款
|
|
|
|
|
|
|
|
|
|
|
|
|
// 实收款计算逻辑:根据支付状态判断
|
|
// 实收款计算逻辑:根据支付状态判断
|
|
|
//Integer payStatus = visitor.getPayStatus(); // 支付状态
|
|
//Integer payStatus = visitor.getPayStatus(); // 支付状态
|
|
|
//BigDecimal payAmount = visitor.getPayAmount() != null ? visitor.getPayAmount() : BigDecimal.ZERO; // 实际金额
|
|
//BigDecimal payAmount = visitor.getPayAmount() != null ? visitor.getPayAmount() : BigDecimal.ZERO; // 实际金额
|
|
|
BigDecimal deposi = visitor.getDeposi() != null ? visitor.getDeposi() : BigDecimal.ZERO; // 定金
|
|
BigDecimal deposi = visitor.getDeposi() != null ? visitor.getDeposi() : BigDecimal.ZERO; // 定金
|
|
|
- BigDecimal applyPayAmount = BigDecimal.ZERO; // 实际收款
|
|
|
|
|
|
|
|
|
|
item.put("payAmount", orderPayAmountMap.getOrDefault(visitor.getOrderNo(), BigDecimal.ZERO)); // 实收款
|
|
item.put("payAmount", orderPayAmountMap.getOrDefault(visitor.getOrderNo(), BigDecimal.ZERO)); // 实收款
|
|
|
|
|
|
|
|
- item.put("deposi", deposi); // 定金
|
|
|
|
|
|
|
+ item.put("deposi", orderDeposiMap.getOrDefault(visitor.getOrderNo(), BigDecimal.ZERO)); // 定金
|
|
|
|
|
|
|
|
// 房间详情(3列):同一房间的游客合并显示这些列
|
|
// 房间详情(3列):同一房间的游客合并显示这些列
|
|
|
item.put("floor", StringUtils.isEmpty(visitor.getFloor()) ? "" : visitor.getFloor()); // 楼层
|
|
item.put("floor", StringUtils.isEmpty(visitor.getFloor()) ? "" : visitor.getFloor()); // 楼层
|