From 6accf35bcb310f295fa6eb9ca56163aaf9752277 Mon Sep 17 00:00:00 2001 From: wuchunlei Date: Thu, 16 Oct 2025 16:58:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=9F=B9=E8=AE=AD=E7=8F=AD?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/StatisticsController.java | 220 +++++++++++++++++- 1 file changed, 215 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/peanut/modules/master/controller/StatisticsController.java b/src/main/java/com/peanut/modules/master/controller/StatisticsController.java index 5ae97d5e..94ec8982 100644 --- a/src/main/java/com/peanut/modules/master/controller/StatisticsController.java +++ b/src/main/java/com/peanut/modules/master/controller/StatisticsController.java @@ -1,11 +1,9 @@ package com.peanut.modules.master.controller; +import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.peanut.common.utils.R; -import com.peanut.modules.common.entity.UserCourseBuyLog; -import com.peanut.modules.common.service.BuyOrderService; -import com.peanut.modules.common.service.TransactionDetailsService; -import com.peanut.modules.common.service.UserCourseBuyLogService; -import com.peanut.modules.common.service.UserVipLogService; +import com.peanut.modules.common.entity.*; +import com.peanut.modules.common.service.*; import com.peanut.modules.master.service.UserCourseBuyService; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; @@ -41,8 +39,220 @@ public class StatisticsController { private UserCourseBuyService userCourseBuyService; @Autowired private UserCourseBuyLogService userCourseBuyLogService; + @Autowired + private TrainingClassService trainingClassService; + @Autowired + private TrainingToUserService trainingToUserService; + @RequestMapping("/getTrainingToUserMonthTotal") + public R getTrainingToUserMonthTotal(@RequestBody Map params) { + Map list = trainingToUserService.getMap(new MPJLambdaWrapper() + .select("SUM(case when pay_type = '微信' then fee else 0 end) 微信") + .select("SUM(case when pay_type = '支付宝' then fee else 0 end) 支付宝") + .select("SUM(case when pay_type = '天医币' then fee else 0 end) 天医币") + .select("SUM(case when pay_type = '银行' then fee else 0 end) 银行") + .select("SUM(case when pay_type = '海外' then abroad_fee else 0 end) 海外") + .select("SUM(case when pay_type = '赠送' then fee else 0 end) 赠送") + .apply("DATE_FORMAT(create_time,'%Y-%m') = '"+params.get("date")+"'")); + return R.ok().put("list", list); + } + + //导出培训班月度明细 + @RequestMapping("/getTrainingToUserMonthInfo") + public void getTrainingToUserMonthInfo(HttpServletResponse response, @RequestBody Map params){ + List> maps = trainingToUserService.listMaps(new MPJLambdaWrapper() + .leftJoin(MyUserEntity.class,MyUserEntity::getId,TrainingToUser::getUserId) + .leftJoin(TrainingClass.class,TrainingClass::getId,TrainingToUser::getTrainingId) + .leftJoin("pay_wechat_order pwo on pwo.order_sn = t.order_sn") + .leftJoin("pay_zfb_order pzo on pzo.relevanceOid = t.order_sn and pzo.trade_no is not null") + .select(""" + t.create_time,t1.name,t1.tel,t1.email,t2.title,t.identity,t.order_sn,pwo.order_id wxNo,pzo.trade_no zfbNo,t.fee+t.abroad_fee+t.jf total, + IF(t.pay_type='微信',t.fee,0) 微信, + IF(t.pay_type='支付宝',t.fee,0) 支付宝, + IF(t.pay_type='天医币',t.fee,0) 天医币, + IF(t.pay_type='银行',t.fee,0) 银行, + IF(t.pay_type='海外',t.fee,0) 海外, + IF(t.pay_type='赠送',t.fee,0) 赠送,t.jf,t.remark + """) + .apply("DATE_FORMAT(t.create_time,'%Y-%m') = '"+params.get("date")+"'") + .orderByAsc(TrainingToUser::getCreateTime)); + XSSFWorkbook wb = new XSSFWorkbook(); + //创建一张表 + Sheet sheet = wb.createSheet("培训班月度明细"); + //创建第一行,起始为0 + Row titleRow = sheet.createRow(0); + titleRow.createCell(0).setCellValue("时间"); + titleRow.createCell(1).setCellValue("姓名"); + titleRow.createCell(2).setCellValue("电话"); + titleRow.createCell(3).setCellValue("邮箱"); + titleRow.createCell(4).setCellValue("培训班"); + titleRow.createCell(5).setCellValue("购买身份"); + titleRow.createCell(6).setCellValue("订单编号"); + titleRow.createCell(7).setCellValue("微信编号"); + titleRow.createCell(8).setCellValue("支付宝号"); + titleRow.createCell(9).setCellValue("总金额"); + titleRow.createCell(10).setCellValue("微信"); + titleRow.createCell(11).setCellValue("支付宝"); + titleRow.createCell(12).setCellValue("天医币"); + titleRow.createCell(13).setCellValue("银行"); + titleRow.createCell(14).setCellValue("海外"); + titleRow.createCell(15).setCellValue("赠送"); + titleRow.createCell(16).setCellValue("积分"); + titleRow.createCell(17).setCellValue("备注"); + //序号,默认为1 + int cell = 1; + //遍历 + for (Map map : maps) { + Row row = sheet.createRow(cell); + row.createCell(0).setCellValue(map.get("create_time").toString()); + row.createCell(1).setCellValue(map.get("name").toString()); + row.createCell(2).setCellValue(map.get("tel").toString()); + row.createCell(3).setCellValue(map.get("email").toString()); + row.createCell(4).setCellValue(map.get("title").toString()); + row.createCell(5).setCellValue(map.get("identity").toString()); + row.createCell(6).setCellValue(map.get("order_sn").toString()); + row.createCell(7).setCellValue(map.get("wxNo")==null?"":map.get("wxNo").toString()); + row.createCell(8).setCellValue(map.get("zfbNo")==null?"":map.get("zfbNo").toString()); + row.createCell(9).setCellValue(map.get("total").toString()); + row.createCell(10).setCellValue(map.get("微信").toString()); + row.createCell(11).setCellValue(map.get("支付宝").toString()); + row.createCell(12).setCellValue(map.get("天医币").toString()); + row.createCell(13).setCellValue(map.get("银行").toString()); + row.createCell(14).setCellValue(map.get("海外").toString()); + row.createCell(15).setCellValue(map.get("赠送").toString()); + row.createCell(16).setCellValue(map.get("jf").toString()); + row.createCell(17).setCellValue(map.get("remark").toString()); + //序号自增 + cell++; + } + String fileName = "培训班"+params.get("date")+"明细.xlsx"; + OutputStream outputStream =null; + try { + //文件名编码格式 + fileName = URLEncoder.encode(fileName,"UTF-8"); + //设置ContentType请求信息格式 + response.setContentType("application/vnd.ms-excel"); + //设置标头 + response.setHeader("Content-disposition", "attachment;filename=" + fileName); + outputStream = response.getOutputStream(); + wb.write(outputStream); + } catch (IOException e) { + e.printStackTrace(); + }finally { + try { + outputStream.flush(); + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + @RequestMapping("/getTrainingClassTotal") + public R getTrainingClassTotal() { + List> list = trainingClassService.listMaps(new MPJLambdaWrapper() + .leftJoin(TrainingToUser.class, TrainingToUser::getTrainingId,TrainingClass::getId) + .select(TrainingClass::getTitle) + .select("SUM(case when pay_type = '微信' then t1.fee else 0 end) 微信") + .select("SUM(case when pay_type = '支付宝' then t1.fee else 0 end) 支付宝") + .select("SUM(case when pay_type = '天医币' then t1.fee else 0 end) 天医币") + .select("SUM(case when pay_type = '银行' then t1.fee else 0 end) 银行") + .select("SUM(case when pay_type = '海外' then t1.abroad_fee else 0 end) 海外") + .select("SUM(case when pay_type = '赠送' then t1.fee else 0 end) 赠送") + .groupBy(TrainingClass::getId)); + return R.ok().put("list", list); + } + + //导出培训班报表明细 + @RequestMapping("/getTrainingClassInfo") + public void getTrainingClassInfo(HttpServletResponse response, @RequestBody Map params){ + String className = trainingClassService.getById(params.get("trainingId").toString()).getTitle(); + List> maps = trainingToUserService.listMaps(new MPJLambdaWrapper() + .leftJoin(MyUserEntity.class,MyUserEntity::getId,TrainingToUser::getUserId) + .leftJoin("pay_wechat_order pwo on pwo.order_sn = t.order_sn") + .leftJoin("pay_zfb_order pzo on pzo.relevanceOid = t.order_sn and pzo.trade_no is not null") + .select(""" + t.create_time,t1.name,t1.tel,t1.email,t.identity,t.order_sn,pwo.order_id wxNo,pzo.trade_no zfbNo,t.fee+t.abroad_fee+t.jf total, + IF(t.pay_type='微信',t.fee,0) 微信, + IF(t.pay_type='支付宝',t.fee,0) 支付宝, + IF(t.pay_type='天医币',t.fee,0) 天医币, + IF(t.pay_type='银行',t.fee,0) 银行, + IF(t.pay_type='海外',t.fee,0) 海外, + IF(t.pay_type='赠送',t.fee,0) 赠送,t.jf,t.remark + """) + .eq(TrainingToUser::getTrainingId,params.get("trainingId")) + .orderByAsc(TrainingToUser::getCreateTime)); + XSSFWorkbook wb = new XSSFWorkbook(); + //创建一张表 + Sheet sheet = wb.createSheet(className+"报表明细"); + //创建第一行,起始为0 + Row titleRow = sheet.createRow(0); + titleRow.createCell(0).setCellValue("时间"); + titleRow.createCell(1).setCellValue("姓名"); + titleRow.createCell(2).setCellValue("电话"); + titleRow.createCell(3).setCellValue("邮箱"); + titleRow.createCell(4).setCellValue("购买身份"); + titleRow.createCell(5).setCellValue("订单编号"); + titleRow.createCell(6).setCellValue("微信编号"); + titleRow.createCell(7).setCellValue("支付宝号"); + titleRow.createCell(8).setCellValue("总金额"); + titleRow.createCell(9).setCellValue("微信"); + titleRow.createCell(10).setCellValue("支付宝"); + titleRow.createCell(11).setCellValue("天医币"); + titleRow.createCell(12).setCellValue("银行"); + titleRow.createCell(13).setCellValue("海外"); + titleRow.createCell(14).setCellValue("赠送"); + titleRow.createCell(15).setCellValue("积分"); + titleRow.createCell(16).setCellValue("备注"); + //序号,默认为1 + int cell = 1; + //遍历 + for (Map map : maps) { + Row row = sheet.createRow(cell); + row.createCell(0).setCellValue(map.get("create_time").toString()); + row.createCell(1).setCellValue(map.get("name").toString()); + row.createCell(2).setCellValue(map.get("tel").toString()); + row.createCell(3).setCellValue(map.get("email").toString()); + row.createCell(4).setCellValue(map.get("identity").toString()); + row.createCell(5).setCellValue(map.get("order_sn").toString()); + row.createCell(6).setCellValue(map.get("wxNo")==null?"":map.get("wxNo").toString()); + row.createCell(7).setCellValue(map.get("zfbNo")==null?"":map.get("zfbNo").toString()); + row.createCell(8).setCellValue(map.get("total").toString()); + row.createCell(9).setCellValue(map.get("微信").toString()); + row.createCell(10).setCellValue(map.get("支付宝").toString()); + row.createCell(11).setCellValue(map.get("天医币").toString()); + row.createCell(12).setCellValue(map.get("银行").toString()); + row.createCell(13).setCellValue(map.get("海外").toString()); + row.createCell(14).setCellValue(map.get("赠送").toString()); + row.createCell(15).setCellValue(map.get("jf").toString()); + row.createCell(16).setCellValue(map.get("remark").toString()); + //序号自增 + cell++; + } + String fileName = className+"报表明细.xlsx"; + OutputStream outputStream =null; + try { + //文件名编码格式 + fileName = URLEncoder.encode(fileName,"UTF-8"); + //设置ContentType请求信息格式 + response.setContentType("application/vnd.ms-excel"); + //设置标头 + response.setHeader("Content-disposition", "attachment;filename=" + fileName); + outputStream = response.getOutputStream(); + wb.write(outputStream); + } catch (IOException e) { + e.printStackTrace(); + }finally { + try { + outputStream.flush(); + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + @RequestMapping("/getUserCourseBuyInfoTotal") public R getUserCourseBuyInfoTotal(@RequestBody Map params) { List> tanxiaoTotal = userCourseBuyService.getUserCourseBuyInfoTotal(params.get("date").toString());