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.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; 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 = "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 dateList = AdminUtils.getDateList(dateType, startTime, endTime, year); // 渠道 List typeList = null; if (typeArray != null && typeArray.trim().length() > 4) { typeList = gson.fromJson(typeArray, new TypeToken>() {}.getType()); } JSONArray line_list = new JSONArray(); if (typeList != null && typeList.size() > 0) { for (Integer type : typeList) { List listData = userInfoCountService.countOrderType(type, beginDate, endDate); List 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 listData = userInfoCountService.countOrderType(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(); } } }