修改培训班结构

This commit is contained in:
wuchunlei
2025-10-16 16:58:58 +08:00
parent 6accf35bcb
commit d04fb17c79
3 changed files with 171 additions and 86 deletions

View File

@@ -20,10 +20,27 @@ public class TrainingToUser {
private Integer trainingId;
private String orderSn;
private String identity;
//报名渠道 master、order
private String type;
//金额
private BigDecimal fee;
//抵扣积分
private BigDecimal jf;
//支付方式微信、支付宝、天医币、银行、海外、赠送
private String payType;
private String remark;
//海外金额
private BigDecimal abroadFee;
private String orderSn;
private Date createTime;
@TableLogic
@@ -31,11 +48,5 @@ public class TrainingToUser {
@TableField(exist = false)
private MyUserEntity user;
@TableField(exist = false)
private String payMethod;
@TableField(exist = false)
private String realMoney;
@TableField(exist = false)
private String jfDeduction;
}

View File

@@ -121,12 +121,11 @@ public class TrainingClassServiceImpl extends ServiceImpl<TrainingClassDao, Trai
trainingToUser.setTrainingId(buyOrder.getTrainingClassId());
trainingToUser.setUserId(buyOrder.getUserId());
trainingToUser.setOrderSn(buyOrder.getOrderSn());
String identity = buyOrder.getTrainingClassIdentity();
if (buyOrder.getTrainingClassIdentity()==null||"".equals(identity)){
Map<String,Object> info = getFinalPriceByUser(buyOrder.getTrainingClassId(),buyOrder.getUserId());
identity = info.get("identity").toString()+""+info.get("fee").toString();
}
trainingToUser.setIdentity(identity);
trainingToUser.setIdentity(buyOrder.getTrainingClassIdentity());
trainingToUser.setType("订单");
trainingToUser.setFee(buyOrder.getRealMoney());
trainingToUser.setJf(buyOrder.getRealMoney());
trainingToUser.setPayType("1".equals(buyOrder.getPaymentMethod())?"微信":("2".equals(buyOrder.getPaymentMethod())?"支付宝":"天医币"));
trainingToUserService.save(trainingToUser);
}
}

View File

