admin
2025-02-25 30d8e227e8d823b6c38c3b9c90ac2df03b63befe
fanli/src/main/java/com/yeshi/fanli/controller/admin/CountChartsAdminController.java
@@ -2,7 +2,6 @@
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
@@ -10,6 +9,7 @@
import javax.annotation.Resource;
import com.yeshi.fanli.entity.accept.AdminAcceptData;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.yeshi.utils.JsonUtil;
@@ -17,20 +17,17 @@
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.yeshi.fanli.controller.admin.utils.AdminUtils;
import com.yeshi.fanli.entity.admin.count.CountOrderInfo;
import com.yeshi.fanli.entity.admin.count.CountOrderTrackRate;
import com.yeshi.fanli.entity.admin.count.CountUserInfo;
import com.yeshi.fanli.entity.admin.count.DailyCountCoupon;
import com.yeshi.fanli.entity.admin.count.DailyCountMoments;
import com.yeshi.fanli.entity.admin.count.DailyCountOrder;
import com.yeshi.fanli.entity.admin.count.DailyCountUser;
import com.yeshi.fanli.service.inter.count.DailyCountCouponService;
import com.yeshi.fanli.service.inter.count.DailyCountMomentsService;
import com.yeshi.fanli.service.inter.count.DailyCountOrderService;
import com.yeshi.fanli.service.inter.count.DailyCountUserService;
import com.yeshi.fanli.service.inter.count.UserInfoCountService;
import com.yeshi.fanli.service.inter.order.CommonOrderCountService;
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
import org.yeshi.utils.MoneyBigDecimalUtil;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TimeUtil;
import org.yeshi.utils.TimeUtil;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
@@ -40,12 +37,6 @@
public class CountChartsAdminController {
   @Resource
   private UserInfoCountService userInfoCountService;
   @Resource
   private CommonOrderCountService commonOrderCountService;
   @Resource
   private DailyCountCouponService dailyCountCouponService;
   
   @Resource
@@ -54,851 +45,14 @@
   @Resource
   private DailyCountOrderService dailyCountOrderService;
   
   @Resource
   private DailyCountMomentsService dailyCountMomentsService;
   
