package com.stylefeng.guns.modular.system.controller.general; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.plugins.Page; import com.stylefeng.guns.core.base.controller.BaseController; import com.stylefeng.guns.core.common.constant.factory.PageFactory; import com.stylefeng.guns.core.util.DateUtil; import com.stylefeng.guns.core.util.ExcelExportUtil; import com.stylefeng.guns.core.util.SinataUtil; import com.stylefeng.guns.core.util.ToolUtil; import com.stylefeng.guns.modular.system.model.Income; import com.stylefeng.guns.modular.system.model.TCompany; import com.stylefeng.guns.modular.system.model.TOrderPrivateCar; import com.stylefeng.guns.modular.system.service.*; import com.stylefeng.guns.modular.system.util.ResultUtil; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.net.URLEncoder; import java.util.*; import java.util.stream.Collectors; /** * 报表控制器 */ @Controller @RequestMapping("/report") public class ReportController extends BaseController { private String PREFIX = "/system/report/"; @Autowired private ITCompanyService companyService; @Autowired private IUserCouponRecordService userCouponRecordService; @Autowired private IUserRedPacketRecordService redPacketRecordService; @Autowired private IUserActivityDiscount1Service userActivityDiscount1Service; @Autowired private ITDriverService driverService; @Autowired private IIncomeService incomeService; @Autowired private ITOrderPrivateCarService orderPrivateCarService; /** * 跳转到日常运营数据汇总页 * @return */ @RequestMapping("/showOperationalData") public String showOperationalData(Model model){ List tCompanies = companyService.selectList(new EntityWrapper().eq("state", 0).ne("flag", 3)); model.addAttribute("company", tCompanies); return PREFIX + "operationalData.html"; } /** * 跳转到优惠券统计页 * @param model * @return */ @RequestMapping("/showCouponStatistics") public String showCouponStatistics(Model model){ List tCompanies = companyService.selectList(new EntityWrapper().eq("state", 0).ne("flag", 3)); model.addAttribute("company", tCompanies); return PREFIX + "couponStatistics.html"; } /** * 跳转到优惠券统计详情页 * @param type * @param model * @return */ @RequestMapping("/showCouponStatisticsInfo") public String showCouponStatisticsInfo(Integer type, Model model){ List tCompanies = companyService.selectList(new EntityWrapper().eq("state", 0).ne("flag", 3)); model.addAttribute("company", tCompanies); model.addAttribute("type", type); return PREFIX + "couponStatisticsInfo.html"; } /** * 获取日常运营数据 * @param type * @param time * @param companyId * @param offset * @param limit * @return */ @ResponseBody @RequestMapping(value = "/queryOperationalData", method = RequestMethod.POST) public Object queryOperationalData(Integer type, String time, Integer companyId, Integer offset, Integer limit){ try { String start = null; String end = null; if(ToolUtil.isNotEmpty(time)){ start = time.split(" - ")[0]; end = time.split(" - ")[1]; } return companyService.queryOperationalData(type, start, end, companyId, offset, limit); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 下载日常运营数据汇总表 * @param type * @param time * @param companyId * @param response */ @ResponseBody @RequestMapping(value = "/downloadOperationalData", method = RequestMethod.GET) public void downloadOperationalData(Integer type, String time, Integer companyId, HttpServletResponse response){ try { String start = null; String end = null; if(ToolUtil.isNotEmpty(time)){ start = time.split(" - ")[0]; end = time.split(" - ")[1]; } HSSFWorkbook hssfWorkbook = companyService.downloadOperationalData(type, start, end, companyId); response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("日常运营数据汇总表.xls", "utf-8")); response.setContentType("application/vnd.ms-excel"); ServletOutputStream out = response.getOutputStream(); hssfWorkbook.write(out); out.flush(); out.close(); }catch (Exception e){ e.printStackTrace(); } } /** * 获取优惠券统计 * @param type * @param name * @param time * @param companyId * @param offset * @param limit * @return */ @ResponseBody @RequestMapping(value = "/queryCouponRegister", method = RequestMethod.POST) public Object queryCouponRegister(Integer type, String name, String time, Integer companyId, Integer offset, Integer limit){ try { return userCouponRecordService.queryCouponRegister(type, name, time, companyId, offset, limit); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 下载优惠券领取数据 * @param type * @param name * @param time * @param companyId * @param response */ @ResponseBody @RequestMapping(value = "/downloadCouponRegister", method = RequestMethod.GET) public void downloadCouponRegister(Integer type, String name, String time, Integer companyId, HttpServletResponse response){ try { String na = ""; if(type == 2){ na = "注册优惠券奖励"; } if(type == 3){ na = "邀请优惠券奖励"; } if(type == 4){ na = "充值优惠券奖励"; } HSSFWorkbook hssfWorkbook = userCouponRecordService.downloadCouponRegister(type, name, time, companyId); response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(na + ".xls", "utf-8")); response.setContentType("application/vnd.ms-excel"); ServletOutputStream out = response.getOutputStream(); hssfWorkbook.write(out); out.flush(); out.close(); }catch (Exception e){ e.printStackTrace(); } } /** * 获取红包统计数据 * @param name * @param time * @param companyId * @param offset * @param limit * @return */ @ResponseBody @RequestMapping(value = "/queryRedEnvelopes", method = RequestMethod.POST) public Object queryRedEnvelopes(String name, String time, Integer companyId, Integer offset, Integer limit){ try { return redPacketRecordService.queryRedEnvelopes(name, time, companyId, offset, limit); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 下载红包奖励 * @param name * @param time * @param companyId * @param response */ @ResponseBody @RequestMapping(value = "/downloadRedEnvelopes", method = RequestMethod.GET) public void downloadRedEnvelopes(String name, String time, Integer companyId, HttpServletResponse response){ try { HSSFWorkbook hssfWorkbook = redPacketRecordService.downloadRedEnvelopes(name, time, companyId); response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("红包奖励.xls", "utf-8")); response.setContentType("application/vnd.ms-excel"); ServletOutputStream out = response.getOutputStream(); hssfWorkbook.write(out); out.flush(); out.close(); }catch (Exception e){ e.printStackTrace(); } } /** * 获取折扣统计 * @param name * @param time * @param companyId * @param offset * @param limit * @return */ @ResponseBody @RequestMapping(value = "/queryDiscount1", method = RequestMethod.POST) public Object queryDiscount1(String name, String time, Integer companyId, Integer offset, Integer limit){ try { return userActivityDiscount1Service.queryDiscount1(name, time, companyId, offset, limit); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 下载折扣优惠活动 * @param name * @param time * @param companyId * @param response */ @ResponseBody @RequestMapping(value = "/downloadDiscount1", method = RequestMethod.GET) public void downloadDiscount1(String name, String time, Integer companyId, HttpServletResponse response){ try { HSSFWorkbook hssfWorkbook = userActivityDiscount1Service.downloadDiscount1(name, time, companyId); response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("折扣优惠活动.xls", "utf-8")); response.setContentType("application/vnd.ms-excel"); ServletOutputStream out = response.getOutputStream(); hssfWorkbook.write(out); out.flush(); out.close(); }catch (Exception e){ e.printStackTrace(); } } /** * 获取优惠券统计明细 * @param type * @param name * @param time * @param companyId * @param offset * @param limit * @return */ @ResponseBody @RequestMapping(value = "/queryCouponRegisterInfo", method = RequestMethod.POST) public Object queryCouponRegisterInfo(Integer type, String name, String time, Integer companyId, Integer offset, Integer limit){ try { type += 1; return userCouponRecordService.queryCouponRegisterInfo(type, name, time, companyId, offset, limit); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 获取充值赠送优惠券明细 * @param name * @param time * @param companyId * @param offset * @param limit * @return */ @ResponseBody @RequestMapping(value = "/queryCouponRegisterInfo1", method = RequestMethod.POST) public Object queryCouponRegisterInfo1(String name, String time, Integer companyId, Integer offset, Integer limit){ try { return userCouponRecordService.queryCouponRegisterInfo1( name, time, companyId, offset, limit); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 获取折扣优惠详情 * @param time * @param companyId * @param offset * @param limit * @return */ @ResponseBody @RequestMapping(value = "/queryDiscountInfo", method = RequestMethod.POST) public Object queryDiscountInfo(String name, String time, Integer companyId, Integer offset, Integer limit){ try { return userActivityDiscount1Service.queryDiscountInfo(name, time, companyId, offset, limit); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 获取红包领取详情 * @param name * @param time * @param companyId * @param offset * @param limit * @return */ @ResponseBody @RequestMapping(value = "/queryRedEnvelopesInfo", method = RequestMethod.POST) public Object queryRedEnvelopesInfo(String name, String time, Integer companyId, Integer offset, Integer limit){ try { return redPacketRecordService.queryRedEnvelopesInfo(name, time, companyId, offset, limit); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 优惠明细下载 * @param type * @param name * @param time * @param companyId * @param response */ @ResponseBody @RequestMapping(value = "/downloadCouponStatisticsInfo", method = RequestMethod.GET) public void downloadCouponStatisticsInfo(Integer type, String name, String time, Integer companyId, HttpServletResponse response){ try { if(type == 1 || type == 2){ type += 1; HSSFWorkbook hssfWorkbook = userCouponRecordService.downloadCouponRegisterInfo(type, name, time, companyId); response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode((type == 2 ? "注册奖励明细" : "邀请奖励明细") + ".xls", "utf-8")); response.setContentType("application/vnd.ms-excel"); ServletOutputStream out = response.getOutputStream(); hssfWorkbook.write(out); out.flush(); out.close(); } if(type == 3){ HSSFWorkbook hssfWorkbook = userCouponRecordService.downloadCouponRegisterInfo1(name, time, companyId); response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("充值奖励明细.xls", "utf-8")); response.setContentType("application/vnd.ms-excel"); ServletOutputStream out = response.getOutputStream(); hssfWorkbook.write(out); out.flush(); out.close(); } if(type == 4){ HSSFWorkbook hssfWorkbook = userActivityDiscount1Service.downloadDiscountInfo(name, time, companyId); response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("折扣优惠明细.xls", "utf-8")); response.setContentType("application/vnd.ms-excel"); ServletOutputStream out = response.getOutputStream(); hssfWorkbook.write(out); out.flush(); out.close(); } if(type == 5){ HSSFWorkbook hssfWorkbook = redPacketRecordService.downloadRedEnvelopesInfo(name, time, companyId); response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("红包优惠明细.xls", "utf-8")); response.setContentType("application/vnd.ms-excel"); ServletOutputStream out = response.getOutputStream(); hssfWorkbook.write(out); out.flush(); out.close(); } }catch (Exception e){ e.printStackTrace(); } } /** * 司机收益统计页面 * @author yxh * @date 2021/4/2 17:07 * @param model */ @RequestMapping("/driverIncomeStatisticsInfo") public String ShowDriverIncomeList(Model model){ List tCompanies = companyService.selectList(new EntityWrapper().eq("state", 0).ne("flag", 3)); model.addAttribute("company", tCompanies); return PREFIX + "driverIncomeData.html"; } /** * 司机收益统计排行 * @author yxh * @date 2021/4/2 17:35 * @return java.lang.Object */ @ResponseBody @RequestMapping(value = "/queryDriverIncomeData", method = RequestMethod.POST) public Object queryDriverIncomeData(String driverName, String time, Integer companyId){ try { String start = null; String end = null; if(ToolUtil.isNotEmpty(time)){ start = time.split(" - ")[0]; end = time.split(" - ")[1]; } Page> page = new PageFactory>().defaultPage(); List> maps = driverService.queryDriverIncomeData(page, driverName, start, end, companyId); EntityWrapper incomeEntityWrapper = new EntityWrapper<>(); incomeEntityWrapper.eq("type",2); incomeEntityWrapper.isNotNull("money"); if (start!=null){ start = start + " 00:00:00"; end = end + " 23:59:59"; incomeEntityWrapper.ge("insertTime", start); incomeEntityWrapper.le("insertTime", end); } List incomes = incomeService.selectList(incomeEntityWrapper); EntityWrapper driverEntityWrapper = new EntityWrapper<>(); driverEntityWrapper.isNotNull("driverId"); if (start!=null){ driverEntityWrapper.ge("insertTime", start); driverEntityWrapper.le("insertTime", end); } List tOrderPrivateCars = orderPrivateCarService.selectList(driverEntityWrapper); for (Map map : maps) { Double driverMoney = 0.0; Double platformMoney = 0.0; // 司机跑单收入 List driver = incomes.stream().filter(e -> e.getUserType().equals(2) &&map.get("id").toString().equals(e.getObjectId().toString())).collect(Collectors.toList()); for (Income income : driver) { driverMoney+=income.getMoney(); } String driverId = map.get("id").toString(); // 查询司机订单 List orderIds = tOrderPrivateCars.stream().filter(e -> e.getDriverId().equals(Integer.parseInt(driverId))) .map(TOrderPrivateCar::getId).collect(Collectors.toList()); // 平台收入 List platform = incomes.stream().filter(e -> e.getUserType().equals(1) && orderIds.contains(e.getObjectId())).collect(Collectors.toList()); for (Income income : platform) { platformMoney+=income.getMoney(); } // driverMoney保留两位小数 driverMoney = new BigDecimal(driverMoney).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); platformMoney = new BigDecimal(platformMoney).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); map.put("driverMoney", driverMoney); map.put("platformMoney", platformMoney); } page.setRecords(maps); return super.packForBT(page); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 司机收益统计 * @author yxh * @date 2021/4/2 17:35 * @return java.lang.Object */ @ResponseBody @RequestMapping(value = "/queryDriverIncomeDataSum", method = RequestMethod.POST) public Object queryDriverIncomeDataSum(String driverName, String time, Integer companyId){ try { String start = null; String end = null; if(ToolUtil.isNotEmpty(time)){ start = time.split(" - ")[0]; end = time.split(" - ")[1]; } List> maps = driverService.queryDriverIncomeDataNoPage( driverName, start, end, companyId); EntityWrapper incomeEntityWrapper = new EntityWrapper<>(); incomeEntityWrapper.eq("type",2); incomeEntityWrapper.isNotNull("money"); if (start!=null){ start = start + " 00:00:00"; end = end + " 23:59:59"; incomeEntityWrapper.ge("insertTime", start); incomeEntityWrapper.le("insertTime", end); } List incomes = incomeService.selectList(incomeEntityWrapper); EntityWrapper driverEntityWrapper = new EntityWrapper<>(); driverEntityWrapper.isNotNull("driverId"); if (start!=null){ driverEntityWrapper.ge("insertTime", start); driverEntityWrapper.le("insertTime", end); } List tOrderPrivateCars = orderPrivateCarService.selectList(driverEntityWrapper); for (Map map : maps) { Double driverMoney = 0.0; Double platformMoney = 0.0; // 司机跑单收入 List driver = incomes.stream().filter(e -> e.getUserType().equals(2) &&map.get("id").toString().equals(e.getObjectId().toString())).collect(Collectors.toList()); for (Income income : driver) { driverMoney+=income.getMoney(); } String driverId = map.get("id").toString(); // 查询司机订单 List orderIds = tOrderPrivateCars.stream().filter(e -> e.getDriverId().equals(Integer.parseInt(driverId))) .map(TOrderPrivateCar::getId).collect(Collectors.toList()); // 平台收入 List platform = incomes.stream().filter(e -> e.getUserType().equals(1) && orderIds.contains(e.getObjectId())).collect(Collectors.toList()); for (Income income : platform) { platformMoney+=income.getMoney(); } // driverMoney保留两位小数 driverMoney = new BigDecimal(driverMoney).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); platformMoney = new BigDecimal(platformMoney).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); map.put("driverMoney", driverMoney); map.put("platformMoney", platformMoney); } Map result = new HashMap<>(); int totalOrderCount = maps.stream().mapToInt(e -> Integer.parseInt(e.get("privateCarTotalNum").toString())).sum(); result.put("totalOrderCount", totalOrderCount); double totalPayMoney = maps.stream().mapToDouble(e -> Double.parseDouble(e.get("payMoney").toString())).sum(); result.put("totalPayMoney", totalPayMoney); double totalIncome = maps.stream().mapToDouble(e -> Double.parseDouble(e.get("driverMoney").toString())).sum(); result.put("totalIncome", totalIncome); double totalPlatformMoney = maps.stream().mapToDouble(e -> Double.parseDouble(e.get("platformMoney").toString())).sum(); result.put("totalPlatformMoney", totalPlatformMoney); return result; }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 导出司机收益排行 * @author yxh * @date 2021/4/7 9:32 * @param driverName * @param time * @param companyId * @param response */ @RequestMapping(value = "/downloadDriverIncomeData", method = RequestMethod.GET) public void downloadDriverIncomeData(String driverName, String time, Integer companyId, HttpServletRequest request, HttpServletResponse response){ String start = null; String end = null; if(ToolUtil.isNotEmpty(time)){ start = time.split(" - ")[0]; end = time.split(" - ")[1]; } List> list = driverService.queryDriverIncomeDataNoPage(driverName,start,end,companyId); EntityWrapper incomeEntityWrapper = new EntityWrapper<>(); incomeEntityWrapper.eq("type",2); incomeEntityWrapper.isNotNull("money"); if (start!=null){ incomeEntityWrapper.ge("insertTime", start); incomeEntityWrapper.le("insertTime", end); } List incomes = incomeService.selectList( incomeEntityWrapper ); EntityWrapper driverEntityWrapper = new EntityWrapper<>(); driverEntityWrapper.isNotNull("driverId"); if (start!=null){ driverEntityWrapper.ge("insertTime", start); driverEntityWrapper.le("insertTime", end); } List tOrderPrivateCars = orderPrivateCarService.selectList(driverEntityWrapper); for (Map map : list) { Double driverMoney = 0.0; Double platformMoney = 0.0; // 司机跑单收入 List driver = incomes.stream().filter(e -> e.getUserType().equals(2) &&map.get("id").toString().equals(e.getObjectId().toString())).collect(Collectors.toList()); for (Income income : driver) { driverMoney+=income.getMoney(); } String driverId = map.get("id").toString(); // 查询司机订单 List orderIds = tOrderPrivateCars.stream().filter(e -> e.getDriverId().equals(Integer.parseInt(driverId))) .map(TOrderPrivateCar::getId).collect(Collectors.toList()); // 平台收入 List platform = incomes.stream().filter(e -> e.getUserType().equals(1) && orderIds.contains(e.getObjectId())).collect(Collectors.toList()); for (Income income : platform) { platformMoney+=income.getMoney(); } // driverMoney保留两位小数 driverMoney = new BigDecimal(driverMoney).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); platformMoney = new BigDecimal(platformMoney).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); map.put("driverMoney", driverMoney); map.put("platformMoney", platformMoney); } // 表格数据 List> dataList = new ArrayList<>(); // 表头行 List shellList = new ArrayList(); shellList.add("姓名"); shellList.add("账号/手机号"); shellList.add("所属分公司"); shellList.add("已完成订单数"); shellList.add("订单总金额"); shellList.add("实付金额"); shellList.add("司机收入"); shellList.add("平台手续费"); dataList.add(shellList); for (Map map : list) { //数据行 shellList = new ArrayList(); if(SinataUtil.isNotEmpty(map.get("driverName"))){ shellList.add(map.get("driverName").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(map.get("driverPhone"))){ shellList.add(map.get("driverPhone").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(map.get("companyName"))){ shellList.add(map.get("companyName").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(map.get("privateCarTotalNum"))){ shellList.add(map.get("privateCarTotalNum").toString()); }else{ shellList.add("0"); } if(SinataUtil.isNotEmpty(map.get("privateCarTotalMoney"))){ shellList.add(map.get("privateCarTotalMoney").toString()); }else{ shellList.add("0"); } if(SinataUtil.isNotEmpty(map.get("payMoney"))){ shellList.add(map.get("payMoney").toString()); }else{ shellList.add("0"); } if(SinataUtil.isNotEmpty(map.get("driverMoney"))){ shellList.add(map.get("driverMoney").toString()); }else{ shellList.add("0"); } if(SinataUtil.isNotEmpty(map.get("platformMoney"))){ shellList.add(map.get("platformMoney").toString()); }else{ shellList.add("0"); } dataList.add(shellList); } try { // 调用工具类进行导出 ExcelExportUtil.easySheet("司机收益导出记录"+ DateUtil.formatDate(new Date(), "YYYYMMddHHmmss"), "司机收益导出记录", dataList,request, response); } catch (Exception e) { e.printStackTrace(); } } }