update 分页查询场站订单排行

This commit is contained in:
Lemon
2026-05-25 13:33:35 +08:00
parent ff6c95f84b
commit 9a6ec3e792
4 changed files with 54 additions and 39 deletions

View File

@@ -6,6 +6,7 @@ import com.jsowell.common.core.page.PageResponse;
import com.jsowell.common.enums.ykc.ReturnCodeEnum; import com.jsowell.common.enums.ykc.ReturnCodeEnum;
import com.jsowell.common.exception.BusinessException; import com.jsowell.common.exception.BusinessException;
import com.jsowell.common.response.RestApiResponse; import com.jsowell.common.response.RestApiResponse;
import com.google.common.collect.ImmutableMap;
import com.jsowell.pile.dto.MerchantOrderReportDTO; import com.jsowell.pile.dto.MerchantOrderReportDTO;
import com.jsowell.pile.dto.ParkingCouponRecordQueryDTO; import com.jsowell.pile.dto.ParkingCouponRecordQueryDTO;
import com.jsowell.pile.dto.business.BusinessEfficiencyQueryDTO; import com.jsowell.pile.dto.business.BusinessEfficiencyQueryDTO;
@@ -17,7 +18,6 @@ import com.jsowell.pile.vo.uniapp.business.BusinessEfficiencyVO;
import com.jsowell.pile.vo.uniapp.business.BusinessGunEfficiencyAnalysisVO; import com.jsowell.pile.vo.uniapp.business.BusinessGunEfficiencyAnalysisVO;
import com.jsowell.pile.vo.uniapp.business.BusinessOperationAnalysisVO; import com.jsowell.pile.vo.uniapp.business.BusinessOperationAnalysisVO;
import com.jsowell.pile.vo.uniapp.business.BusinessScaleVO; import com.jsowell.pile.vo.uniapp.business.BusinessScaleVO;
import com.jsowell.pile.vo.uniapp.business.BusinessStationRankVO;
import com.jsowell.pile.vo.web.MerchantOrderReportVO; import com.jsowell.pile.vo.web.MerchantOrderReportVO;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -26,8 +26,6 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/** /**
* 运营端财务信息相关Controller * 运营端财务信息相关Controller
* *
@@ -212,10 +210,10 @@ public class BusinessFinancialController extends BaseController {
} }
/** /**
* 查询场站订单排行 * 分页查询场站订单排行
* *
* @param dto 查询参数 * @param dto 查询参数含pageNum、pageSize
* @return 场站订单排行列表按订单数量降序) * @return 分页结果(场站订单排行列表按订单数量降序)
*/ */
@PostMapping("/stationOrderRank") @PostMapping("/stationOrderRank")
public RestApiResponse<?> getStationOrderRank(@RequestBody BusinessOperationAnalysisQueryDTO dto) { public RestApiResponse<?> getStationOrderRank(@RequestBody BusinessOperationAnalysisQueryDTO dto) {
@@ -225,10 +223,10 @@ public class BusinessFinancialController extends BaseController {
if (dto == null) { if (dto == null) {
throw new BusinessException(ReturnCodeEnum.CODE_PARAM_NOT_NULL_ERROR); throw new BusinessException(ReturnCodeEnum.CODE_PARAM_NOT_NULL_ERROR);
} }
List<BusinessStationRankVO> result = businessFinancialService.getStationOrderRank(dto); PageResponse pageResponse = businessFinancialService.getStationOrderRank(dto);
response = new RestApiResponse<>(result); response = new RestApiResponse<>(ImmutableMap.of("pageResponse", pageResponse));
logger.info("查询场站订单排行成功 startTime:{}, endTime:{}, 站点数量:{}", logger.info("查询场站订单排行成功 startTime:{}, endTime:{}, total:{}",
dto.getStartTime(), dto.getEndTime(), result.size()); dto.getStartTime(), dto.getEndTime(), pageResponse.getTotal());
} catch (BusinessException e) { } catch (BusinessException e) {
logger.warn("查询场站订单排行业务异常 code:{}, message:{}", e.getCode(), e.getMessage(), e); logger.warn("查询场站订单排行业务异常 code:{}, message:{}", e.getCode(), e.getMessage(), e);
response = new RestApiResponse<>(e.getCode(), e.getMessage()); response = new RestApiResponse<>(e.getCode(), e.getMessage());

View File

@@ -38,4 +38,14 @@ public class BusinessOperationAnalysisQueryDTO {
* 当前选中的指标编码 * 当前选中的指标编码
*/ */
private String selectedMetricCode; private String selectedMetricCode;
/**
* 页码(用于场站排行分页)
*/
private Integer pageNum;
/**
* 每页条数(用于场站排行分页)
*/
private Integer pageSize;
} }

View File

@@ -11,12 +11,9 @@ import com.jsowell.pile.vo.uniapp.business.BusinessEfficiencyVO;
import com.jsowell.pile.vo.uniapp.business.BusinessGunEfficiencyAnalysisVO; import com.jsowell.pile.vo.uniapp.business.BusinessGunEfficiencyAnalysisVO;
import com.jsowell.pile.vo.uniapp.business.BusinessOperationAnalysisVO; import com.jsowell.pile.vo.uniapp.business.BusinessOperationAnalysisVO;
import com.jsowell.pile.vo.uniapp.business.BusinessScaleVO; import com.jsowell.pile.vo.uniapp.business.BusinessScaleVO;
import com.jsowell.pile.vo.uniapp.business.BusinessStationRankVO;
import com.jsowell.pile.vo.web.MerchantOrderReportVO; import com.jsowell.pile.vo.web.MerchantOrderReportVO;
import com.jsowell.pile.vo.web.ParkingCouponRecordVO; import com.jsowell.pile.vo.web.ParkingCouponRecordVO;
import java.util.List;
public interface BusinessFinancialService { public interface BusinessFinancialService {
MerchantOrderReportVO getMyWallet(MerchantOrderReportDTO dto); MerchantOrderReportVO getMyWallet(MerchantOrderReportDTO dto);
@@ -61,12 +58,12 @@ public interface BusinessFinancialService {
BusinessEfficiencyVO getBusinessEfficiency(BusinessEfficiencyQueryDTO dto); BusinessEfficiencyVO getBusinessEfficiency(BusinessEfficiencyQueryDTO dto);
/** /**
* 查询场站订单排行 * 分页查询场站订单排行
* *
* @param dto 查询条件 * @param dto 查询条件含pageNum、pageSize
* @return 场站订单排行列表按订单数量降序) * @return 分页结果(场站订单排行列表按订单数量降序)
*/ */
List<BusinessStationRankVO> getStationOrderRank(BusinessOperationAnalysisQueryDTO dto); PageResponse getStationOrderRank(BusinessOperationAnalysisQueryDTO dto);
/** /**
* 查询效率分析(单均效率 + 枪均效率) * 查询效率分析(单均效率 + 枪均效率)

View File

@@ -898,16 +898,16 @@ public class BusinessFinancialServiceImpl implements BusinessFinancialService {
} }
/** /**
* 查询场站订单排行 * 分页查询场站订单排行
* 按站点分组统计订单数量,按订单数量降序排列 * 按站点分组统计订单数量,按订单数量降序排列,支持分页
* *
* @param dto 查询条件 * @param dto 查询条件含pageNum、pageSize
* @return 场站订单排行列表 * @return 分页结果
*/ */
@Override @Override
public List<BusinessStationRankVO> getStationOrderRank(BusinessOperationAnalysisQueryDTO dto) { public PageResponse getStationOrderRank(BusinessOperationAnalysisQueryDTO dto) {
if (dto == null) { if (dto == null) {
return new ArrayList<>(); return PageResponse.builder().pageNum(1).pageSize(10).list(new ArrayList<>()).total(0).pages(0).build();
} }
if (StringUtils.isBlank(dto.getStartTime()) && StringUtils.isBlank(dto.getEndTime())) { if (StringUtils.isBlank(dto.getStartTime()) && StringUtils.isBlank(dto.getEndTime())) {
LocalDate endDate = LocalDate.now(); LocalDate endDate = LocalDate.now();
@@ -916,6 +916,10 @@ public class BusinessFinancialServiceImpl implements BusinessFinancialService {
dto.setEndTime(endDate.toString()); dto.setEndTime(endDate.toString());
} }
// 设置默认分页参数
int pageNum = dto.getPageNum() != null && dto.getPageNum() > 0 ? dto.getPageNum() : 1;
int pageSize = dto.getPageSize() != null && dto.getPageSize() > 0 ? dto.getPageSize() : 10;
List<String> stationIdList = resolveStationIds(dto.getStationIdList()); List<String> stationIdList = resolveStationIds(dto.getStationIdList());
// 查询结算报表原始数据 // 查询结算报表原始数据
@@ -923,7 +927,7 @@ public class BusinessFinancialServiceImpl implements BusinessFinancialService {
stationIdList, dto.getStartTime(), dto.getEndTime()); stationIdList, dto.getStartTime(), dto.getEndTime());
if (CollectionUtils.isEmpty(reportList)) { if (CollectionUtils.isEmpty(reportList)) {
return new ArrayList<>(); return PageResponse.builder().pageNum(pageNum).pageSize(pageSize).list(new ArrayList<>()).total(0).pages(0).build();
} }
// 按站点ID分组累加订单数量 // 按站点ID分组累加订单数量
@@ -937,20 +941,11 @@ public class BusinessFinancialServiceImpl implements BusinessFinancialService {
stationOrderCountMap.merge(sId, chargeNum, Integer::sum); stationOrderCountMap.merge(sId, chargeNum, Integer::sum);
} }
// 批量查询站点名称 // 批量查询站点名称一次性查出所有站点内存中按ID匹配避免N+1查询
List<PileStationInfo> allStations = pileStationInfoService.selectPileStationInfoList(new PileStationInfo());
Map<String, String> stationNameMap = new LinkedHashMap<>(); Map<String, String> stationNameMap = new LinkedHashMap<>();
for (String sId : stationOrderCountMap.keySet()) { for (PileStationInfo station : allStations) {
try { stationNameMap.put(String.valueOf(station.getId()), station.getStationName());
PileStationInfo stationInfo = pileStationInfoService.selectPileStationInfoById(Long.valueOf(sId));
if (stationInfo != null) {
stationNameMap.put(sId, stationInfo.getStationName());
} else {
stationNameMap.put(sId, "未知站点");
}
} catch (Exception e) {
log.warn("查询站点名称失败 stationId:{}", sId, e);
stationNameMap.put(sId, "未知站点");
}
} }
// 按订单数量降序排列并构建排行列表 // 按订单数量降序排列并构建排行列表
@@ -965,12 +960,27 @@ public class BusinessFinancialServiceImpl implements BusinessFinancialService {
a.getOrderCount() != null ? a.getOrderCount() : 0)) a.getOrderCount() != null ? a.getOrderCount() : 0))
.collect(Collectors.toList()); .collect(Collectors.toList());
// 设置排行名次 // 设置排行名次(基于全量数据的排名)
for (int i = 0; i < rankList.size(); i++) { for (int i = 0; i < rankList.size(); i++) {
rankList.get(i).setRank(i + 1); rankList.get(i).setRank(i + 1);
} }
return rankList; // 手动分页
long total = rankList.size();
int pages = (int) Math.ceil((double) total / pageSize);
int fromIndex = (pageNum - 1) * pageSize;
int toIndex = Math.min(fromIndex + pageSize, rankList.size());
List<BusinessStationRankVO> pageList = fromIndex < rankList.size()
? rankList.subList(fromIndex, toIndex)
: new ArrayList<>();
return PageResponse.builder()
.pageNum(pageNum)
.pageSize(pageSize)
.list(pageList)
.total(total)
.pages(pages)
.build();
} }
/** /**