perf: 优化结算单详情增加分页和查询参数

This commit is contained in:
chenxiky 2025-08-23 13:39:48 +08:00
parent a909c9e5c1
commit 80835d6841
5 changed files with 128 additions and 31 deletions

View File

@ -13,10 +13,7 @@ import com.aircraft.modules.aircraft.service.AircraftDeviceService;
import com.aircraft.modules.order.domain.*;
import com.aircraft.modules.order.domain.constant.OrderConstant;
import com.aircraft.modules.order.domain.constant.OrderRedisConstant;
import com.aircraft.modules.order.domain.dto.AddOrderDTO;
import com.aircraft.modules.order.domain.dto.AddOrderTaskDTO;
import com.aircraft.modules.order.domain.dto.OrderMainPageQueryDTO;
import com.aircraft.modules.order.domain.dto.UpdateOrderDTO;
import com.aircraft.modules.order.domain.dto.*;
import com.aircraft.modules.order.domain.enums.*;
import com.aircraft.modules.order.domain.vo.*;
import com.aircraft.modules.order.service.*;
@ -836,19 +833,27 @@ public class OrderBiz {
/**
* 获取结算订单详情
*
* @param settlementOrderId 结算订单ID
* @param dto {@link SettlementDetailDTO}
* @param page {@link Page} 分页对象
* @return List<SettlementDetail>
*/
public List<SettlementDetail> querySettlementOrderDetail(Long settlementOrderId) {
List<SettlementDetail> settlementDetails = settlementDetailService.obtainDetailBySettlementOrderId(settlementOrderId);
public IPage<SettlementDetail> querySettlementOrderDetail(SettlementDetailDTO dto, Page page) {
// 处理时间格式
if (ObjectUtil.isNotNull(dto.getQueryStartTime())) {
Date start = DateUtil.beginOfDay(dto.getQueryStartTime());
dto.setQueryStartTime(start);
}
if (ObjectUtil.isNotNull(dto.getQueryEndTime())) {
Date end = DateUtil.endOfDay(dto.getQueryEndTime());
dto.setQueryEndTime(end);
}
List<SettlementDetail> settlementDetails = settlementDetailService.querySettlementOrderDetail(dto);
if (CollectionUtils.isEmpty(settlementDetails)) {
return new ArrayList<>();
return new Page<>();
}
// 获取所有的路线
List<CpRoute> routeList = cpRouteService.obtainAllRoutes();
if (CollectionUtil.isEmpty(routeList)) {
return settlementDetails;
}
if (CollectionUtil.isNotEmpty(routeList)) {
Map<Long, CpRoute> routeMap = routeList.stream().collect(Collectors.toMap(CpRoute::getId, route -> route));
for (SettlementDetail detail : settlementDetails) {
if (StrUtil.isBlank(detail.getRouteIds())) {
@ -869,7 +874,22 @@ public class OrderBiz {
detail.setRouteIds(routeNameBuilder.substring(0, routeNameBuilder.length() - 1));
}
}
return settlementDetails;
}
// 内存分页
Page<SettlementDetail> pageResult = new Page<>(page.getCurrent(), page.getSize());
pageResult.setTotal(settlementDetails.size());
// 计算分页起始和结束位置
long start = (page.getCurrent() - 1) * page.getSize();
long end = Math.min(start + page.getSize(), settlementDetails.size());
// 如果起始位置超出了数据总量则返回空列表
if (start >= settlementDetails.size()) {
pageResult.setRecords(new ArrayList<>());
} else {
// 截取当前页数据
pageResult.setRecords(settlementDetails.subList((int) start, (int) end));
}
return pageResult;
}
/**

View File

@ -4,6 +4,7 @@ package com.aircraft.modules.order.controller;
import com.aircraft.modules.order.biz.OrderBiz;
import com.aircraft.modules.order.domain.SettlementDetail;
import com.aircraft.modules.order.domain.SettlementMain;
import com.aircraft.modules.order.domain.dto.SettlementDetailDTO;
import com.aircraft.modules.order.domain.vo.GenerateSettlementOrderConfirmVO;
import com.aircraft.modules.order.domain.vo.PrintSettlementOrderDataVO;
import com.aircraft.modules.order.service.ISettlementMainService;
@ -56,10 +57,12 @@ public class SettlementMainController {
@ApiOperation("结算订单详情")
@GetMapping("/querySettlementOrderDetail/{settlementOrderId}")
public ResponseEntity<List<SettlementDetail>> querySettlementOrderDetail(
public ResponseEntity<IPage<SettlementDetail>>querySettlementOrderDetail(
@ApiParam(value = "结算订单ID", required = true, example = "1948997367110451201")
@PathVariable("settlementOrderId") Long settlementOrderId) {
return new ResponseEntity<>(orderBiz.querySettlementOrderDetail(settlementOrderId),HttpStatus.OK);
@PathVariable("settlementOrderId") Long settlementOrderId,
SettlementDetailDTO dto,Page page) {
dto.setSettlementOrderId(settlementOrderId);
return ResponseEntity.ok(orderBiz.querySettlementOrderDetail(dto, page));
}
@ApiOperation("打印结算单数据-返回对应的数据集前端进行打印PDF")

View File

@ -0,0 +1,51 @@
package com.aircraft.modules.order.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
*
* 结算详情分页查询DTO
*
* @author chenxiky
* @version 1.0.0
* @since 2025/8/23
*/
@Data
public class SettlementDetailDTO {
/**
* 结算单ID
*/
@ApiModelProperty("结算单ID")
private Long settlementOrderId;
/**
* 景区ID
*/
@ApiModelProperty("景区ID")
private Long attractionId;
/**
* 订单编号查询
*/
@ApiModelProperty(value = "订单编号查询")
private String orderNo;
/**
* 下单开始时间
*/
@ApiModelProperty(value = "下单开始时间", example = "2025-07-19")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date queryStartTime;
/**
* 下单结束时间
*/
@ApiModelProperty(value = "下单结束时间", example = "2025-07-19")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date queryEndTime;
}

View File

@ -1,6 +1,7 @@
package com.aircraft.modules.order.service;
import com.aircraft.modules.order.domain.SettlementDetail;
import com.aircraft.modules.order.domain.dto.SettlementDetailDTO;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
@ -37,4 +38,12 @@ public interface ISettlementDetailService extends IService<SettlementDetail> {
* @param updateStatus 状态
*/
void updateSettlementOrderStatus(List<Long> ids, Integer updateStatus);
/**
* 查询结算单详情列表
*
* @param dto {@link SettlementDetailDTO}
* @return {@link List<SettlementDetail>}
*/
List<SettlementDetail> querySettlementOrderDetail(SettlementDetailDTO dto);
}

View File

@ -1,6 +1,9 @@
package com.aircraft.modules.order.service.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.aircraft.modules.order.domain.SettlementDetail;
import com.aircraft.modules.order.domain.dto.SettlementDetailDTO;
import com.aircraft.modules.order.mapper.SettlementDetailMapper;
import com.aircraft.modules.order.service.ISettlementDetailService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@ -38,4 +41,15 @@ public class SettlementDetailServiceImpl extends ServiceImpl<SettlementDetailMap
.set(SettlementDetail::getSettlementStatus, updateStatus)
.in(SettlementDetail::getId, ids));
}
@Override
public List<SettlementDetail> querySettlementOrderDetail(SettlementDetailDTO dto) {
return this.list(Wrappers.lambdaQuery(SettlementDetail.class)
.eq(SettlementDetail::getSettlementMainId, dto.getSettlementOrderId())
.eq(ObjectUtil.isNotNull(dto.getAttractionId()), SettlementDetail::getAttractionId, dto.getAttractionId())
.eq(StrUtil.isNotBlank(dto.getOrderNo()), SettlementDetail::getOrderNo, dto.getOrderNo())
.ge(ObjectUtil.isNotNull(dto.getQueryStartTime()), SettlementDetail::getOrderCreateTime, dto.getQueryStartTime())
.le(ObjectUtil.isNotNull(dto.getQueryEndTime()), SettlementDetail::getOrderCreateTime, dto.getQueryEndTime())
.orderByDesc(SettlementDetail::getId));
}
}