Files
nuttyreading-java/src/main/java/com/peanut/modules/master/controller/TrainingClassController.java
2025-10-16 16:58:58 +08:00

307 lines
16 KiB
Java

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.R;
import com.peanut.modules.common.entity.*;
import com.peanut.modules.common.service.BuyOrderService;
import com.peanut.modules.common.service.MyUserService;
import com.peanut.modules.common.service.TrainingClassService;
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.*;
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;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 培训班管理
*/
@Slf4j
@RestController("masterTrainingClass")
@RequestMapping("master/trainingClass")
public class TrainingClassController {
@Autowired
private TrainingClassService trainingClassService;
@Autowired
private TrainingToUserService trainingToUserService;
@Autowired
private MyUserService userService;
@Autowired
private VipBuyConfigService vipBuyConfigService;
@Autowired
private BuyOrderService buyOrderService;
//vip商品类型
@RequestMapping("/getVipBuyConfigList")
public R getVipBuyConfigList() {
List vipBuyConfigList = vipBuyConfigService.list(new LambdaQueryWrapper<VipBuyConfigEntity>()
.select(VipBuyConfigEntity::getType,VipBuyConfigEntity::getTitle)
.and(r->r.eq(VipBuyConfigEntity::getDateType,0).or(f->f.eq(VipBuyConfigEntity::getDateType,1).lt(VipBuyConfigEntity::getStartTime,new Date()).gt(VipBuyConfigEntity::getEndTime,new Date())))
.notLike(VipBuyConfigEntity::getTitle,"延期")
.groupBy(VipBuyConfigEntity::getType)
.groupBy(VipBuyConfigEntity::getType));
return R.ok().put("vipBuyConfigList",vipBuyConfigList);
}
//新建培训班
@RequestMapping("/addTrainingClass")
public R addTrainingClass(@RequestBody TrainingClass trainingClass) {
trainingClass.setYear(trainingClass.getTrainingDate().substring(0,4));
trainingClassService.save(trainingClass);
return R.ok();
}
//修改培训班
@RequestMapping("/editTrainingClass")
public R editTrainingClass(@RequestBody TrainingClass trainingClass) {
trainingClass.setYear(trainingClass.getTrainingDate().substring(0,4));
trainingClassService.updateById(trainingClass);
return R.ok();
}
//培训班列表
@RequestMapping("/trainingClassList")
public R trainingClassList(@RequestBody Map<String,Object> params) {
LambdaQueryWrapper<TrainingClass> wrapper = new LambdaQueryWrapper();
wrapper.like(StringUtils.isNotEmpty(params.get("title").toString()),TrainingClass::getTitle,params.get("title"));
wrapper.eq(StringUtils.isNotEmpty(params.get("type").toString()),TrainingClass::getType,params.get("type"));
wrapper.like(StringUtils.isNotEmpty(params.get("year").toString()),TrainingClass::getYear,params.get("year"));
wrapper.eq(StringUtils.isNotEmpty(params.get("singupFlag").toString()),TrainingClass::getSingupFlag,params.get("singupFlag"));
wrapper.like(StringUtils.isNotEmpty(params.get("displayApp").toString()),TrainingClass::getDisplayApp,params.get("displayApp"));
if (StringUtils.isNotEmpty(params.get("trainingDateSort").toString())){
if ("1".equals(params.get("trainingDateSort").toString())){
wrapper.orderByDesc(TrainingClass::getTrainingDate);
}else {
wrapper.orderByAsc(TrainingClass::getTrainingDate);
}
}else if (StringUtils.isNotEmpty(params.get("createTimeSort").toString())){
if ("1".equals(params.get("createTimeSort").toString())){
wrapper.orderByDesc(TrainingClass::getCreateTime);
}else {
wrapper.orderByAsc(TrainingClass::getCreateTime);
}
}else {
wrapper.orderByDesc(TrainingClass::getYear);
wrapper.orderByAsc(TrainingClass::getSort);
wrapper.orderByDesc(TrainingClass::getCreateTime);
}
Page<TrainingClass> trainingClassPage = trainingClassService.page(new Page<>(
Long.parseLong(params.get("current").toString()), Long.parseLong(params.get("limit").toString())),wrapper);
return R.ok().put("trainingClassList",trainingClassPage);
}
//培训班下用户列表
@RequestMapping("/trainingClassUserList")
public R trainingClassUserList(@RequestBody Map<String,Object> params) {
MPJLambdaWrapper<TrainingToUser> wrapper = new MPJLambdaWrapper();
wrapper.leftJoin(MyUserEntity.class,MyUserEntity::getId,TrainingToUser::getUserId);
wrapper.selectAll(TrainingToUser.class);
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.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()));
}
return R.ok().put("trainingClassUserList",trainingClassUserList);
}
//导出培训班用户
@RequestMapping("/exportTrainingClassUser")
public void exportTrainingClassUser(HttpServletResponse response,@RequestBody Map<String,Object> params) {
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 {
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//培训班添加用户
@RequestMapping("/addUserToTrainingClass")
public R addUserToTrainingClass(@RequestBody TrainingToUser trainingToUser) {
List list = trainingToUserService.list(new LambdaQueryWrapper<TrainingToUser>()
.eq(TrainingToUser::getTrainingId,trainingToUser.getTrainingId())
.eq(TrainingToUser::getUserId,trainingToUser.getUserId()));
if (list.size()>0){
return R.error("已存在");
}
trainingToUser.setType("管理员");
trainingToUserService.save(trainingToUser);
return R.ok();
}
//培训班删除用户
@RequestMapping("/delUserToTrainingClass")
public R delUserToTrainingClass(@RequestBody Map<String,Object> params) {
trainingToUserService.removeById(params.get("id").toString());
return R.ok();
}
}