OrderStatisticsHandler.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
  1. package com.iamberry.wechat.handles.statistics;
  2. import com.iamberry.wechat.core.entity.ResultMsg;
  3. import com.iamberry.wechat.core.entity.StatisticsSalesOrderUtil;
  4. import com.iamberry.wechat.core.entity.statictics.StatisticsSalesOrder;
  5. import com.iamberry.wechat.face.order.AdminOrderService;
  6. import com.iamberry.wechat.tools.ResultInfo;
  7. import org.apache.commons.lang.StringUtils;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.stereotype.Controller;
  10. import org.springframework.web.bind.annotation.RequestMapping;
  11. import org.springframework.web.bind.annotation.ResponseBody;
  12. import org.springframework.web.servlet.ModelAndView;
  13. import javax.servlet.http.HttpServletRequest;
  14. import java.text.SimpleDateFormat;
  15. import java.util.*;
  16. /**
  17. * Created by liuzhiwei on 2017/9/19.
  18. */
  19. @Controller
  20. @RequestMapping("/admin/orderStatistics")
  21. public class OrderStatisticsHandler {
  22. //存储一年之中所有月份
  23. private String[] months = {"01","02","03","04","05","06","07","08","09","10","11","12"};
  24. @Autowired
  25. private AdminOrderService adminOrderService;
  26. /**
  27. * 进入销售统计页面
  28. * @param request
  29. * @return
  30. * @throws Exception
  31. */
  32. @RequestMapping("/_sales_order_statistics")
  33. public ModelAndView salesOrderStatistics(HttpServletRequest request) throws Exception {
  34. ModelAndView mv = new ModelAndView("admin/statistics/salesStatistics");
  35. return mv;
  36. }
  37. /**
  38. * 查询本周,上周,今年的统计数量
  39. * @param request
  40. * @return
  41. * @throws Exception
  42. */
  43. @ResponseBody
  44. @RequestMapping("/select_order_statistics")
  45. public ResultMsg selectOrderStatistics(HttpServletRequest request) throws Exception {
  46. ResultMsg msg = new ResultMsg();
  47. Map<String,Object> map = new HashMap<String,Object>();
  48. //查询本周统计数据
  49. List<StatisticsSalesOrder> listWeekNum = adminOrderService.listWeekNum();
  50. String[] weekDate = getThisWeek();
  51. //封装本周销售数据
  52. listWeekNum = getWeekList(listWeekNum,weekDate);
  53. try {
  54. Collections.sort(listWeekNum, new StatisticsSalesOrderUtil());
  55. } catch (Exception e) {
  56. System.out.println("-------------集合排序失败------------");
  57. }
  58. //查询上周统计数据
  59. List<StatisticsSalesOrder> listLastWeekNum = adminOrderService.listLastWeekNum();
  60. String[] LastWeekDate = getLastWeek();
  61. //封装上周销售数据
  62. listLastWeekNum = getWeekList(listLastWeekNum,LastWeekDate);
  63. try {
  64. Collections.sort(listLastWeekNum, new StatisticsSalesOrderUtil());
  65. } catch (Exception e) {
  66. System.out.println("-------------集合排序失败------------");
  67. }
  68. //封装一年的销售数据
  69. List<StatisticsSalesOrder> listYearNum = getYearList();
  70. try {
  71. Collections.sort(listYearNum, new StatisticsSalesOrderUtil());
  72. } catch (Exception e) {
  73. System.out.println("-------------集合排序失败------------");
  74. }
  75. map.put("listWeekNum",listWeekNum);
  76. map.put("listLastWeekNum",listLastWeekNum);
  77. map.put("listYearNum",listYearNum);
  78. msg.setData(map);
  79. msg.setStatus(true);
  80. msg.setResultCode(ResultInfo.SUCCESSCODE);
  81. return msg;
  82. }
  83. /**
  84. * 按月查询统计数量
  85. * @param request
  86. * @return
  87. * @throws Exception
  88. */
  89. @ResponseBody
  90. @RequestMapping("/select_order_by_month")
  91. public ResultMsg selectOrderByMonth(HttpServletRequest request) throws Exception {
  92. ResultMsg msg = new ResultMsg();
  93. String month = request.getParameter("month");
  94. if (!StringUtils.isNotEmpty(month)) {
  95. msg.setStatus(false);
  96. msg.setResultCode(ResultInfo.ERRORCODE);
  97. return msg;
  98. }
  99. List<StatisticsSalesOrder> listMonthNum = getMonthList(month);
  100. try {
  101. Collections.sort(listMonthNum, new StatisticsSalesOrderUtil());
  102. } catch (Exception e) {
  103. System.out.println("-------------集合排序失败------------");
  104. }
  105. msg.setData(listMonthNum);
  106. msg.setStatus(true);
  107. msg.setResultCode(ResultInfo.SUCCESSCODE);
  108. return msg;
  109. }
  110. /**
  111. * 按月份封装销售数据
  112. * @param
  113. * @return
  114. */
  115. public List<StatisticsSalesOrder> getMonthList(String month) throws Exception {
  116. month = month + "-01";
  117. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  118. StatisticsSalesOrder salesOrder = new StatisticsSalesOrder();
  119. salesOrder.setSalesDate(format.parse(month));
  120. List<StatisticsSalesOrder> listMonthNum = adminOrderService.listMonthNum(salesOrder);
  121. List<StatisticsSalesOrder> listMonth = new ArrayList<StatisticsSalesOrder>();
  122. String[] days = getMonthDate(month);
  123. listMonth.addAll(listMonthNum);
  124. if (listMonthNum != null && listMonthNum.size() > 0) {
  125. for (int i = 0;i < days.length;i++) {
  126. boolean flag = true;
  127. for(StatisticsSalesOrder order : listMonthNum) {
  128. if (days[i].equals(format.format(order.getSalesDate()))) {
  129. flag = false;
  130. }
  131. }
  132. if (flag) {
  133. StatisticsSalesOrder salOrder = new StatisticsSalesOrder();
  134. salOrder.setSalesBlackNum(0);
  135. salOrder.setSalesBlueNum(0);
  136. salOrder.setSalesRedNum(0);
  137. salOrder.setSalesNum(0);
  138. salOrder.setSalesDate(format.parse(days[i]));
  139. listMonth.add(salOrder);
  140. }
  141. }
  142. } else {
  143. for (int i = 0;i < days.length;i++) {
  144. StatisticsSalesOrder salOrder = new StatisticsSalesOrder();
  145. salOrder.setSalesBlackNum(0);
  146. salOrder.setSalesBlueNum(0);
  147. salOrder.setSalesRedNum(0);
  148. salOrder.setSalesNum(0);
  149. salOrder.setSalesDate(format.parse(days[i]));
  150. listMonth.add(salOrder);
  151. }
  152. }
  153. return listMonth;
  154. }
  155. /**
  156. * 封装本周销售数据
  157. * @param
  158. * @return
  159. */
  160. public List<StatisticsSalesOrder> getWeekList(List<StatisticsSalesOrder> listWeekNum,
  161. String[] weekDate) throws Exception {
  162. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  163. List<StatisticsSalesOrder> listWeek = new ArrayList<StatisticsSalesOrder>();
  164. listWeek.addAll(listWeekNum);
  165. //添加中断的日期的统计数
  166. if (listWeekNum != null && listWeekNum.size() > 0) {
  167. for (int i = 0;i < weekDate.length;i++) {
  168. boolean flag = true;
  169. for (StatisticsSalesOrder order : listWeekNum) {
  170. if (weekDate[i].equals(format.format(order.getSalesDate()))) {
  171. flag = false;
  172. }
  173. }
  174. if (flag) {
  175. StatisticsSalesOrder salOrder = new StatisticsSalesOrder();
  176. salOrder.setSalesBlackNum(0);
  177. salOrder.setSalesBlueNum(0);
  178. salOrder.setSalesRedNum(0);
  179. salOrder.setSalesNum(0);
  180. salOrder.setSalesDate(format.parse(weekDate[i]));
  181. listWeek.add(salOrder);
  182. }
  183. }
  184. } else {
  185. for (int i = 0;i < weekDate.length;i++) {
  186. StatisticsSalesOrder salOrder = new StatisticsSalesOrder();
  187. salOrder.setSalesBlackNum(0);
  188. salOrder.setSalesBlueNum(0);
  189. salOrder.setSalesRedNum(0);
  190. salOrder.setSalesNum(0);
  191. salOrder.setSalesDate(format.parse(weekDate[i]));
  192. listWeek.add(salOrder);
  193. }
  194. }
  195. return listWeek;
  196. }
  197. /**
  198. * 封装一年的销售数据
  199. * @param
  200. * @return
  201. */
  202. public List<StatisticsSalesOrder> getYearList () throws Exception {
  203. StatisticsSalesOrder salesOrder = new StatisticsSalesOrder();
  204. Date date = new Date();
  205. salesOrder.setSalesDate(date);
  206. //查询今年统计数据
  207. List<StatisticsSalesOrder> listYearNum = adminOrderService.listYearNum(salesOrder);
  208. List<StatisticsSalesOrder> listYear = new ArrayList<StatisticsSalesOrder>();
  209. listYear.addAll(listYearNum);
  210. if (listYearNum != null && listYearNum.size() > 0) {
  211. for (int i = 0;i < months.length;i++) {
  212. boolean flag = true;
  213. for (StatisticsSalesOrder order : listYearNum) {
  214. if (months[i].equals(order.getSalesMonth())) {
  215. flag = false;
  216. }
  217. }
  218. if (flag) {
  219. StatisticsSalesOrder salOrder = new StatisticsSalesOrder();
  220. salOrder.setSalesBlackNum(0);
  221. salOrder.setSalesBlueNum(0);
  222. salOrder.setSalesRedNum(0);
  223. salOrder.setSalesNum(0);
  224. salOrder.setSalesMonth(months[i]);
  225. listYear.add(salOrder);
  226. }
  227. }
  228. } else {
  229. for (int i = 0;i < months.length;i++) {
  230. StatisticsSalesOrder salOrder = new StatisticsSalesOrder();
  231. salOrder.setSalesBlackNum(0);
  232. salOrder.setSalesBlueNum(0);
  233. salOrder.setSalesRedNum(0);
  234. salOrder.setSalesNum(0);
  235. salOrder.setSalesMonth(months[i]);
  236. listYear.add(salOrder);
  237. }
  238. }
  239. return listYear;
  240. }
  241. /**
  242. * 获取上周所有日期节点
  243. * @param
  244. * @return
  245. */
  246. public String[] getLastWeek() {
  247. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  248. Calendar cal = Calendar.getInstance();
  249. cal.add(Calendar.WEEK_OF_MONTH, -1);
  250. String[] days = new String[7];
  251. for (int i = 0; i < 7; i++) {
  252. cal.add(Calendar.DATE, -1 * cal.get(Calendar.DAY_OF_WEEK) + 2 + i);
  253. days[i] = format.format(cal.getTime());
  254. }
  255. return days;
  256. }
  257. /**
  258. * 获取本周所有日期节点
  259. * @param
  260. * @return
  261. */
  262. public String[] getThisWeek() {
  263. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  264. String[] days = new String[7];
  265. Calendar c = Calendar.getInstance();
  266. int weekday = c.get(7)-1;
  267. c.add(5,-weekday);
  268. for (int i = 0; i < 7; i++) {
  269. c.add(5,1);
  270. days[i] = format.format(c.getTime());
  271. }
  272. return days;
  273. }
  274. /**
  275. * 获取指定年月的所有日期点
  276. * @param date
  277. * @return
  278. */
  279. public String[] getMonthDate(String date) {
  280. Calendar calendar = Calendar.getInstance();
  281. calendar.set(Calendar.YEAR, Integer.parseInt(date.substring(0, 4)));
  282. calendar.set(Calendar.MONTH, Integer.parseInt(date.substring(5, 7)) -1);
  283. int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
  284. String[] days = new String[maxDay];
  285. for(int i = 1; i <= maxDay; i++){
  286. StringBuilder str = new StringBuilder();
  287. str.append(date.substring(0, 4));
  288. str.append("-");
  289. str.append(date.substring(5, 7));
  290. str.append("-");
  291. if (i < 10) {
  292. str.append("0");
  293. str.append(i);
  294. } else {
  295. str.append(i);
  296. }
  297. days[i-1] = str.toString();
  298. }
  299. return days;
  300. }
  301. }