|
@@ -1,16 +1,27 @@
|
|
package com.kmall.admin.controller.statistics;
|
|
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.entity.WechatFollowersEntity;
|
|
import com.kmall.admin.fromcomm.entity.SysUserEntity;
|
|
import com.kmall.admin.fromcomm.entity.SysUserEntity;
|
|
import com.kmall.admin.service.statistics.MonthlyCustomersService;
|
|
import com.kmall.admin.service.statistics.MonthlyCustomersService;
|
|
|
|
+import com.kmall.admin.utils.ParamUtils;
|
|
import com.kmall.admin.utils.ShiroUtils;
|
|
import com.kmall.admin.utils.ShiroUtils;
|
|
import com.kmall.common.utils.R;
|
|
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.apache.shiro.SecurityUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
import org.springframework.web.bind.annotation.RequestParam;
|
|
import org.springframework.web.bind.annotation.RequestParam;
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
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.ParseException;
|
|
import java.text.SimpleDateFormat;
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
@@ -27,6 +38,14 @@ public class MonthlyCustomersController {
|
|
@Autowired
|
|
@Autowired
|
|
private MonthlyCustomersService monthlyCustomersService;
|
|
private MonthlyCustomersService monthlyCustomersService;
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
+ private ExcelUtil excelUtil;
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private MonthlyCustomersDao monthlyCustomersDao;
|
|
|
|
+ @Autowired
|
|
|
|
+ private WechatFollowersDao wechatFollowersDao;
|
|
|
|
+
|
|
|
|
|
|
private void calculateDifferentMonth(List<String> monthList, String startMonth, String endMonth) throws ParseException {
|
|
private void calculateDifferentMonth(List<String> monthList, String startMonth, String endMonth) throws ParseException {
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
|
|
@@ -45,7 +64,6 @@ public class MonthlyCustomersController {
|
|
|
|
|
|
@RequestMapping("/customersQuery")
|
|
@RequestMapping("/customersQuery")
|
|
public R queryMonthlyCustomers(@RequestParam("startMonth") String startMonth, @RequestParam("endMonth") String endMonth) {
|
|
public R queryMonthlyCustomers(@RequestParam("startMonth") String startMonth, @RequestParam("endMonth") String endMonth) {
|
|
-
|
|
|
|
List<String> dateList = new ArrayList<>();
|
|
List<String> dateList = new ArrayList<>();
|
|
Map<String, Object> returnMap = new HashMap<>();
|
|
Map<String, Object> returnMap = new HashMap<>();
|
|
try {
|
|
try {
|
|
@@ -53,15 +71,12 @@ public class MonthlyCustomersController {
|
|
} catch (ParseException e) {
|
|
} catch (ParseException e) {
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
-
|
|
|
|
try {
|
|
try {
|
|
String merchSn = null;
|
|
String merchSn = null;
|
|
SysUserEntity sysUser = (SysUserEntity) SecurityUtils.getSubject().getPrincipal();
|
|
SysUserEntity sysUser = (SysUserEntity) SecurityUtils.getSubject().getPrincipal();
|
|
if(!"1".equals(sysUser.getRoleType())){
|
|
if(!"1".equals(sysUser.getRoleType())){
|
|
merchSn = sysUser.getMerchSn();
|
|
merchSn = sysUser.getMerchSn();
|
|
}
|
|
}
|
|
-
|
|
|
|
-
|
|
|
|
Map<String,Object> map = monthlyCustomersService.queryMonthlyCustomers(startMonth,endMonth,merchSn);
|
|
Map<String,Object> map = monthlyCustomersService.queryMonthlyCustomers(startMonth,endMonth,merchSn);
|
|
|
|
|
|
returnMap.put("dateList", dateList);
|
|
returnMap.put("dateList", dateList);
|
|
@@ -70,9 +85,96 @@ public class MonthlyCustomersController {
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
return R.error(e.getMessage());
|
|
return R.error(e.getMessage());
|
|
}
|
|
}
|
|
|
|
+ return R.ok(returnMap);
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 每月销售额销售量导出
|
|
|
|
+ * @param params
|
|
|
|
+ * @param response
|
|
|
|
+ * @param request
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @RequestMapping("/monthlySalesGrowthExport")
|
|
|
|
+ public R monthlySalesGrowthExport(@RequestParam Map<String, Object> 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<MonthlySalesGrowthEntity> monthlySalesGrowthEntities = monthlyCustomersDao.queryMonthlyCustomers((String) params.get("startMonth"), (String) params.get("endMonth"), merchSn);
|
|
|
|
+ ExcelExport ee = new ExcelExport("Monthly Sales Growth");
|
|
|
|
+ String[] header = new String[]{"序号","商户编号","商户名称","销售额","销售数量","年-月"};
|
|
|
|
+ List<Map<String, Object>> list = new ArrayList<>();
|
|
|
|
+ int count = 1;
|
|
|
|
+ if (monthlySalesGrowthEntities!=null && monthlySalesGrowthEntities.size()>0) {
|
|
|
|
+ for (MonthlySalesGrowthEntity monthlySalesGrowthEntity : monthlySalesGrowthEntities) {
|
|
|
|
+ LinkedHashMap<String, Object> 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();
|
|
|
|
+ }
|
|
|
|
|
|
- return R.ok(returnMap);
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 导出销售额销售数客单数客单价
|
|
|
|
+ * @param params
|
|
|
|
+ * @param response
|
|
|
|
+ * @param request
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @RequestMapping("/monthlySalesGrowthExport2")
|
|
|
|
+ public R monthlySalesGrowthExport2(@RequestParam Map<String, Object> 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<MonthlySalesGrowthEntity> 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<Map<String, Object>> list = new ArrayList<>();
|
|
|
|
+ int count = 1;
|
|
|
|
+ if (monthlySalesGrowthEntities!=null && monthlySalesGrowthEntities.size()>0) {
|
|
|
|
+ for (MonthlySalesGrowthEntity monthlySalesGrowthEntity : monthlySalesGrowthEntities) {
|
|
|
|
+ LinkedHashMap<String, Object> 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();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -94,7 +196,13 @@ public class MonthlyCustomersController {
|
|
return R.ok(map);
|
|
return R.ok(map);
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 每周销售额销售量图表查询
|
|
|
|
+ * @param startWeek
|
|
|
|
+ * @param endWeek
|
|
|
|
+ * @return
|
|
|
|
+ * @throws ParseException
|
|
|
|
+ */
|
|
@RequestMapping("/customersQueryByWeek")
|
|
@RequestMapping("/customersQueryByWeek")
|
|
public R queryWeeklyCustomers(@RequestParam("startWeek") String startWeek, @RequestParam("endWeek") String endWeek) throws ParseException {
|
|
public R queryWeeklyCustomers(@RequestParam("startWeek") String startWeek, @RequestParam("endWeek") String endWeek) throws ParseException {
|
|
|
|
|
|
@@ -141,8 +249,66 @@ public class MonthlyCustomersController {
|
|
return R.ok(returnMap);
|
|
return R.ok(returnMap);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @RequestMapping("/weeklySalesSummaryExport")
|
|
|
|
+ public R weeklySalesSummaryExport(@RequestParam Map<String, Object> 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<MonthlySalesGrowthEntity> monthlySalesGrowthEntities = monthlyCustomersDao.queryWeeklyCustomers(startWeek, endWeek, merchSn);
|
|
|
|
+ ExcelExport ee = new ExcelExport("Weekly Sales Summary");
|
|
|
|
+ String[] header = new String[]{"序号","商户编号","商户名称","销售额","销售数量","年-周"};
|
|
|
|
+ List<Map<String, Object>> list = new ArrayList<>();
|
|
|
|
+ int count = 1;
|
|
|
|
+ if (monthlySalesGrowthEntities!=null && monthlySalesGrowthEntities.size()>0) {
|
|
|
|
+ for (MonthlySalesGrowthEntity monthlySalesGrowthEntity : monthlySalesGrowthEntities) {
|
|
|
|
+ LinkedHashMap<String, Object> 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();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
|
|
- // todo
|
|
|
|
private void calculateDifferentWeek(List<String> weekList, String startWeek, String endWeek) throws ParseException {
|
|
private void calculateDifferentWeek(List<String> weekList, String startWeek, String endWeek) throws ParseException {
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
SimpleDateFormat weekSdf = new SimpleDateFormat("yyyy");
|
|
SimpleDateFormat weekSdf = new SimpleDateFormat("yyyy");
|
|
@@ -166,7 +332,12 @@ public class MonthlyCustomersController {
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 每月微信好友图表查询
|
|
|
|
+ * @param startMonth
|
|
|
|
+ * @param endMonth
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
@RequestMapping("/queryMonthlyWechatFollowers")
|
|
@RequestMapping("/queryMonthlyWechatFollowers")
|
|
public R queryMonthlyWechatFollowers(@RequestParam("startMonth") String startMonth, @RequestParam("endMonth") String endMonth) {
|
|
public R queryMonthlyWechatFollowers(@RequestParam("startMonth") String startMonth, @RequestParam("endMonth") String endMonth) {
|
|
List<String> dateList = new ArrayList<>();
|
|
List<String> dateList = new ArrayList<>();
|
|
@@ -199,7 +370,11 @@ public class MonthlyCustomersController {
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 添加微信好友数据
|
|
|
|
+ * @param wechatFollowers
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
@RequestMapping("/addWechatFollowers")
|
|
@RequestMapping("/addWechatFollowers")
|
|
public R addWechatFollowers( @RequestParam("wechatFollowers") Integer wechatFollowers) {
|
|
public R addWechatFollowers( @RequestParam("wechatFollowers") Integer wechatFollowers) {
|
|
|
|
|