|
@@ -5,6 +5,7 @@ import cn.afterturn.easypoi.excel.entity.ExportParams;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
@@ -45,9 +46,8 @@ import javax.imageio.ImageIO;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
import java.awt.image.BufferedImage;
|
|
|
import java.io.IOException;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.TreeMap;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -323,21 +323,34 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
|
|
|
@Override
|
|
|
public CommonPage<OrderReport> orderReportList(Integer current,Integer size,Date startTime, Date endTime, Integer type) {
|
|
|
- IPage<OrderReport> page = new Page<>(current, size);
|
|
|
+ IPage<Map<String,Object>> page = new Page<>(current, size);
|
|
|
+ String dateType;
|
|
|
switch (type){
|
|
|
case 1 :
|
|
|
- page = baseMapper.getCountByDay(page, startTime, endTime);
|
|
|
+ dateType = "DATE(create_time) reportDate";
|
|
|
break;
|
|
|
case 2 :
|
|
|
- page = baseMapper.getCountByWeek(page, startTime, endTime);
|
|
|
+ dateType = "WEEK(create_time) reportDate";
|
|
|
break;
|
|
|
case 3 :
|
|
|
- page = baseMapper.getCountByMonth(page, startTime, endTime);
|
|
|
+ dateType = "MONTH(create_time) reportDate";
|
|
|
break;
|
|
|
default:
|
|
|
- page = baseMapper.getCountByYear(page, startTime, endTime);
|
|
|
+ dateType = "YEAR(create_time) reportDate";
|
|
|
}
|
|
|
- return new CommonPage<>(page.getRecords(),page.getTotal(),page.getCurrent(),page.getSize());
|
|
|
+ QueryWrapper<Order> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.select(dateType,
|
|
|
+ "sum(money) as totalMoney",
|
|
|
+ "sum(if(pay_type = '1', money, 0)) as cashMoney",
|
|
|
+ "sum(if(pay_type = '2', money, 0)) as wxMoney",
|
|
|
+ "sum(if(pay_type = '3', money, 0)) as zfbMoney")
|
|
|
+ .between(null != startTime && null != endTime,"create_time",startTime,endTime)
|
|
|
+ .groupBy("reportDate")
|
|
|
+ .orderByAsc("reportDate");
|
|
|
+ IPage<Map<String, Object>> mapIPage = baseMapper.selectMapsPage(page, queryWrapper);
|
|
|
+ String jsonStr = JSON.toJSONString(mapIPage.getRecords());
|
|
|
+ List<OrderReport> orderReports = JSON.parseArray(jsonStr, OrderReport.class);
|
|
|
+ return new CommonPage<>(orderReports,page.getTotal(),page.getCurrent(),page.getSize());
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -399,6 +412,76 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
return payInfo;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public List<Order> payTypeCollect() {
|
|
|
+ QueryWrapper<Order> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.select("sum(money) as money","pay_type as payType")
|
|
|
+ .groupBy("pay_type");
|
|
|
+ List<Order> list = this.list(queryWrapper);
|
|
|
+ for (OrderPayType orderPayType:OrderPayType.values()) {
|
|
|
+ if (orderPayType.getPayCode().equals(4)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ boolean present = list.stream().anyMatch(o -> o.getPayType().equals(orderPayType.getPayCode()));
|
|
|
+ if (!present){
|
|
|
+ Order order = new Order();
|
|
|
+ order.setPayType(orderPayType.getPayCode());
|
|
|
+ order.setMoney(new BigDecimal("0.00"));
|
|
|
+ list.add(order);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> dateCollect(Integer dateType) {
|
|
|
+ Date startTime;
|
|
|
+ Date endTime;
|
|
|
+ String type;
|
|
|
+ Date date = new Date();
|
|
|
+ int times;
|
|
|
+ QueryWrapper<Order> queryWrapper = new QueryWrapper<>();
|
|
|
+ if (0 == dateType){
|
|
|
+ type = "EXTRACT(DAY FROM create_time)";
|
|
|
+ startTime =DateUtils.getFirstDayOfMonth(date);
|
|
|
+ endTime = DateUtils.getLastDayOfMonth(date);
|
|
|
+ times = Integer.parseInt(DateUtils.getDay(endTime))+1;
|
|
|
+ }else {
|
|
|
+ type = "MONTH(create_time)";
|
|
|
+ startTime =DateUtils.getBeginDayOfYear(date);
|
|
|
+ endTime = DateUtils.getEndDayOfYear(date);
|
|
|
+ times = 13;
|
|
|
+ }
|
|
|
+ queryWrapper.select(String.format("%s%s",type,"as orderTime"),"IFNULL(sum(money),0) as total")
|
|
|
+ .between("create_time",startTime,endTime)
|
|
|
+ .groupBy("orderTime");
|
|
|
+ List<Map<String, Object>> list = baseMapper.selectMaps(queryWrapper);
|
|
|
+ perfectDate(list,times,1);
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理数据
|
|
|
+ * @param list
|
|
|
+ * @param times
|
|
|
+ * @param defaultTime
|
|
|
+ */
|
|
|
+ public void perfectDate(List<Map<String,Object>> list,Integer times,Integer defaultTime){
|
|
|
+ for (int i = defaultTime; i < times; i++) {
|
|
|
+ int finalI = i;
|
|
|
+ list.stream()
|
|
|
+ .filter(asv -> Integer.parseInt(asv.get("orderTime").toString()) == finalI)
|
|
|
+ .findFirst()
|
|
|
+ .orElseGet(() -> {
|
|
|
+ Map<String,Object> map = new HashMap<>();
|
|
|
+ map.put("orderTime",finalI);
|
|
|
+ map.put("total",0.00);
|
|
|
+ list.add(map);
|
|
|
+ return map;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 充值失败后处理
|
|
|
* @param order
|