package com.kmall.admin.controller.statistics; import com.kmall.admin.dao.statistics.MonthlyCustomersDao; import com.kmall.admin.dao.statistics.WechatFollowersDao; import com.kmall.admin.entity.MonthlySalesGrowthEntity; import com.kmall.admin.entity.ProductStoreRelaEntity; import com.kmall.admin.entity.WechatFollowersEntity; import com.kmall.admin.fromcomm.entity.SysUserEntity; import com.kmall.admin.service.statistics.MonthlyCustomersService; import com.kmall.admin.utils.ParamUtils; import com.kmall.admin.utils.ShiroUtils; import com.kmall.common.utils.R; import com.kmall.common.utils.excel.ExcelExport; import com.kmall.common.utils.excel.ExcelUtil; import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; /** * @author zhangchuangbiao * @version 1.0 * 2020-09-01 14:35 */ @RestController @RequestMapping("/monthly") public class MonthlyCustomersController { @Autowired private MonthlyCustomersService monthlyCustomersService; @Autowired private ExcelUtil excelUtil; @Autowired private MonthlyCustomersDao monthlyCustomersDao; @Autowired private WechatFollowersDao wechatFollowersDao; private void calculateDifferentMonth(List monthList, String startMonth, String endMonth) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); Calendar bef = Calendar.getInstance(); Calendar aft = Calendar.getInstance(); bef.setTime(sdf.parse(startMonth)); aft.setTime(sdf.parse(endMonth)); do { monthList.add(sdf.format(bef.getTime())); bef.add(Calendar.MONTH, 1); } while (bef.compareTo(aft) <= 0); } @RequestMapping("/customersQuery") public R queryMonthlyCustomers(@RequestParam("startMonth") String startMonth, @RequestParam("endMonth") String endMonth) { List dateList = new ArrayList<>(); Map returnMap = new HashMap<>(); try { calculateDifferentMonth(dateList, startMonth, endMonth); } catch (ParseException e) { e.printStackTrace(); } try { String merchSn = null; SysUserEntity sysUser = (SysUserEntity) SecurityUtils.getSubject().getPrincipal(); if(!"1".equals(sysUser.getRoleType())){ merchSn = sysUser.getMerchSn(); } Map map = monthlyCustomersService.queryMonthlyCustomers(startMonth,endMonth,merchSn); returnMap.put("dateList", dateList); returnMap.putAll(map); } catch (Exception e) { e.printStackTrace(); return R.error(e.getMessage()); } return R.ok(returnMap); } /** * 每月销售额销售量导出 * @param params * @param response * @param request * @return */ @RequestMapping("/monthlySalesGrowthExport") public R monthlySalesGrowthExport(@RequestParam Map params, HttpServletResponse response, HttpServletRequest request) { ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode"); if (Objects.isNull(params.get("startMonth")) || "".equals(params.get("startMonth"))){ return R.error("请先选择开始时间"); } if (Objects.isNull(params.get("endMonth")) || "".equals(params.get("endMonth"))){ return R.error("请先选择结束时间"); } String merchSn = null; SysUserEntity sysUser = (SysUserEntity) SecurityUtils.getSubject().getPrincipal(); if(!"1".equals(sysUser.getRoleType())){ merchSn = sysUser.getMerchSn(); } List monthlySalesGrowthEntities = monthlyCustomersDao.queryMonthlyCustomers((String) params.get("startMonth"), (String) params.get("endMonth"), merchSn); ExcelExport ee = new ExcelExport("Monthly Sales Growth"); String[] header = new String[]{"序号","商户编号","商户名称","销售额","销售数量","年-月"}; List> list = new ArrayList<>(); int count = 1; if (monthlySalesGrowthEntities!=null && monthlySalesGrowthEntities.size()>0) { for (MonthlySalesGrowthEntity monthlySalesGrowthEntity : monthlySalesGrowthEntities) { LinkedHashMap map = new LinkedHashMap<>(); map.put("OrderNumber",count++); map.put("MerchSn",monthlySalesGrowthEntity.getMerchSn()); map.put("MerchName",monthlySalesGrowthEntity.getMerchName()); map.put("TotalSales",monthlySalesGrowthEntity.getTotalSales()); map.put("TotalNumber",monthlySalesGrowthEntity.getTotalNumber()); map.put("YearAndMonth",monthlySalesGrowthEntity.getYearAndMonth()); list.add(map); } } ee.addSheetByMap("Monthly Sales Growth", list, header); ee.export(response); return R.ok(); } /** * 导出销售额销售数客单数客单价 * @param params * @param response * @param request * @return */ @RequestMapping("/monthlySalesGrowthExport2") public R monthlySalesGrowthExport2(@RequestParam Map params, HttpServletResponse response, HttpServletRequest request) { ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode"); if (Objects.isNull(params.get("startMonth")) || "".equals(params.get("startMonth"))){ return R.error("请先选择开始时间"); } if (Objects.isNull(params.get("endMonth")) || "".equals(params.get("endMonth"))){ return R.error("请先选择结束时间"); } String merchSn = null; SysUserEntity sysUser = (SysUserEntity) SecurityUtils.getSubject().getPrincipal(); if(!"1".equals(sysUser.getRoleType())){ merchSn = sysUser.getMerchSn(); } List monthlySalesGrowthEntities = monthlyCustomersDao.queryMonthlyCustomers((String) params.get("startMonth"), (String) params.get("endMonth"), merchSn); ExcelExport ee = new ExcelExport("Monthly Customers&Avg Basket"); String[] header = new String[]{"序号","商户编号","商户名称","销售额","销售数量","客户数","客单价","年-月"}; List> list = new ArrayList<>(); int count = 1; if (monthlySalesGrowthEntities!=null && monthlySalesGrowthEntities.size()>0) { for (MonthlySalesGrowthEntity monthlySalesGrowthEntity : monthlySalesGrowthEntities) { LinkedHashMap map = new LinkedHashMap<>(); map.put("OrderNumber",count++); map.put("MerchSn",monthlySalesGrowthEntity.getMerchSn()); map.put("MerchName",monthlySalesGrowthEntity.getMerchName()); map.put("TotalSales",monthlySalesGrowthEntity.getTotalSales()); map.put("TotalNumber",monthlySalesGrowthEntity.getTotalNumber()); map.put("TotalCustomers",monthlySalesGrowthEntity.getTotalCustomers()); String avgBasketSale = new BigDecimal(monthlySalesGrowthEntity.getTotalSales()).divide(new BigDecimal(monthlySalesGrowthEntity.getTotalNumber()),3, RoundingMode.HALF_UP).toString(); map.put("avgBasketSale",avgBasketSale); map.put("YearAndMonth",monthlySalesGrowthEntity.getYearAndMonth()); list.add(map); } } ee.addSheetByMap("Monthly Customers&Avg Basket", list, header); ee.export(response); return R.ok(); } @RequestMapping("/top10ForProduct") public R top10ForProduct(@RequestParam("month") String month, @RequestParam("week") String week){ Map map = monthlyCustomersService.top10ForProduct(month,week); return R.ok(map); } @RequestMapping("/top10ByBrandAndSupplier") public R top10ByBrandAndSupplier(@RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate){ Map map = monthlyCustomersService.top10ByBrandAndSupplier(startDate,endDate); return R.ok(map); } /** * 每周销售额销售量图表查询 * @param startWeek * @param endWeek * @return * @throws ParseException */ @RequestMapping("/customersQueryByWeek") public R queryWeeklyCustomers(@RequestParam("startWeek") String startWeek, @RequestParam("endWeek") String endWeek) throws ParseException { List dateList = new ArrayList<>(); try { calculateDifferentWeek(dateList, startWeek, endWeek); } catch (ParseException e) { e.printStackTrace(); } String merchSn = null; SysUserEntity sysUser = (SysUserEntity) SecurityUtils.getSubject().getPrincipal(); if(!"1".equals(sysUser.getRoleType())){ merchSn = sysUser.getMerchSn(); } SimpleDateFormat weekSdf = new SimpleDateFormat("yyyy"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar bef = Calendar.getInstance(); Calendar aft = Calendar.getInstance(); bef.setFirstDayOfWeek(Calendar.MONDAY); aft.setFirstDayOfWeek(Calendar.MONDAY); bef.setTime(sdf.parse(startWeek)); aft.setTime(sdf.parse(endWeek)); int befWeek = bef.get(Calendar.WEEK_OF_YEAR); int aftWeek = aft.get(Calendar.WEEK_OF_YEAR); if(befWeek<10){ startWeek =weekSdf.format(bef.getTime())+"-0"+befWeek; }else{ startWeek =weekSdf.format(bef.getTime())+"-"+befWeek; } if(aftWeek<10){ endWeek =weekSdf.format(aft.getTime())+"-0"+aftWeek; }else{ endWeek =weekSdf.format(aft.getTime())+"-"+aftWeek; } Map map = monthlyCustomersService.queryWeeklyCustomers(startWeek,endWeek,merchSn); Map returnMap = new HashMap<>(); returnMap.put("dateList", dateList); returnMap.putAll(map); return R.ok(returnMap); } @RequestMapping("/weeklySalesSummaryExport") public R weeklySalesSummaryExport(@RequestParam Map params, HttpServletResponse response, HttpServletRequest request) throws ParseException { ParamUtils.setQueryPowerByRoleType(params, "storeId", "merchSn", "thirdPartyMerchCode"); if (Objects.isNull(params.get("startWeek"))){ return R.error("请先选择开始时间"); } if (Objects.isNull(params.get("endWeek"))){ return R.error("请先选择结束时间"); } String startWeek = (String) params.get("startWeek"); String endWeek = (String) params.get("endWeek"); String merchSn = null; SysUserEntity sysUser = (SysUserEntity) SecurityUtils.getSubject().getPrincipal(); if(!"1".equals(sysUser.getRoleType())){ merchSn = sysUser.getMerchSn(); } SimpleDateFormat weekSdf = new SimpleDateFormat("yyyy"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar bef = Calendar.getInstance(); Calendar aft = Calendar.getInstance(); bef.setFirstDayOfWeek(Calendar.MONDAY); aft.setFirstDayOfWeek(Calendar.MONDAY); bef.setTime(sdf.parse(startWeek)); aft.setTime(sdf.parse(endWeek)); int befWeek = bef.get(Calendar.WEEK_OF_YEAR); int aftWeek = aft.get(Calendar.WEEK_OF_YEAR); if(befWeek<10){ startWeek =weekSdf.format(bef.getTime())+"-0"+befWeek; }else{ startWeek =weekSdf.format(bef.getTime())+"-"+befWeek; } if(aftWeek<10){ endWeek =weekSdf.format(aft.getTime())+"-0"+aftWeek; }else{ endWeek =weekSdf.format(aft.getTime())+"-"+aftWeek; } List monthlySalesGrowthEntities = monthlyCustomersDao.queryWeeklyCustomers(startWeek, endWeek, merchSn); ExcelExport ee = new ExcelExport("Weekly Sales Summary"); String[] header = new String[]{"序号","商户编号","商户名称","销售额","销售数量","年-周"}; List> list = new ArrayList<>(); int count = 1; if (monthlySalesGrowthEntities!=null && monthlySalesGrowthEntities.size()>0) { for (MonthlySalesGrowthEntity monthlySalesGrowthEntity : monthlySalesGrowthEntities) { LinkedHashMap map = new LinkedHashMap<>(); map.put("OrderNumber",count++); map.put("MerchSn",monthlySalesGrowthEntity.getMerchSn()); map.put("MerchName",monthlySalesGrowthEntity.getMerchName()); map.put("TotalSales",monthlySalesGrowthEntity.getTotalSales()); map.put("TotalNumber",monthlySalesGrowthEntity.getTotalNumber()); map.put("YearAndWeek",monthlySalesGrowthEntity.getYearAndWeek()); list.add(map); } } ee.addSheetByMap("Weekly Sales Summary", list, header); ee.export(response); return R.ok(); } private void calculateDifferentWeek(List weekList, String startWeek, String endWeek) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat weekSdf = new SimpleDateFormat("yyyy"); Calendar bef = Calendar.getInstance(); Calendar aft = Calendar.getInstance(); bef.setFirstDayOfWeek(Calendar.MONDAY); aft.setFirstDayOfWeek(Calendar.MONDAY); bef.setTime(sdf.parse(startWeek)); aft.setTime(sdf.parse(endWeek)); do { int i = bef.get(Calendar.WEEK_OF_YEAR); if (i<10){ weekList.add(weekSdf.format(bef.getTime())+"-0"+i); }else{ weekList.add(weekSdf.format(bef.getTime())+"-"+i); } bef.set(Calendar.DAY_OF_MONTH,bef.get(Calendar.DAY_OF_MONTH)+7); //给当前时间增加一周 } while (bef.compareTo(aft) <= 0); } /** * 每月微信好友图表查询 * @param startMonth * @param endMonth * @return */ @RequestMapping("/queryMonthlyWechatFollowers") public R queryMonthlyWechatFollowers(@RequestParam("startMonth") String startMonth, @RequestParam("endMonth") String endMonth) { List dateList = new ArrayList<>(); Map returnMap = new HashMap<>(); try { calculateDifferentMonth(dateList, startMonth, endMonth); } catch (ParseException e) { e.printStackTrace(); } try { String merchSn = null; SysUserEntity sysUser = (SysUserEntity) SecurityUtils.getSubject().getPrincipal(); if(!"1".equals(sysUser.getRoleType())){ merchSn = sysUser.getMerchSn(); } Map map = monthlyCustomersService.queryMonthlyWechatFollowers(startMonth,endMonth,merchSn); returnMap.put("dateList", dateList); returnMap.putAll(map); } catch (Exception e) { e.printStackTrace(); return R.error(e.getMessage()); } return R.ok(returnMap); } /** * 添加微信好友数据 * @param wechatFollowers * @return */ @RequestMapping("/addWechatFollowers") public R addWechatFollowers( @RequestParam("wechatFollowers") Integer wechatFollowers) { try { String merchSn = null; SysUserEntity sysUser = (SysUserEntity) SecurityUtils.getSubject().getPrincipal(); if(!"1".equals(sysUser.getRoleType())){ merchSn = sysUser.getMerchSn(); } WechatFollowersEntity wechatFollowersEntity = new WechatFollowersEntity(); wechatFollowersEntity.setCreaterSn(ShiroUtils.getUserId().toString()); wechatFollowersEntity.setCreateTime(new Date()); wechatFollowersEntity.setWechatFollowers(wechatFollowers); wechatFollowersEntity.setMerchSn(merchSn); monthlyCustomersService.addWechatFollowers(wechatFollowersEntity); } catch (Exception e) { e.printStackTrace(); return R.error(e.getMessage()); } return R.ok("添加成功"); } }