Commit cb58469c authored by libin's avatar libin

会员与租车订单统计

parent 92091d49
package com.github.wxiaoqi.security.common.enumconstant;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/11/13 17:23
*/
public enum LevelEnum {
DIAMOND(3,"钻石"),
GOLD(2,"黄金"),
GENERAL(1,"普通");
LevelEnum(Integer level, String desc) {
this.level = level;
this.desc = desc;
}
private Integer level;
private String desc;
public Integer getLevel() {
return level;
}
public void setLevel(Integer level) {
this.level = level;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
...@@ -5,6 +5,7 @@ import java.math.BigDecimal; ...@@ -5,6 +5,7 @@ import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import javax.persistence.*; 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;
......
...@@ -17,8 +17,7 @@ import java.util.Date; ...@@ -17,8 +17,7 @@ import java.util.Date;
* @data 2019/11/11 15:49 * @data 2019/11/11 15:49
*/ */
@Data @Data
public class OrderReceivedStatisticsBase { public class OrderReceivedStatisticsBase {
/** /**
* *
*/ */
......
package com.xxfc.platform.order.pojo.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/11/13 15:58
*/
@Data
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
public class OrderDTO {
private Integer id;
private Integer type;
private Integer status;
private BigDecimal orderAmount;
private BigDecimal realAmount;
private Integer orderOrigin;
private Integer payWay;
private Date crtTime;
private Integer companyId;
/**
* 会员相关
*/
private Integer memberLevel;
/**
* 租车相关
*/
}
...@@ -30,6 +30,7 @@ import com.xxfc.platform.order.pojo.account.OrderAccountDetail; ...@@ -30,6 +30,7 @@ import com.xxfc.platform.order.pojo.account.OrderAccountDetail;
import com.xxfc.platform.order.pojo.calculate.InProgressVO; import com.xxfc.platform.order.pojo.calculate.InProgressVO;
import com.xxfc.platform.order.pojo.dto.MemberOrderBo; import com.xxfc.platform.order.pojo.dto.MemberOrderBo;
import com.xxfc.platform.order.pojo.dto.MemberOrderFindDTO; import com.xxfc.platform.order.pojo.dto.MemberOrderFindDTO;
import com.xxfc.platform.order.pojo.dto.OrderDTO;
import com.xxfc.platform.order.pojo.mq.OrderMQDTO; import com.xxfc.platform.order.pojo.mq.OrderMQDTO;
import com.xxfc.platform.order.pojo.order.OrderListVo; import com.xxfc.platform.order.pojo.order.OrderListVo;
import com.xxfc.platform.order.pojo.order.OrderPageVO; import com.xxfc.platform.order.pojo.order.OrderPageVO;
...@@ -53,6 +54,7 @@ import com.xxfc.platform.vehicle.pojo.CompanyDetail; ...@@ -53,6 +54,7 @@ import com.xxfc.platform.vehicle.pojo.CompanyDetail;
import com.xxfc.platform.vehicle.util.DistanceUtil; import com.xxfc.platform.vehicle.util.DistanceUtil;
import lombok.Data; import lombok.Data;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormat;
...@@ -60,6 +62,7 @@ import org.joda.time.format.DateTimeFormatter; ...@@ -60,6 +62,7 @@ import org.joda.time.format.DateTimeFormatter;
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 tk.mybatis.mapper.entity.Example;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; import java.util.*;
...@@ -781,7 +784,6 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements ...@@ -781,7 +784,6 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
public UserFeign getUserFeign() { public UserFeign getUserFeign() {
return userFeign; return userFeign;
} }
/** /**
* 订单查询类 * 订单查询类
*/ */
...@@ -804,4 +806,9 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements ...@@ -804,4 +806,9 @@ public class BaseOrderBiz extends BaseBiz<BaseOrderMapper, BaseOrder> implements
return Lists.newArrayList(); return Lists.newArrayList();
} }
public List<OrderDTO> selectOrdersByTypeAndTime(List<Integer> types, Date startDate, Date endDate) {
List<OrderDTO> orderDTOS = mapper.selectOrdersByTypeAndTime(types,startDate,endDate);
return CollectionUtils.isEmpty(orderDTOS)?Collections.EMPTY_LIST:orderDTOS;
}
} }
\ No newline at end of file
package com.xxfc.platform.order.biz; package com.xxfc.platform.order.biz;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.TimeInterval;
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.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.dto.OrderDTO;
import com.xxfc.platform.order.pojo.dto.OrderReceivedStatisticsFindDTO; import com.xxfc.platform.order.pojo.dto.OrderReceivedStatisticsFindDTO;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.http.client.utils.CloneUtils;
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 com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
import java.util.List;
import java.math.BigDecimal;
import java.util.*;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/** /**
* 会员订单统计 * 会员订单统计
...@@ -23,15 +34,91 @@ import java.util.List; ...@@ -23,15 +34,91 @@ import java.util.List;
@Service @Service
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@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 int FINISH = 6;
private final int CANCEL = 2;
private final int UNFINISH = 3;
private final int PAYWAYTEMP = 99;
public List<OrderMemberReceivedStatistics> selectOrderReceivedStatistics(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO) { public List<OrderMemberReceivedStatistics> selectOrderReceivedStatistics(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO) {
return mapper.selectOrderMemberReceivedStatistics(orderReceivedStatisticsFindDTO); return mapper.selectOrderMemberReceivedStatistics(orderReceivedStatisticsFindDTO);
} }
public void orderMemberReceivedStatistics(){
public void orderMemberReceivedStatistics(Date date) {
DateTime yesterday = DateUtil.yesterday(); DateTime yesterday = DateUtil.yesterday();
// List<BaseOrder> baseOrders = baseOrderBiz.selectOrdersByTypeAndTime(3); Date startDate = date == null ? DateUtil.beginOfDay(yesterday).toJdkDate() : DateUtil.beginOfDay(date);
Date endDate = date == null ? DateUtil.endOfDay(yesterday).toJdkDate() : DateUtil.beginOfDay(date);
String year = String.valueOf(yesterday.getField(DateField.YEAR));
String month = String.format("%s%d", year, yesterday.getField(DateField.MONTH));
String weekOfYear = String.format("%s%d", year, yesterday.getField(DateField.WEEK_OF_YEAR));
List<OrderDTO> orders = baseOrderBiz.selectOrdersByTypeAndTime(Arrays.asList(3), startDate, endDate);
TimeInterval timer = DateUtil.timer();
//状态(3) -->下单来源(3)--->支付方式(2) --> 3 * 3 * 2 =18 --->会员
Map<Integer, Map<Integer, Map<Integer, Map<Integer, List<OrderDTO>>>>> ordersMap = orders.stream().peek(x -> {
if (x.getStatus() != CANCEL && x.getStatus() != FINISH) {
x.setStatus(UNFINISH);
}
}).peek(x -> {
if (x.getStatus() != FINISH) {
x.setPayWay(PAYWAYTEMP);
}
}).collect(Collectors.groupingBy(OrderDTO::getStatus,
Collectors.groupingBy(OrderDTO::getOrderOrigin, Collectors.groupingBy(OrderDTO::getPayWay, Collectors.groupingBy(OrderDTO::getMemberLevel, Collectors.toList())))));
List<OrderMemberReceivedStatistics> orderMemberReceivedStatisticsList = new ArrayList<>(18);
ordersMap.forEach((KS, VS) -> {
//KS:状态 (完成|未完成|取消)
VS.forEach((KO, VO) -> {
//KO:下单来源状态 (app|小程序|后台)
VO.forEach((KP, VP) -> {
//KP:支付方式 (微信|支付宝)
OrderMemberReceivedStatistics orderMemberReceivedStatistics = new OrderMemberReceivedStatistics();
orderMemberReceivedStatistics.setCrtTime(new Date());
orderMemberReceivedStatistics.setCompanyId(1);
orderMemberReceivedStatistics.setIsFinish(KS);
orderMemberReceivedStatistics.setOrderOrigin(KO);
orderMemberReceivedStatistics.setPayWay(PAYWAYTEMP == KP ? null : KP);
orderMemberReceivedStatistics.setDate(startDate);
orderMemberReceivedStatistics.setYear(year);
orderMemberReceivedStatistics.setMonth(month);
orderMemberReceivedStatistics.setWeekOfYear(weekOfYear);
//1.普通会员
List<OrderDTO> generalOrders = VP.get(LevelEnum.GENERAL.getLevel());
generalOrders = CollectionUtils.isEmpty(generalOrders) ? Collections.EMPTY_LIST : generalOrders;
BigDecimal totalCommAmount = generalOrders.stream().map(OrderDTO::getRealAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y));
orderMemberReceivedStatistics.setToalCommonAmmount(totalCommAmount);
orderMemberReceivedStatistics.setTotalCommonQuantity(generalOrders.size());
//2.黄金会员
List<OrderDTO> goldOrders = VP.get(LevelEnum.GOLD.getLevel());
goldOrders = CollectionUtils.isEmpty(goldOrders) ? Collections.EMPTY_LIST : goldOrders;
BigDecimal totalGoldAmount = goldOrders.stream().map(OrderDTO::getRealAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y));
orderMemberReceivedStatistics.setTotalGoldAmount(totalGoldAmount);
orderMemberReceivedStatistics.setTotalGoldQuantity(goldOrders.size());
//3.钻石会员
List<OrderDTO> diamondOrders = VP.get(LevelEnum.DIAMOND.getLevel());
diamondOrders = CollectionUtils.isEmpty(diamondOrders) ? Collections.EMPTY_LIST : diamondOrders;
BigDecimal totalDiamondAmount = diamondOrders.stream().map(OrderDTO::getRealAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y));
orderMemberReceivedStatistics.setTotalDiamondAmmount(totalDiamondAmount);
orderMemberReceivedStatistics.setTotalDiamondQuantity(diamondOrders.size());
BigDecimal totalAmount = totalCommAmount.add(totalGoldAmount).add(totalDiamondAmount);
orderMemberReceivedStatistics.setTotalAmount(totalAmount);
orderMemberReceivedStatisticsList.add(orderMemberReceivedStatistics);
});
});
});
long interval = timer.interval();
System.out.println("花费时间:" + interval);
insertMemberReceivedStatisticsBatch(orderMemberReceivedStatisticsList);
}
public void insertMemberReceivedStatisticsBatch(List<OrderMemberReceivedStatistics> orderMemberReceivedStatistics) {
mapper.insertList(orderMemberReceivedStatistics);
} }
} }
\ No newline at end of file
package com.xxfc.platform.order.biz; package com.xxfc.platform.order.biz;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
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 org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.xxfc.platform.order.entity.OrderRentVehicleReceivedStatistics; import com.xxfc.platform.order.entity.OrderRentVehicleReceivedStatistics;
...@@ -8,7 +15,8 @@ import com.xxfc.platform.order.mapper.OrderRentVehicleReceivedStatisticsMapper; ...@@ -8,7 +15,8 @@ import com.xxfc.platform.order.mapper.OrderRentVehicleReceivedStatisticsMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.List; import java.util.*;
import java.util.stream.Collectors;
/** /**
* 租车订单统计 * 租车订单统计
...@@ -19,8 +27,92 @@ import java.util.List; ...@@ -19,8 +27,92 @@ import java.util.List;
*/ */
@Service @Service
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehicleReceivedStatisticsMapper,OrderRentVehicleReceivedStatistics> { @RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class OrderRentVehicleReceivedStatisticsBiz extends BaseBiz<OrderRentVehicleReceivedStatisticsMapper, OrderRentVehicleReceivedStatistics> {
private final BaseOrderBiz baseOrderBiz;
private final int FINISH = 6;
private final int CANCEL = 2;
private final int UNFINISH = 3;
private final int PAYWAYTEMP = 99;
public List<OrderRentVehicleReceivedStatistics> selectOrderReceivedStatistics(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO) { public List<OrderRentVehicleReceivedStatistics> selectOrderReceivedStatistics(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO) {
return mapper.selectOrderRentVehicleReceivedStatistics(orderReceivedStatisticsFindDTO); return mapper.selectOrderRentVehicleReceivedStatistics(orderReceivedStatisticsFindDTO);
} }
public void orderRentVehicleReceivedStatistics(Date date) {
DateTime yesterday = DateUtil.yesterday();
Date startDate = date == null ? DateUtil.beginOfDay(yesterday).toJdkDate() : DateUtil.beginOfDay(date);
Date endDate = date == null ? DateUtil.endOfDay(yesterday).toJdkDate() : DateUtil.beginOfDay(date);
String year = String.valueOf(yesterday.getField(DateField.YEAR));
String month = String.format("%s%d", year, yesterday.getField(DateField.MONTH));
String weekOfYear = String.format("%s%d", year, yesterday.getField(DateField.DAY_OF_YEAR));
List<OrderDTO> orders = baseOrderBiz.selectOrdersByTypeAndTime(Arrays.asList(1), startDate, endDate);
//分公司id- -->下单来源(3)--->支付方式(2) --> >状态(3)-->3 * 3 * 2 =18
Map<Integer, Map<Integer, Map<Integer, Map<Integer, List<OrderDTO>>>>> ordersMap = orders.stream().peek(x -> {
if (x.getStatus() != CANCEL && x.getStatus() != FINISH) {
x.setStatus(UNFINISH);
}
}).peek(x->{if(Objects.isNull(x.getPayWay())){x.setPayWay(PAYWAYTEMP);}}).collect(Collectors.groupingBy(OrderDTO::getCompanyId,
Collectors.groupingBy(OrderDTO::getOrderOrigin, Collectors.groupingBy(OrderDTO::getPayWay, Collectors.groupingBy(OrderDTO::getStatus, Collectors.toList())))));
Set<Map.Entry<Integer, Map<Integer, Map<Integer, Map<Integer, List<OrderDTO>>>>>> orderEntries = ordersMap.entrySet();
for (Map.Entry<Integer, Map<Integer, Map<Integer, Map<Integer, List<OrderDTO>>>>> orderEntrie : orderEntries) {
//公司id
Integer companyKey = orderEntrie.getKey();
Set<Map.Entry<Integer, Map<Integer, Map<Integer, List<OrderDTO>>>>> companyEntries = orderEntrie.getValue().entrySet();
for (Map.Entry<Integer, Map<Integer, Map<Integer, List<OrderDTO>>>> companyEntrie : companyEntries) {
//下单来源
Integer orderOrignKey = companyEntrie.getKey();
Set<Map.Entry<Integer, Map<Integer, List<OrderDTO>>>> orderOriginEntries = companyEntrie.getValue().entrySet();
for (Map.Entry<Integer, Map<Integer, List<OrderDTO>>> orderOriginEntry : orderOriginEntries) {
//支付方式
Integer payWayKey = orderOriginEntry.getKey();
Set<Map.Entry<Integer, List<OrderDTO>>> statusEntries = orderOriginEntry.getValue().entrySet();
for (Map.Entry<Integer, List<OrderDTO>> statusEntry : statusEntries) {
List<OrderDTO> orderDTOList = statusEntry.getValue();
if (CollectionUtils.isEmpty(orderDTOList)) {
continue;
}
//状态
Integer statusKey = statusEntry.getKey();
OrderRentVehicleReceivedStatistics orderRentVehicleReceivedStatistics = new OrderRentVehicleReceivedStatistics();
orderRentVehicleReceivedStatistics.setCrtTime(new Date());
orderRentVehicleReceivedStatistics.setCompanyId(companyKey);
orderRentVehicleReceivedStatistics.setIsFinish(statusKey);
orderRentVehicleReceivedStatistics.setOrderOrigin(orderOrignKey);
orderRentVehicleReceivedStatistics.setPayWay(PAYWAYTEMP == payWayKey ? null : payWayKey);
orderRentVehicleReceivedStatistics.setDate(startDate);
orderRentVehicleReceivedStatistics.setYear(year);
orderRentVehicleReceivedStatistics.setMonth(month);
orderRentVehicleReceivedStatistics.setWeekOfYear(weekOfYear);
orderRentVehicleReceivedStatistics.setTotalQuantity(orderDTOList.size());
/* orderRentVehicleReceivedStatistics.setTotalAmount();
orderRentVehicleReceivedStatistics.setRealAmount();*/
for (OrderDTO orderDTO : orderDTOList) {
//完成单
if (FINISH == statusKey) {
}
//未完成单
if (UNFINISH == statusKey) {
}
//取消单
if (CANCEL == statusKey) {
}
}
}
}
}
}
}
} }
\ No newline at end of file
...@@ -3,12 +3,14 @@ package com.xxfc.platform.order.mapper; ...@@ -3,12 +3,14 @@ package com.xxfc.platform.order.mapper;
import com.xxfc.platform.order.entity.BaseOrder; import com.xxfc.platform.order.entity.BaseOrder;
import com.xxfc.platform.order.pojo.dto.MemberOrderBo; import com.xxfc.platform.order.pojo.dto.MemberOrderBo;
import com.xxfc.platform.order.pojo.dto.MemberOrderFindDTO; import com.xxfc.platform.order.pojo.dto.MemberOrderFindDTO;
import com.xxfc.platform.order.pojo.dto.OrderDTO;
import com.xxfc.platform.order.pojo.order.OrderListVo; import com.xxfc.platform.order.pojo.order.OrderListVo;
import com.xxfc.platform.order.pojo.order.OrderPageVO; import com.xxfc.platform.order.pojo.order.OrderPageVO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -37,4 +39,7 @@ public interface BaseOrderMapper extends Mapper<BaseOrder> { ...@@ -37,4 +39,7 @@ public interface BaseOrderMapper extends Mapper<BaseOrder> {
List<MemberOrderBo> findMemberOrders(MemberOrderFindDTO memberOrderFindDTO); List<MemberOrderBo> findMemberOrders(MemberOrderFindDTO memberOrderFindDTO);
List<OrderDTO> selectOrdersByTypeAndTime(@Param("types") List<Integer> types,
@Param("startDate") Date startDate,
@Param("endDate") Date endDate);
} }
...@@ -3,6 +3,7 @@ package com.xxfc.platform.order.mapper; ...@@ -3,6 +3,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 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;
...@@ -13,7 +14,7 @@ import java.util.List; ...@@ -13,7 +14,7 @@ import java.util.List;
* @email 18178966185@163.com * @email 18178966185@163.com
* @date 2019-11-08 18:03:42 * @date 2019-11-08 18:03:42
*/ */
public interface OrderMemberReceivedStatisticsMapper extends Mapper<OrderMemberReceivedStatistics> { public interface OrderMemberReceivedStatisticsMapper extends Mapper<OrderMemberReceivedStatistics>, InsertListMapper<OrderMemberReceivedStatistics> {
List<OrderMemberReceivedStatistics> selectOrderMemberReceivedStatistics(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO); List<OrderMemberReceivedStatistics> selectOrderMemberReceivedStatistics(OrderReceivedStatisticsFindDTO orderReceivedStatisticsFindDTO);
} }
...@@ -6,6 +6,7 @@ import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel; ...@@ -6,6 +6,7 @@ import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel;
import com.github.wxiaoqi.security.admin.feign.UserFeign; import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.rest.UserRestInterface; import com.github.wxiaoqi.security.admin.feign.rest.UserRestInterface;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig; import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.common.enumconstant.LevelEnum;
import com.github.wxiaoqi.security.common.exception.BaseException; import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.vo.PageDataVO; import com.github.wxiaoqi.security.common.vo.PageDataVO;
...@@ -412,57 +413,27 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz ...@@ -412,57 +413,27 @@ public class OrderMemberService extends AbstractOrderHandle<OrderMemberDetailBiz
BigDecimal totalAmount = baseOrders.stream().filter(x->x.getHasPay()==1).map(MemberOrderBo::getOrderAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y)); BigDecimal totalAmount = baseOrders.stream().filter(x->x.getHasPay()==1).map(MemberOrderBo::getOrderAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y));
memberOrderStatisticsBo.setTotalAmount(totalAmount); memberOrderStatisticsBo.setTotalAmount(totalAmount);
List<MemberOrderBo> diamondOrders = baseOrderMap.get(levelEnum.DIAMOND.getLevel()); List<MemberOrderBo> diamondOrders = baseOrderMap.get(LevelEnum.DIAMOND.getLevel());
memberOrderStatisticsBo.setDiamondOrderNum(diamondOrders==null?0:diamondOrders.size()); memberOrderStatisticsBo.setDiamondOrderNum(diamondOrders==null?0:diamondOrders.size());
List<MemberOrderBo> diamondHashPayOrders = baseOrderHasPayMap.get(levelEnum.DIAMOND.getLevel()); List<MemberOrderBo> diamondHashPayOrders = baseOrderHasPayMap.get(LevelEnum.DIAMOND.getLevel());
diamondHashPayOrders = diamondHashPayOrders==null?Collections.EMPTY_LIST:diamondHashPayOrders; diamondHashPayOrders = diamondHashPayOrders==null?Collections.EMPTY_LIST:diamondHashPayOrders;
BigDecimal diamondAmount = diamondHashPayOrders.stream().map(MemberOrderBo::getOrderAmount).reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal diamondAmount = diamondHashPayOrders.stream().map(MemberOrderBo::getOrderAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
memberOrderStatisticsBo.setTotalDiamondAmount(diamondAmount); memberOrderStatisticsBo.setTotalDiamondAmount(diamondAmount);
List<MemberOrderBo> goldOrders = baseOrderMap.get(levelEnum.GOLD.getLevel()); List<MemberOrderBo> goldOrders = baseOrderMap.get(LevelEnum.GOLD.getLevel());
memberOrderStatisticsBo.setGoldOrderNum(goldOrders==null?0:goldOrders.size()); memberOrderStatisticsBo.setGoldOrderNum(goldOrders==null?0:goldOrders.size());
List<MemberOrderBo> goldHasPayOrders = baseOrderHasPayMap.get(levelEnum.GOLD.getLevel()); List<MemberOrderBo> goldHasPayOrders = baseOrderHasPayMap.get(LevelEnum.GOLD.getLevel());
goldHasPayOrders = goldHasPayOrders==null?Collections.EMPTY_LIST:goldHasPayOrders; goldHasPayOrders = goldHasPayOrders==null?Collections.EMPTY_LIST:goldHasPayOrders;
BigDecimal goldAmount = goldHasPayOrders.stream().map(MemberOrderBo::getOrderAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y)); BigDecimal goldAmount = goldHasPayOrders.stream().map(MemberOrderBo::getOrderAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y));
memberOrderStatisticsBo.setTotalGoldAmount(goldAmount); memberOrderStatisticsBo.setTotalGoldAmount(goldAmount);
List<MemberOrderBo> generalOrders = baseOrderMap.get(levelEnum.GENERAL.getLevel()); List<MemberOrderBo> generalOrders = baseOrderMap.get(LevelEnum.GENERAL.getLevel());
memberOrderStatisticsBo.setGeneralOrderNum(generalOrders==null?0:generalOrders.size()); memberOrderStatisticsBo.setGeneralOrderNum(generalOrders==null?0:generalOrders.size());
List<MemberOrderBo> generalHasPayOrders = baseOrderHasPayMap.get(levelEnum.GENERAL.getLevel()); List<MemberOrderBo> generalHasPayOrders = baseOrderHasPayMap.get(LevelEnum.GENERAL.getLevel());
generalHasPayOrders = generalHasPayOrders==null?Collections.EMPTY_LIST:generalHasPayOrders; generalHasPayOrders = generalHasPayOrders==null?Collections.EMPTY_LIST:generalHasPayOrders;
BigDecimal generalAmount = generalHasPayOrders.stream().map(MemberOrderBo::getOrderAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y)); BigDecimal generalAmount = generalHasPayOrders.stream().map(MemberOrderBo::getOrderAmount).reduce(BigDecimal.ZERO, (x, y) -> x.add(y));
memberOrderStatisticsBo.setTotalGeneralAmount(generalAmount); memberOrderStatisticsBo.setTotalGeneralAmount(generalAmount);
return memberOrderStatisticsBo; return memberOrderStatisticsBo;
} }
private enum levelEnum{
DIAMOND(3,"钻石"),
GOLD(2,"黄金"),
GENERAL(1,"普通");
levelEnum(Integer level,String desc) {
this.level = level;
this.desc = desc;
}
private Integer level;
private String desc;
public Integer getLevel() {
return level;
}
public void setLevel(Integer level) {
this.level = level;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
} }
...@@ -116,14 +116,14 @@ ...@@ -116,14 +116,14 @@
<select id="listOrder" parameterType="Map" resultMap="orderListMap"> <select id="listOrder" parameterType="Map" resultMap="orderListMap">
select b.* select b.*
<if test="type==1"> <if test="type==1">
,i.detail as carArticlesJson ,i.detail as carArticlesJson
</if> </if>
from base_order b from base_order b
LEFT JOIN order_rent_vehicle_detail r on r.order_id = b.id LEFT JOIN order_rent_vehicle_detail r on r.order_id = b.id
LEFT JOIN order_tour_detail t on t.order_id = b.id LEFT JOIN order_tour_detail t on t.order_id = b.id
LEFT JOIN order_member_detail m on m.order_id = b.id LEFT JOIN order_member_detail m on m.order_id = b.id
<if test="type==1"> <if test="type==1">
LEFT JOIN (select * from order_item where type = 104) i on b.id = i.order_id LEFT JOIN (select * from order_item where type = 104) i on b.id = i.order_id
</if> </if>
<where> <where>
<if test="crtUser != null"> <if test="crtUser != null">
...@@ -291,7 +291,7 @@ ...@@ -291,7 +291,7 @@
</select> </select>
<select id="findMemberOrders" resultType="com.xxfc.platform.order.pojo.dto.MemberOrderBo"> <select id="findMemberOrders" resultType="com.xxfc.platform.order.pojo.dto.MemberOrderBo">
select bo.*,omd.member_level AS `memberLevel` from ( select bo.*,omd.member_level AS `memberLevel` from (
SELECT SELECT
`id`, `id`,
`no` AS `orderNo`, `no` AS `orderNo`,
...@@ -345,11 +345,28 @@ ...@@ -345,11 +345,28 @@
</foreach> </foreach>
</if> </if>
) AS `bo` ) AS `bo`
INNER JOIN (select * from `order_member_detail` where 1=1 INNER JOIN (select * from `order_member_detail` where 1=1
<if test="level!=null"> <if test="level!=null">
and `member_level`=#{level} and `member_level`=#{level}
</if> </if>
) AS `omd` ON omd.order_id=bo.id ) AS `omd` ON omd.order_id=bo.id
ORDER BY bo.`creatTime` DESC ORDER BY bo.`creatTime` DESC
</select> </select>
<select id="selectOrdersByTypeAndTime" resultType="com.xxfc.platform.order.pojo.dto.OrderDTO">
select bo.*,omd.memberLevel from (select `id`,`type`,`status`,`order_amount` AS `orderAmount`, `real_amount`AS
`realAmount`,`order_origin` AS `orderOrigin`,
`pay_way` AS `payWay`,`crt_time`AS `crtTime`
from `base_order` where `crt_time` between #{startDate} and #{endDate} and `type` IN <foreach collection="types"
item="type"
open="(" close=")"
separator=",">
#{type}
</foreach> ) AS `bo`
LEFT JOIN (select `order_id`,`start_company_id` from `order_rent_vehicle_detail`) AS `orvd` ON
orvd.order_id=bo.id
LEFT JOIN (select `order_id`,`start_company_id` from `order_tour_detail`) AS `otd` ON otd.order_id=bo.id
LEFT JOIN (select `order_id`,`member_level` AS `memberLevel` from `order_member_detail`) AS `omd` ON
omd.order_id=bo.id;
</select>
</mapper> </mapper>
\ No newline at end of file
import com.xxfc.platform.order.OrderApplication; import com.xxfc.platform.order.OrderApplication;
import com.xxfc.platform.order.biz.DailyOrderStatisticsBiz; import com.xxfc.platform.order.biz.DailyOrderStatisticsBiz;
import com.xxfc.platform.order.biz.OrderMemberReceivedStatisticsBiz;
import com.xxfc.platform.order.jobhandler.BaseOrderStatisticsJobHandler; import com.xxfc.platform.order.jobhandler.BaseOrderStatisticsJobHandler;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.junit.Test; import org.junit.Test;
...@@ -28,12 +29,22 @@ public class ServiceTest { ...@@ -28,12 +29,22 @@ public class ServiceTest {
@Autowired @Autowired
private BaseOrderStatisticsJobHandler handler; private BaseOrderStatisticsJobHandler handler;
@Autowired
private OrderMemberReceivedStatisticsBiz orderMemberReceivedStatisticsBiz;
@Test @Test
public void testSchedu(){ public void testSchedu(){
dailyOrderStatisticsBiz.statisticalOrder(1); dailyOrderStatisticsBiz.statisticalOrder(1);
} }
@Test
public void testMemberStatisticsInsert(){
orderMemberReceivedStatisticsBiz.orderMemberReceivedStatistics();
}
@Test @Test
public void test() throws ParseException { public void test() throws ParseException {
String d="2019-09-01"; String d="2019-09-01";
......
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