Commit 009eff2f authored by libin's avatar libin

租车会员统计

parent 575abf90
package com.github.wxiaoqi.security.common.util;
import java.math.BigDecimal;
import java.util.Collections;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.BinaryOperator;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collector;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/11/20 19:59
*/
public class CollectorsUtil {
static final Set<Collector.Characteristics> CH_NOID = Collections.emptySet();
private CollectorsUtil() {
}
@SuppressWarnings("unchecked")
private static <I, R> Function<I, R> castingIdentity() {
return i -> (R) i;
}
/**
* Simple implementation class for {@code Collector}.
*
* @param <T>
* the type of elements to be collected
* @param <R>
* the type of the result
*/
static class CollectorImpl<T, A, R> implements Collector<T, A, R> {
private final Supplier<A> supplier;
private final BiConsumer<A, T> accumulator;
private final BinaryOperator<A> combiner;
private final Function<A, R> finisher;
private final Set<Characteristics> characteristics;
CollectorImpl(Supplier<A> supplier, BiConsumer<A, T> accumulator, BinaryOperator<A> combiner,
Function<A, R> finisher, Set<Characteristics> characteristics) {
this.supplier = supplier;
this.accumulator = accumulator;
this.combiner = combiner;
this.finisher = finisher;
this.characteristics = characteristics;
}
CollectorImpl(Supplier<A> supplier, BiConsumer<A, T> accumulator, BinaryOperator<A> combiner,
Set<Characteristics> characteristics) {
this(supplier, accumulator, combiner, castingIdentity(), characteristics);
}
@Override
public BiConsumer<A, T> accumulator() {
return accumulator;
}
@Override
public Supplier<A> supplier() {
return supplier;
}
@Override
public BinaryOperator<A> combiner() {
return combiner;
}
@Override
public Function<A, R> finisher() {
return finisher;
}
@Override
public Set<Characteristics> characteristics() {
return characteristics;
}
}
public static <T> Collector<T, ?, BigDecimal> summingBigDecimal(ToBigDecimalFunction<? super T> mapper) {
return new CollectorImpl<>(() -> new BigDecimal[1], (a, t) -> {
if (a[0] == null) {
a[0] = BigDecimal.ZERO;
}
a[0] = a[0].add(mapper.applyAsBigDecimal(t));
}, (a, b) -> {
a[0] = a[0].add(b[0]);
return a;
}, a -> a[0], CH_NOID);
}
}
package com.github.wxiaoqi.security.common.util;
import java.math.BigDecimal;
@FunctionalInterface
public interface ToBigDecimalFunction<T> {
BigDecimal applyAsBigDecimal(T value);
}
...@@ -24,6 +24,8 @@ public enum StatisticsStatusEnum { ...@@ -24,6 +24,8 @@ public enum StatisticsStatusEnum {
public static final int ORDER_TOUR_TYPE=2; public static final int ORDER_TOUR_TYPE=2;
public static final String UN_PAY_STATE="0"; public static final String UN_PAY_STATE="0";
public static final int NO_PAY_WAY=0; public static final int NO_PAY_WAY=0;
public static final int NO_ORDER_ORIGN=99;
public static final int NO_ORDER_STATE=99;
public static final Integer DEFAULT_SQL_SIZE=1000; public static final Integer DEFAULT_SQL_SIZE=1000;
public static List<String> orderStates; public static List<String> orderStates;
...@@ -69,6 +71,10 @@ public enum StatisticsStatusEnum { ...@@ -69,6 +71,10 @@ public enum StatisticsStatusEnum {
return stateGroupList; return stateGroupList;
} }
public static Integer getCompnayId(String stateGroup){
return Integer.valueOf(stateGroup.split("-")[0]);
}
public static<T extends OrderReceivedStatisticsBase> T wrapStatisticsObject(Date date,String stateGroup,T targetObj){ public static<T extends OrderReceivedStatisticsBase> T wrapStatisticsObject(Date date,String stateGroup,T targetObj){
DateTime yesterday = DateTime.of(date); DateTime yesterday = DateTime.of(date);
String year = String.valueOf(yesterday.getField(DateField.YEAR)); String year = String.valueOf(yesterday.getField(DateField.YEAR));
......
package com.xxfc.platform.order.entity; package com.xxfc.platform.order.entity;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.*;
import cn.hutool.core.clone.CloneSupport;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Table;
import java.io.Serializable;
import java.math.BigDecimal;
/** /**
* 会员订单统计 * 会员订单统计
...@@ -22,13 +21,6 @@ import lombok.Data; ...@@ -22,13 +21,6 @@ import lombok.Data;
public class OrderMemberReceivedStatistics extends OrderReceivedStatisticsBase implements Serializable { public class OrderMemberReceivedStatistics extends OrderReceivedStatisticsBase implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/**
*
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY,generator = "JDBC")
@ApiModelProperty("")
protected Long id;
/** /**
* 普通会员订单总额 * 普通会员订单总额
......
package com.xxfc.platform.order.entity; package com.xxfc.platform.order.entity;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Table;
import java.io.Serializable;
/** /**
* 全部订单统计 * 全部订单统计
...@@ -19,13 +19,6 @@ import lombok.Data; ...@@ -19,13 +19,6 @@ import lombok.Data;
@Table(name = "order_received_statistics") @Table(name = "order_received_statistics")
public class OrderReceivedStatistics extends OrderReceivedStatisticsBase implements Serializable { public class OrderReceivedStatistics extends OrderReceivedStatisticsBase implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/**
*
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY,generator = "JDBC")
@ApiModelProperty("")
protected Long id;
/** /**
* 订单总量 * 订单总量
......
...@@ -3,9 +3,9 @@ package com.xxfc.platform.order.entity; ...@@ -3,9 +3,9 @@ package com.xxfc.platform.order.entity;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.persistence.*; import javax.persistence.Column;
import javax.persistence.Table;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal;
/** /**
...@@ -20,14 +20,6 @@ import java.math.BigDecimal; ...@@ -20,14 +20,6 @@ import java.math.BigDecimal;
public class OrderRentVehicleReceivedStatistics extends OrderReceivedStatisticsBase implements Serializable { public class OrderRentVehicleReceivedStatistics extends OrderReceivedStatisticsBase implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/**
*
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY,generator = "JDBC")
@ApiModelProperty("")
protected Long id;
/** /**
* 订单总量 * 订单总量
*/ */
......
package com.xxfc.platform.order.entity; package com.xxfc.platform.order.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.persistence.*; import javax.persistence.Table;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date;
/** /**
...@@ -20,13 +18,5 @@ import java.util.Date; ...@@ -20,13 +18,5 @@ import java.util.Date;
public class OrderTourReceivedStatistics extends OrderReceivedStatisticsBase implements Serializable { public class OrderTourReceivedStatistics extends OrderReceivedStatisticsBase implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
/**
*
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY,generator = "JDBC")
@ApiModelProperty("")
protected Long id;
} }
package com.xxfc.platform.order.pojo.order;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/11/20 19:11
*/
@Data
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
public class CompanyAmountBo {
private Integer companyId;
private BigDecimal amount;
}
...@@ -3,7 +3,7 @@ package com.xxfc.platform.order.biz; ...@@ -3,7 +3,7 @@ package com.xxfc.platform.order.biz;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.enumconstant.LevelEnum; import com.github.wxiaoqi.security.common.enumconstant.LevelEnum;
import com.google.common.collect.Lists; import com.github.wxiaoqi.security.common.util.CollectorsUtil;
import com.xxfc.platform.order.contant.enumerate.StatisticsStatusEnum; import com.xxfc.platform.order.contant.enumerate.StatisticsStatusEnum;
import com.xxfc.platform.order.entity.OrderMemberReceivedStatistics; import com.xxfc.platform.order.entity.OrderMemberReceivedStatistics;
import com.xxfc.platform.order.mapper.OrderMemberReceivedStatisticsMapper; import com.xxfc.platform.order.mapper.OrderMemberReceivedStatisticsMapper;
...@@ -11,6 +11,7 @@ import com.xxfc.platform.order.pojo.account.OrderAccountBo; ...@@ -11,6 +11,7 @@ import com.xxfc.platform.order.pojo.account.OrderAccountBo;
import com.xxfc.platform.order.pojo.account.OrderAccountDetail; import com.xxfc.platform.order.pojo.account.OrderAccountDetail;
import com.xxfc.platform.order.pojo.dto.OrderDTO; import com.xxfc.platform.order.pojo.dto.OrderDTO;
import com.xxfc.platform.order.pojo.dto.OrderReceivedStatisticsFindDTO; import com.xxfc.platform.order.pojo.dto.OrderReceivedStatisticsFindDTO;
import com.xxfc.platform.order.pojo.order.CompanyAmountBo;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -56,7 +57,8 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive ...@@ -56,7 +57,8 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
public void orderMemberReceivedStatistics(Date startDate, Date endDate) { public void orderMemberReceivedStatistics(Date startDate, Date endDate) {
List<OrderMemberReceivedStatistics> orderMemberReceivedStatisticsList = new ArrayList<>(18); List<OrderMemberReceivedStatistics> orderMemberReceivedStatisticsList = new ArrayList<>(18);
List<String> stisticsActiveState = new ArrayList<>(); List<String> stisticsActiveState = new ArrayList<>();
BigDecimal globalTotalAmount = BigDecimal.ZERO; //公司的收入与支出 ---》无状态
List<CompanyAmountBo> companyAmoutList = new ArrayList<>();
//根据时间范围查询出会员单 //根据时间范围查询出会员单
List<OrderDTO> orders = baseOrderBiz.selectOrdersByTypeAndTime(Arrays.asList(StatisticsStatusEnum.ORDER_MEMBER_TYPE), startDate, endDate); List<OrderDTO> orders = baseOrderBiz.selectOrdersByTypeAndTime(Arrays.asList(StatisticsStatusEnum.ORDER_MEMBER_TYPE), startDate, endDate);
...@@ -105,7 +107,6 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive ...@@ -105,7 +107,6 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
} }
} }
} }
//黄金 //黄金
List<OrderAccountBo> goldOrderAccountBos = orderMemberLevelMap.get(LevelEnum.GOLD); List<OrderAccountBo> goldOrderAccountBos = orderMemberLevelMap.get(LevelEnum.GOLD);
if (CollectionUtils.isNotEmpty(goldOrderAccountBos)) { if (CollectionUtils.isNotEmpty(goldOrderAccountBos)) {
...@@ -146,19 +147,28 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive ...@@ -146,19 +147,28 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
orderMemberReceivedStatistics.setTotalDiamondQuantity(totalDiamondQuantity); orderMemberReceivedStatistics.setTotalDiamondQuantity(totalDiamondQuantity);
orderMemberReceivedStatisticsList.add(orderMemberReceivedStatistics); orderMemberReceivedStatisticsList.add(orderMemberReceivedStatistics);
} else { } else {
globalTotalAmount.add(generaTotalAmount); BigDecimal totalAmount = generaTotalAmount.add(generaTotalAmount).add(goldTotalAmount).add(diamondTotalAmount).subtract(generalTotalRefundAmount).subtract(goldTotalRefundAmount).subtract(diamondTotalRefundAmount);
globalTotalAmount.add(generalTotalRefundAmount); Integer compnayId = StatisticsStatusEnum.getCompnayId(orderKey);
globalTotalAmount.add(goldTotalAmount); CompanyAmountBo companyAmountBo = CompanyAmountBo.builder().companyId(compnayId).amount(totalAmount).build();
globalTotalAmount.add(goldTotalRefundAmount); companyAmoutList.add(companyAmountBo);
globalTotalAmount.add(diamondTotalAmount); }
globalTotalAmount.add(diamondTotalRefundAmount);
} }
Map<Integer, BigDecimal> companyAmountMap = companyAmoutList.stream().collect(Collectors.groupingBy(CompanyAmountBo::getCompanyId,
CollectorsUtil.summingBigDecimal(CompanyAmountBo::getAmount)));
Set<Map.Entry<Integer, BigDecimal>> companyAmountSet = companyAmountMap.entrySet();
for (Map.Entry<Integer, BigDecimal> companyAmountEntry : companyAmountSet) {
String stateGrp = String.format("%d-%d-%d-%d",companyAmountEntry.getKey(),StatisticsStatusEnum.NO_ORDER_ORIGN,StatisticsStatusEnum.NO_PAY_WAY,StatisticsStatusEnum.NO_ORDER_STATE);
OrderMemberReceivedStatistics orderMemberReceivedStatistics = StatisticsStatusEnum.wrapStatisticsObject(startDate, stateGrp, new OrderMemberReceivedStatistics());
orderMemberReceivedStatistics.setTotalAmount(companyAmountEntry.getValue());
orderMemberReceivedStatisticsList.add(orderMemberReceivedStatistics);
} }
//未支付单 //未支付单
List<OrderMemberReceivedStatistics> noPayOrderMemberReceivedStatisticsList = createOrderMemberReceivedStatisticsList(startDate, stateGroupMap.get(Boolean.FALSE)); List<OrderMemberReceivedStatistics> noPayOrderMemberReceivedStatisticsList = createOrderMemberReceivedStatisticsList(startDate, stateGroupMap.get(Boolean.FALSE));
orderMemberReceivedStatisticsList.addAll(noPayOrderMemberReceivedStatisticsList); orderMemberReceivedStatisticsList.addAll(noPayOrderMemberReceivedStatisticsList);
//创建剩余状态数据 //创建剩余状态数据
List<OrderMemberReceivedStatistics> otherStatisticsStateGroupList = createOtherStatisticsStateGroupList(startDate, stisticsActiveState, StatisticsStatusEnum.DEFAULT_COMPANY,globalTotalAmount); List<OrderMemberReceivedStatistics> otherStatisticsStateGroupList = createOtherStatisticsStateGroupList(startDate, stisticsActiveState, StatisticsStatusEnum.DEFAULT_COMPANY);
orderMemberReceivedStatisticsList.addAll(otherStatisticsStateGroupList); orderMemberReceivedStatisticsList.addAll(otherStatisticsStateGroupList);
//保存 //保存
insertMemberReceivedStatisticsBatch(orderMemberReceivedStatisticsList); insertMemberReceivedStatisticsBatch(orderMemberReceivedStatisticsList);
...@@ -218,34 +228,6 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive ...@@ -218,34 +228,6 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
return orderMemberReceivedStatisticsList; return orderMemberReceivedStatisticsList;
} }
/**
* @param orders 某种状态下的会员单
* @param levelEnum 会员等级
* @param orderMemberReceivedStatistics 会员统计对象
* @return
*/
private OrderMemberReceivedStatistics wrapOrderMemberReceivedStatistics(List<OrderDTO> orders, LevelEnum levelEnum, OrderMemberReceivedStatistics orderMemberReceivedStatistics) {
orders = CollectionUtils.isEmpty(orders) ? Collections.EMPTY_LIST : orders;
BigDecimal totalAmount = orders.stream().map(OrderDTO::getRealAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y));
switch (levelEnum) {
case GENERAL:
orderMemberReceivedStatistics.setToalCommonAmmount(totalAmount);
orderMemberReceivedStatistics.setTotalCommonQuantity(orders.size());
break;
case GOLD:
orderMemberReceivedStatistics.setTotalGoldAmount(totalAmount);
orderMemberReceivedStatistics.setTotalGoldQuantity(orders.size());
break;
case DIAMOND:
orderMemberReceivedStatistics.setTotalDiamondAmmount(totalAmount);
orderMemberReceivedStatistics.setTotalDiamondQuantity(orders.size());
break;
default:
break;
}
return orderMemberReceivedStatistics;
}
/** /**
* 创建剩余状态数据 * 创建剩余状态数据
* *
...@@ -254,12 +236,12 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive ...@@ -254,12 +236,12 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
* @param companyId 公司 id * @param companyId 公司 id
* @return * @return
*/ */
private List<OrderMemberReceivedStatistics> createOtherStatisticsStateGroupList(Date startDate, List<String> statisticsStateGroups, Integer companyId,BigDecimal totalAmount) { private List<OrderMemberReceivedStatistics> createOtherStatisticsStateGroupList(Date startDate, List<String> statisticsStateGroups, Integer companyId) {
List<OrderMemberReceivedStatistics> orderMemberReceivedStatisticsList = new ArrayList<>(); List<OrderMemberReceivedStatistics> orderMemberReceivedStatisticsList = new ArrayList<>();
//获取剩余状态组合 //获取剩余状态组合
List<String> otherStatisticsStateGroup = StatisticsStatusEnum.getOtherStatisticsStateGroup(Arrays.asList(companyId), statisticsStateGroups); List<String> otherStatisticsStateGroup = StatisticsStatusEnum.getOtherStatisticsStateGroup(Arrays.asList(companyId), statisticsStateGroups);
//创建会员克隆统计对象 //创建会员克隆统计对象
OrderMemberReceivedStatistics orderMemberReceivedStatistics = createDefaultOrderMemberReceivedStatistics(totalAmount); OrderMemberReceivedStatistics orderMemberReceivedStatistics = createDefaultOrderMemberReceivedStatistics();
//统计对象的生成 //统计对象的生成
otherStatisticsStateGroup.parallelStream().peek(stateGroup -> { otherStatisticsStateGroup.parallelStream().peek(stateGroup -> {
OrderMemberReceivedStatistics orderMemberReceivedStatisticsClone = StatisticsStatusEnum.wrapStatisticsObject(startDate, stateGroup, OrderMemberReceivedStatistics orderMemberReceivedStatisticsClone = StatisticsStatusEnum.wrapStatisticsObject(startDate, stateGroup,
...@@ -274,9 +256,9 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive ...@@ -274,9 +256,9 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
* *
* @return * @return
*/ */
private OrderMemberReceivedStatistics createDefaultOrderMemberReceivedStatistics(BigDecimal totalAmount) { private OrderMemberReceivedStatistics createDefaultOrderMemberReceivedStatistics() {
OrderMemberReceivedStatistics orderMemberReceivedStatistics = new OrderMemberReceivedStatistics(); OrderMemberReceivedStatistics orderMemberReceivedStatistics = new OrderMemberReceivedStatistics();
orderMemberReceivedStatistics.setTotalAmount(totalAmount); orderMemberReceivedStatistics.setTotalAmount(BigDecimal.ZERO);
orderMemberReceivedStatistics.setTotalCommonQuantity(0); orderMemberReceivedStatistics.setTotalCommonQuantity(0);
orderMemberReceivedStatistics.setToalCommonAmmount(BigDecimal.ZERO); orderMemberReceivedStatistics.setToalCommonAmmount(BigDecimal.ZERO);
orderMemberReceivedStatistics.setTotalGoldQuantity(0); orderMemberReceivedStatistics.setTotalGoldQuantity(0);
...@@ -293,6 +275,5 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive ...@@ -293,6 +275,5 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
*/ */
public void insertMemberReceivedStatisticsBatch(List<OrderMemberReceivedStatistics> orderMemberReceivedStatistics) { public void insertMemberReceivedStatisticsBatch(List<OrderMemberReceivedStatistics> orderMemberReceivedStatistics) {
mapper.insertList(orderMemberReceivedStatistics); mapper.insertList(orderMemberReceivedStatistics);
// mapper.inserMemberReceivedtList(orderMemberReceivedStatistics);
} }
} }
\ No newline at end of file
...@@ -2,21 +2,26 @@ package com.xxfc.platform.order.biz; ...@@ -2,21 +2,26 @@ package com.xxfc.platform.order.biz;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.util.CollectorsUtil;
import com.xxfc.platform.order.contant.enumerate.StatisticsStatusEnum; import com.xxfc.platform.order.contant.enumerate.StatisticsStatusEnum;
import com.xxfc.platform.order.entity.OrderReceivedStatisticsBase;
import com.xxfc.platform.order.entity.OrderRentVehicleReceivedStatistics; import com.xxfc.platform.order.entity.OrderRentVehicleReceivedStatistics;
import com.xxfc.platform.order.mapper.OrderRentVehicleReceivedStatisticsMapper; import com.xxfc.platform.order.mapper.OrderRentVehicleReceivedStatisticsMapper;
import com.xxfc.platform.order.pojo.account.OrderAccountBo; import com.xxfc.platform.order.pojo.account.OrderAccountBo;
import com.xxfc.platform.order.pojo.account.OrderAccountDetail; import com.xxfc.platform.order.pojo.account.OrderAccountDetail;
import com.xxfc.platform.order.pojo.dto.OrderDTO; import com.xxfc.platform.order.pojo.dto.OrderDTO;
import com.xxfc.platform.order.pojo.dto.OrderReceivedStatisticsFindDTO; import com.xxfc.platform.order.pojo.dto.OrderReceivedStatisticsFindDTO;
import com.xxfc.platform.order.pojo.order.CompanyAmountBo;
import com.xxfc.platform.vehicle.feign.VehicleFeign; import com.xxfc.platform.vehicle.feign.VehicleFeign;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.function.BinaryOperator;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -55,6 +60,8 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi ...@@ -55,6 +60,8 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
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<String> stisticsActiveState = new ArrayList<>(); List<String> stisticsActiveState = new ArrayList<>();
//公司的收入与支出 ---》无状态
List<CompanyAmountBo> companyAmoutList = 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);
...@@ -78,8 +85,6 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi ...@@ -78,8 +85,6 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
x.getHasPay())); x.getHasPay()));
}).collect(Collectors.groupingBy(OrderAccountBo::getStateGroup, Collectors.toList())); }).collect(Collectors.groupingBy(OrderAccountBo::getStateGroup, Collectors.toList()));
BigDecimal globalTotalAmount = BigDecimal.ZERO;
//已经支付单 //已经支付单
Set<Map.Entry<String, List<OrderAccountBo>>> ordersSet = ordersMap.entrySet(); Set<Map.Entry<String, List<OrderAccountBo>>> ordersSet = ordersMap.entrySet();
for (Map.Entry<String, List<OrderAccountBo>> orderEntry : ordersSet) { for (Map.Entry<String, List<OrderAccountBo>> orderEntry : ordersSet) {
...@@ -97,15 +102,27 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi ...@@ -97,15 +102,27 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
refundAmount.add(accountDetailEntity.getOrderAmount()).add(accountDetailEntity.getDepositAmount()); refundAmount.add(accountDetailEntity.getOrderAmount()).add(accountDetailEntity.getDepositAmount());
} }
} }
boolean flag = stateGroupMap == null ? false : stateGroupMap.get(Boolean.TRUE) == null ? false : stateGroupMap.get(Boolean.TRUE).get(orderKey)==null?false:true; if (stisticsActiveState.contains(orderKey)){
if (flag){
OrderRentVehicleReceivedStatistics orderRentVehicleReceivedStatistics = StatisticsStatusEnum.wrapStatisticsObject(startDate, orderKey, new OrderRentVehicleReceivedStatistics()); OrderRentVehicleReceivedStatistics orderRentVehicleReceivedStatistics = StatisticsStatusEnum.wrapStatisticsObject(startDate, orderKey, new OrderRentVehicleReceivedStatistics());
orderRentVehicleReceivedStatistics.setTotalAmount(totalAmount.subtract(refundAmount)); orderRentVehicleReceivedStatistics.setTotalAmount(totalAmount.subtract(refundAmount));
orderRentVehicleReceivedStatistics.setTotalQuantity(stateGroupMap.get(Boolean.TRUE).get(orderKey).size()); orderRentVehicleReceivedStatistics.setTotalQuantity(stateGroupMap.get(Boolean.TRUE).get(orderKey).size());
orderRentVehicleReceivedStatisticsList.add(orderRentVehicleReceivedStatistics); orderRentVehicleReceivedStatisticsList.add(orderRentVehicleReceivedStatistics);
}else {
Integer compnayId = StatisticsStatusEnum.getCompnayId(orderKey);
CompanyAmountBo companyAmountBo = CompanyAmountBo.builder().companyId(compnayId).amount(totalAmount.subtract(refundAmount)).build();
companyAmoutList.add(companyAmountBo);
} }
globalTotalAmount.add(totalAmount.subtract(refundAmount)); }
Map<Integer, BigDecimal> companyAmountMap = companyAmoutList.stream().collect(Collectors.groupingBy(CompanyAmountBo::getCompanyId,
CollectorsUtil.summingBigDecimal(CompanyAmountBo::getAmount)));
Set<Map.Entry<Integer, BigDecimal>> companyAmountSet = companyAmountMap.entrySet();
for (Map.Entry<Integer, BigDecimal> companyAmountEntry : companyAmountSet) {
String stateGrp = String.format("%d-%d-%d-%d",companyAmountEntry.getKey(),StatisticsStatusEnum.NO_ORDER_ORIGN,StatisticsStatusEnum.NO_PAY_WAY,StatisticsStatusEnum.NO_ORDER_STATE);
OrderRentVehicleReceivedStatistics orderRentVehicleReceivedStatistics = StatisticsStatusEnum.wrapStatisticsObject(startDate, stateGrp, new OrderRentVehicleReceivedStatistics());
orderRentVehicleReceivedStatistics.setTotalQuantity(0);
orderRentVehicleReceivedStatistics.setTotalAmount(companyAmountEntry.getValue());
orderRentVehicleReceivedStatisticsList.add(orderRentVehicleReceivedStatistics);
} }
//未支付单 //未支付单
...@@ -115,7 +132,7 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi ...@@ -115,7 +132,7 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
//查询分公司ids //查询分公司ids
List<Integer> companyIds = vehicleFeign.findCompanyIdsByAreaId(null); List<Integer> companyIds = vehicleFeign.findCompanyIdsByAreaId(null);
//创建剩余状态组合的租车统计对象 //创建剩余状态组合的租车统计对象
List<OrderRentVehicleReceivedStatistics> otherStatisticsStateGroupList = createOtherStatisticsStateGroupList(startDate,globalTotalAmount,stisticsActiveState, companyIds); List<OrderRentVehicleReceivedStatistics> otherStatisticsStateGroupList = createOtherStatisticsStateGroupList(startDate,stisticsActiveState, companyIds);
orderRentVehicleReceivedStatisticsList.addAll(otherStatisticsStateGroupList); orderRentVehicleReceivedStatisticsList.addAll(otherStatisticsStateGroupList);
//保存 //保存
insertMemberReceivedStatisticsBatch(orderRentVehicleReceivedStatisticsList); insertMemberReceivedStatisticsBatch(orderRentVehicleReceivedStatisticsList);
...@@ -149,13 +166,11 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi ...@@ -149,13 +166,11 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
* 创建剩余状态数据 * 创建剩余状态数据
* *
* @param startDate 时间 * @param startDate 时间
* @param totalAmount 订单状态
* @param statisticsStateGroups 状态组合 集合 * @param statisticsStateGroups 状态组合 集合
* @param companyIds 公司ids * @param companyIds 公司ids
* @return * @return
*/ */
private List<OrderRentVehicleReceivedStatistics> createOtherStatisticsStateGroupList(Date startDate, private List<OrderRentVehicleReceivedStatistics> createOtherStatisticsStateGroupList(Date startDate,
BigDecimal totalAmount,
List<String> statisticsStateGroups, List<String> statisticsStateGroups,
List<Integer> companyIds) { List<Integer> companyIds) {
...@@ -165,13 +180,14 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi ...@@ -165,13 +180,14 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
//创建租车统计克隆对象 //创建租车统计克隆对象
OrderRentVehicleReceivedStatistics orderRentVehicleReceivedStatistics = new OrderRentVehicleReceivedStatistics(); OrderRentVehicleReceivedStatistics orderRentVehicleReceivedStatistics = new OrderRentVehicleReceivedStatistics();
//统计对象的生成 //统计对象的生成
otherStatisticsStateGroup.parallelStream().map(stateGroup -> { otherStatisticsStateGroup.stream().map(stateGroup -> {
OrderRentVehicleReceivedStatistics orderRentVehicleReceivedStatisticsClone = StatisticsStatusEnum.wrapStatisticsObject(startDate, stateGroup, ObjectUtil.cloneByStream(orderRentVehicleReceivedStatistics)); OrderRentVehicleReceivedStatistics orderRentVehicleReceivedStatisticsClone = StatisticsStatusEnum.wrapStatisticsObject(startDate, stateGroup, ObjectUtil.cloneByStream(orderRentVehicleReceivedStatistics));
orderRentVehicleReceivedStatisticsClone.setTotalAmount(totalAmount); orderRentVehicleReceivedStatisticsClone.setTotalAmount(BigDecimal.ZERO);
orderRentVehicleReceivedStatisticsClone.setTotalQuantity(0); orderRentVehicleReceivedStatisticsClone.setTotalQuantity(0);
orderRentVehicleReceivedStatisticsList.add(orderRentVehicleReceivedStatisticsClone); orderRentVehicleReceivedStatisticsList.add(orderRentVehicleReceivedStatisticsClone);
return orderRentVehicleReceivedStatisticsClone; return orderRentVehicleReceivedStatisticsClone;
}).count(); }).count();
return orderRentVehicleReceivedStatisticsList; return orderRentVehicleReceivedStatisticsList;
} }
...@@ -181,7 +197,7 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi ...@@ -181,7 +197,7 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
* @param orderRentVehicleReceivedStatistics * @param orderRentVehicleReceivedStatistics
*/ */
public void insertMemberReceivedStatisticsBatch(List<OrderRentVehicleReceivedStatistics> orderRentVehicleReceivedStatistics) { public void insertMemberReceivedStatisticsBatch(List<OrderRentVehicleReceivedStatistics> orderRentVehicleReceivedStatistics) {
orderRentVehicleReceivedStatistics.sort(Comparator.comparing(OrderRentVehicleReceivedStatistics::getCompanyId));
int orderSize = orderRentVehicleReceivedStatistics.size(); int orderSize = orderRentVehicleReceivedStatistics.size();
int sqlAdq = orderSize / StatisticsStatusEnum.DEFAULT_SQL_SIZE; int sqlAdq = orderSize / StatisticsStatusEnum.DEFAULT_SQL_SIZE;
int sqlMod = orderSize % StatisticsStatusEnum.DEFAULT_SQL_SIZE; int sqlMod = orderSize % StatisticsStatusEnum.DEFAULT_SQL_SIZE;
......
...@@ -3,8 +3,8 @@ package com.xxfc.platform.order.mapper; ...@@ -3,8 +3,8 @@ package com.xxfc.platform.order.mapper;
import com.xxfc.platform.order.entity.OrderMemberReceivedStatistics; import com.xxfc.platform.order.entity.OrderMemberReceivedStatistics;
import com.xxfc.platform.order.pojo.dto.OrderReceivedStatisticsFindDTO; import com.xxfc.platform.order.pojo.dto.OrderReceivedStatisticsFindDTO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.additional.insert.InsertListMapper;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.special.InsertListMapper;
import java.util.List; import java.util.List;
......
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