Commit 575abf90 authored by libin's avatar libin

会员统计

parent 3495649d
...@@ -23,7 +23,7 @@ public enum StatisticsStatusEnum { ...@@ -23,7 +23,7 @@ public enum StatisticsStatusEnum {
public static final int ORDER_RENT_VEHICLE_TYPE=1; public static final int ORDER_RENT_VEHICLE_TYPE=1;
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=99; public static final int NO_PAY_WAY=0;
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;
...@@ -35,8 +35,8 @@ public enum StatisticsStatusEnum { ...@@ -35,8 +35,8 @@ public enum StatisticsStatusEnum {
orderStates = Lists.newArrayList("0","1"); orderStates = Lists.newArrayList("0","1");
// 1 app 2 小程序 3 其他 // 1 app 2 小程序 3 其他
orderOrigins = Lists.newArrayList("1","2","3"); orderOrigins = Lists.newArrayList("1","2","3");
// 1 微信 2 支付宝 // 1 微信 2 支付宝 0不需要支付(使用了优惠券之类的)或未支付
orderPayWays = Lists.newArrayList("1","2"); orderPayWays = Lists.newArrayList("1","2","0");
} }
public static List<String> statisticsSateGroupWithCompanys(List<Integer> companyIdList){ public static List<String> statisticsSateGroupWithCompanys(List<Integer> companyIdList){
...@@ -57,7 +57,7 @@ public enum StatisticsStatusEnum { ...@@ -57,7 +57,7 @@ public enum StatisticsStatusEnum {
for (String orderPayWay : orderPayWays) { for (String orderPayWay : orderPayWays) {
for (String orderState : orderStates) { for (String orderState : orderStates) {
//订单来源-支付方式-订单状态 //订单来源-支付方式-订单状态
orderStatisticsStateGroups.add(String.format("%s-%s-%s",orderOrigin,orderState==UN_PAY_STATE?String.valueOf(NO_PAY_WAY):orderPayWay,orderState)); orderStatisticsStateGroups.add(String.format("%s-%s-%s",orderOrigin,orderPayWay,orderState));
} }
} }
} }
......
...@@ -22,6 +22,14 @@ import lombok.Data; ...@@ -22,6 +22,14 @@ 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;
/** /**
* 普通会员订单总额 * 普通会员订单总额
*/ */
......
...@@ -19,6 +19,13 @@ import lombok.Data; ...@@ -19,6 +19,13 @@ 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,10 +3,7 @@ package com.xxfc.platform.order.entity; ...@@ -3,10 +3,7 @@ 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.Column; import javax.persistence.*;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Transient;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
...@@ -22,7 +19,7 @@ public class OrderReceivedStatisticsBase { ...@@ -22,7 +19,7 @@ public class OrderReceivedStatisticsBase {
* *
*/ */
@Id @Id
@GeneratedValue(generator = "JDBC") @GeneratedValue(strategy = GenerationType.IDENTITY,generator = "JDBC")
@ApiModelProperty("") @ApiModelProperty("")
protected Long id; protected Long id;
......
...@@ -3,8 +3,7 @@ package com.xxfc.platform.order.entity; ...@@ -3,8 +3,7 @@ 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.Column; import javax.persistence.*;
import javax.persistence.Table;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
...@@ -21,6 +20,14 @@ import java.math.BigDecimal; ...@@ -21,6 +20,14 @@ 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;
/** /**
* 订单总量 * 订单总量
*/ */
......
...@@ -3,8 +3,7 @@ package com.xxfc.platform.order.entity; ...@@ -3,8 +3,7 @@ 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.Column; import javax.persistence.*;
import javax.persistence.Table;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
...@@ -21,7 +20,13 @@ import java.util.Date; ...@@ -21,7 +20,13 @@ 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;
} }
...@@ -20,22 +20,22 @@ import java.util.Date; ...@@ -20,22 +20,22 @@ import java.util.Date;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class OrderDTO { public class OrderDTO {
private Integer id; protected Integer id;
private Integer type; protected Integer type;
private Integer status; protected Integer status;
private BigDecimal orderAmount; protected BigDecimal orderAmount;
private BigDecimal realAmount; protected BigDecimal realAmount;
private Integer orderOrigin; protected Integer orderOrigin;
private Integer payWay; protected Integer payWay;
private Integer companyId; protected Integer companyId;
private String stateGroup; protected String stateGroup;
private Integer hasPay; protected Integer hasPay;
/** /**
* 会员相关 * 会员相关
*/ */
private Integer memberLevel; protected Integer memberLevel;
private LevelEnum levelEnum; protected LevelEnum levelEnum;
public LevelEnum getLevelEnum(){ public LevelEnum getLevelEnum(){
......
...@@ -7,6 +7,8 @@ import com.google.common.collect.Lists; ...@@ -7,6 +7,8 @@ import com.google.common.collect.Lists;
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;
import com.xxfc.platform.order.pojo.account.OrderAccountBo;
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 lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
...@@ -31,6 +33,9 @@ import java.util.stream.Collectors; ...@@ -31,6 +33,9 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor(onConstructor = @__(@Autowired)) @RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceivedStatisticsMapper, OrderMemberReceivedStatistics> { public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceivedStatisticsMapper, OrderMemberReceivedStatistics> {
private final BaseOrderBiz baseOrderBiz; private final BaseOrderBiz baseOrderBiz;
private final OrderAccountBiz orderAccountBiz;
private final int PAY_ORDER = 101;
/** /**
* 会员统计查询 * 会员统计查询
...@@ -50,52 +55,169 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive ...@@ -50,52 +55,169 @@ 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<>();
BigDecimal globalTotalAmount = BigDecimal.ZERO;
//根据时间范围查询出会员单 //根据时间范围查询出会员单
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);
//数据处理 把状态组合 //数据处理 状态组合 按支付状态分组 而后按组合状态
Map<String, Map<LevelEnum, List<OrderDTO>>> ordersMap = orders.stream().peek(x -> { Map<Boolean, Map<String, Map<LevelEnum, List<OrderDTO>>>> stateGroupMap = orders.stream().peek(x -> {
x.setStateGroup(String.format("%d-%d-%d-%d", StatisticsStatusEnum.DEFAULT_COMPANY, x.getOrderOrigin(), x.getPayWay() == null ? StatisticsStatusEnum.NO_PAY_WAY : x.getPayWay(), x.getHasPay())); x.setStateGroup(String.format("%d-%d-%d-%d", StatisticsStatusEnum.DEFAULT_COMPANY,
}).collect(Collectors.groupingBy(OrderDTO::getStateGroup, Collectors.groupingBy(OrderDTO::getLevelEnum, Collectors.toList()))); x.getOrderOrigin(), x.getPayWay() == null ? StatisticsStatusEnum.NO_PAY_WAY:x.getPayWay(),
x.getHasPay()));
stisticsActiveState.add(x.getStateGroup());
})
.collect(Collectors.partitioningBy(x -> Objects.nonNull(x.getPayWay()), Collectors.groupingBy(OrderDTO::getStateGroup, Collectors.groupingBy(OrderDTO::getLevelEnum, Collectors.toList()))));
if (!ordersMap.isEmpty()) { //订单账目信息
Set<Map.Entry<String, Map<LevelEnum, List<OrderDTO>>>> orderSet = ordersMap.entrySet(); List<OrderAccountBo> orderAccountBoList = orderAccountBiz.selectByTypeAndDate(StatisticsStatusEnum.ORDER_MEMBER_TYPE, startDate, endDate);
for (Map.Entry<String, Map<LevelEnum, List<OrderDTO>>> orderEntry : orderSet) { //账目数据处理 状态组合
//获取状态 Map<String, Map<LevelEnum, List<OrderAccountBo>>> orderAccountMap = orderAccountBoList.stream().peek(x -> {
String orderStatisticsGroup = orderEntry.getKey(); x.setStateGroup(String.format("%d-%d-%d-%d", StatisticsStatusEnum.DEFAULT_COMPANY, x.getOrderOrigin(),
Map<LevelEnum, List<OrderDTO>> orderEntryValue = orderEntry.getValue(); x.getPayWay() == null ? StatisticsStatusEnum.NO_PAY_WAY:x.getPayWay(),
x.getHasPay()));
}).collect(Collectors.groupingBy(OrderAccountBo::getStateGroup, Collectors.groupingBy(OrderAccountBo::getLevelEnum, Collectors.toList())));
//已经支付单
Set<Map.Entry<String, Map<LevelEnum, List<OrderAccountBo>>>> ordersSet = orderAccountMap.entrySet();
for (Map.Entry<String, Map<LevelEnum, List<OrderAccountBo>>> orderEntry : ordersSet) {
//状态key
String orderKey = orderEntry.getKey();
Map<LevelEnum, List<OrderAccountBo>> orderMemberLevelMap = orderEntry.getValue();
BigDecimal generaTotalAmount = BigDecimal.ZERO;
BigDecimal generalTotalRefundAmount = BigDecimal.ZERO;
BigDecimal goldTotalAmount = BigDecimal.ZERO;
BigDecimal goldTotalRefundAmount = BigDecimal.ZERO;
BigDecimal diamondTotalAmount = BigDecimal.ZERO;
BigDecimal diamondTotalRefundAmount = BigDecimal.ZERO;
//普通
List<OrderAccountBo> generalOrderAccountBos = orderMemberLevelMap.get(LevelEnum.GENERAL);
if(CollectionUtils.isNotEmpty(generalOrderAccountBos)) {
for (OrderAccountBo orderAccountBo : generalOrderAccountBos) {
OrderAccountDetail accountDetailEntity = orderAccountBo.getAccountDetailEntity();
if (orderAccountBo.getAccountType() == PAY_ORDER) {
generaTotalAmount.add(accountDetailEntity.getOrderAmount()).add(accountDetailEntity.getDepositAmount());
} else {
generalTotalRefundAmount.add(accountDetailEntity.getOrderAmount()).add(accountDetailEntity.getDepositAmount());
}
}
}
//黄金
List<OrderAccountBo> goldOrderAccountBos = orderMemberLevelMap.get(LevelEnum.GOLD);
if (CollectionUtils.isNotEmpty(goldOrderAccountBos)) {
for (OrderAccountBo orderAccountBo : goldOrderAccountBos) {
OrderAccountDetail accountDetailEntity = orderAccountBo.getAccountDetailEntity();
if (orderAccountBo.getAccountType() == PAY_ORDER) {
goldTotalAmount.add(accountDetailEntity.getOrderAmount()).add(accountDetailEntity.getDepositAmount());
} else {
goldTotalRefundAmount.add(accountDetailEntity.getOrderAmount()).add(accountDetailEntity.getDepositAmount());
}
}
}
//钻石
List<OrderAccountBo> diamondOrderAccountBos = orderMemberLevelMap.get(LevelEnum.DIAMOND);
if (CollectionUtils.isNotEmpty(diamondOrderAccountBos)) {
for (OrderAccountBo orderAccountBo : diamondOrderAccountBos) {
OrderAccountDetail accountDetailEntity = orderAccountBo.getAccountDetailEntity();
if (orderAccountBo.getAccountType() == PAY_ORDER) {
diamondTotalAmount.add(accountDetailEntity.getOrderAmount()).add(accountDetailEntity.getDepositAmount());
} else {
diamondTotalRefundAmount.add(accountDetailEntity.getOrderAmount()).add(accountDetailEntity.getDepositAmount());
}
}
}
if (stisticsActiveState.contains(orderKey)) {
//创建会员统计对象 //创建会员统计对象
OrderMemberReceivedStatistics orderMemberReceivedStatistics = StatisticsStatusEnum.wrapStatisticsObject(startDate, orderStatisticsGroup, new OrderMemberReceivedStatistics()); OrderMemberReceivedStatistics orderMemberReceivedStatistics = StatisticsStatusEnum.wrapStatisticsObject(startDate, orderKey, new OrderMemberReceivedStatistics());
//等级金额 和量 的计算 orderMemberReceivedStatistics.setToalCommonAmmount(generaTotalAmount.subtract(generalTotalRefundAmount));
Set<Map.Entry<LevelEnum, List<OrderDTO>>> memberOrdersSet = orderEntryValue.entrySet(); Integer totalcommonQuantity = stateGroupMap.get(Boolean.TRUE).get(LevelEnum.GENERAL) == null ? 0 : stateGroupMap.get(Boolean.TRUE).get(LevelEnum.GENERAL).size();
for (Map.Entry<LevelEnum, List<OrderDTO>> levelEnumListEntry : memberOrdersSet) { orderMemberReceivedStatistics.setTotalCommonQuantity(totalcommonQuantity);
orderMemberReceivedStatistics = wrapOrderMemberReceivedStatistics(levelEnumListEntry.getValue(), levelEnumListEntry.getKey(), orderMemberReceivedStatistics);
} orderMemberReceivedStatistics.setTotalGoldAmount(goldTotalAmount.subtract(goldTotalRefundAmount));
//总金额 Integer totalGoldQuantity = stateGroupMap.get(Boolean.TRUE).get(LevelEnum.GOLD) == null ? 0 : stateGroupMap.get(Boolean.TRUE).get(LevelEnum.GOLD).size();
BigDecimal totalAmount = orderMemberReceivedStatistics.getToalCommonAmmount() orderMemberReceivedStatistics.setTotalGoldQuantity(totalGoldQuantity);
.add(orderMemberReceivedStatistics.getTotalGoldAmount())
.add(orderMemberReceivedStatistics.getTotalDiamondAmmount());
//总量
Integer totalQuantity = orderMemberReceivedStatistics.getTotalCommonQuantity() +
orderMemberReceivedStatistics.getTotalGoldQuantity() +
orderMemberReceivedStatistics.getTotalDiamondQuantity();
orderMemberReceivedStatistics.setTotalQuantity(totalQuantity);
orderMemberReceivedStatistics.setTotalAmount(totalAmount);
orderMemberReceivedStatistics.setTotalDiamondAmmount(diamondTotalAmount.subtract(diamondTotalRefundAmount));
Integer totalDiamondQuantity = stateGroupMap.get(Boolean.TRUE).get(LevelEnum.DIAMOND) == null ? 0 : stateGroupMap.get(Boolean.TRUE).get(LevelEnum.DIAMOND).size();
orderMemberReceivedStatistics.setTotalDiamondQuantity(totalDiamondQuantity);
orderMemberReceivedStatisticsList.add(orderMemberReceivedStatistics); orderMemberReceivedStatisticsList.add(orderMemberReceivedStatistics);
} else {
globalTotalAmount.add(generaTotalAmount);
globalTotalAmount.add(generalTotalRefundAmount);
globalTotalAmount.add(goldTotalAmount);
globalTotalAmount.add(goldTotalRefundAmount);
globalTotalAmount.add(diamondTotalAmount);
globalTotalAmount.add(diamondTotalRefundAmount);
} }
} }
//未支付单
List<OrderMemberReceivedStatistics> noPayOrderMemberReceivedStatisticsList = createOrderMemberReceivedStatisticsList(startDate, stateGroupMap.get(Boolean.FALSE));
orderMemberReceivedStatisticsList.addAll(noPayOrderMemberReceivedStatisticsList);
//创建剩余状态数据 //创建剩余状态数据
List stisticsActiveState = ordersMap==null ? Collections.EMPTY_LIST : Lists.newArrayList(ordersMap.keySet()); 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);
} }
/**
* @param startDate 时间
* @param noPayOrdersMap 未支付单map
* @return
*/
private List<OrderMemberReceivedStatistics> createOrderMemberReceivedStatisticsList(Date startDate, Map<String, Map<LevelEnum, List<OrderDTO>>> noPayOrdersMap) {
List<OrderMemberReceivedStatistics> orderMemberReceivedStatisticsList = new ArrayList<>();
if (noPayOrdersMap == null || noPayOrdersMap.isEmpty()) {
return orderMemberReceivedStatisticsList;
}
Set<Map.Entry<String, Map<LevelEnum, List<OrderDTO>>>> noPayOrderSet = noPayOrdersMap.entrySet();
for (Map.Entry<String, Map<LevelEnum, List<OrderDTO>>> noPayOrderEntry : noPayOrderSet) {
BigDecimal generalTotalAmount = BigDecimal.ZERO;
Integer generalTotalQuantity = 0;
BigDecimal goldTotalAmount = BigDecimal.ZERO;
Integer goldTotalQuantity = 0;
BigDecimal diamondTotalAmount = BigDecimal.ZERO;
Integer diamondTotalQuantity = 0;
//获取状态
String noPayOrderStateGroup = noPayOrderEntry.getKey();
Map<LevelEnum, List<OrderDTO>> noPayOrderEntryValue = noPayOrderEntry.getValue();
OrderMemberReceivedStatistics orderMemberReceivedStatistics = StatisticsStatusEnum.wrapStatisticsObject(startDate, noPayOrderStateGroup, new OrderMemberReceivedStatistics());
List<OrderDTO> generalOrderDTOList = noPayOrderEntryValue.get(LevelEnum.GENERAL);
if (CollectionUtils.isNotEmpty(generalOrderDTOList)) {
generalTotalAmount = generalOrderDTOList.stream().map(OrderDTO::getRealAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y));
generalTotalQuantity = generalOrderDTOList.size();
}
List<OrderDTO> goldOrderDTOList = noPayOrderEntryValue.get(LevelEnum.GOLD);
if (CollectionUtils.isNotEmpty(goldOrderDTOList)) {
goldTotalAmount = goldOrderDTOList.stream().map(OrderDTO::getRealAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y));
goldTotalQuantity = goldOrderDTOList.size();
}
List<OrderDTO> diamondOrderDTOList = noPayOrderEntryValue.get(LevelEnum.DIAMOND);
if (CollectionUtils.isNotEmpty(diamondOrderDTOList)) {
diamondTotalAmount = diamondOrderDTOList.stream().map(OrderDTO::getRealAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y));
diamondTotalQuantity = diamondOrderDTOList.size();
}
orderMemberReceivedStatistics.setToalCommonAmmount(generalTotalAmount);
orderMemberReceivedStatistics.setTotalCommonQuantity(generalTotalQuantity);
orderMemberReceivedStatistics.setTotalGoldAmount(goldTotalAmount);
orderMemberReceivedStatistics.setTotalGoldQuantity(goldTotalQuantity);
orderMemberReceivedStatistics.setTotalDiamondAmmount(diamondTotalAmount);
orderMemberReceivedStatistics.setTotalDiamondQuantity(diamondTotalQuantity);
orderMemberReceivedStatistics.setTotalAmount(generalTotalAmount.add(goldTotalAmount).add(diamondTotalAmount));
orderMemberReceivedStatistics.setTotalQuantity(generalTotalQuantity + goldTotalQuantity + diamondTotalQuantity);
orderMemberReceivedStatisticsList.add(orderMemberReceivedStatistics);
}
return orderMemberReceivedStatisticsList;
}
/** /**
* @param orders 某种状态下的会员单 * @param orders 某种状态下的会员单
* @param levelEnum 会员等级 * @param levelEnum 会员等级
...@@ -132,15 +254,16 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive ...@@ -132,15 +254,16 @@ 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) { private List<OrderMemberReceivedStatistics> createOtherStatisticsStateGroupList(Date startDate, List<String> statisticsStateGroups, Integer companyId,BigDecimal totalAmount) {
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(); OrderMemberReceivedStatistics orderMemberReceivedStatistics = createDefaultOrderMemberReceivedStatistics(totalAmount);
//统计对象的生成 //统计对象的生成
otherStatisticsStateGroup.parallelStream().peek(stateGroup -> { otherStatisticsStateGroup.parallelStream().peek(stateGroup -> {
OrderMemberReceivedStatistics orderMemberReceivedStatisticsClone = StatisticsStatusEnum.wrapStatisticsObject(startDate, stateGroup, ObjectUtil.cloneByStream(orderMemberReceivedStatistics)); OrderMemberReceivedStatistics orderMemberReceivedStatisticsClone = StatisticsStatusEnum.wrapStatisticsObject(startDate, stateGroup,
ObjectUtil.cloneByStream(orderMemberReceivedStatistics));
orderMemberReceivedStatisticsList.add(orderMemberReceivedStatisticsClone); orderMemberReceivedStatisticsList.add(orderMemberReceivedStatisticsClone);
}).count(); }).count();
return orderMemberReceivedStatisticsList; return orderMemberReceivedStatisticsList;
...@@ -151,9 +274,9 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive ...@@ -151,9 +274,9 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive
* *
* @return * @return
*/ */
private OrderMemberReceivedStatistics createDefaultOrderMemberReceivedStatistics() { private OrderMemberReceivedStatistics createDefaultOrderMemberReceivedStatistics(BigDecimal totalAmount) {
OrderMemberReceivedStatistics orderMemberReceivedStatistics = new OrderMemberReceivedStatistics(); OrderMemberReceivedStatistics orderMemberReceivedStatistics = new OrderMemberReceivedStatistics();
orderMemberReceivedStatistics.setTotalAmount(BigDecimal.ZERO); orderMemberReceivedStatistics.setTotalAmount(totalAmount);
orderMemberReceivedStatistics.setTotalCommonQuantity(0); orderMemberReceivedStatistics.setTotalCommonQuantity(0);
orderMemberReceivedStatistics.setToalCommonAmmount(BigDecimal.ZERO); orderMemberReceivedStatistics.setToalCommonAmmount(BigDecimal.ZERO);
orderMemberReceivedStatistics.setTotalGoldQuantity(0); orderMemberReceivedStatistics.setTotalGoldQuantity(0);
...@@ -170,5 +293,6 @@ public class OrderMemberReceivedStatisticsBiz extends BaseBiz<OrderMemberReceive ...@@ -170,5 +293,6 @@ 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
...@@ -60,7 +60,10 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi ...@@ -60,7 +60,10 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
//数据处理 状态组合 按支付状态分组 而后按组合状态 //数据处理 状态组合 按支付状态分组 而后按组合状态
Map<Boolean, Map<String, List<OrderDTO>>> stateGroupMap = orderDTOS.stream().peek(x -> { Map<Boolean, Map<String, List<OrderDTO>>> 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.getHasPay())); x.setStateGroup(String.format("%d-%d-%d-%d", x.getCompanyId(),
x.getOrderOrigin(),
x.getPayWay() == null ? StatisticsStatusEnum.NO_PAY_WAY:x.getPayWay()
,x.getHasPay()));
stisticsActiveState.add(x.getStateGroup()); stisticsActiveState.add(x.getStateGroup());
}) })
.collect(Collectors.partitioningBy(x -> Objects.nonNull(x.getPayWay()), Collectors.groupingBy(OrderDTO::getStateGroup, Collectors.toList()))); .collect(Collectors.partitioningBy(x -> Objects.nonNull(x.getPayWay()), Collectors.groupingBy(OrderDTO::getStateGroup, Collectors.toList())));
...@@ -69,7 +72,10 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi ...@@ -69,7 +72,10 @@ public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehi
List<OrderAccountBo> orderAccountBoList = orderAccountBiz.selectByTypeAndDate(StatisticsStatusEnum.ORDER_RENT_VEHICLE_TYPE,startDate, endDate); List<OrderAccountBo> orderAccountBoList = orderAccountBiz.selectByTypeAndDate(StatisticsStatusEnum.ORDER_RENT_VEHICLE_TYPE,startDate, endDate);
//账目数据处理 状态组合 //账目数据处理 状态组合
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.getHasPay())); x.setStateGroup(String.format("%d-%d-%d-%d", x.getCompanyId(),
x.getOrderOrigin(),
x.getPayWay() == null ? StatisticsStatusEnum.NO_PAY_WAY:x.getPayWay(),
x.getHasPay()));
}).collect(Collectors.groupingBy(OrderAccountBo::getStateGroup, Collectors.toList())); }).collect(Collectors.groupingBy(OrderAccountBo::getStateGroup, Collectors.toList()));
BigDecimal globalTotalAmount = BigDecimal.ZERO; BigDecimal globalTotalAmount = BigDecimal.ZERO;
......
...@@ -2,6 +2,7 @@ package com.xxfc.platform.order.mapper; ...@@ -2,6 +2,7 @@ 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 tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.special.InsertListMapper; import tk.mybatis.mapper.common.special.InsertListMapper;
...@@ -17,4 +18,6 @@ import java.util.List; ...@@ -17,4 +18,6 @@ import java.util.List;
public interface OrderMemberReceivedStatisticsMapper extends Mapper<OrderMemberReceivedStatistics>, InsertListMapper<OrderMemberReceivedStatistics> { public interface OrderMemberReceivedStatisticsMapper extends Mapper<OrderMemberReceivedStatistics>, InsertListMapper<OrderMemberReceivedStatistics> {
List<OrderMemberReceivedStatistics> selectOrderMemberReceivedStatistics(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO); List<OrderMemberReceivedStatistics> selectOrderMemberReceivedStatistics(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO);
void inserMemberReceivedtList(@Param("orderMembers") List<OrderMemberReceivedStatistics> orderMemberReceivedStatistics);
} }
...@@ -2,8 +2,8 @@ package com.xxfc.platform.order.mapper; ...@@ -2,8 +2,8 @@ package com.xxfc.platform.order.mapper;
import com.xxfc.platform.order.entity.OrderRentVehicleReceivedStatistics; import com.xxfc.platform.order.entity.OrderRentVehicleReceivedStatistics;
import com.xxfc.platform.order.pojo.dto.OrderReceivedStatisticsFindDTO; import com.xxfc.platform.order.pojo.dto.OrderReceivedStatisticsFindDTO;
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;
......
...@@ -62,11 +62,13 @@ ...@@ -62,11 +62,13 @@
bo.order_origin, bo.order_origin,
bo.pay_way, bo.pay_way,
bo.has_pay, bo.has_pay,
brvd.start_company_id AS `companyId` brvd.start_company_id AS `companyId`,
omd.member_level AS `memberLevel`
FROM FROM
`order_account` AS `oa` `order_account` AS `oa`
INNER JOIN `base_order` AS `bo` ON bo.id = oa.order_id INNER JOIN `base_order` AS `bo` ON bo.id = oa.order_id
INNER JOIN `order_rent_vehicle_detail` AS `brvd` ON brvd.order_id=oa.order_id LEFT JOIN `order_rent_vehicle_detail` AS `brvd` ON brvd.order_id=oa.order_id
LEFT JOIN `order_member_detail` AS `omd` ON omd.order_id=oa.order_id
WHERE bo.type=#{orderType} AND oa.`crt_time` BETWEEN #{startTime} AND #{endTime} WHERE bo.type=#{orderType} AND oa.`crt_time` BETWEEN #{startTime} AND #{endTime}
</select> </select>
</mapper> </mapper>
\ No newline at end of file
...@@ -17,8 +17,8 @@ ...@@ -17,8 +17,8 @@
<result property="totalGoldQuantity" column="total_gold_quantity"/> <result property="totalGoldQuantity" column="total_gold_quantity"/>
<result property="totalDiamondAmmount" column="total_diamond_ammount"/> <result property="totalDiamondAmmount" column="total_diamond_ammount"/>
<result property="totalDiamondQuantity" column="total_diamond_quantity"/> <result property="totalDiamondQuantity" column="total_diamond_quantity"/>
<result property="isFinish" column="is_finish"/>
<result property="orderOrigin" column="order_origin"/> <result property="orderOrigin" column="order_origin"/>
<result property="hasPay" column="has_pay"/>
<result property="payWay" column="pay_way"/> <result property="payWay" column="pay_way"/>
<result property="companyId" column="company_id"/> <result property="companyId" column="company_id"/>
<result property="crtTime" column="crt_time"/> <result property="crtTime" column="crt_time"/>
...@@ -50,4 +50,7 @@ ...@@ -50,4 +50,7 @@
</if> </if>
</select> </select>
<delete id="inserMemberReceivedtList">
</delete>
</mapper> </mapper>
\ No newline at end of file
...@@ -12,8 +12,7 @@ ...@@ -12,8 +12,7 @@
<result property="weekOfYear" column="week_of_year"/> <result property="weekOfYear" column="week_of_year"/>
<result property="totalAmount" column="total_amount"/> <result property="totalAmount" column="total_amount"/>
<result property="totalQuantity" column="total_quantity"/> <result property="totalQuantity" column="total_quantity"/>
<result property="realAmount" column="real_amount"/> <result property="hasPay" column="has_pay"/>
<result property="isFinish" column="is_finish"/>
<result property="orderOrigin" column="order_origin"/> <result property="orderOrigin" column="order_origin"/>
<result property="payWay" column="pay_way"/> <result property="payWay" column="pay_way"/>
<result property="companyId" column="company_id"/> <result property="companyId" column="company_id"/>
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
<result property="weekOfYear" column="week_of_year"/> <result property="weekOfYear" column="week_of_year"/>
<result property="totalAmount" column="total_amount"/> <result property="totalAmount" column="total_amount"/>
<result property="totalQuantity" column="total_quantity"/> <result property="totalQuantity" column="total_quantity"/>
<result property="isFinish" column="is_finish"/> <result property="hasPay" column="has_pay"/>
<result property="orderOrigin" column="order_origin"/> <result property="orderOrigin" column="order_origin"/>
<result property="payWay" column="pay_way"/> <result property="payWay" column="pay_way"/>
<result property="companyId" column="company_id"/> <result property="companyId" column="company_id"/>
......
...@@ -46,8 +46,10 @@ public class ServiceTest { ...@@ -46,8 +46,10 @@ public class ServiceTest {
@Test @Test
public void testMemberStatisticsInsert(){ public void testMemberStatisticsInsert(){
Date date = cn.hutool.core.date.DateTime.of("2019-11-16", "yyyy-MM-dd").toJdkDate(); Date date = cn.hutool.core.date.DateTime.of("2019-11-15", "yyyy-MM-dd").toJdkDate();
//orderMemberReceivedStatisticsBiz.orderMemberReceivedStatistics(date); Date startDate = DateUtil.beginOfDay(date).toJdkDate();
Date endDate = DateUtil.endOfDay(date).toJdkDate();
orderMemberReceivedStatisticsBiz.orderMemberReceivedStatistics(startDate,endDate);
} }
@Test @Test
......
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