From d04fb17c792cb5ea24069ba49df131043f583265 Mon Sep 17 00:00:00 2001 From: wuchunlei Date: Thu, 16 Oct 2025 16:58:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9F=B9=E8=AE=AD=E7=8F=AD?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/common/entity/TrainingToUser.java | 27 ++- .../impl/TrainingClassServiceImpl.java | 11 +- .../controller/TrainingClassController.java | 219 ++++++++++++------ 3 files changed, 171 insertions(+), 86 deletions(-) diff --git a/src/main/java/com/peanut/modules/common/entity/TrainingToUser.java b/src/main/java/com/peanut/modules/common/entity/TrainingToUser.java index 112b5e73..050ac979 100644 --- a/src/main/java/com/peanut/modules/common/entity/TrainingToUser.java +++ b/src/main/java/com/peanut/modules/common/entity/TrainingToUser.java @@ -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; } diff --git a/src/main/java/com/peanut/modules/common/service/impl/TrainingClassServiceImpl.java b/src/main/java/com/peanut/modules/common/service/impl/TrainingClassServiceImpl.java index 882d5b0f..f12e1da6 100644 --- a/src/main/java/com/peanut/modules/common/service/impl/TrainingClassServiceImpl.java +++ b/src/main/java/com/peanut/modules/common/service/impl/TrainingClassServiceImpl.java @@ -121,12 +121,11 @@ public class TrainingClassServiceImpl extends ServiceImpl 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); } } diff --git a/src/main/java/com/peanut/modules/master/controller/TrainingClassController.java b/src/main/java/com/peanut/modules/master/controller/TrainingClassController.java index 13ced114..02f8d47a 100644 --- a/src/main/java/com/peanut/modules/master/controller/TrainingClassController.java +++ b/src/main/java/com/peanut/modules/master/controller/TrainingClassController.java @@ -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 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() - .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 params) { - params.put("current",1); - params.put("limit",10000); - R r = trainingClassUserList(params); - if ("0".equals(r.get("code").toString())){ - Page trainingClassUserList = (Page) 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> 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 { - //文件名编码格式 - 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(); }