新增培训班报表

This commit is contained in:
wuchunlei
2025-10-16 16:58:07 +08:00
parent f862e1cfea
commit 6accf35bcb

View File

@@ -1,11 +1,9 @@
package com.peanut.modules.master.controller; package com.peanut.modules.master.controller;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.peanut.common.utils.R; import com.peanut.common.utils.R;
import com.peanut.modules.common.entity.UserCourseBuyLog; import com.peanut.modules.common.entity.*;
import com.peanut.modules.common.service.BuyOrderService; import com.peanut.modules.common.service.*;
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.master.service.UserCourseBuyService; import com.peanut.modules.master.service.UserCourseBuyService;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -41,8 +39,220 @@ public class StatisticsController {
private UserCourseBuyService userCourseBuyService; private UserCourseBuyService userCourseBuyService;
@Autowired @Autowired
private UserCourseBuyLogService userCourseBuyLogService; private UserCourseBuyLogService userCourseBuyLogService;
@Autowired
private TrainingClassService trainingClassService;
@Autowired
private TrainingToUserService trainingToUserService;
@RequestMapping("/getTrainingToUserMonthTotal")
public R getTrainingToUserMonthTotal(@RequestBody Map<String, Object> params) {
Map<String,Object> list = trainingToUserService.getMap(new MPJLambdaWrapper<TrainingToUser>()
.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<String,Object> params){
List<Map<String,Object>> maps = trainingToUserService.listMaps(new MPJLambdaWrapper<TrainingToUser>()
.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<String,Object> 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<Map<String,Object>> list = trainingClassService.listMaps(new MPJLambdaWrapper<TrainingClass>()
.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<String,Object> params){
String className = trainingClassService.getById(params.get("trainingId").toString()).getTitle();
List<Map<String,Object>> maps = trainingToUserService.listMaps(new MPJLambdaWrapper<TrainingToUser>()
.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<String,Object> 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") @RequestMapping("/getUserCourseBuyInfoTotal")
public R getUserCourseBuyInfoTotal(@RequestBody Map<String, Object> params) { public R getUserCourseBuyInfoTotal(@RequestBody Map<String, Object> params) {
List<Map<String,Object>> tanxiaoTotal = userCourseBuyService.getUserCourseBuyInfoTotal(params.get("date").toString()); List<Map<String,Object>> tanxiaoTotal = userCourseBuyService.getUserCourseBuyInfoTotal(params.get("date").toString());