   private void verifyQueryData(String callback, Integer dateType, String year, String startTime,
         String endTime, PrintWriter out) throws Exception {
      String validateMsg = null;
      if (dateType == null) {
         validateMsg = "请选择视图类型";
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(validateMsg));
         return;
      }
      if (dateType == 1 && (StringUtil.isNullOrEmpty(startTime) || StringUtil.isNullOrEmpty(endTime))) {
         validateMsg  = "请选择时间区间";
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(validateMsg));
         return;
      }
   }
   private Date getBeginDate(Integer dateType, String year, String startTime) throws Exception{
      Date beginDate = null;
      if (dateType == 1) {
         beginDate = TimeUtil.parse(startTime);
      } else if (dateType == 2) {
         Calendar calendar=Calendar.getInstance();
         int currentYear = calendar.get(Calendar.YEAR);
         if (!StringUtil.isNullOrEmpty(year)) {
            currentYear = Integer.parseInt(year);
         }
         calendar.clear();
          calendar.set(Calendar.YEAR, currentYear);
          beginDate =calendar.getTime();
      } else if (dateType == 3) {
         beginDate = TimeUtil.parse("2018-01-01");
      }
      return beginDate;
   }
   private Date getEndDate(Integer dateType, String year, String endTime) throws Exception{
      Date endDate = null;
      if (dateType == 1) {
         endDate = TimeUtil.parse(endTime);
      } else if (dateType == 2) {
         Calendar calendar=Calendar.getInstance();
         int currentYear = calendar.get(Calendar.YEAR);
         if (!StringUtil.isNullOrEmpty(year)) {
            currentYear = Integer.parseInt(year);
         }
         calendar.clear();
         calendar.set(Calendar.YEAR, currentYear);
         calendar.roll(Calendar.DAY_OF_YEAR, -1);
         endDate=calendar.getTime();
      } else if (dateType == 3) {
         endDate = new Date();
      }
      return endDate;
   }
   private List<Object> machineOrderResultNum(List<String> dateList, Integer dateType, List<CountOrderInfo> listHistory) {
      List<Object> list = new ArrayList<>();
      for (String date: dateList) {
         int value = 0;
         if (listHistory != null) {
            for (CountOrderInfo history: listHistory) {
               if (dateType == 1) {
                  String gernalTime = TimeUtil.getGernalTime(history.getDay().getTime());
                  if (gernalTime.equalsIgnoreCase(date)) {
                     value += history.getNum();
                     continue;
                  }
               } else if (dateType == 2){
                  String gernalTime = TimeUtil.getMonthOnlyMM(history.getDay());
                  if(gernalTime.startsWith("0")) {
                     gernalTime = gernalTime.substring(1, 2);
                  }
                  if (gernalTime.equalsIgnoreCase(date)) {
                     value +=  history.getNum();
                     continue;
                  }
               } else if (dateType == 3) {
                  String gernalTime = TimeUtil.getYearOnlyYYYY(history.getDay());
                  if (gernalTime.equalsIgnoreCase(date)) {
                     value +=  history.getNum();
                     continue;
                  }
               }
            }
         }
         list.add(value + "");
      }
      return list;
   }
   private List<Object> machineOrderResultMoney(List<String> dateList, Integer dateType, List<CountOrderInfo> listHistory) {
      List<Object> list = new ArrayList<>();
      for (String date: dateList) {
         BigDecimal money = new BigDecimal(0);
         if (listHistory != null) {
            for (CountOrderInfo history: listHistory) {
               if (dateType == 1) {
                  String gernalTime = TimeUtil.getGernalTime(history.getDay().getTime());
                  if (gernalTime.equalsIgnoreCase(date)) {
                     if (history.getMoney() != null) {
                        money = MoneyBigDecimalUtil.add(money, history.getMoney());
                     }
                     continue;
                  }
               } else if (dateType == 2){
                  String gernalTime = TimeUtil.getMonthOnlyMM(history.getDay());
                  if(gernalTime.startsWith("0")) {
                     gernalTime = gernalTime.substring(1, 2);
                  }
                  if (gernalTime.equalsIgnoreCase(date) && history.getMoney() != null) {
                     money = MoneyBigDecimalUtil.add(money, history.getMoney());
                  }
               } else if (dateType == 3) {
                  String gernalTime = TimeUtil.getYearOnlyYYYY(history.getDay());
                  if (gernalTime.equalsIgnoreCase(date)) {
                     if (history.getMoney() != null) {
                        money = MoneyBigDecimalUtil.add(money, history.getMoney());
                     }
                  }
               }
            }
         }
         list.add(money + "");
      }
      return list;
   }
   private List<Object> machineResultNum(List<String> dateList, Integer dateType, List<CountUserInfo> listHistory) {
      List<Object> list = new ArrayList<>();
      for (String date: dateList) {
         int value = 0;
         if (listHistory != null) {
            for (CountUserInfo history: listHistory) {
               if (dateType == 1) {
                  String gernalTime = TimeUtil.getGernalTime(history.getDay().getTime());
                  if (gernalTime.equalsIgnoreCase(date)) {
                     value += history.getNum();
                     continue;
                  }
               } else if (dateType == 2){
                  String gernalTime = TimeUtil.getMonthOnlyMM(history.getDay());
                  if(gernalTime.startsWith("0")) {
                     gernalTime = gernalTime.substring(1, 2);
                  }
                  if (gernalTime.equalsIgnoreCase(date)) {
                     value +=  history.getNum();
                     continue;
                  }
               } else if (dateType == 3) {
                  String gernalTime = TimeUtil.getYearOnlyYYYY(history.getDay());
                  if (gernalTime.equalsIgnoreCase(date)) {
                     value +=  history.getNum();
                     continue;
                  }
               }
            }
         }
         list.add(value + "");
      }
      return list;
   }
   /**
    * 统计新人下单情况
    * @param callback
    * @param channelArray
    * @param dateType 日期类型
    * @param year
    * @param startTime
    * @param endTime
    * @param countType 统计类型: 1-当日下单 、 2-当周下单、3-当周下3单
    * @param out
    */
   @RequestMapping(value = "getNewUserDownOder")
   public void getNewUserDownOder(String callback, String channelArray, Integer dateType, String year,
         String startTime, String endTime, Integer countType, PrintWriter out) {
      try {
         // 数据验证处理
         verifyQueryData(callback, dateType, year, startTime, endTime, out);
         Date beginDate = getBeginDate(dateType, year, startTime);
         Date endDate = getEndDate(dateType, year, endTime);
         Gson gson = new Gson();
         List<String> dateList = AdminUtils.getDateList(dateType, startTime, endTime, year);
         // 渠道
         List<String> channelList = null;
         if (channelArray != null && channelArray.trim().length() > 4) {
            channelList = gson.fromJson(channelArray, new TypeToken<ArrayList<String>>() {}.getType());
         }
         JSONArray line_list = new JSONArray();
         if (channelList != null && channelList.size() > 0) {
            for (String channel : channelList) {
               List<CountUserInfo> listData = null;
               if (countType == 1) {
                  listData = userInfoCountService.countUserDownOrderByChannelAndToday(channel, beginDate, endDate);
               } else if (countType == 2) {
                  listData = userInfoCountService.countUseByChannelAndWeekOrder(channel, beginDate, endDate);
               } else if (countType == 3) {
                  listData = userInfoCountService.countUseByChannelAndWeekThreeOrder(channel, beginDate, endDate);
               }
               List<Object> list = machineResultNum(dateList, dateType, listData);
               JSONObject innerList = new JSONObject();
               innerList.put("name", channel);
               innerList.put("data", gson.toJson(list));
               line_list.add(innerList);
            }
         } else {
            List<CountUserInfo> listData = null;
            if (countType == 1) {
               listData = userInfoCountService.countUserDownOrderByChannelAndToday(null, beginDate, endDate);
            } else if (countType == 2) {
               listData = userInfoCountService.countUseByChannelAndWeekOrder(null, beginDate, endDate);
            } else if (countType == 3) {
               listData = userInfoCountService.countUseByChannelAndWeekThreeOrder(null, beginDate, endDate);
            }
            List<Object> list = machineResultNum(dateList, dateType, listData);
            JSONObject innerList = new JSONObject();
            innerList.put("name", "全部");
            innerList.put("data", gson.toJson(list));
            line_list.add(innerList);
         }
         JSONObject data = new JSONObject();
         data.put("line_list", line_list);
         data.put("xAxis_list", gson.toJson(dateList));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("系统异常"));
         e.printStackTrace();
      }
   }
   /**
    * 统计订单情况
    * @param callback
    * @param channelArray
    * @param dateType
    * @param year
    * @param startTime
    * @param endTime
    * @param countType 1-新用户24小时订单  、  2- 总订单数量
    * @param out
    */
   @RequestMapping(value = "getDownOderNum")
   public void getDownOderNum(String callback, String channelArray, Integer dateType, String year,
         String startTime, String endTime, Integer countType, PrintWriter out) {
      try {
         // 数据验证处理
         verifyQueryData(callback, dateType, year, startTime, endTime, out);
         Date beginDate = getBeginDate(dateType, year, startTime);
         Date endDate = getEndDate(dateType, year, endTime);
         Gson gson = new Gson();
         List<String> dateList = AdminUtils.getDateList(dateType, startTime, endTime, year);
         // 渠道
         List<String> channelList = null;
         if (channelArray != null && channelArray.trim().length() > 4) {
            channelList = gson.fromJson(channelArray, new TypeToken<ArrayList<String>>() {}.getType());
         }
         JSONArray line_list = new JSONArray();
         if (channelList != null && channelList.size() > 0) {
            for (String channel : channelList) {
               List<CountOrderInfo> listData = null;
               if (countType == 1) {
                  listData = userInfoCountService.count24HOderByChannel(channel, beginDate, endDate);
               } else if (countType == 2) {
                  listData = userInfoCountService.countOderByChannel(channel, beginDate, endDate);
               }
               List<Object> list = machineOrderResultNum(dateList, dateType, listData);
               JSONObject innerList = new JSONObject();
               innerList.put("name", channel);
               innerList.put("data", gson.toJson(list));
               line_list.add(innerList);
            }
         } else {
            List<CountOrderInfo> listData = null;
            if (countType == 1) {
               listData = userInfoCountService.count24HOderByChannel(null, beginDate, endDate);
            } else if (countType == 2) {
               listData = userInfoCountService.countOderByChannel(null, beginDate, endDate);
            }
            List<Object> list = machineOrderResultNum(dateList, dateType, listData);
            JSONObject innerList = new JSONObject();
            innerList.put("name", "全部");
            innerList.put("data", gson.toJson(list));
            line_list.add(innerList);
         }
         JSONObject data = new JSONObject();
         data.put("line_list", line_list);
         data.put("xAxis_list", gson.toJson(dateList));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("系统异常"));
         e.printStackTrace();
      }
   }
   /**
    * 统计订单佣金
    * @param callback
    * @param channelArray
    * @param dateType
    * @param year
    * @param startTime
    * @param endTime
    * @param out
    */
   @RequestMapping(value = "getCommissionMoney")
   public void getCommissionMoney(String callback, String channelArray, Integer dateType, String year,
         String startTime, String endTime, PrintWriter out) {
      try {
         // 数据验证处理
         verifyQueryData(callback, dateType, year, startTime, endTime, out);
         Date beginDate = getBeginDate(dateType, year, startTime);
         Date endDate = getEndDate(dateType, year, endTime);
         Gson gson = new Gson();
         List<String> dateList = AdminUtils.getDateList(dateType, startTime, endTime, year);
         // 渠道
         List<String> channelList = null;
         if (channelArray != null && channelArray.trim().length() > 4) {
            channelList = gson.fromJson(channelArray, new TypeToken<ArrayList<String>>() {}.getType());
         }
         JSONArray line_list = new JSONArray();
         if (channelList != null && channelList.size() > 0) {
            for (String channel : channelList) {
               List<CountOrderInfo> listData = userInfoCountService.countHongBaoByChannel(channel, beginDate, endDate);
               List<Object> list = machineOrderResultMoney(dateList, dateType, listData);
               JSONObject innerList = new JSONObject();
               innerList.put("name", channel);
               innerList.put("data", gson.toJson(list));
               line_list.add(innerList);
            }
         } else {
            List<CountOrderInfo> listData = userInfoCountService.countHongBaoByChannel(null, beginDate, endDate);
            List<Object> list = machineOrderResultMoney(dateList, dateType, listData);
            JSONObject innerList = new JSONObject();
            innerList.put("name", "全部");
            innerList.put("data", gson.toJson(list));
            line_list.add(innerList);
         }
         JSONObject data = new JSONObject();
         data.put("line_list", line_list);
         data.put("xAxis_list", gson.toJson(dateList));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("系统异常"));
         e.printStackTrace();
      }
   }
   /**
    *  维权订单  金额、订单号数量
    * @param callback
    * @param channelArray
    * @param dateType
    * @param year
    * @param startTime
    * @param endTime
    * @param out
    */
   @RequestMapping(value = "getWeiQuanOrderInfo")
   public void getWeiQuanOrderInfo(String callback, Integer dateType, String year,
         String startTime, String endTime, Integer countType, PrintWriter out) {
      try {
         // 数据验证处理
         verifyQueryData(callback, dateType, year, startTime, endTime, out);
         Date beginDate = getBeginDate(dateType, year, startTime);
         Date endDate = getEndDate(dateType, year, endTime);
         Gson gson = new Gson();
         List<String> dateList = AdminUtils.getDateList(dateType, startTime, endTime, year);
         JSONArray line_list = new JSONArray();
         List<Object> list = null;
         String name = "";
         if (countType == 1) {
            name = "维权数量";
            List<CountOrderInfo> listData = userInfoCountService.countWeiQuanOrder(beginDate, endDate);
            list = machineOrderResultNum(dateList, dateType, listData);
         } else if (countType == 2) {
            name = "维权金额";
            List<CountOrderInfo> listData = userInfoCountService.countWeiQuanOrderMoney(beginDate, endDate);
            list = machineOrderResultMoney(dateList, dateType, listData);
         }
         JSONObject innerList = new JSONObject();
         innerList.put("name", name);
         innerList.put("data", gson.toJson(list));
         line_list.add(innerList);
         JSONObject data = new JSONObject();
         data.put("line_list", line_list);
         data.put("xAxis_list", gson.toJson(dateList));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("系统异常"));
         e.printStackTrace();
      }
   }
   /**
    *    订单找回  金额、订单号数量
    * @param callback
    * @param channelArray
    * @param dateType
    * @param year
    * @param startTime
    * @param endTime
    * @param out
    */
   @RequestMapping(value = "getLostOrderInfo")
   public void getLostOrderInfo(String callback, Integer dateType, String year,
         String startTime, String endTime, Integer countType, PrintWriter out) {
      try {
         // 数据验证处理
         verifyQueryData(callback, dateType, year, startTime, endTime, out);
         Date beginDate = getBeginDate(dateType, year, startTime);
         Date endDate = getEndDate(dateType, year, endTime);
         Gson gson = new Gson();
         List<String> dateList = AdminUtils.getDateList(dateType, startTime, endTime, year);
         JSONArray line_list = new JSONArray();
         List<Object> list = null;
         String name = "";
         if (countType == 1) {
            name = "申诉数量";
            List<CountOrderInfo> listData = userInfoCountService.counOrderLastNum(beginDate, endDate);
            list = machineOrderResultNum(dateList, dateType, listData);
         } else if (countType == 2) {
            name = "申诉佣金";
            List<CountOrderInfo> listData = userInfoCountService.counOrderLastMoney(beginDate, endDate);
            list = machineOrderResultMoney(dateList, dateType, listData);
         }
         JSONObject innerList = new JSONObject();
         innerList.put("name", name);
         innerList.put("data", gson.toJson(list));
         line_list.add(innerList);
         JSONObject data = new JSONObject();
         data.put("line_list", line_list);
         data.put("xAxis_list", gson.toJson(dateList));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("系统异常"));
         e.printStackTrace();
      }
   }
   /**
    *    订单找回  金额、订单号数量
    * @param callback
    * @param channelArray
    * @param dateType
    * @param year
    * @param startTime
    * @param endTime
    * @param out
    */
   @RequestMapping(value = "getOrderCount")
   public void getOrderCount(String callback, Integer dateType, String year, String startTime, String endTime,
         Integer countType, PrintWriter out) {
      try {
         // 数据验证处理
         verifyQueryData(callback, dateType, year, startTime, endTime, out);
         Date beginDate = getBeginDate(dateType, year, startTime);
         Date endDate = getEndDate(dateType, year, endTime);
         Gson gson = new Gson();
         List<String> dateList = AdminUtils.getDateList(dateType, startTime, endTime, year);
         JSONArray line_list = new JSONArray();
         List<Object> list = null;
         String name = "";
         if (countType == 1) {
            name = "单数";
            List<CountOrderInfo> listData = userInfoCountService.counOrderTotalNum(beginDate, endDate);
            list = machineOrderResultNum(dateList, dateType, listData);
         } else if (countType == 2) {
            name = "佣金";
            List<CountOrderInfo> listData = userInfoCountService.counOrderTotalCommission(beginDate, endDate);
            list = machineOrderResultMoney(dateList, dateType, listData);
         }
         JSONObject innerList = new JSONObject();
         innerList.put("name", name);
         innerList.put("data", gson.toJson(list));
         line_list.add(innerList);
         JSONObject data = new JSONObject();
         data.put("line_list", line_list);
         data.put("xAxis_list", gson.toJson(dateList));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("系统异常"));
         e.printStackTrace();
      }
   }
   
   
   
   /**
    *    订单跟踪率
    * @param callback
    * @param channelArray
    * @param dateType
    * @param year
    * @param startTime
    * @param endTime
    * @param out
    */
   @RequestMapping(value = "getOrderTrackRate")
   public void getOrderTrackRate(String callback, Integer dateType, String year, String startTime, String endTime,
         Integer countType, PrintWriter out) {
      try {
         // 数据验证处理
         verifyQueryData(callback, dateType, year, startTime, endTime, out);
         Date beginDate = getBeginDate(dateType, year, startTime);
         Date endDate = getEndDate(dateType, year, endTime);
         Gson gson = new Gson();
         List<String> dateList = AdminUtils.getDateList(dateType, startTime, endTime, year);
         JSONArray line_list = new JSONArray();
         List<CountOrderTrackRate> listHistory = commonOrderCountService.getOrderTrackRate(countType, beginDate, endDate);
         List<Object> list = new ArrayList<>();
         DecimalFormat df = new DecimalFormat("#.00");
         for (String date: dateList) {
            double proportion = 0;
            if (listHistory != null) {
               Long upValue = 0L;
               Long downValue = 0L;
               for (CountOrderTrackRate history: listHistory) {
                  if (dateType == 1) {
                     String gernalTime = TimeUtil.getGernalTime(history.getDay().getTime());
                     if (gernalTime.equalsIgnoreCase(date)) {
                        if(history.getNum() != null)
                           upValue = history.getNum();
                        if(history.getTotalNum() != null)
                           downValue = history.getTotalNum();
                        continue;
                     }
                  } else if (dateType == 2){
                     String gernalTime = TimeUtil.getMonthOnlyMM(history.getDay());
                     if(gernalTime.startsWith("0")) {
                        gernalTime = gernalTime.substring(1, 2);
                     }
                     if (gernalTime.equalsIgnoreCase(date)) {
                        if(history.getNum() != null)
                           upValue = history.getNum();
                        if(history.getTotalNum() != null)
                           downValue = history.getTotalNum();
                        continue;
                     }
                  } else if (dateType == 3) {
                     String gernalTime = TimeUtil.getYearOnlyYYYY(history.getDay());
                     if (gernalTime.equalsIgnoreCase(date)) {
                        if(history.getNum() != null)
                           upValue = history.getNum();
                        if(history.getTotalNum() != null)
                           downValue = history.getTotalNum();
                        continue;
                     }
                  }
               }
               if(downValue != 0) {
                  proportion = upValue / (double) downValue;
               }
            }
            list.add(Double.parseDouble(df.format(proportion * 100)) + "");
         }
         JSONObject innerList = new JSONObject();
         innerList.put("name", "跟踪率");
         innerList.put("data", gson.toJson(list));
         line_list.add(innerList);
         JSONObject data = new JSONObject();
         data.put("line_list", line_list);
         data.put("xAxis_list", gson.toJson(dateList));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("系统异常"));
         e.printStackTrace();
      }
   }
   /**
    * 券相关图表数据
    * @param callback
    * @param dateType
    * @param year
    * @param startTime
    * @param endTime
    * @param type 查询类型
    * @param out
    */
   @RequestMapping(value = "getCouponCharts")
   public void getCouponCharts(String callback, Integer dateType, String year, String startTime, String endTime,
         String typeArray, PrintWriter out) {
      try {
         // 数据验证处理
         verifyQueryData(callback, dateType, year, startTime, endTime, out);
         Date beginDate = getBeginDate(dateType, year, startTime);
         Date endDate = getEndDate(dateType, year, endTime);
         Gson gson = new Gson();
         List<String> dateList = AdminUtils.getDateList(dateType, startTime, endTime, year);
         // 渠道
         List<String> typelList = null;
         if (typeArray != null && typeArray.trim().length() > 4) {
            typelList = gson.fromJson(typeArray, new TypeToken<ArrayList<String>>() {}.getType());
         }
         JSONArray line_list = new JSONArray();
         if (typelList != null && typelList.size() > 0) {
            for (String type: typelList) {
               List<DailyCountCoupon> listData = dailyCountCouponService.getDailyCountList(type, beginDate, endDate);
               // 处理数据
               List<Object> list = machineDailyCountCoupon(dateList, dateType, listData);
               JSONObject innerList = new JSONObject();
               innerList.put("name", dailyCountCouponService.getTypeEnumDesc(type));
               innerList.put("data", gson.toJson(list));
               line_list.add(innerList);
            }
         }
         JSONObject data = new JSONObject();
         data.put("line_list", line_list);
         data.put("xAxis_list", gson.toJson(dateList));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("系统异常"));
         e.printStackTrace();
      }
   }
   private List<Object> machineDailyCountCoupon(List<String> dateList, Integer dateType, List<DailyCountCoupon> listData) {
      List<Object> list = new ArrayList<>();
      for (String date: dateList) {
         BigDecimal result = new BigDecimal(0);
         if (listData != null) {
            for (DailyCountCoupon history: listData) {
               if (dateType == 1) {
                  String gernalTime = TimeUtil.getGernalTime(history.getDay().getTime());
                  if (gernalTime.equalsIgnoreCase(date)) {
                     result = MoneyBigDecimalUtil.add(result, history.getTotal());
                     continue;
                  }
               } else if (dateType == 2){
                  String gernalTime = TimeUtil.getMonthOnlyMM(history.getDay());
                  if(gernalTime.startsWith("0")) {
                     gernalTime = gernalTime.substring(1, 2);
                  }
                  if (gernalTime.equalsIgnoreCase(date)) {
                     result = MoneyBigDecimalUtil.add(result, history.getTotal());
                  }
               } else if (dateType == 3) {
                  String gernalTime = TimeUtil.getYearOnlyYYYY(history.getDay());
                  if (gernalTime.equalsIgnoreCase(date)) {
                     result = MoneyBigDecimalUtil.add(result, history.getTotal());
                  }
               }
            }
         }
         list.add(result);
      }
      return list;
   }
   /**
    * 用户相关图表数据
    * @param callback
    * @param dateType
    * @param year
    * @param startTime
    * @param endTime
    * @param type 查询类型
    * @param out
    */
   @RequestMapping(value = "getUserCharts")
   public void getUserCharts(String callback, Integer dateType, String year, String startTime, String endTime,
         String typeArray, String channelArray, PrintWriter out) {
      try {
         // 数据验证处理
         verifyQueryData(callback, dateType, year, startTime, endTime, out);
         Date beginDate = getBeginDate(dateType, year, startTime);
         Date endDate = getEndDate(dateType, year, endTime);
         Gson gson = new Gson();
         List<String> dateList = AdminUtils.getDateList(dateType, startTime, endTime, year);
         List<String> typelList = null;
         if (typeArray != null && typeArray.trim().length() > 4) {
            typelList = gson.fromJson(typeArray, new TypeToken<ArrayList<String>>() {}.getType());
         }
         if (typelList == null || typelList.size() == 0) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("传递类型错误"));
            return;
         }
         // 渠道
         List<String> channelList = null;
         if (channelArray != null && channelArray.trim().length() > 4) {
            channelList = gson.fromJson(channelArray, new TypeToken<ArrayList<String>>() {}.getType());
         }
         JSONArray line_list = new JSONArray();
         if (channelList != null && channelList.size() > 0) {
            String type = typelList.get(0);
            for (String channel: channelList) {
               List<DailyCountUser> listData = dailyCountUserService.getDailyCountList(type, beginDate, endDate, channel);
               // 处理数据
               List<Object> list = machineDailyCountUser(dateList, dateType, listData);
               JSONObject innerList = new JSONObject();
               innerList.put("name", channel);
               innerList.put("data", gson.toJson(list));
               line_list.add(innerList);
            }
         } else {
            for (String type: typelList) {
               List<DailyCountUser> listData = dailyCountUserService.getDailyCountList(type, beginDate, endDate, null);
               // 处理数据
               List<Object> list = machineDailyCountUser(dateList, dateType, listData);
               JSONObject innerList = new JSONObject();
               innerList.put("name", dailyCountUserService.getTypeEnumDesc(type));
               innerList.put("data", gson.toJson(list));
               line_list.add(innerList);
            }
         }
         JSONObject data = new JSONObject();
         data.put("line_list", line_list);
         data.put("xAxis_list", gson.toJson(dateList));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("系统异常"));
         e.printStackTrace();
      }
   }
   private List<Object> machineDailyCountUser(List<String> dateList, Integer dateType, List<DailyCountUser> listData) {
      List<Object> list = new ArrayList<>();
      for (String date: dateList) {
         BigDecimal result = new BigDecimal(0);
         if (listData != null) {
             BigDecimal totalDay = new BigDecimal(0);
             BigDecimal totalValid = new BigDecimal(0);
            for (DailyCountUser history: listData) {
               if (dateType == 1) {
                  String gernalTime = TimeUtil.getGernalTime(history.getDay().getTime());
                  if (gernalTime.equalsIgnoreCase(date)) {
                     result = MoneyBigDecimalUtil.add(result, history.getTotal());
                     continue;
                  }
               } else if (dateType == 2){
                  String gernalTime = TimeUtil.getMonthOnlyMM(history.getDay());
                  if(gernalTime.startsWith("0")) {
                     gernalTime = gernalTime.substring(1, 2);
                  }
                  if (gernalTime.equalsIgnoreCase(date)) {
                     if (!history.isRate()) {
                        result = MoneyBigDecimalUtil.add(result, history.getTotal());
                     } else {
                        totalDay = MoneyBigDecimalUtil.add(totalDay, history.getTotalDay());
                        totalValid = MoneyBigDecimalUtil.add(totalValid, history.getTotalValid());
                     }
                  }
               } else if (dateType == 3) {
                  String gernalTime = TimeUtil.getYearOnlyYYYY(history.getDay());
                  if (gernalTime.equalsIgnoreCase(date)) {
                     if (!history.isRate()) {
                        result = MoneyBigDecimalUtil.add(result, history.getTotal());
                     } else {
                        totalDay = MoneyBigDecimalUtil.add(totalDay, history.getTotalDay());
                        totalValid = MoneyBigDecimalUtil.add(totalValid, history.getTotalValid());
                     }
                  }
               }
            }
            // 判断是否计算比例
            if ((dateType == 2 || dateType == 3) && totalDay.compareTo(BigDecimal.valueOf(0)) > 0){
               result = MoneyBigDecimalUtil.div(totalValid, totalDay);
               result = MoneyBigDecimalUtil.mul(result, BigDecimal.valueOf(100));
            }
         }
         list.add(result);
      }
      return list;
   }
   /**
    * 用户相关图表数据
    * 订单相关图表数据
    * @param callback
    * @param dateType
    * @param year
@@ -908,8 +62,8 @@
    * @param out
    */
   @RequestMapping(value = "getOrderCharts")
   public void getOrderCharts(String callback, Integer dateType, String year, String startTime, String endTime,
         String typeArray, String channelArray, PrintWriter out) {
   public void getOrderCharts(AdminAcceptData acceptData, String callback, Integer dateType, String year, String startTime, String endTime,
                        String typeArray, String channelArray, PrintWriter out) {
      try {
         // 数据验证处理
         verifyQueryData(callback, dateType, year, startTime, endTime, out);
@@ -1027,4 +181,366 @@
      }
      return list;
   }
   /**
    * 用户相关图表数据
    * @param callback
    * @param dateType
    * @param year
    * @param startTime
    * @param endTime
    * @param type 查询类型
    * @param out
    */
   @RequestMapping(value = "getUserCharts")
   public void getUserCharts(AdminAcceptData acceptData,String callback, Integer dateType, String year, String startTime, String endTime,
         String typeArray, String channelArray, PrintWriter out) {
      try {
         // 数据验证处理
         verifyQueryData(callback, dateType, year, startTime, endTime, out);
         Date beginDate = getBeginDate(dateType, year, startTime);
         Date endDate = getEndDate(dateType, year, endTime);
         Gson gson = new Gson();
         List<String> dateList = AdminUtils.getDateList(dateType, startTime, endTime, year);
         List<String> typelList = null;
         if (typeArray != null && typeArray.trim().length() > 4) {
            typelList = gson.fromJson(typeArray, new TypeToken<ArrayList<String>>() {}.getType());
         }
         if (typelList == null || typelList.size() == 0) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("传递类型错误"));
            return;
         }
         // 渠道
         List<String> channelList = null;
         if (channelArray != null && channelArray.trim().length() > 4) {
            channelList = gson.fromJson(channelArray, new TypeToken<ArrayList<String>>() {}.getType());
         }
         JSONArray line_list = new JSONArray();
         if (channelList != null && channelList.size() > 0) {
            String type = typelList.get(0);
            for (String channel: channelList) {
               List<DailyCountUser> listData = dailyCountUserService.getDailyCountList(type, beginDate, endDate, channel);
               // 处理数据
               List<Object> list = machineDailyCountUser(dateList, dateType, listData);
               JSONObject innerList = new JSONObject();
               innerList.put("name", channel);
               innerList.put("data", gson.toJson(list));
               line_list.add(innerList);
            }
         } else {
            for (String type: typelList) {
               List<DailyCountUser> listData = dailyCountUserService.getDailyCountList(type, beginDate, endDate, null);
               // 处理数据
               List<Object> list = machineDailyCountUser(dateList, dateType, listData);
               JSONObject innerList = new JSONObject();
               innerList.put("name", dailyCountUserService.getTypeEnumDesc(type));
               innerList.put("data", gson.toJson(list));
               line_list.add(innerList);
            }
         }
         JSONObject data = new JSONObject();
         data.put("line_list", line_list);
         data.put("xAxis_list", gson.toJson(dateList));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("系统异常"));
         e.printStackTrace();
      }
   }
   private List<Object> machineDailyCountUser(List<String> dateList, Integer dateType, List<DailyCountUser> listData) {
      List<Object> list = new ArrayList<>();
      for (String date: dateList) {
         BigDecimal result = new BigDecimal(0);
         if (listData != null) {
             BigDecimal totalDay = new BigDecimal(0);
             BigDecimal totalValid = new BigDecimal(0);
            for (DailyCountUser history: listData) {
               if (dateType == 1) {
                  String gernalTime = TimeUtil.getGernalTime(history.getDay().getTime());
                  if (gernalTime.equalsIgnoreCase(date)) {
                     result = MoneyBigDecimalUtil.add(result, history.getTotal());
                     continue;
                  }
               } else if (dateType == 2){
                  String gernalTime = TimeUtil.getMonthOnlyMM(history.getDay());
                  if(gernalTime.startsWith("0")) {
                     gernalTime = gernalTime.substring(1, 2);
                  }
                  if (gernalTime.equalsIgnoreCase(date)) {
                     if (!history.isRate()) {
                        result = MoneyBigDecimalUtil.add(result, history.getTotal());
                     } else {
                        totalDay = MoneyBigDecimalUtil.add(totalDay, history.getTotalDay());
                        totalValid = MoneyBigDecimalUtil.add(totalValid, history.getTotalValid());
                     }
                  }
               } else if (dateType == 3) {
                  String gernalTime = TimeUtil.getYearOnlyYYYY(history.getDay());
                  if (gernalTime.equalsIgnoreCase(date)) {
                     if (!history.isRate()) {
                        result = MoneyBigDecimalUtil.add(result, history.getTotal());
                     } else {
                        totalDay = MoneyBigDecimalUtil.add(totalDay, history.getTotalDay());
                        totalValid = MoneyBigDecimalUtil.add(totalValid, history.getTotalValid());
                     }
                  }
               }
            }
            // 判断是否计算比例
            if ((dateType == 2 || dateType == 3) && totalDay.compareTo(BigDecimal.valueOf(0)) > 0){
               result = MoneyBigDecimalUtil.div(totalValid, totalDay);
               result = MoneyBigDecimalUtil.mul(result, BigDecimal.valueOf(100));
            }
         }
         list.add(result);
      }
      return list;
   }
   /**
    * 券相关图表数据
    * @param callback
    * @param dateType
    * @param year
    * @param startTime
    * @param endTime
    * @param out
    */
   @RequestMapping(value = "getCouponCharts")
   public void getCouponCharts(AdminAcceptData acceptData,String callback, Integer dateType, String year, String startTime, String endTime,
         String typeArray, PrintWriter out) {
      try {
         // 数据验证处理
         verifyQueryData(callback, dateType, year, startTime, endTime, out);
         Date beginDate = getBeginDate(dateType, year, startTime);
         Date endDate = getEndDate(dateType, year, endTime);
         Gson gson = new Gson();
         List<String> dateList = AdminUtils.getDateList(dateType, startTime, endTime, year);
         // 渠道
         List<String> typelList = null;
         if (typeArray != null && typeArray.trim().length() > 4) {
            typelList = gson.fromJson(typeArray, new TypeToken<ArrayList<String>>() {}.getType());
         }
         JSONArray line_list = new JSONArray();
         if (typelList != null && typelList.size() > 0) {
            for (String type: typelList) {
               List<DailyCountCoupon> listData = dailyCountCouponService.getDailyCountList(type, beginDate, endDate);
               // 处理数据
               List<Object> list = machineDailyCountCoupon(dateList, dateType, listData);
               JSONObject innerList = new JSONObject();
               innerList.put("name", dailyCountCouponService.getTypeEnumDesc(type));
               innerList.put("data", gson.toJson(list));
               line_list.add(innerList);
            }
         }
         JSONObject data = new JSONObject();
         data.put("line_list", line_list);
         data.put("xAxis_list", gson.toJson(dateList));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("系统异常"));
         e.printStackTrace();
      }
   }
   private List<Object> machineDailyCountCoupon(List<String> dateList, Integer dateType, List<DailyCountCoupon> listData) {
      List<Object> list = new ArrayList<>();
      for (String date: dateList) {
         BigDecimal result = new BigDecimal(0);
         if (listData != null) {
            for (DailyCountCoupon history: listData) {
               if (dateType == 1) {
                  String gernalTime = TimeUtil.getGernalTime(history.getDay().getTime());
                  if (gernalTime.equalsIgnoreCase(date)) {
                     result = MoneyBigDecimalUtil.add(result, history.getTotal());
                     continue;
                  }
               } else if (dateType == 2){
                  String gernalTime = TimeUtil.getMonthOnlyMM(history.getDay());
                  if(gernalTime.startsWith("0")) {
                     gernalTime = gernalTime.substring(1, 2);
                  }
                  if (gernalTime.equalsIgnoreCase(date)) {
                     result = MoneyBigDecimalUtil.add(result, history.getTotal());
                  }
               } else if (dateType == 3) {
                  String gernalTime = TimeUtil.getYearOnlyYYYY(history.getDay());
                  if (gernalTime.equalsIgnoreCase(date)) {
                     result = MoneyBigDecimalUtil.add(result, history.getTotal());
                  }
               }
            }
         }
         list.add(result);
      }
      return list;
   }
   @RequestMapping(value = "getMomentsCharts")
   public void getMomentsCharts(AdminAcceptData acceptData,String callback, Integer dateType, String year, String startTime, String endTime,
         String typeArray, PrintWriter out) {
      try {
         // 数据验证处理
         verifyQueryData(callback, dateType, year, startTime, endTime, out);
         Date beginDate = getBeginDate(dateType, year, startTime);
         Date endDate = getEndDate(dateType, year, endTime);
         Gson gson = new Gson();
         List<String> dateList = AdminUtils.getDateList(dateType, startTime, endTime, year);
         // 渠道
         List<String> typelList = null;
         if (typeArray != null && typeArray.trim().length() > 4) {
            typelList = gson.fromJson(typeArray, new TypeToken<ArrayList<String>>() {}.getType());
         }
         if (typelList == null || typelList.size() == 0) {
            JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("传递类型错误"));
            return;
         }
         JSONArray line_list = new JSONArray();
         for (String type: typelList) {
            List<DailyCountMoments> listData = dailyCountMomentsService.getDailyCountList(type, beginDate, endDate);
            // 处理数据
            List<Object> list = machineDailyCountMoments(dateList, dateType, listData);
            JSONObject innerList = new JSONObject();
            innerList.put("name", dailyCountMomentsService.getTypeEnumDesc(type));
            innerList.put("data", gson.toJson(list));
            line_list.add(innerList);
         }
         JSONObject data = new JSONObject();
         data.put("line_list", line_list);
         data.put("xAxis_list", gson.toJson(dateList));
         JsonUtil.printMode(out, callback, JsonUtil.loadTrueResult(data));
      } catch (Exception e) {
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("系统异常"));
         e.printStackTrace();
      }
   }
   private List<Object> machineDailyCountMoments(List<String> dateList, Integer dateType, List<DailyCountMoments> listData) {
      List<Object> list = new ArrayList<>();
      for (String date: dateList) {
         BigDecimal result = new BigDecimal(0);
         if (listData != null) {
            for (DailyCountMoments history: listData) {
               if (dateType == 1) {
                  String gernalTime = TimeUtil.getGernalTime(history.getDay().getTime());
                  if (gernalTime.equalsIgnoreCase(date)) {
                     result = MoneyBigDecimalUtil.add(result, history.getTotal());
                  }
               } else if (dateType == 2){
                  String gernalTime = TimeUtil.getMonthOnlyMM(history.getDay());
                  if(gernalTime.startsWith("0")) {
                     gernalTime = gernalTime.substring(1, 2);
                  }
                  if (gernalTime.equalsIgnoreCase(date)) {
                     result = MoneyBigDecimalUtil.add(result, history.getTotal());
                  }
               } else if (dateType == 3) {
                  String gernalTime = TimeUtil.getYearOnlyYYYY(history.getDay());
                  if (gernalTime.equalsIgnoreCase(date)) {
                     result = MoneyBigDecimalUtil.add(result, history.getTotal());
                  }
               }
            }
         }
         list.add(result);
      }
      return list;
   }
   private void verifyQueryData(String callback, Integer dateType, String year, String startTime,
         String endTime, PrintWriter out) throws Exception {
      String validateMsg = null;
      if (dateType == null) {
         validateMsg = "请选择视图类型";
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(validateMsg));
         return;
      }
      if (dateType == 1 && (StringUtil.isNullOrEmpty(startTime) || StringUtil.isNullOrEmpty(endTime))) {
         validateMsg  = "请选择时间区间";
         JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult(validateMsg));
         return;
      }
   }
   private Date getBeginDate(Integer dateType, String year, String startTime) throws Exception{
      Date beginDate = null;
      if (dateType == 1) {
         beginDate = TimeUtil.parse(startTime);
      } else if (dateType == 2) {
         Calendar calendar=Calendar.getInstance();
         int currentYear = calendar.get(Calendar.YEAR);
         if (!StringUtil.isNullOrEmpty(year)) {
            currentYear = Integer.parseInt(year);
         }
         calendar.clear();
          calendar.set(Calendar.YEAR, currentYear);
          beginDate =calendar.getTime();
      } else if (dateType == 3) {
         beginDate = TimeUtil.parse("2018-01-01");
      }
      return beginDate;
   }
   private Date getEndDate(Integer dateType, String year, String endTime) throws Exception{
      Date endDate = null;
      if (dateType == 1) {
         endDate = TimeUtil.parse(endTime);
      } else if (dateType == 2) {
         Calendar calendar=Calendar.getInstance();
         int currentYear = calendar.get(Calendar.YEAR);
         if (!StringUtil.isNullOrEmpty(year)) {
            currentYear = Integer.parseInt(year);
         }
         calendar.clear();
         calendar.set(Calendar.YEAR, currentYear);
         calendar.roll(Calendar.DAY_OF_YEAR, -1);
         endDate=calendar.getTime();
      } else if (dateType == 3) {
         endDate = new Date();
      }
      return endDate;
   }
}