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() .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 params) { LambdaQueryWrapper 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 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 params) { MPJLambdaWrapper 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 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 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> list = trainingToUserService.listMaps(new MPJLambdaWrapper() .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 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 map = trainingToUserService.getMap(new MPJLambdaWrapper() .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> trainingToUserList = trainingToUserService.listMaps(new MPJLambdaWrapper() .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 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() .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 params) { trainingToUserService.removeById(params.get("id").toString()); return R.ok(); } }