Commit 3ff10915 authored by libin's avatar libin

租车订单统计

parent 52848b85
package com.github.wxiaoqi.security.common.enumconstant; package com.github.wxiaoqi.security.common.enumconstant;
import java.util.EnumSet;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/** /**
* @author libin * @author libin
* @version 1.0 * @version 1.0
...@@ -16,8 +21,18 @@ public enum LevelEnum { ...@@ -16,8 +21,18 @@ public enum LevelEnum {
this.desc = desc; this.desc = desc;
} }
public static LevelEnum getLevelEnumByLevel(Integer level){
return levelMap.get(level);
}
private Integer level; private Integer level;
private String desc; private String desc;
private static Map<Integer, LevelEnum> levelMap;
static {
levelMap = EnumSet.allOf(LevelEnum.class).stream().collect(Collectors.toMap(LevelEnum::getLevel, Function.identity()));
}
public Integer getLevel() { public Integer getLevel() {
return level; return level;
......
package com.xxfc.platform.order.pojo.dto; package com.xxfc.platform.order.pojo.dto;
import com.github.wxiaoqi.security.common.enumconstant.LevelEnum;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
...@@ -35,4 +36,11 @@ public class OrderDTO { ...@@ -35,4 +36,11 @@ public class OrderDTO {
*/ */
private Integer memberLevel; private Integer memberLevel;
private LevelEnum levelEnum;
public LevelEnum getLevelEnum(){
return LevelEnum.getLevelEnumByLevel(this.memberLevel);
}
} }
package com.xxfc.platform.order.biz; package com.xxfc.platform.order.biz;
import cn.hutool.core.util.ObjectUtil;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.xxfc.platform.order.contant.enumerate.StatisticsStatusEnum; import com.xxfc.platform.order.contant.enumerate.StatisticsStatusEnum;
...@@ -38,15 +39,26 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi ...@@ -38,15 +39,26 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
private final String NO_PAY_STATE_STR = String.format("%s-%d", "-", StatisticsStatusEnum.NO_PAY_WAY); private final String NO_PAY_STATE_STR = String.format("%s-%d", "-", StatisticsStatusEnum.NO_PAY_WAY);
private final int PAY_ORDER = 101; private final int PAY_ORDER = 101;
/**
* 租车统计查询
* @param orderReceivedStatisticsFindDTO
* @return
*/
public List<OrderRentVehicleReceivedStatistics> selectOrderReceivedStatistics(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO) { public List<OrderRentVehicleReceivedStatistics> selectOrderReceivedStatistics(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO) {
return mapper.selectOrderRentVehicleReceivedStatistics(orderReceivedStatisticsFindDTO); return mapper.selectOrderRentVehicleReceivedStatistics(orderReceivedStatisticsFindDTO);
} }
/**
* 租车统计处理
* @param startDate 开始时间
* @param endDate 结束时间
*/
public void orderRentVehicleReceivedStatistics(Date startDate, Date endDate) { public void orderRentVehicleReceivedStatistics(Date startDate, Date endDate) {
List<OrderRentVehicleReceivedStatistics> orderRentVehicleReceivedStatisticsList = new ArrayList<>(); List<OrderRentVehicleReceivedStatistics> orderRentVehicleReceivedStatisticsList = new ArrayList<>();
//根据租车订单类型 时间查询
List<OrderDTO> orderDTOS = baseOrderBiz.selectOrdersByTypeAndTime(Arrays.asList(StatisticsStatusEnum.ORDER_RENT_VEHICLE_TYPE), startDate, endDate); List<OrderDTO> orderDTOS = baseOrderBiz.selectOrdersByTypeAndTime(Arrays.asList(StatisticsStatusEnum.ORDER_RENT_VEHICLE_TYPE), startDate, endDate);
//数据处理 状态组合
Map<String, Long> stateGroupMap = orderDTOS.stream().peek(x -> { Map<String, Long> stateGroupMap = orderDTOS.stream().peek(x -> {
x.setStateGroup(String.format("%d-%d-%d-%d", x.getCompanyId(), x.getOrderOrigin(), x.getPayWay() == null ? StatisticsStatusEnum.NO_PAY_WAY : x.getPayWay(), x.getStatus())); x.setStateGroup(String.format("%d-%d-%d-%d", x.getCompanyId(), x.getOrderOrigin(), x.getPayWay() == null ? StatisticsStatusEnum.NO_PAY_WAY : x.getPayWay(), x.getStatus()));
}) })
...@@ -54,7 +66,7 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi ...@@ -54,7 +66,7 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
//订单账目信息 //订单账目信息
List<OrderAccountBo> orderAccountBoList = orderAccountBiz.selectByDate(startDate, endDate); List<OrderAccountBo> orderAccountBoList = orderAccountBiz.selectByDate(startDate, endDate);
//数据处理 把 未支付的单的支付方式 设置为 99 //账目数据处理 状态组合
Map<String, List<OrderAccountBo>> ordersMap = orderAccountBoList.stream().peek(x -> { Map<String, List<OrderAccountBo>> ordersMap = orderAccountBoList.stream().peek(x -> {
x.setStateGroup(String.format("%d-%d-%d-%d", x.getCompanyId(), x.getOrderOrigin(), x.getPayWay() == null ? StatisticsStatusEnum.NO_PAY_WAY : x.getPayWay(), x.getStatus())); x.setStateGroup(String.format("%d-%d-%d-%d", x.getCompanyId(), x.getOrderOrigin(), x.getPayWay() == null ? StatisticsStatusEnum.NO_PAY_WAY : x.getPayWay(), x.getStatus()));
}).collect(Collectors.groupingBy(OrderAccountBo::getStateGroup, Collectors.toList())); }).collect(Collectors.groupingBy(OrderAccountBo::getStateGroup, Collectors.toList()));
...@@ -80,24 +92,28 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi ...@@ -80,24 +92,28 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
} }
//未支付单 //未支付单
List<OrderDTO> noPayOrders = orderDTOS.stream().filter(x -> x.getPayWay() != null).collect(Collectors.toList()); List<BigDecimal> noPayOrdersPrices = orderDTOS.stream().filter(x -> x.getPayWay() != null).map(OrderDTO::getRealAmount).collect(Collectors.toList());
BigDecimal totalNoPayAmount = CollectionUtils.isEmpty(noPayOrders) ? BigDecimal.ZERO : noPayOrders.stream().map(OrderDTO::getRealAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y)); BigDecimal totalNoPayAmount = CollectionUtils.isEmpty(noPayOrdersPrices) ? BigDecimal.ZERO : noPayOrdersPrices.stream().reduce(BigDecimal.ZERO, (x, y) -> x.add(y));
int totalNoPayOrderQuantity = CollectionUtils.isEmpty(noPayOrders) ? 0 : noPayOrders.size(); int totalNoPayOrderQuantity = CollectionUtils.isEmpty(noPayOrdersPrices) ? 0 : noPayOrdersPrices.size();
//查询分公司ids
List<Integer> companyIds = vehicleFeign.findCompanyIdsByAreaId(null); List<Integer> companyIds = vehicleFeign.findCompanyIdsByAreaId(null);
//创建剩余状态组合的租车统计对象
List stisticsActiveState = ordersMap.isEmpty() ? Collections.EMPTY_LIST : Lists.newArrayList(ordersMap.keySet()); List stisticsActiveState = ordersMap.isEmpty() ? Collections.EMPTY_LIST : Lists.newArrayList(ordersMap.keySet());
List<OrderRentVehicleReceivedStatistics> otherStatisticsStateGroupList = createOtherStatisticsStateGroupList(startDate, stisticsActiveState, companyIds, totalNoPayAmount, totalNoPayOrderQuantity); List<OrderRentVehicleReceivedStatistics> otherStatisticsStateGroupList = createOtherStatisticsStateGroupList(startDate, stisticsActiveState, companyIds, totalNoPayAmount, totalNoPayOrderQuantity);
orderRentVehicleReceivedStatisticsList.addAll(otherStatisticsStateGroupList); orderRentVehicleReceivedStatisticsList.addAll(otherStatisticsStateGroupList);
//保存
insertMemberReceivedStatisticsBatch(orderRentVehicleReceivedStatisticsList); insertMemberReceivedStatisticsBatch(orderRentVehicleReceivedStatisticsList);
} }
/** /**
* 创建剩余状态数据 * 创建剩余状态数据
* *
* @param startDate * @param startDate 时间
* @param statisticsStateGroups * @param statisticsStateGroups 状态组合 集合
* @param companyIds * @param companyIds 公司ids
* @param totalNoPayAmount 未支付金额
* @param totalNoPayOrderQuantity 未支付订单数
* @return * @return
*/ */
private List<OrderRentVehicleReceivedStatistics> createOtherStatisticsStateGroupList(Date startDate, private List<OrderRentVehicleReceivedStatistics> createOtherStatisticsStateGroupList(Date startDate,
...@@ -105,10 +121,31 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi ...@@ -105,10 +121,31 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
List<Integer> companyIds, List<Integer> companyIds,
BigDecimal totalNoPayAmount, BigDecimal totalNoPayAmount,
Integer totalNoPayOrderQuantity) { Integer totalNoPayOrderQuantity) {
List<OrderRentVehicleReceivedStatistics> orderRentVehicleReceivedStatisticsList = new ArrayList<>(); List<OrderRentVehicleReceivedStatistics> orderRentVehicleReceivedStatisticsList = new ArrayList<>();
//获取剩余状态组合
List<String> otherStatisticsStateGroup = StatisticsStatusEnum.getOtherStatisticsStateGroup(companyIds, statisticsStateGroups); List<String> otherStatisticsStateGroup = StatisticsStatusEnum.getOtherStatisticsStateGroup(companyIds, statisticsStateGroups);
List<OrderRentVehicleReceivedStatistics> result = otherStatisticsStateGroup.parallelStream().map(stateGroup -> { //创建租车统计克隆对象
OrderRentVehicleReceivedStatistics orderRentVehicleReceivedStatistics = StatisticsStatusEnum.wrapStatisticsObject(startDate, stateGroup, new OrderRentVehicleReceivedStatistics()); OrderRentVehicleReceivedStatistics orderRentVehicleReceivedStatistics = new OrderRentVehicleReceivedStatistics();
//统计对象的生成
otherStatisticsStateGroup.parallelStream().map(stateGroup -> {
OrderRentVehicleReceivedStatistics orderRentVehicleReceivedStatisticsClone = StatisticsStatusEnum.wrapStatisticsObject(startDate, stateGroup,ObjectUtil.cloneByStream(orderRentVehicleReceivedStatistics));
orderRentVehicleReceivedStatisticsClone = wrapOrderRentVehicleReceivedStatistics(stateGroup,totalNoPayAmount,totalNoPayOrderQuantity,orderRentVehicleReceivedStatisticsClone);
orderRentVehicleReceivedStatisticsList.add(orderRentVehicleReceivedStatisticsClone);
return orderRentVehicleReceivedStatisticsClone;
}).count();
return orderRentVehicleReceivedStatisticsList;
}
/**
*
* @param stateGroup 状态组合
* @param totalNoPayAmount 未支付金额
* @param totalNoPayOrderQuantity 未支付订单量
* @param orderRentVehicleReceivedStatistics 租车统计对象
* @return
*/
private OrderRentVehicleReceivedStatistics wrapOrderRentVehicleReceivedStatistics(String stateGroup,BigDecimal totalNoPayAmount, Integer totalNoPayOrderQuantity,OrderRentVehicleReceivedStatistics orderRentVehicleReceivedStatistics){
if (stateGroup.contains(NO_PAY_STATE_STR)) { if (stateGroup.contains(NO_PAY_STATE_STR)) {
orderRentVehicleReceivedStatistics.setTotalAmount(totalNoPayAmount); orderRentVehicleReceivedStatistics.setTotalAmount(totalNoPayAmount);
orderRentVehicleReceivedStatistics.setTotalQuantity(totalNoPayOrderQuantity); orderRentVehicleReceivedStatistics.setTotalQuantity(totalNoPayOrderQuantity);
...@@ -117,11 +154,12 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi ...@@ -117,11 +154,12 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
orderRentVehicleReceivedStatistics.setTotalQuantity(0); orderRentVehicleReceivedStatistics.setTotalQuantity(0);
} }
return orderRentVehicleReceivedStatistics; return orderRentVehicleReceivedStatistics;
}).collect(Collectors.toList());
orderRentVehicleReceivedStatisticsList.addAll(result == null ? Collections.EMPTY_LIST : result);
return orderRentVehicleReceivedStatisticsList;
} }
/**
* 批量插入数据
* @param orderRentVehicleReceivedStatistics
*/
public void insertMemberReceivedStatisticsBatch(List<OrderRentVehicleReceivedStatistics> orderRentVehicleReceivedStatistics) { public void insertMemberReceivedStatisticsBatch(List<OrderRentVehicleReceivedStatistics> orderRentVehicleReceivedStatistics) {
mapper.insertList(orderRentVehicleReceivedStatistics); mapper.insertList(orderRentVehicleReceivedStatistics);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment