package com.yeshi.fanli.controller.admin; import java.io.PrintWriter; import java.math.BigDecimal; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import javax.annotation.Resource; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.yeshi.utils.JsonUtil; 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 com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.TimeUtil; import net.sf.json.JSONArray; import net.sf.json.JSONObject; @Controller @RequestMapping("admin/new/api/v1/countCharts") public class CountChartsAdminController { @Resource private UserInfoCountService userInfoCountService; @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, 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 machineOrderResultNum(List dateList, Integer dateType, List listHistory) { List 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 machineOrderResultMoney(List dateList, Integer dateType, List listHistory) { List 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 machineResultNum(List dateList, Integer dateType, List listHistory) { List 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 dateList = AdminUtils.getDateList(dateType, startTime, endTime, year); // 渠道 List channelList = null; if (channelArray != null && channelArray.trim().length() > 4) { channelList = gson.fromJson(channelArray, new TypeToken>() {}.getType()); } JSONArray line_list = new JSONArray(); if (channelList != null && channelList.size() > 0) { for (String channel : channelList) { List 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 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 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 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 dateList = AdminUtils.getDateList(dateType, startTime, endTime, year); // 渠道 List channelList = null; if (channelArray != null && channelArray.trim().length() > 4) { channelList = gson.fromJson(channelArray, new TypeToken>() {}.getType()); } JSONArray line_list = new JSONArray(); if (channelList != null && channelList.size() > 0) { for (String channel : channelList) { List listData = null; if (countType == 1) { listData = userInfoCountService.count24HOderByChannel(channel, beginDate, endDate); } else if (countType == 2) { listData = userInfoCountService.countOderByChannel(channel, beginDate, endDate); } List 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 listData = null; if (countType == 1) { listData = userInfoCountService.count24HOderByChannel(null, beginDate, endDate); } else if (countType == 2) { listData = userInfoCountService.countOderByChannel(null, beginDate, endDate); } List 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 dateList = AdminUtils.getDateList(dateType, startTime, endTime, year); // 渠道 List channelList = null; if (channelArray != null && channelArray.trim().length() > 4) { channelList = gson.fromJson(channelArray, new TypeToken>() {}.getType()); } JSONArray line_list = new JSONArray(); if (channelList != null && channelList.size() > 0) { for (String channel : channelList) { List listData = userInfoCountService.countHongBaoByChannel(channel, beginDate, endDate); List 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 listData = userInfoCountService.countHongBaoByChannel(null, beginDate, endDate); List 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 dateList = AdminUtils.getDateList(dateType, startTime, endTime, year); JSONArray line_list = new JSONArray(); List list = null; String name = ""; if (countType == 1) { name = "维权数量"; List listData = userInfoCountService.countWeiQuanOrder(beginDate, endDate); list = machineOrderResultNum(dateList, dateType, listData); } else if (countType == 2) { name = "维权金额"; List 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 dateList = AdminUtils.getDateList(dateType, startTime, endTime, year); JSONArray line_list = new JSONArray(); List list = null; String name = ""; if (countType == 1) { name = "申诉数量"; List listData = userInfoCountService.counOrderLastNum(beginDate, endDate); list = machineOrderResultNum(dateList, dateType, listData); } else if (countType == 2) { name = "申诉佣金"; List 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 dateList = AdminUtils.getDateList(dateType, startTime, endTime, year); JSONArray line_list = new JSONArray(); List list = null; String name = ""; if (countType == 1) { name = "单数"; List listData = userInfoCountService.counOrderTotalNum(beginDate, endDate); list = machineOrderResultNum(dateList, dateType, listData); } else if (countType == 2) { name = "佣金"; List 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 dateList = AdminUtils.getDateList(dateType, startTime, endTime, year); JSONArray line_list = new JSONArray(); List listHistory = commonOrderCountService.getOrderTrackRate(countType, beginDate, endDate); List 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 dateList = AdminUtils.getDateList(dateType, startTime, endTime, year); // 渠道 List typelList = null; if (typeArray != null && typeArray.trim().length() > 4) { typelList = gson.fromJson(typeArray, new TypeToken>() {}.getType()); } JSONArray line_list = new JSONArray(); if (typelList != null && typelList.size() > 0) { for (String type: typelList) { List listData = dailyCountCouponService.getDailyCountList(type, beginDate, endDate); // 处理数据 List 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 machineDailyCountCoupon(List dateList, Integer dateType, List listData) { List 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 dateList = AdminUtils.getDateList(dateType, startTime, endTime, year); List typelList = null; if (typeArray != null && typeArray.trim().length() > 4) { typelList = gson.fromJson(typeArray, new TypeToken>() {}.getType()); } if (typelList == null || typelList.size() == 0) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("传递类型错误")); return; } // 渠道 List channelList = null; if (channelArray != null && channelArray.trim().length() > 4) { channelList = gson.fromJson(channelArray, new TypeToken>() {}.getType()); } JSONArray line_list = new JSONArray(); if (channelList != null && channelList.size() > 0) { String type = typelList.get(0); for (String channel: channelList) { List listData = dailyCountUserService.getDailyCountList(type, beginDate, endDate, channel); // 处理数据 List 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 listData = dailyCountUserService.getDailyCountList(type, beginDate, endDate, null); // 处理数据 List 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 machineDailyCountUser(List dateList, Integer dateType, List listData) { List 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 dateList = AdminUtils.getDateList(dateType, startTime, endTime, year); // 渠道 List typelList = null; if (typeArray != null && typeArray.trim().length() > 4) { typelList = gson.fromJson(typeArray, new TypeToken>() {}.getType()); } if (typelList == null || typelList.size() == 0) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("传递类型错误")); return; } // 渠道 List channelList = null; if (channelArray != null && channelArray.trim().length() > 4) { channelList = gson.fromJson(channelArray, new TypeToken>() {}.getType()); } JSONArray line_list = new JSONArray(); if (channelList != null && channelList.size() > 0) { String type = typelList.get(0); for (String channel: channelList) { List listData = dailyCountOrderService.getDailyCountList(type, beginDate, endDate, channel); // 处理数据 List 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 listData = dailyCountOrderService.getDailyCountList(type, beginDate, endDate, null); // 处理数据 List 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 machineDailyCountOrder(List dateList, Integer dateType, List listData) { List 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 dateList = AdminUtils.getDateList(dateType, startTime, endTime, year); // 渠道 List typelList = null; if (typeArray != null && typeArray.trim().length() > 4) { typelList = gson.fromJson(typeArray, new TypeToken>() {}.getType()); } if (typelList == null || typelList.size() == 0) { JsonUtil.printMode(out, callback, JsonUtil.loadFalseResult("传递类型错误")); return; } JSONArray line_list = new JSONArray(); for (String type: typelList) { List listData = dailyCountMomentsService.getDailyCountList(type, beginDate, endDate); // 处理数据 List 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 machineDailyCountMoments(List dateList, Integer dateType, List listData) { List 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; } }