This commit is contained in:
YAS\29473
2025-10-16 16:26:14 +08:00
parent 8bb175c056
commit 4bb4665460
8 changed files with 254 additions and 6 deletions

View File

@@ -424,4 +424,11 @@ public interface OrderBasicInfoMapper {
* @return
*/
List<OrderPaymentDetailVO> getSplitOrders(@Param("dto") QueryOrderSplitRecordDTO dto);
List<BusinessOrderDetailInfoVO> getOrderDetailByStationIdsForMonth(
@Param("stationIds") List<String> stationIds,
@Param("startTime") String startTime,
@Param("endTime") String endTime
);
}

View File

@@ -622,4 +622,13 @@ public interface OrderBasicInfoService{
void checkOrUpdateOrderSplitRecord(AfterSettleOrderDTO afterSettleOrderDTO);
List<StationSplitConfig> queryOrderSplitConfigList(String orderCode);
/**
* 查询近一年的数据
* @param stationIds
* @param startTime
* @param endTime
* @return
*/
List<BusinessOrderDetailInfoVO> getOrderDetailByStationIdsForMonth(List<String> stationIds , String startTime , String endTime);
}

View File

@@ -187,6 +187,8 @@ public interface PileStationInfoService {
*/
StationBusinessAnalyzeInfoVO getStationBusinessAnalyzeInfo(StationBusinessAnalyzeInfoDTO dto);
StationBusinessAnalyzeInfoVO getStationBusinessAnalyzeInfoV1(StationBusinessAnalyzeInfoDTO dto);
/**
* 获取站点运营分析信息12个月
* @param dto

View File

@@ -5907,5 +5907,10 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
logger.info("校验或更新订单分账信息-订单:{}, 获取的订单分账配置:{}", orderCode, JSON.toJSONString(resultList));
return resultList;
}
@Override
public List<BusinessOrderDetailInfoVO> getOrderDetailByStationIdsForMonth(List<String> stationIds , String startTime , String endTime) {
return orderBasicInfoMapper.getOrderDetailByStationIdsForMonth(stationIds, startTime, endTime);
}
}

View File

@@ -1178,6 +1178,155 @@ public class PileStationInfoServiceImpl implements PileStationInfoService {
return vo;
}
/**
* 获取站点运营分析信息7天、30天
*
* @param dto
*/
@Override
public StationBusinessAnalyzeInfoVO getStationBusinessAnalyzeInfoV1(StationBusinessAnalyzeInfoDTO dto) {
StationBusinessAnalyzeInfoVO vo = new StationBusinessAnalyzeInfoVO();
String dateTime = dto.getDateTime();
String type = dto.getType();
List<String> stationIds = dto.getStationIds();
// 如果没有传 stationIds则查当前账号下所有站点
if (CollectionUtils.isEmpty(stationIds)) {
List<MerchantInfoVO> merchantInfoVOList = UserUtils.getMerchantInfoVOList();
if (CollectionUtils.isEmpty(merchantInfoVOList)) {
throw new BusinessException(ReturnCodeEnum.CODE_SELECT_INFO_IS_NULL);
}
List<String> merchantIds = merchantInfoVOList.stream()
.map(MerchantInfoVO::getMerchantId)
.collect(Collectors.toList());
List<PileStationInfo> pileStationInfos = getStationInfosByMerchantIds(merchantIds);
if (CollectionUtils.isEmpty(pileStationInfos)) {
throw new BusinessException(ReturnCodeEnum.CODE_SELECT_INFO_IS_NULL);
}
stationIds = pileStationInfos.stream()
.map(x -> String.valueOf(x.getId()))
.collect(Collectors.toList());
}
List<BusinessOrderDetailInfoVO> orderDetails;
if (StringUtils.equals(Constants.THREE, type)) {
// 近12个月
String startTime = DateUtils.getFirstDayOfLastYearMonth(); // 去年同月第一天
String endTime = DateUtils.getLastDayOfCurrentMonth(); // 本月最后一天
orderDetails = orderBasicInfoService.getOrderDetailByStationIdsForMonth(stationIds, startTime, endTime);
} else {
// 日期区间7天或30天
Date startDate;
if (StringUtils.equals(Constants.ONE, type)) {
startDate = DateUtils.addDays(new Date(), -7);
} else if (StringUtils.equals(Constants.TWO, type)) {
startDate = DateUtils.addDays(new Date(), -30);
} else {
// 默认7天
startDate = DateUtils.addDays(new Date(), -7);
}
String startTime = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, startDate);
String endTime = DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD);
orderDetails = orderBasicInfoService.getOrderDetailByStationIds(stationIds, startTime, endTime);
}
if (CollectionUtils.isEmpty(orderDetails)) {
return vo;
}
// 空值安全处理
for (BusinessOrderDetailInfoVO orderDetail : orderDetails) {
orderDetail.setSharpAmount(Optional.ofNullable(orderDetail.getSharpAmount()).orElse(BigDecimal.ZERO));
orderDetail.setPeakAmount(Optional.ofNullable(orderDetail.getPeakAmount()).orElse(BigDecimal.ZERO));
orderDetail.setFlatAmount(Optional.ofNullable(orderDetail.getFlatAmount()).orElse(BigDecimal.ZERO));
orderDetail.setValleyAmount(Optional.ofNullable(orderDetail.getValleyAmount()).orElse(BigDecimal.ZERO));
orderDetail.setSharpUsedElectricity(Optional.ofNullable(orderDetail.getSharpUsedElectricity()).orElse(BigDecimal.ZERO));
orderDetail.setPeakUsedElectricity(Optional.ofNullable(orderDetail.getPeakUsedElectricity()).orElse(BigDecimal.ZERO));
orderDetail.setFlatUsedElectricity(Optional.ofNullable(orderDetail.getFlatUsedElectricity()).orElse(BigDecimal.ZERO));
orderDetail.setValleyUsedElectricity(Optional.ofNullable(orderDetail.getValleyUsedElectricity()).orElse(BigDecimal.ZERO));
orderDetail.setTotalServiceAmount(Optional.ofNullable(orderDetail.getTotalServiceAmount()).orElse(BigDecimal.ZERO));
orderDetail.setSettleAmount(Optional.ofNullable(orderDetail.getSettleAmount()).orElse(BigDecimal.ZERO));
}
// 聚合汇总
Map<String, BusinessOrderDetailInfoVO> collect = orderDetails.stream()
.sorted(Comparator.comparing(BusinessOrderDetailInfoVO::getTradeDate))
.collect(Collectors.toMap(BusinessOrderDetailInfoVO::getTradeDate, Function.identity(), (a, b) -> {
a.setSharpUsedElectricity(a.getSharpUsedElectricity().add(b.getSharpUsedElectricity()));
a.setSharpAmount(a.getSharpAmount().add(b.getSharpAmount()));
a.setPeakUsedElectricity(a.getPeakUsedElectricity().add(b.getPeakUsedElectricity()));
a.setPeakAmount(a.getPeakAmount().add(b.getPeakAmount()));
a.setFlatUsedElectricity(a.getFlatUsedElectricity().add(b.getFlatUsedElectricity()));
a.setFlatAmount(a.getFlatAmount().add(b.getFlatAmount()));
a.setValleyUsedElectricity(a.getValleyUsedElectricity().add(b.getValleyUsedElectricity()));
a.setValleyAmount(a.getValleyAmount().add(b.getValleyAmount()));
a.setTotalServiceAmount(a.getTotalServiceAmount().add(b.getTotalServiceAmount()));
a.setSettleAmount(a.getSettleAmount().add(b.getSettleAmount()));
a.setTotalUsedElectricity(
a.getSharpUsedElectricity()
.add(a.getPeakUsedElectricity())
.add(a.getFlatUsedElectricity())
.add(a.getValleyUsedElectricity())
);
return a;
}));
// TreeMap 排序
TreeMap<String, BusinessOrderDetailInfoVO> map = new TreeMap<>(collect);
List<BusinessOrderDetailInfoVO> detailList = new ArrayList<>(map.values());
// 对比变量
BigDecimal todayUsed = BigDecimal.ZERO, yesterdayUsed = BigDecimal.ZERO;
BigDecimal todaySettle = BigDecimal.ZERO, yesterdaySettle = BigDecimal.ZERO;
BigDecimal todayService = BigDecimal.ZERO, yesterdayService = BigDecimal.ZERO;
BusinessOrderDetailInfoVO todayInfo = null, yesterdayInfo = null;
if (StringUtils.isNotBlank(dateTime)) {
todayInfo = map.get(dateTime);
String yesterdayStr = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD,
DateUtils.addDays(DateUtils.parseDate(dateTime), -1));
yesterdayInfo = map.get(yesterdayStr);
} else if (!detailList.isEmpty() && detailList.size() > 1) {
todayInfo = detailList.get(detailList.size() - 1);
yesterdayInfo = detailList.get(detailList.size() - 2);
}
if (todayInfo != null && yesterdayInfo != null) {
todayUsed = todayInfo.getTotalUsedElectricity();
yesterdayUsed = yesterdayInfo.getTotalUsedElectricity();
todaySettle = todayInfo.getSettleAmount();
yesterdaySettle = yesterdayInfo.getSettleAmount();
todayService = todayInfo.getTotalServiceAmount();
yesterdayService = yesterdayInfo.getTotalServiceAmount();
}
// 计算增长率
vo.setElectricityGrowthRate(calcGrowthRate(todayUsed, yesterdayUsed));
vo.setOrderAmountGrowthRate(calcGrowthRate(todaySettle, yesterdaySettle));
vo.setServiceAmountGrowthRate(calcGrowthRate(todayService, yesterdayService));
vo.setBusinessOrderDetailInfoVOList(detailList);
return vo;
}
/** 计算增长率 */
private String calcGrowthRate(BigDecimal now, BigDecimal last) {
if (last == null || last.compareTo(BigDecimal.ZERO) == 0) {
return "0%";
}
BigDecimal rate = now.subtract(last)
.divide(last, 4, BigDecimal.ROUND_HALF_UP)
.multiply(new BigDecimal("100"));
return rate.stripTrailingZeros().toPlainString() + "%";
}
/**
* 获取站点运营分析信息12个月
*