@@ -3,7 +3,6 @@ package com.peanut.modules.master.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.peanut.common.utils.DateUtils;
import com.peanut.common.utils.R;
import com.peanut.modules.common.entity.*;
import com.peanut.modules.common.service.BuyOrderService;
@@ -13,8 +12,8 @@ import com.peanut.modules.common.service.TrainingToUserService;
import com.peanut.modules.master.service.VipBuyConfigService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
@@ -115,21 +114,14 @@ public class TrainingClassController {
wrapper.eq(TrainingToUser::getTrainingId,params.get("trainingId"));
wrapper.like(StringUtils.isNotEmpty(params.get("tel").toString()),MyUserEntity::getTel,params.get("tel"));
if ("2".equals(params.get("createTimeSort").toString())){
wrapper.orderByAsc(TrainingToUser::getCreateTime);
}else {
wrapper.orderByDesc(TrainingToUser::getCreateTime);
}else {
wrapper.orderByAsc(TrainingToUser::getCreateTime);
}
Page<TrainingToUser> trainingClassUserList = trainingToUserService.page(new Page<>(
Long.parseLong(params.get("current").toString()), Long.parseLong(params.get("limit").toString())),wrapper);
for (TrainingToUser toUser:trainingClassUserList.getRecords()){
toUser.setUser(userService.getById(toUser.getUserId()));
if (StringUtils.isNotEmpty(toUser.getOrderSn())){
BuyOrder buyOrder = buyOrderService.getOne(new LambdaQueryWrapper<BuyOrder>()
.eq(BuyOrder::getOrderSn,toUser.getOrderSn()));
toUser.setPayMethod("1".equals(buyOrder.getPaymentMethod())?"微信":("2".equals(buyOrder.getPaymentMethod())?"支付宝":"虚拟币"));
toUser.setRealMoney(buyOrder.getRealMoney().toString());
toUser.setJfDeduction(buyOrder.getJfDeduction().toString());
}
}
return R.ok().put("trainingClassUserList",trainingClassUserList);
}
@@ -137,68 +129,151 @@ public class TrainingClassController {
//导出培训班用户
@RequestMapping("/exportTrainingClassUser")
public void exportTrainingClassUser(HttpServletResponse response,@RequestBody Map<String,Object> params) {
params.put("current",1);
params.put("limit",10000);
R r = trainingClassUserList(params);
if ("0".equals(r.get("code").toString())){
Page<TrainingToUser> trainingClassUserList = (Page<TrainingToUser>) r.get("trainingClassUserList");
XSSFWorkbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet("trainingClassUser");
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("积分抵扣");
//序号默认为1
int cell = 1;
//遍历
for (TrainingToUser toUser : trainingClassUserList.getRecords()) {
Row row = sheet.createRow(cell);
row.createCell(0).setCellValue(cell);
row.createCell(1).setCellValue(DateUtils.format(toUser.getCreateTime(),"yyyy-MM-dd HH:mm:ss"));
row.createCell(2).setCellValue(toUser.getOrderSn());
row.createCell(3).setCellValue(toUser.getUser().getName());
row.createCell(4).setCellValue(toUser.getUser().getTel());
row.createCell(5).setCellValue(toUser.getUser().getEmail());
String identity = "";
String fee = "";
if (toUser.getIdentity().contains("")){
identity = toUser.getIdentity().split("")[0];
fee = toUser.getIdentity().split("")[1];
}
row.createCell(6).setCellValue(identity);
row.createCell(7).setCellValue(fee);
row.createCell(8).setCellValue(toUser.getPayMethod()+":"+toUser.getRealMoney());
row.createCell(9).setCellValue(toUser.getJfDeduction());
//序号自增
cell++;
}
String fileName = "培训班用户.xlsx";
OutputStream outputStream =null;
XSSFWorkbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet("trainingClassUser");
int i=0;
//培训班标题
Row titleRow = sheet.createRow(i);
String className = trainingClassService.getById(params.get("trainingId").toString()).getTitle();
Cell cell0 = titleRow.createCell(0);
cell0.setCellValue(className);
sheet.addMergedRegion(new CellRangeAddress(i, i, 0, 12));//合并单元格
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.CENTER);// 水平居中
cell0.setCellStyle(cellStyle);
//空一行
sheet.createRow(++i);
//统计学员类型人数金额
List<Map<String,Object>> list = trainingToUserService.listMaps(new MPJLambdaWrapper<TrainingToUser>()
.select("""
identity 身份,count(1) 人数,SUM(IF(pay_type='海外',abroad_fee,fee)) 总金额,
SUM(case when pay_type = '微信' then fee else 0 end) 微信,
SUM(case when pay_type = '支付宝' then fee else 0 end) 支付宝,
SUM(case when pay_type = '天医币' then fee else 0 end) 天医币,
SUM(jf) 积分,
SUM(case when pay_type = '银行' then abroad_fee else 0 end) 银行,
SUM(case when pay_type = '海外' then abroad_fee else 0 end) 海外
""")
.eq(TrainingToUser::getTrainingId,params.get("trainingId"))
.groupBy(TrainingToUser::getIdentity));
titleRow = sheet.createRow(++i);
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("积分抵扣");
for (Map<String,Object> map:list){
titleRow = sheet.createRow(++i);
titleRow.createCell(2).setCellValue(map.get("身份").toString());
titleRow.createCell(3).setCellValue(map.get("人数").toString());
titleRow.createCell(4).setCellValue(map.get("总金额").toString());
titleRow.createCell(5).setCellValue(map.get("微信").toString());
titleRow.createCell(6).setCellValue(map.get("支付宝").toString());
titleRow.createCell(7).setCellValue(map.get("天医币").toString());
titleRow.createCell(8).setCellValue(map.get("银行").toString());
titleRow.createCell(9).setCellValue(map.get("海外").toString());
titleRow.createCell(10).setCellValue(map.get("积分").toString());
}
//合计
Map<String,Object> map = trainingToUserService.getMap(new MPJLambdaWrapper<TrainingToUser>()
.select("""
count(1) 人数,SUM(IF(pay_type='海外',abroad_fee,fee)) 总金额,
SUM(case when pay_type = '微信' then fee else 0 end) 微信,
SUM(case when pay_type = '支付宝' then fee else 0 end) 支付宝,
SUM(case when pay_type = '天医币' then fee else 0 end) 天医币,
SUM(jf) 积分,
SUM(case when pay_type = '银行' then fee else 0 end) 银行,
SUM(case when pay_type = '海外' then abroad_fee else 0 end) 海外,
SUM(case when pay_type = '赠送' then fee else 0 end) 赠送
""")
.eq(TrainingToUser::getTrainingId,params.get("trainingId")));
titleRow = sheet.createRow(++i);
titleRow.createCell(2).setCellValue("合计");
titleRow.createCell(3).setCellValue(map.get("人数").toString());
titleRow.createCell(4).setCellValue(map.get("总金额").toString());
titleRow.createCell(5).setCellValue(map.get("微信").toString());
titleRow.createCell(6).setCellValue(map.get("支付宝").toString());
titleRow.createCell(7).setCellValue(map.get("天医币").toString());
titleRow.createCell(8).setCellValue(map.get("银行").toString());
titleRow.createCell(9).setCellValue(map.get("海外").toString());
titleRow.createCell(10).setCellValue(map.get("赠送").toString());
titleRow.createCell(11).setCellValue(map.get("积分").toString());
//空一行
sheet.createRow(++i);
//人员明细
titleRow = sheet.createRow(++i);
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("备注");
List<Map<String,Object>> trainingToUserList = trainingToUserService.listMaps(new MPJLambdaWrapper<TrainingToUser>()
.leftJoin(MyUserEntity.class,MyUserEntity::getId,TrainingToUser::getUserId)
.select("""
t.create_time,t.order_sn,t1.name,t1.tel,t1.email,t.identity,t.fee+t.abroad_fee+t.jf total,
IF(pay_type='微信',t.fee,0) 微信,
IF(pay_type='支付宝',t.fee,0) 支付宝,
IF(pay_type='天医币',t.fee,0) 天医币,
IF(pay_type='银行',t.fee,0) 银行,
IF(pay_type='海外',t.fee,0) 海外,
IF(pay_type='赠送',t.fee,0) 赠送,t.jf,t.remark
""")
.eq(TrainingToUser::getTrainingId,params.get("trainingId"))
.orderByAsc(TrainingToUser::getCreateTime));
int no = 1;
for (Map<String,Object> toUser : trainingToUserList) {
Row row = sheet.createRow(++i);
row.createCell(0).setCellValue(no++);
row.createCell(1).setCellValue(toUser.get("create_time").toString());
row.createCell(2).setCellValue(toUser.get("order_sn").toString());
row.createCell(3).setCellValue(toUser.get("name").toString());
row.createCell(4).setCellValue(toUser.get("tel").toString());
row.createCell(5).setCellValue(toUser.get("email").toString());
row.createCell(6).setCellValue(toUser.get("identity").toString());
row.createCell(7).setCellValue(toUser.get("total").toString());
row.createCell(8).setCellValue(toUser.get("微信").toString());
row.createCell(9).setCellValue(toUser.get("支付宝").toString());
row.createCell(10).setCellValue(toUser.get("天医币").toString());
row.createCell(11).setCellValue(toUser.get("银行").toString());
row.createCell(12).setCellValue(toUser.get("海外").toString());
row.createCell(13).setCellValue(toUser.get("赠送").toString());
row.createCell(14).setCellValue(toUser.get("jf").toString());
row.createCell(15).setCellValue(toUser.get("remark").toString());
}
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 {
//文件名编码格式
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);
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@@ -212,7 +287,7 @@ public class TrainingClassController {
if (list.size()>0){
return R.error("已存在");
}
trainingToUser.setPayMethod("管理员添加");
trainingToUser.setType("管理员");
trainingToUserService.save(trainingToUser);
return R.ok();
}