mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-22 12:05:05 +08:00
update
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -187,6 +187,8 @@ public interface PileStationInfoService {
|
||||
*/
|
||||
StationBusinessAnalyzeInfoVO getStationBusinessAnalyzeInfo(StationBusinessAnalyzeInfoDTO dto);
|
||||
|
||||
StationBusinessAnalyzeInfoVO getStationBusinessAnalyzeInfoV1(StationBusinessAnalyzeInfoDTO dto);
|
||||
|
||||
/**
|
||||
* 获取站点运营分析信息(12个月)
|
||||
* @param dto
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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个月)
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user