307 lines
16 KiB
Java
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();
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|