yujian
2020-04-24 916f8851ccddff8ff764d950667b5fa86f77d7b2
fanli/src/main/java/com/yeshi/fanli/controller/admin/CountChartsAdminController.java
@@ -20,6 +20,14 @@
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;
@@ -39,6 +47,17 @@
   @Resource
   private CommonOrderCountService commonOrderCountService;
   
   @Resource
   private DailyCountCouponService dailyCountCouponService;
   @Resource
   private DailyCountUserService dailyCountUserService;
   @Resource
   private DailyCountOrderService dailyCountOrderService;
   @Resource
   private DailyCountMomentsService dailyCountMomentsService;
   
   
   private void verifyQueryData(String callback, Integer dateType, String year, String startTime, 
@@ -410,71 +429,6 @@
   }
   
   /**
    * 统计订单佣金
    * @param callback
    * @param channelArray
    * @param dateType
    * @param year
    * @param startTime
    * @param endTime
    * @param out
    */
   @RequestMapping(value = "getOrderTypeNum")
   public void getOrderTypeNum(String callback, String typeArray, 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<Integer> typeList = null;
         if (typeArray != null && typeArray.trim().length() > 4) {
            typeList = gson.fromJson(typeArray, new TypeToken<ArrayList<Integer>>() {}.getType());
         }
         JSONArray line_list = new JSONArray();
         if (typeList != null && typeList.size() > 0) {
            for (Integer type : typeList) {
               List<CountOrderInfo> listData = userInfoCountService.countOrderType(type, beginDate, endDate);
               List<Object> list = machineOrderResultMoney(dateList, dateType, listData);
               JSONObject innerList = new JSONObject();
               String name = "";
               if (type == 1) {
                  name = "自购订单";
               } else if (type == 2) {
                  name = "分享订单";
               } else if (type == 3) {
                  name = "邀请订单";
               }
               innerList.put("name", name);
               innerList.put("data", gson.toJson(list));
               line_list.add(innerList);
            }
         } else {
            List<CountOrderInfo> listData = userInfoCountService.countOrderType(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();
      }
   }
   
   /**
@@ -725,4 +679,440 @@
         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
    * @param startTime
    * @param endTime
    * @param type 查询类型
    * @param out
    */
   @RequestMapping(value = "getOrderCharts")
   public void getOrderCharts(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<DailyCountOrder> listData = dailyCountOrderService.getDailyCountList(type, beginDate, endDate, channel);
               // 处理数据
               List<Object> list = machineDailyCountOrder(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<DailyCountOrder> listData = dailyCountOrderService.getDailyCountList(type, beginDate, endDate, null);
               // 处理数据
               List<Object> list = machineDailyCountOrder(dateList, dateType, listData);
               JSONObject innerList = new JSONObject();
               innerList.put("name", dailyCountOrderService.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> machineDailyCountOrder(List<String> dateList, Integer dateType, List<DailyCountOrder> 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 (DailyCountOrder 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;
   }
   @RequestMapping(value = "getMomentsCharts")
   public void getMomentsCharts(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;
   }
}