diff --git a/src/main/java/io/v/nutz/zhgh/activity/controller/school/ActivityCommonController.java b/src/main/java/io/v/nutz/zhgh/activity/controller/school/ActivityCommonController.java index 45ddb9d..8b584fe 100644 --- a/src/main/java/io/v/nutz/zhgh/activity/controller/school/ActivityCommonController.java +++ b/src/main/java/io/v/nutz/zhgh/activity/controller/school/ActivityCommonController.java @@ -5,6 +5,7 @@ import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.afterturn.easypoi.excel.export.ExcelExportService; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.StrUtil; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; @@ -13,12 +14,12 @@ import io.v.nutz.base.annontation.ViReturn; import io.v.nutz.base.service.ViService; import io.v.nutz.base.utils.DateUtil; import io.v.nutz.base.utils.OfficeTemplateUtil; +import io.v.nutz.base.utils.Roles; import io.v.nutz.base.utils.ViTool; import io.v.nutz.sys.models.Sys_union; import io.v.nutz.sys.models.Sys_unit; import io.v.nutz.sys.models.Sys_user; import io.v.nutz.sys.services.SysUnionService; -import io.v.nutz.web.commons.base.Globals; import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.zhgh.activity.models.*; import io.v.nutz.zhgh.activity.services.ActivityPlanService; @@ -28,8 +29,8 @@ import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; import org.nutz.dao.Sqls; -import org.nutz.dao.entity.Record; import org.nutz.dao.sql.Sql; import org.nutz.dao.util.cri.Static; import org.nutz.ioc.loader.annotation.Inject; @@ -46,6 +47,7 @@ import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.BufferedOutputStream; import java.io.IOException; +import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -69,28 +71,22 @@ public class ActivityCommonController { /*@Inject private HdTypeService hdTypeService;*/ + @Inject + private Dao dao; @Inject private SysUnionService sysUnionService; - @Inject private ActivitySchoolService activitySchoolService; - @Inject private ActivityPlanService activityPlanService; - @Inject private ActivitySchoolApplyService activitySchoolApplyService; - @Inject("ActivityEvent") private ViService activityEventService; - @Inject("ActivitySchoolTeam") private ViService activitySchoolTeamViService; - @Inject("ActivitySchoolEvent") private ViService activitySchoolEventService; - - @Inject private OfficeTemplateUtil officeTemplateUtil; @@ -281,7 +277,7 @@ public class ActivityCommonController { @At - public void exportXlsx(String id, String unionId, HttpServletResponse response) throws IOException { + public void exportXlsx(String id, String unionId,Boolean isUnion, HttpServletResponse response) throws IOException { Sql sql = Sqls.create(""" SELECT app.username, @@ -305,13 +301,13 @@ public class ActivityCommonController { LEFT JOIN activity_event ev ON ev.id = app.eventId LEFT JOIN activity_school sc ON sc.id=app.activityId WHERE - activityId = @id + activityId = @id and app.status=2 $cnd ORDER BY + u.unioncode ASC, app.applyUser DESC, ev.allName DESC, - u.unionname DESC, app.`team` asc """).setParam("id", id); @@ -343,19 +339,26 @@ public class ActivityCommonController { // exportEntities.add(new ExcelExportEntity("身份", "sf", 20)); exportEntities.add(new ExcelExportEntity("报名人", "applyUserName", 20)); - Map> listMap = list.stream().collect(Collectors.groupingBy(v -> v.getString("unionname"))); Workbook workbook = new XSSFWorkbook(); - listMap.forEach((k, v) -> { - ExcelExportService service = new ExcelExportService(); - ExportParams exportParams = new ExportParams(); - exportParams.setTitle(k); - exportParams.setSheetName(k); - exportParams.setType(ExcelType.XSSF); - service.createSheetForMap(workbook, exportParams, exportEntities, v); - }); + + if (isUnion != null && isUnion) { + Map> listMap = list.stream().collect(Collectors.groupingBy(v -> v.getString("unionname"))); + ViTool.excelResponse(response, activityName + "报名表.xlsx"); + Workbook finalWorkbook = workbook; + listMap.forEach((k, v) -> { + ExcelExportService service = new ExcelExportService(); + ExportParams exportParams = new ExportParams(); + exportParams.setTitle(k); + exportParams.setSheetName(k); + exportParams.setType(ExcelType.XSSF); + service.createSheetForMap(finalWorkbook, exportParams, exportEntities, v); + }); + } else { + ViTool.excelResponse(response, activityName + "报名表(总表).xlsx"); + workbook = ExcelExportUtil.exportExcel(new ExportParams(), exportEntities, list); + } try { - ViTool.excelResponse(response, activityName + "报名表.xlsx"); ServletOutputStream outputStream = response.getOutputStream(); workbook.write(outputStream); outputStream.close(); @@ -403,55 +406,115 @@ public class ActivityCommonController { public void export(String id, String unionId, HttpServletResponse response) { try { ActivitySchool activity = activitySchoolService.fetch(id); - String fileName = Globals.MyConfig.getString("GxName") + activity.getName() + "报名表"; + String fileName = activity.getName() + "报名表"; response.addHeader("Content-Type", "application/octet-stream"); response.addHeader("Content-Disposition", "attachment; filename=\"" + new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1) + "\".zip"); + Sql queryAllSql = Sqls.create(""" + SELECT + act.*, + ae.allName + FROM + activity_school_apply act + LEFT JOIN activity_event ae ON act.eventId = ae.id + WHERE + act.activityId = @actId + ORDER BY act.eventId ASC + """).setParam("actId", id); + List resultList = activitySchoolApplyService.listMap(queryAllSql); + + List schoolApplies = BeanUtil.copyToList(resultList, ActivitySchoolApply.class); + List basicUnions = activitySchoolService.dao().query(ActivityBasicUnion.class, Cnd.NEW().asc("unioncode")); + + if (Lang.isEmpty(schoolApplies)) { + return; + } + ZipOutputStream zipOutputStream = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream())); for (ActivityBasicUnion union : basicUnions) { - NutMap map = new NutMap(); - map.setv("unionName", union.getUnionname()); + if (!"6132df49148c43b1a8829c108ad0fcbf".equals(id)) { + NutMap map = new NutMap(); + map.setv("unionName", union.getUnionname()); + List ydhUserList = schoolApplies.stream().filter(v -> v.getIdentity().contains("1")).collect(Collectors.toList()); + ActivitySchoolApply jlUser = schoolApplies.stream().filter(v -> v.getIdentity().contains("2")).findFirst().orElse(null); + ActivitySchoolApply ldUser = schoolApplies.stream().filter(v -> v.getIdentity().contains("3")).findFirst().orElse(null); + ydhUserList.forEach(y -> y.setSf("队员")); + for (int i = 0; i < ydhUserList.size(); i++) { + ydhUserList.get(i).setSf("队员"); + ydhUserList.get(i).setIndex(i + 1); + } + map.setv("headName", fileName); + if (Lang.isNotEmpty(ldUser)) { + map.setv("ldUserName", ldUser.getUsername()); + map.setv("ldMobile", ldUser.getMobile()); + } + if (Lang.isNotEmpty(jlUser)) { + map.setv("jlUserName", jlUser.getUsername()); + } - List schoolApplies = activitySchoolApplyService.query(Cnd.where("activityId", "=", id)); + map.setv("ydhUser", ydhUserList); - List ydhUserList = schoolApplies.stream().filter(v -> v.getIdentity().contains("1")).collect(Collectors.toList()); - ActivitySchoolApply jlUser = schoolApplies.stream().filter(v -> v.getIdentity().contains("2")).findFirst().orElse(null); - ActivitySchoolApply ldUser = schoolApplies.stream().filter(v -> v.getIdentity().contains("3")).findFirst().orElse(null); - ydhUserList.stream().forEach(y -> y.setSf("队员")); - for (int i = 0; i < ydhUserList.size(); i++) { - ydhUserList.get(i).setSf("队员"); - ydhUserList.get(i).setIndex(i + 1); + map.setv("applyDate", DateUtil.getDate()); + + String twoFileName = union.getUnionname() + "比赛报名表.docx"; + zipOutputStream.putNextEntry(new ZipEntry(twoFileName)); + + HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy(); + Configure config = Configure.newBuilder().bind("ydhUser", policy).build(); + /* if (activity.getApplyType() == 1) { + templateUrl = officeTemplateUtil.getPath("activity_list1"); + } else if (activity.getApplyType() == 2) { + templateUrl = officeTemplateUtil.getPath("activity_list"); + }officeTemplateUtil.getPath("activity_user"); + */ + String officeTemplateUtilPath = officeTemplateUtil.getPath("activity_user"); + XWPFTemplate.compile(officeTemplateUtilPath, config).render(map).write(zipOutputStream); + zipOutputStream.closeEntry(); + } else { + List unionApply = schoolApplies.stream().filter(v -> v.getUnionId().equals(union.getId())).collect(Collectors.toList()); + + if (Lang.isEmpty(unionApply)) { + continue; + } + + NutMap result = NutMap.NEW(); + // 获取主席 + Sql sql = Sqls.create(""" + SELECT + u.username, + u.mobile + FROM + sys_user_role sur + LEFT JOIN sys_user u ON sur.userId = u.id + WHERE + sur.roleId = @roleId AND sur.unionId = @unionId + """).setParam("roleId", Roles.GH01).setParam("unionId", union.getId()); + sql.setCallback(Sqls.callback.map()); + dao.execute(sql); + NutMap userMap = (NutMap) sql.getResult(); + + // 设置序号 + for (int i = 0; i < unionApply.size(); i++) { + unionApply.get(i).setIndex(i + 1); + unionApply.get(i).setSf(unionApply.get(i).getAllName().substring(0, 2)); + } + + result.put("activityName", cn.hutool.core.date.DateUtil.year(cn.hutool.core.date.DateUtil.parseDate(activity.getApplyStartTime())) + "年" + activity.getName()); + result.put("unionName", union.getUnionname()); + result.put("fzr", userMap.getString("username")); + result.put("mobile", userMap.getString("mobile")); + result.put("list", unionApply); + + zipOutputStream.putNextEntry(new ZipEntry(union.getUnionname() + "报名表.docx")); + InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("docTemplate/activity/activity_jsz.docx"); + + HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy(); + Configure config = Configure.newBuilder().bind("list", policy).build(); + XWPFTemplate.compile(inputStream, config).render(result, zipOutputStream); + zipOutputStream.closeEntry(); } - map.setv("headName", fileName); - if (Lang.isNotEmpty(ldUser)) { - map.setv("ldUserName", ldUser.getUsername()); - map.setv("ldMobile", ldUser.getMobile()); - } - if (Lang.isNotEmpty(jlUser)) { - map.setv("jlUserName", jlUser.getUsername()); - } - - map.setv("ydhUser", ydhUserList); - - map.setv("applyDate", DateUtil.getDate()); - - String twoFileName = union.getUnionname() + "比赛报名表.docx"; - zipOutputStream.putNextEntry(new ZipEntry(twoFileName)); - - HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy(); - Configure config = Configure.newBuilder().bind("ydhUser", policy).build(); - /* if (activity.getApplyType() == 1) { - templateUrl = officeTemplateUtil.getPath("activity_list1"); - } else if (activity.getApplyType() == 2) { - templateUrl = officeTemplateUtil.getPath("activity_list"); - }officeTemplateUtil.getPath("activity_user"); - */ - String officeTemplateUtilPath = officeTemplateUtil.getPath("activity_user"); - assert officeTemplateUtilPath != null; - XWPFTemplate.compile(officeTemplateUtilPath, config).render(map).write(zipOutputStream); - zipOutputStream.closeEntry(); } zipOutputStream.flush(); zipOutputStream.close(); diff --git a/src/main/resources/docTemplate/activity/activity_jsz.docx b/src/main/resources/docTemplate/activity/activity_jsz.docx new file mode 100644 index 0000000..d5941d4 Binary files /dev/null and b/src/main/resources/docTemplate/activity/activity_jsz.docx differ diff --git a/src/main/resources/views/platform/activity/school/ActivityManage.html b/src/main/resources/views/platform/activity/school/ActivityManage.html index d98c5a7..c281606 100644 --- a/src/main/resources/views/platform/activity/school/ActivityManage.html +++ b/src/main/resources/views/platform/activity/school/ActivityManage.html @@ -1,25 +1,23 @@ - +