Commit 2acff168 authored by hanfeng's avatar hanfeng

Merge branch 'master-order-statistics' into base-modify

# Conflicts:
#	xx-order/xx-order-server/src/main/java/com/xxfc/platform/order/biz/DailyOrderStatisticsBiz.java
#	xx-order/xx-order-server/src/test/java/ServiceTest.java
parents af7feebe dd29b91e
package com.github.wxiaoqi.security.common.msg.auth;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class PageResult<M> {
/** 页码 */
private Integer page;
/** 每页结果数 */
private Integer pageSize;
/** 总页数 */
private Integer totalPage;
/** 总数 */
private Integer total;
private List<M> list=new ArrayList<>();
private PageResult(){
}
private PageResult(int page, int pageSize, int totalPage, int total, List<M> list) {
this.page = page;
this.pageSize = pageSize;
this.totalPage = totalPage;
this.total = total;
this.list = list;
}
public static PageResult nowPageResult(Integer page, Integer limit, List totalList) {
page=page!=null?page:1;
limit=limit!=null?limit:10;
//总条数
Integer total=0;
//总页数
Integer totalPage=0;
//当前页面数据条数
Integer pageSize=0;
//当前页面数据集合
List list = new ArrayList();
if (totalList!=null&&totalList.size()!=0){
total= totalList.size();
totalPage = (total / limit) + 1;
//每页的起始索引
Integer pageNo = (page - 1) * limit;
if (pageNo + limit > total) {
list = totalList.subList(pageNo, total);
} else {
list = totalList.subList(pageNo, pageNo + limit);
}
pageSize=list.size();
}
return new PageResult(page,pageSize,totalPage,total,list);
}
}
package com.xxfc.platform.order.pojo;
import lombok.Data;
import org.joda.time.DateTime;
/**
* 会员订单统计条件
......@@ -9,21 +10,21 @@ import lombok.Data;
@Data
public class OrderQuery {
private Integer page=1;
private Integer limit=10;
private Integer page = 1;
private Integer limit = 10;
/**
* 查询开始时间
*/
private Long startTime;
private Long startTime;
/**
* 查询结束时间
*/
private Long endTime;
private Long endTime;
/**
* 1.按每日统计,2.按每周统计,3.按每月统计
*/
private Integer type=1;
private Integer type = 1;
}
......@@ -39,8 +39,6 @@ public class DailyMembersOrderStatisticsBiz extends BaseBiz<DailyMembersOrderSta
private final Integer headOfficeId = 1;
@Value("${order.day}")
private Integer day;
/**
* 总公司id默认为1
......@@ -50,7 +48,7 @@ public class DailyMembersOrderStatisticsBiz extends BaseBiz<DailyMembersOrderSta
private OrderAccountBiz accountBiz;
@Transactional(rollbackFor = Exception.class)
public boolean saveDailyMembersOrderRecord() {
public boolean saveDailyMembersOrderRecord(Integer day) {
try {
List<OrderAccountDTO> accountList = accountBiz.getOrderAccountByOrderType(OrderTypeEnum.MEMBER.getCode(), day);
......
......@@ -25,11 +25,11 @@ public class DailyOrderStatisticsBiz extends BaseBiz<DailyOrderStatisticsMapper,
@Autowired
private DailyMembersOrderStatisticsBiz membersStatisticsBiz;
@Scheduled(cron = "0 0 2 * * ?")
public boolean statisticalOrder(){
boolean vehicleFlag = vehicleStatisticsBiz.saveDailyVehicleOrderRecord();
boolean travelFlag = travelStatisticsBiz.saveDailyTravelOrderRecord();
boolean membersFlag= membersStatisticsBiz.saveDailyMembersOrderRecord();
// @Scheduled(cron = "0 0 2 * * ?")
public boolean statisticalOrder(Integer day){
boolean vehicleFlag = vehicleStatisticsBiz.saveDailyVehicleOrderRecord(day);
boolean travelFlag = travelStatisticsBiz.saveDailyTravelOrderRecord(day);
boolean membersFlag= membersStatisticsBiz.saveDailyMembersOrderRecord(day);
if (vehicleFlag&&travelFlag&&membersFlag){
log.info("----statisticalOrder:成功-----");
......
......@@ -39,8 +39,6 @@ import java.util.stream.Collectors;
@Service
@Slf4j
public class DailyTravelOrderStatisticsBiz extends BaseBiz<DailyTravelOrderStatisticsMapper, DailyTravelOrderStatistics> {
@Value("${order.day}")
private Integer day;
@Autowired
......@@ -108,10 +106,10 @@ public class DailyTravelOrderStatisticsBiz extends BaseBiz<DailyTravelOrderStati
* @return
*/
@Transactional(rollbackFor = Exception.class)
public boolean saveDailyTravelOrderRecord() {
public boolean saveDailyTravelOrderRecord(Integer day) {
try {
//获取每日订单统计
List<DailyTravelOrderStatistics> orderStatistics = getDailyTravelOrderStatistics();
List<DailyTravelOrderStatistics> orderStatistics = getDailyTravelOrderStatistics(day);
log.info("Travel:统计完成");
if (CollectionUtils.isNotEmpty(orderStatistics)) {
for (DailyTravelOrderStatistics orderStatistic : orderStatistics) {
......@@ -153,7 +151,7 @@ public class DailyTravelOrderStatisticsBiz extends BaseBiz<DailyTravelOrderStati
}
return true;
}
private List<DailyTravelOrderStatistics> getDailyTravelOrderStatistics() {
private List<DailyTravelOrderStatistics> getDailyTravelOrderStatistics(Integer day) {
//获取当天所有订单账目
List<OrderAccountDTO> accountList = accountBiz.getOrderAccountByOrderType(OrderTypeEnum.TOUR.getCode(), day);
if (CollectionUtils.isEmpty(accountList)) {
......
......@@ -52,11 +52,6 @@ public class DailyVehicleOrderStatisticsBiz extends BaseBiz<DailyVehicleOrderSta
*/
private final Integer TYPE_OTHER = 3;
/**
* 统计几天前的数据
*/
@Value("${order.day}")
private Integer day;
@Autowired
......@@ -246,10 +241,10 @@ public class DailyVehicleOrderStatisticsBiz extends BaseBiz<DailyVehicleOrderSta
* @return
*/
@Transactional(rollbackFor = Exception.class)
public boolean saveDailyVehicleOrderRecord() {
public boolean saveDailyVehicleOrderRecord(Integer day) {
try {
//获取每日订单统计
List<DailyVehicleOrderStatistics> orderStatistics = getDailyVehicleOrderRecord();
List<DailyVehicleOrderStatistics> orderStatistics = getDailyVehicleOrderRecord(day);
log.info("Vehicle:统计完成");
if (CollectionUtils.isNotEmpty(orderStatistics)) {
for (DailyVehicleOrderStatistics orderStatistic : orderStatistics) {
......@@ -292,8 +287,9 @@ public class DailyVehicleOrderStatisticsBiz extends BaseBiz<DailyVehicleOrderSta
* 获取所有分公司每日统计记录
*
* @return
* @param day
*/
private List<DailyVehicleOrderStatistics> getDailyVehicleOrderRecord() {
private List<DailyVehicleOrderStatistics> getDailyVehicleOrderRecord(Integer day) {
//获取当天所有订单账目
List<OrderAccountDTO> accountList = accountBiz.getOrderAccountByOrderType(OrderTypeEnum.RENT_VEHICLE.getCode(), day);
if (CollectionUtils.isEmpty(accountList)) {
......
......@@ -516,8 +516,6 @@ public class OrderAccountBiz extends BaseBiz<OrderAccountMapper,OrderAccount> {
* @return
*/
public List<OrderAccountDTO> getOrderAccountByOrderType(Integer code, Integer day) {
return mapper.getOrderAccountByOrderType(code,day);
}
......
package com.xxfc.platform.order.biz;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.db.PageResult;
import com.github.wxiaoqi.security.admin.entity.BaseUserMemberLevel;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.auth.PageResult;
import com.google.common.collect.Maps;
import com.xxfc.platform.order.Utils.OrderDateUtils;
import com.xxfc.platform.order.contant.enumerate.OrderInquiryType;
......@@ -89,13 +89,13 @@ public class OrderStatisticsBiz extends BaseBiz<OrderStatisticsMapper, OrderStat
return result;
}
public List<MembersOrderDto> getMemberOrderStatistics(List<BaseUserMemberLevel> memberLevels, OrderQuery query) throws ParseException {
public PageResult getMemberOrderStatistics(List<BaseUserMemberLevel> memberLevels, OrderQuery query) throws ParseException {
List<MembersOrder> membersOrderList = membersBiz.getMemberOrderStatistics(query);
//按每天分类
if (CollectionUtil.isEmpty(membersOrderList)) {
return null;
return PageResult.nowPageResult(query.getPage(),query.getLimit(),Lists.newArrayList());
}
//按每天分类
if (CollectionUtil.isEmpty(memberLevels)) {
......@@ -175,18 +175,13 @@ public class OrderStatisticsBiz extends BaseBiz<OrderStatisticsMapper, OrderStat
//进行分页处理
return arrayList;
return PageResult.nowPageResult(query.getPage(),query.getLimit(),arrayList);
// return pagingProcessing(query, arrayList);
}
private PageResult pagingProcessing(OrderQuery query, ArrayList<MembersOrderDto> arrayList) {
PageResult pageResult = (PageResult) arrayList;
pageResult.setPage(query.getPage());
pageResult.setPageSize(query.getLimit());
return pageResult;
}
private void TotalPaymentAndMemberName(HashMap<Integer, String> map, MembersOrder mb, MembersOrderDto mbdto) {
......@@ -204,11 +199,6 @@ public class OrderStatisticsBiz extends BaseBiz<OrderStatisticsMapper, OrderStat
mbdto.setTotalPayment(totalPayment);
}
public Object downloadExcel() {
return null;
}
public List<HashMap<Object, Object>> getRows(List<MembersOrderDto> list, List<BaseUserMemberLevel> memberLevels) {
ArrayList<HashMap<Object, Object>> rows = Lists.newArrayList();
......
......@@ -122,7 +122,8 @@ public class OrderCalculateBiz {
inProgressVO.setUsedFreeDaysAmount(orderItem.getUnitPrice().multiply(new BigDecimal(useDays+ "")));
//返回剩余免费天数,返回优惠券,订单款
refundAmount = refundAmount.add(goodsRealAmount);
//修改bug,不需要提前加, 已在handleConsumeAmount方法中添加
// refundAmount = refundAmount.add(goodsRealAmount);
inProgressVO.setBackFreeDays(backFreeDays);
//返回优惠券
......@@ -132,7 +133,10 @@ public class OrderCalculateBiz {
}
//设置消费金额 由于返回了优惠券,所以添加优惠券之前减免的金额
consumeAmount = consumeAmount.add(otherItemRealAmount).add(baseOrder.getCouponAmount());
consumeAmount = consumeAmount.add(otherItemRealAmount);
//修改bug,消费金额不需要添加优惠券金额
//.add(baseOrder.getCouponAmount());
inProgressVO.setConsumeAmount(consumeAmount);
refundAmount = handleConsumeAmount(oad, refundAmount, consumeAmount, goodsRealAmount, inProgressVO);
......
package com.xxfc.platform.order.jobhandler;
import com.xxfc.platform.order.biz.BaseOrderBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.google.common.collect.Lists;
import com.xxfc.platform.order.biz.DailyOrderStatisticsBiz;
import com.xxfc.platform.order.biz.DailyVehicleOrderStatisticsBiz;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import com.xxl.job.core.log.XxlJobLogger;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.formula.functions.T;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 每天2定时统计前一天的数据
* 每天2点定时统计前一天的数据
*
* @author Administrator
*/
@JobHandler(value = "baseOrderStatisticsHandler")
......@@ -22,26 +34,97 @@ public class BaseOrderStatisticsJobHandler extends IJobHandler {
@Autowired
private DailyOrderStatisticsBiz statisticsBiz;
@Value("${order.day:1}")
private Integer day;
/**
* 每日定时执行订单统计
*
* @param date 重新统计起止日期.可以为:起止时间(yyyy-MM-dd),开始时间/结束时间(yyyy-MM-dd/yyyy-MM-dd)
* @return
*/
@Override
public ReturnT<String> execute(String s){
public ReturnT<String> execute(String date) {
try {
log.info("-----定时器进入---baseOrderStatisticsHandler---" + date);
XxlJobLogger.log("-----定时器进入---baseOrderStatisticsHandler---" + date);
ArrayList<Integer> arrayList = Lists.newArrayList();
if (StringUtils.isBlank(date)) {
arrayList.add(day);
} else {
arrayList = dateDifferenceSet(date);
}
log.info("获取到当前需要执行的日期,距离当前时间的天数集合" + arrayList);
XxlJobLogger.log("获取到当前需要执行的日期,距离当前时间的天数集合" + arrayList);
for (Integer day : arrayList) {
boolean flag = statisticsBiz.statisticalOrder(day);
log.info("执行状态:" + day+"="+flag);
XxlJobLogger.log("执行状态:" + day+"="+flag);
}
XxlJobLogger.log("-----定时器进入---baseOrderStatisticsHandler---");
log.info("-----定时器进入---baseOrderStatisticsHandler---");
// boolean flag = statisticsBiz.statisticalOrder();
// if (flag) {
return ReturnT.SUCCESS;
// }
// else {
// returnT.setCode(500);
// returnT.setMsg("失败");
// return returnT;
// }
return new ReturnT<>(ReturnT.SUCCESS_CODE,"执行成功");
} catch (Exception e) {
XxlJobLogger.log(e);
return FAIL;
} finally {
log.error(e.getMessage());
return new ReturnT<>(ReturnT.FAIL_CODE,"执行失败");
}
}
private ArrayList<Integer> dateDifferenceSet(String date) throws ParseException {
Long maxDate;
Long minDate;
Long currentTime= System.currentTimeMillis();
if (date.contains("/")) {
String[] dates = date.split("/");
Long date1 = getDateByString(dates[0]);
Long date2 = getDateByString(dates[1]);
if (date1<date2) {
maxDate=date2;
minDate=date1;
}else{
maxDate=date1;
minDate=date2;
}
if (minDate<currentTime&&maxDate>currentTime){
maxDate=currentTime;
}else if (minDate>currentTime){
throw new BaseException("设置的日期,大于当前日期!");
}
}else {
Long dt = getDateByString(date);
if (dt>currentTime) {
throw new BaseException("设置的日期,大于当前日期!");
}
minDate=dt;
maxDate=currentTime;
}
//距离今天的最小天数差
int minDay = (int) ((currentTime-minDate)/(24*60*60*1000));
//距离今天的最大天数差
int maxDay = (int) ((currentTime-maxDate)/(24*60*60*1000));
return getListByMinDayAndMaxDay(minDay,maxDay);
}
private Long getDateByString(String date) throws ParseException {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
return dateFormat.parse(date).getTime();
}
private ArrayList<Integer> getListByMinDayAndMaxDay(int minDay,int maxDay){
ArrayList<Integer> arrayList = Lists.newArrayList();
for (int day=maxDay;day<=maxDay;day++){
arrayList.add(day);
}
return arrayList;
}
}
......@@ -159,7 +159,9 @@ public class OrderStatisticsController extends BaseController<OrderStatisticsBiz
@PostMapping("/order")
@ApiOperation(value = "会员统计")
public ObjectRestResponse<List<MembersOrderDto>> getMemberOrderStatisticsData(@RequestBody OrderQuery query) throws ParseException {
if (query.getEndTime()!=null) {
query.setEndTime(query.getEndTime()+(24*60*60*1000));
}
//获取会员等级信息
List<BaseUserMemberLevel> memberLevels = userFeign.levels();
//获取会员订单统计信息
......@@ -170,11 +172,13 @@ public class OrderStatisticsController extends BaseController<OrderStatisticsBiz
@PostMapping("/excel")
@ApiOperation(value = "下载excel表")
public void downloadExcel(@RequestBody OrderQuery query) throws Exception {
if (query.getEndTime()!=null) {
query.setEndTime(query.getEndTime()+(24*60*60*1000));
}
// 通过工具类创建writer,默认创建xls格式
ExcelWriter writer = ExcelUtil.getWriter(true);
List<BaseUserMemberLevel> memberLevels = userFeign.levels();
List<MembersOrderDto> list = baseBiz.getMemberOrderStatistics(memberLevels, query);
List<MembersOrderDto> list = baseBiz.getMemberOrderStatistics(memberLevels, query).getList();
List<HashMap<Object, Object>> rows = baseBiz.getRows(list, memberLevels);
// 一次性写出内容,使用默认样式,强制输出标题
......
......@@ -19,7 +19,7 @@
SELECT
IFNULL( sum( gmv ), 0 ) AS totalGmv
FROM
daily_vehicle_order_statistics
daily_members_order_statistics
WHERE
1=1
<if test="companyId != null">
......
......@@ -55,7 +55,7 @@
IFNULL( sum( default_money ), 0 ) AS totalDefaultMoney,
IFNULL( sum( return_gmv ), 0 ) AS totalReturnGmv
FROM
daily_vehicle_order_statistics
daily_travel_order_statistics
WHERE
1=1
<if test="companyId != null">
......
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.UserDTO;
import com.github.wxiaoqi.security.auth.client.config.UserAuthConfig;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.order.OrderApplication;
import com.xxfc.platform.order.biz.DailyOrderStatisticsBiz;
import com.xxfc.platform.order.biz.OrderStatisticsBiz;
......@@ -33,9 +28,43 @@ public class ServiceTest {
@Test
public void testSchedu(){
dailyOrderStatisticsBiz.statisticalOrder();
dailyOrderStatisticsBiz.statisticalOrder(1);
}
@Test
public void test() throws ParseException {
String d="2019-09-01";
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date parse = dateFormat.parse(d);
System.out.println(parse);
}
@Test
public void test2() {
DateTime dateTime = DateTime.parse("2019-10-10");
System.out.println(dateTime);
}
@Test
public void test3() {
DateTime dateTime = DateTime.parse("2019-10-10");
Date date = dateTime.toDate();
DateTime dateTime1 = DateTime.parse("2019-12-10");
Date date1 = dateTime1.toDate();
System.out.println(date);
System.out.println(date1);
System.out.println(date.before(date1));
System.out.println(date.after(date1));
}
@Test
public void handlerTeset() {
handler.execute("2019-10-12");
}
@Test
public void test(){
HomePageOrderData totalOrder = statisticsBiz.getTotalOrder(null);
......
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