From 90e0a24e83e8154c94604f5daf853747d71c0b8d Mon Sep 17 00:00:00 2001 From: zhouhefeng Date: Mon, 9 Mar 2026 11:15:09 +0800 Subject: [PATCH] commit --- .../ActivitySportsReadingController.java | 6 +- .../H5ActivitySportsApplyUserController.java | 38 ++- .../sports/models/ActivitySchool.java | 2 +- .../ActivitySportsApplyUserServiceImpl.java | 5 +- .../manage/TrainSignUpAdjustController.java | 5 +- .../manage/TrainSignUpManageController.java | 1 - .../manage/TrainsignUpMineController.java | 2 - ...ainSignUpActivityStatisticsController.java | 121 +++++---- .../service/TrainSignUpActivityService.java | 2 - .../TrainSignUpActivityStatisticsService.java | 1 - .../impl/TrainSignUpActivityServiceImpl.java | 23 +- ...inSignUpActivityStatisticsServiceImpl.java | 10 +- .../impl/TrainSignUpUserServiceImpl.java | 10 +- .../TeacherCongressDelegateServiceImpl.java | 94 ++++--- .../WelfareSelectionSituationController.java | 8 + .../WelfareUserSelectController.java | 2 +- .../welfare/model/WelfareUserSelection.java | 5 + .../WelfareSelectionSituationService.java | 1 + .../service/impl/WelfareListServiceImpl.java | 13 +- .../impl/WelfareProjectServiceImpl.java | 28 +- .../WelfareSelectionSituationServiceImpl.java | 110 +++++++- .../impl/WelfareStatisticsServiceImpl.java | 79 +++++- .../activity/trainSignUp/apply/index.html | 2 +- .../activity/trainSignUp/manage/basicForm.js | 14 +- .../activity/trainSignUp/manage/index.html | 2 +- .../trainSignUp/statistics/index.html | 2 +- .../zhgh/activity/trainSignUp/type/index.html | 2 +- .../trainSignUp/userAdjust/index.html | 2 +- .../trainSignUp/userAdjust/userInfo.js | 13 +- .../trainSignUp/userManage/index.html | 21 +- .../zhgh/welfare/addressManage/index.html | 2 +- .../platform/zhgh/welfare/mine/index.html | 6 +- .../platform/zhgh/welfare/mine/selectView.js | 6 + .../zhgh/welfare/projectMange/index.html | 23 +- .../platform/zhgh/welfare/select/index.html | 7 +- .../zhgh/welfare/select/optionSelect.js | 125 +++++++-- .../welfare/selectionSituation/index.html | 19 +- .../zhgh/welfare/statistics/index.html | 9 +- .../zhgh/welfare/userChoose/index.html | 6 +- .../zhgh/welfare/welfareUser/index.html | 6 +- .../zhghh5/activity/sports/applyUser.html | 2 +- .../zhghh5/activity/sports/eventList.html | 18 +- .../activity/trainSignUp/apply/index.html | 2 +- .../activity/trainSignUp/common/times.js | 39 +-- .../activity/trainSignUp/list/index.html | 2 +- .../activity/trainSignUp/mine/index.html | 2 +- .../activity/trainSignUp/scan/index.html | 2 +- .../platform/zhghh5/welfare/address/list.html | 2 +- .../platform/zhghh5/welfare/mine/list.html | 6 +- .../zhghh5/welfare/mine/selectView.js | 117 ++++---- .../platform/zhghh5/welfare/select/index.html | 249 +++++++++++------- .../platform/zhghh5/welfare/select/list.html | 6 +- .../zhghh5/welfare/select/success.html | 2 +- .../zhghh5/welfare/userChoose/index.html | 2 +- .../zhghh5/welfare/userChoose/list.html | 2 +- 55 files changed, 862 insertions(+), 424 deletions(-) diff --git a/src/main/java/com/budwk/app/zhgh/activity/sports/controller/ActivitySportsReadingController.java b/src/main/java/com/budwk/app/zhgh/activity/sports/controller/ActivitySportsReadingController.java index a56917a8..6219deb0 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/sports/controller/ActivitySportsReadingController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/sports/controller/ActivitySportsReadingController.java @@ -15,6 +15,7 @@ import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.Lang; import org.nutz.lang.util.NutMap; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; @@ -51,7 +52,7 @@ public class ActivitySportsReadingController { ActivityBasicUnit basicUnit = dao.fetch(ActivityBasicUnit.class, Cnd.where("id", "=", SecurityUtil.getUnitId())); Cnd cnd = Cnd.NEW(); cnd.and("close", "!=", true); - cnd.and("YEAR(startTime)", "=", year); + cnd.and("YEAR(applyStartTime)", "=", year); cnd.and("activityLevel", "=", activityLevel); if (!AuthUtil.hasRoleOr(RoleConstant.SCHOOL_UNION_ADMIN.name(), RoleConstant.SYSADMIN.name())) { if (activityLevel.equals("40002")) { @@ -73,6 +74,9 @@ public class ActivitySportsReadingController { public Result pageData(String id, String activityLevel) { ActivityBasicUnit basicUnit = dao.fetch(ActivityBasicUnit.class, Cnd.where("id", "=", SecurityUtil.getUnitId())); ActivitySchool activitySchool = dao.fetch(ActivitySchool.class, id); + if (Lang.isEmpty(activitySchool)) { + return Result.error("暂无活动"); + } Cnd cnd = Cnd.NEW(); Sql sql = Sqls.create(""" diff --git a/src/main/java/com/budwk/app/zhgh/activity/sports/h5Controller/H5ActivitySportsApplyUserController.java b/src/main/java/com/budwk/app/zhgh/activity/sports/h5Controller/H5ActivitySportsApplyUserController.java index 2804dbe3..b730e2d6 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/sports/h5Controller/H5ActivitySportsApplyUserController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/sports/h5Controller/H5ActivitySportsApplyUserController.java @@ -18,6 +18,8 @@ import com.budwk.app.zhgh.activity.sports.param.ActivitySportsApplyUserPageParam import com.budwk.app.zhgh.activity.sports.service.ActivitySportsApplyUserService; import org.nutz.dao.Cnd; import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.lang.Lang; @@ -87,7 +89,10 @@ public class H5ActivitySportsApplyUserController { ActivitySchoolEvent schoolEvent = dao.fetch(ActivitySchoolEvent.class, schoolEventId); ActivityEvent activityEvent = dao.fetch(ActivityEvent.class, eventId); ActivitySchool activitySchool = dao.fetch(ActivitySchool.class, activityId); - ActivitySchoolTeam schoolTeam = dao.fetch(ActivitySchoolTeam.class, teamId); + ActivitySchoolTeam schoolTeam = null; + if (teamId != null && !teamId.isEmpty()) { + schoolTeam = dao.fetch(ActivitySchoolTeam.class, teamId); + } ActivityBasicUnit basicUnit = dao.fetch(ActivityBasicUnit.class, Cnd.where("id", "=", SecurityUtil.getUnitId())); ActivityBasicUnion basicUnion = dao.fetch(ActivityBasicUnion.class, Cnd.where("id", "=", basicUnit.getUnionId())); @@ -105,10 +110,10 @@ public class H5ActivitySportsApplyUserController { } //如果不等于空代表是个人项目 if (ObjectUtil.isNotEmpty(activityEvent.getIsMenWomen())) { - if (activityEvent.getIsMenWomen() == 1 && !List.of("男","男性").contains(user.getSex())) { + if (activityEvent.getIsMenWomen() == 1 && !List.of("男", "男性").contains(user.getSex())) { return Result.error("当前项目只能男性能报名!"); } - if (activityEvent.getIsMenWomen() == 2 && !List.of("女","女性").contains(user.getSex())) { + if (activityEvent.getIsMenWomen() == 2 && !List.of("女", "女性").contains(user.getSex())) { return Result.error("当前项目只能女性能报名!"); } } @@ -182,8 +187,10 @@ public class H5ActivitySportsApplyUserController { schoolApply.setStatus(2); } schoolApply.setUnitname(user.getUnitName()); - schoolApply.setTeamId(schoolTeam.getId()); - schoolApply.setTeam(schoolTeam.getName()); + if (schoolTeam != null){ + schoolApply.setTeamId(schoolTeam.getId()); + schoolApply.setTeam(schoolTeam.getName()); + } schoolApply.setLoginname(user.getLoginname()); schoolApply.setUsername(user.getUsername()); schoolApply.setMobile(user.getMobile()); @@ -196,10 +203,23 @@ public class H5ActivitySportsApplyUserController { @At @SaCheckPermission("h5.activity.sports.applyUser") public Result cancelApply(@Valid String activityId, @Valid String eventId, @Valid String schoolEventId) { - int count = dao.count(ActivitySchoolApply.class, - Cnd.where(ActivitySchoolApply::getUserId, "=", SecurityUtil.getUserId()) - .and(ActivitySchoolApply::getActivityId, "=", activityId) - .and(ActivitySchoolApply::getEventId, "=", eventId).and(ActivitySchoolApply::getStatus, "=", 2)); + Sql sql = Sqls.create(""" + SELECT + COUNT(*) + FROM + activity_school_apply asa + LEFT JOIN activity_school act ON act.id = asa.activityId + WHERE + asa.userId = @userId + AND asa.activityId = @activityId + AND asa.eventId = @eventId + AND STATUS = 2 + AND JSON_CONTAINS(act.applyWay, '[1,2]') + """) + .setParam("userId", SecurityUtil.getUserId()) + .setParam("activityId", activityId) + .setParam("eventId", eventId); + int count = activitySportsApplyUserService.count(sql); if (count > 0) { return Result.error("您已报名成功无法取消,请联系管理员取消!"); } diff --git a/src/main/java/com/budwk/app/zhgh/activity/sports/models/ActivitySchool.java b/src/main/java/com/budwk/app/zhgh/activity/sports/models/ActivitySchool.java index e116bd62..df8f4636 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/sports/models/ActivitySchool.java +++ b/src/main/java/com/budwk/app/zhgh/activity/sports/models/ActivitySchool.java @@ -205,7 +205,7 @@ public class ActivitySchool extends BaseModel implements Serializable , SysHomeC sysHomeActivity.setName(this.getName()); sysHomeActivity.setCover(this.getImage()); sysHomeActivity.setUrl("/platform/activity/apply"); - sysHomeActivity.setH5Url(null); + sysHomeActivity.setH5Url("/platform/activity/apply/h5/index?id=" + this.getId()); sysHomeActivity.setStartDate(DateUtil.parseDate(this.getApplyStartTime())); sysHomeActivity.setEndDate(DateUtil.parseDate(this.getApplyEndTime())); sysHomeActivity.setAllowUserGroupId(this.getActivityGroupId()); diff --git a/src/main/java/com/budwk/app/zhgh/activity/sports/service/impl/ActivitySportsApplyUserServiceImpl.java b/src/main/java/com/budwk/app/zhgh/activity/sports/service/impl/ActivitySportsApplyUserServiceImpl.java index 0a9a8203..1dd56be8 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/sports/service/impl/ActivitySportsApplyUserServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/activity/sports/service/impl/ActivitySportsApplyUserServiceImpl.java @@ -310,7 +310,7 @@ public class ActivitySportsApplyUserServiceImpl extends BaseServiceImpl { if (Strings.isNotBlank(v.getString("birthday"))) { v.setv("birthday", v.getString("birthday").substring(0, 10)); - v.setv("age", cn.hutool.core.date.DateUtil.ageOfNow(v.getString("birthday"))); + v.setv("age", DateUtil.ageOfNow(v.getString("birthday"))); } else { v.setv("birthday", null); v.setv("age", 0); @@ -344,7 +344,7 @@ public class ActivitySportsApplyUserServiceImpl extends BaseServiceImpl { if (Strings.isNotBlank(v.getBirthday())) { - v.setAge(cn.hutool.core.date.DateUtil.ageOfNow(v.getBirthday())); + v.setAge(DateUtil.ageOfNow(v.getBirthday())); } }); @@ -393,6 +393,7 @@ public class ActivitySportsApplyUserServiceImpl extends BaseServiceImpl list = dao.query(TrainSignUpActivity.class, Cnd.NEW().andEX("year", "=", year).desc("activityStartTime")); - if(!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_CHAIRMAN.name())) { - // 获取当前登录用户的工会 - String unionId = SecurityUtil.getUnionId(); - // 获取当前登录用户的协会 - List clubIds = SecurityUtil.getClubIds(); + if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), RoleConstant.SCHOOL_UNION_CHAIRMAN.name())) { + // 获取当前登录用户的工会 + String unionId = SecurityUtil.getUnionId(); + // 获取当前登录用户的协会 + List clubIds = SecurityUtil.getClubIds(); - List result = new ArrayList<>(); - for (TrainSignUpActivity activity : list) { - if(AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name())) { - if(activity.getHostUnits().contains(unionId) || activity.getHelpUnits().contains(unionId)) { - result.add(activity); - } - } - if(AuthUtil.hasRoleOr(RoleConstant.CLUB_PRESIDENT.name(), RoleConstant.CLUB_OPERATOR.name())) { - if(clubIds.stream().anyMatch(activity.getHostUnits()::contains) || clubIds.stream().anyMatch(activity.getHelpUnits()::contains)) { - result.add(activity); - } - } - } - return Result.success(result); - } - return Result.success(list); + List result = new ArrayList<>(); + for (TrainSignUpActivity activity : list) { + if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name())) { + if (activity.getHostUnits().contains(unionId) || activity.getHelpUnits().contains(unionId)) { + result.add(activity); + } + } + if (AuthUtil.hasRoleOr(RoleConstant.CLUB_PRESIDENT.name(), RoleConstant.CLUB_OPERATOR.name())) { + if (clubIds.stream().anyMatch(activity.getHostUnits()::contains) || clubIds.stream().anyMatch(activity.getHelpUnits()::contains)) { + result.add(activity); + } + } + } + return Result.success(result); + } + return Result.success(list); } /** @@ -140,13 +132,13 @@ public class TrainSignUpActivityStatisticsController { return Result.success(trainSignUpActivityStatisticsService.getTaleColumnInfo(courseId)); } - @At - @ApiOperation("获取时间信息") - @SaCheckPermission("trainSignUp.statistics") - public Result selectTimes(@Param("courseId") String courseId) { - List activityCourses = dao.query(TrainSignUpActivityCourse.class, Cnd.where("courseId", "=", courseId).asc("courseStartTime")); - return Result.success(activityCourses); - } + @At + @ApiOperation("获取时间信息") + @SaCheckPermission("trainSignUp.statistics") + public Result selectTimes(@Param("courseId") String courseId) { + List activityCourses = dao.query(TrainSignUpActivityCourse.class, Cnd.where("courseId", "=", courseId).asc("courseStartTime")); + return Result.success(activityCourses); + } /** * 培训班上课签到信息 @@ -158,8 +150,8 @@ public class TrainSignUpActivityStatisticsController { @ApiOperation("获取签到信息") @SaCheckPermission("trainSignUp.statistics") public Result getSignInfo(PageForm pageForm, - @Param("courseId") String courseId, - String timeId) { + @Param("courseId") String courseId, + String timeId) { return Result.success(trainSignUpActivityStatisticsService.getSignInfo(pageForm, courseId, timeId)); } @@ -172,21 +164,30 @@ public class TrainSignUpActivityStatisticsController { return Result.success(); } - @At - @ApiOperation("设置签到") - @SaCheckPermission("trainSignUp.statistics") - public Result adjustSign(@Param("id") String id) { - TrainSignUpUserCourse userCourse = dao.fetch(TrainSignUpUserCourse.class, id); - if(userCourse.isAttend()) { - userCourse.setAttend(false); - userCourse.setAttendTime(null); - } else { - userCourse.setAttend(true); - userCourse.setAttendTime(userCourse.getCourseStartTime()); - } - dao.update(userCourse); - return Result.success(); - } + @At + @ApiOperation("设置签到") + @SaCheckPermission("trainSignUp.statistics") + public Result adjustSign(@Param("id") String id) { + TrainSignUpUserCourse userCourse = dao.fetch(TrainSignUpUserCourse.class, id); + Date courseStartTime = userCourse.getCourseStartTime(); + Date courseEndTime = userCourse.getCourseEndTime(); + Date now = new Date(); + if (courseStartTime == null || courseStartTime.after(now)) { + return Result.error("签到时间未开始!"); + } + if (courseEndTime != null && courseEndTime.before(now)) { + return Result.error("签到已结束!"); + } + if (userCourse.isAttend()) { + userCourse.setAttend(false); + userCourse.setAttendTime(null); + } else { + userCourse.setAttend(true); + userCourse.setAttendTime(userCourse.getCourseStartTime()); + } + dao.update(userCourse); + return Result.success(); + } @At @Ok("void") @@ -236,7 +237,7 @@ public class TrainSignUpActivityStatisticsController { for (TrainSignUpCourse c : courseList) { String k = c.getCourseName(); - List v = userList.stream().filter(x -> x.getString("courseName").equals(k)).collect(Collectors.toList()); + List v = userList.stream().filter(x -> StrUtil.isNotBlank(x.getString("courseName")) && x.getString("courseName").equals(k)).collect(Collectors.toList()); ExportParams userExportParams = new ExportParams(); userExportParams.setSheetName(k); userExportParams.setType(ExcelType.HSSF); @@ -251,7 +252,7 @@ public class TrainSignUpActivityStatisticsController { entity.setName(column.getColumnName()); entity.setKey(column.getColumnCode()); entity.setWidth(20); - if (column.getColumnFormType().equals("FILE")) { + if ("FILE".equals(column.getColumnFormType())) { entity.setType(2); entity.setExportImageType(2); } @@ -267,9 +268,9 @@ public class TrainSignUpActivityStatisticsController { userSignData.put(cv.getString("columnCode"), cv.getString("columnValue")); } else { if (StrUtil.isNotBlank(cv.getString("columnValue"))) { - List columnValue = Json.fromJsonAsList(JSONObject.class, cv.getString("columnValue")); + List columnValue = cv.getAsList("columnValue", NutMap.class); if (columnValue.size() == 1) { - JSONObject sysFile = columnValue.get(0); + NutMap sysFile = columnValue.get(0); Sys_file file = dao.fetch(Sys_file.class, Cnd.where(Sys_file::getDownloadPath, "=", sysFile.get("url"))); byte[] imageBytes = SysFileMinIoUtil.getFileBytes(file.getBucket(), file.getStoragePath()); if (imageBytes.length > 0) { @@ -285,6 +286,7 @@ public class TrainSignUpActivityStatisticsController { Map userExportMap = new HashMap<>(); userExportMap.put("name", k); + userExportParams.setType(ExcelType.HSSF); userExportMap.put("title", userExportParams); userExportMap.put("entity", currentEntities); userExportMap.put("data", v); @@ -297,10 +299,7 @@ public class TrainSignUpActivityStatisticsController { ExcelExportService service = new ExcelExportService(); service.createSheetForMap(workbook, (ExportParams) map.get("title"), (List) map.get("entity"), (Collection) map.get("data")); } - workbook.write(response.getOutputStream()); - workbook.close(); - - CommonDownloadUtil.download(activity.getActivityName() + "报名人员名单" + ".xlsx", workbook, response); + CommonDownloadUtil.download(activity.getActivityName() + "报名人员名单" + ".xls", workbook, response); } catch (Exception e) { e.printStackTrace(); } diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/TrainSignUpActivityService.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/TrainSignUpActivityService.java index f7a3c547..85999dcd 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/TrainSignUpActivityService.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/TrainSignUpActivityService.java @@ -5,9 +5,7 @@ import com.budwk.app.base.param.PageForm; import com.budwk.app.base.service.BaseService; import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpActivity; import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpCourse; -import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpType; import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpUser; -import io.swagger.models.auth.In; import org.nutz.dao.Cnd; import org.nutz.lang.util.NutMap; diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/TrainSignUpActivityStatisticsService.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/TrainSignUpActivityStatisticsService.java index f23dde86..9e353805 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/TrainSignUpActivityStatisticsService.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/TrainSignUpActivityStatisticsService.java @@ -7,7 +7,6 @@ import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpUser; import org.nutz.lang.util.NutMap; import java.util.List; -import java.util.Map; /** * @author zxy diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/impl/TrainSignUpActivityServiceImpl.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/impl/TrainSignUpActivityServiceImpl.java index 008447b4..13d4616c 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/impl/TrainSignUpActivityServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/impl/TrainSignUpActivityServiceImpl.java @@ -7,10 +7,6 @@ import com.budwk.app.base.service.impl.BaseServiceImpl; import com.budwk.app.sys.models.Sys_home_activity; import com.budwk.app.sys.views.View_user; import com.budwk.app.web.commons.auth.utils.SecurityUtil; -import com.budwk.app.zhgh.activity.family.models.FamilyActivity; -import com.budwk.app.zhgh.activity.family.models.FamilyCourse; -import com.budwk.app.zhgh.activity.family.models.FamilyType; -import com.budwk.app.zhgh.activity.family.service.FamilyActivityStatisticsService; import com.budwk.app.zhgh.activity.trainSignUp.models.*; import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpActivityService; import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpActivityStatisticsService; @@ -31,7 +27,6 @@ import org.nutz.lang.Lang; import org.nutz.lang.util.NutMap; import java.util.*; -import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; /** @@ -91,6 +86,24 @@ public class TrainSignUpActivityServiceImpl extends BaseServiceImpl newIds = courseList.stream() + .map(TrainSignUpCourse::getId) + .filter(StrUtil::isNotBlank) + .collect(Collectors.toSet()); + + List oldCourses = dao().query(TrainSignUpCourse.class, Cnd.where("activityId", "=", activity.getId())); + + Set oldIds = oldCourses.stream() + .map(TrainSignUpCourse::getId) + .filter(StrUtil::isNotBlank) + .collect(Collectors.toSet()); + + Set deletedIds = Sets.difference(oldIds, newIds).immutableCopy(); + if(Lang.isNotEmpty(deletedIds)) { + dao().clear(TrainSignUpCourse.class, Cnd.where("id", "in", deletedIds)); + } + for (TrainSignUpCourse course : courseList) { course.setActivityId(activity.getId()); dao().insertOrUpdate(course); diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/impl/TrainSignUpActivityStatisticsServiceImpl.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/impl/TrainSignUpActivityStatisticsServiceImpl.java index 3403cb3e..84e8ba08 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/impl/TrainSignUpActivityStatisticsServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/impl/TrainSignUpActivityStatisticsServiceImpl.java @@ -4,10 +4,10 @@ import cn.hutool.core.util.StrUtil; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.param.PageForm; import com.budwk.app.base.service.impl.BaseServiceImpl; -import com.budwk.app.sys.models.Sys_user; -import com.budwk.app.zhgh.activity.family.models.FamilyType; -import com.budwk.app.zhgh.activity.family.models.FamilyUser; -import com.budwk.app.zhgh.activity.trainSignUp.models.*; +import com.budwk.app.zhgh.activity.trainSignUp.models.TrainMobileSignColumn; +import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpCourse; +import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpType; +import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpUser; import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpActivityStatisticsService; import lombok.extern.slf4j.Slf4j; import org.nutz.dao.Cnd; @@ -20,7 +20,7 @@ import org.nutz.json.Json; import org.nutz.lang.Lang; import org.nutz.lang.util.NutMap; -import java.util.*; +import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/impl/TrainSignUpUserServiceImpl.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/impl/TrainSignUpUserServiceImpl.java index 64e878ef..e06c6690 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/impl/TrainSignUpUserServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/service/impl/TrainSignUpUserServiceImpl.java @@ -1,8 +1,10 @@ package com.budwk.app.zhgh.activity.trainSignUp.service.impl; +import cn.hutool.core.util.StrUtil; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.param.PageForm; import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.base.utils.PageUtil; import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpBlackList; import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpBlackListService; import org.nutz.dao.Cnd; @@ -42,6 +44,8 @@ public class TrainSignUpUserServiceImpl extends BaseServiceImpl courseEndTime $var) AS absentCount, + ( SELECT count( 1 ) FROM train_sign_up_user_course WHERE userId = tsuu.userId AND isAttend = 1 and tsuu.state!=2 AND now()> courseEndTime $var) AS signCount, + ( SELECT count( 1 ) FROM train_sign_up_user_course WHERE userId = tsuu.userId and tsuu.state!=2 $var) AS totalCount, if(tsubl.isDisabled=1,true,false) isDisabled, group_CONCAT( tsuc.courseName ) AS courseNames FROM @@ -51,7 +55,6 @@ public class TrainSignUpUserServiceImpl extends BaseServiceImpl tzList = listMap(tzSql); //查询代表 @@ -155,7 +155,8 @@ public class TeacherCongressDelegateServiceImpl extends BaseServiceImpl delegateAllList = listMap(delegateSql); for (NutMap delegation : delegationList) { - delegation.put("tz", tzList.stream().filter(tz -> tz.getString("tcDelegationId").equals(delegation.getString("id"))).toList()); - //过滤本代表团的代表 - List delegateList = delegateAllList.stream() - .filter(delegate -> delegation.getString("id").equals(delegate.getString("delegationId"))) - .collect(Collectors.toList()); - Comparator comparator = Comparator.comparing((NutMap map) -> { - String userName = map.getString("userName"); - if (userName == null || userName.isEmpty()) { - return 0; - } - // 获取第一个字的笔画数作为主排序键 - return getStrokeCount(String.valueOf(userName.charAt(0))); - }).thenComparing(map -> { - String userName = map.getString("userName"); - // 如果名字长度大于 1,获取第二个字的笔画数 - if (userName != null && userName.length() > 1) { - return getStrokeCount(String.valueOf(userName.charAt(1))); - } - return 0; - }); - delegateList.sort(comparator); - //按5人平均分组 - List> delegateGroupList = ListUtil.split(delegateList, 5); + delegation.put("tz", tzList.stream().filter(tz -> tz.getString("tcDelegationId").equals(delegation.getString("id")) + && tz.getString("roleId").equals(tzRole.getId())).toList()); + delegation.put("ftz", tzList.stream().filter(tz -> tz.getString("tcDelegationId").equals(delegation.getString("id")) + && tz.getString("roleId").equals(ftzRole.getId())).toList()); - List buildMaps = new ArrayList<>(); - for (int i = 0; i < delegateGroupList.size(); i++) { - NutMap buildMap = NutMap.NEW(); - for (int j = 0; j < delegateGroupList.get(i).size(); j++) { - delegateGroupList.get(i).get(j).put("username" + j, delegateGroupList.get(i).get(j).getString("userName")); - delegateGroupList.get(i).get(j).put("sex" + j, delegateGroupList.get(i).get(j).getString("sex")); - buildMap.put("username" + j, delegateGroupList.get(i).get(j).getString("userName")); - if(StrUtil.isNotBlank(delegateGroupList.get(i).get(j).getString("sex"))) { - buildMap.put("sex" + j, "(" + delegateGroupList.get(i).get(j).getString("sex") + ")"); - } + List dbDataFormatList = List.of(RoleConstant.TEACHER_CONGRESS_DELEGATE_FORMAL, RoleConstant.TEACHER_CONGRESS_DELEGATE_ATTENDANCE); + + for (Object role : dbDataFormatList) { + //过滤本代表团的代表 + List delegateList = delegateAllList.stream() + .filter(delegate -> delegation.getString("id").equals(delegate.getString("delegationId")) + && delegate.getString("roleCode").equals(role.toString())) + .collect(Collectors.toList()); + Comparator comparator = Comparator.comparing((NutMap map) -> { + String userName = map.getString("userName"); + if (userName == null || userName.isEmpty()) { + return 0; + } + // 获取第一个字的笔画数作为主排序键 + return getStrokeCount(String.valueOf(userName.charAt(0))); + }).thenComparing(map -> { + String userName = map.getString("userName"); + // 如果名字长度大于 1,获取第二个字的笔画数 + if (userName != null && userName.length() > 1) { + return getStrokeCount(String.valueOf(userName.charAt(1))); + } + return 0; + }); + delegateList.sort(comparator); + //按5人平均分组 + List> delegateGroupList = ListUtil.split(delegateList, 5); + + List buildMaps = new ArrayList<>(); + for (int i = 0; i < delegateGroupList.size(); i++) { + NutMap buildMap = NutMap.NEW(); + for (int j = 0; j < delegateGroupList.get(i).size(); j++) { + delegateGroupList.get(i).get(j).put("username" + j, delegateGroupList.get(i).get(j).getString("userName")); + delegateGroupList.get(i).get(j).put("sex" + j, delegateGroupList.get(i).get(j).getString("sex")); + buildMap.put("username" + j, delegateGroupList.get(i).get(j).getString("userName")); + if (StrUtil.isNotBlank(delegateGroupList.get(i).get(j).getString("sex"))) { + buildMap.put("sex" + j, "(" + delegateGroupList.get(i).get(j).getString("sex") + ")"); + } + } + buildMaps.add(buildMap); + } + if (role.equals(RoleConstant.TEACHER_CONGRESS_DELEGATE_FORMAL)) { + delegation.put("dbs", buildMaps); + } else { + delegation.put("tyDbs", buildMaps); } - buildMaps.add(buildMap); } - delegation.put("dbs", buildMaps); } LoopRowTableRenderPolicy hackLoopTableRenderPolicy = new LoopRowTableRenderPolicy(); diff --git a/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareSelectionSituationController.java b/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareSelectionSituationController.java index 4c23504f..c66815b0 100644 --- a/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareSelectionSituationController.java +++ b/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareSelectionSituationController.java @@ -106,6 +106,14 @@ public class WelfareSelectionSituationController { situationService.exportXlsx(pageForm, response); } + @At + @SaCheckPermission("welfare.selection.situation") + @Ok("void") + @ApiOperation("导出Excel") + public void receiveXlsx(@Valid @Param("pageForm") WelfareSelectionSituationPageForm pageForm, HttpServletResponse response) { + situationService.receiveXlsx(pageForm, response); + } + @At @SaCheckLogin public Result getMobileByUserId(String userId) { diff --git a/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareUserSelectController.java b/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareUserSelectController.java index 44dbddfb..4bc86b91 100644 --- a/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareUserSelectController.java +++ b/src/main/java/com/budwk/app/zhgh/welfare/controller/WelfareUserSelectController.java @@ -72,7 +72,7 @@ public class WelfareUserSelectController { cnd.andEX("YEAR(wp.choiceTimeStart)", "in", year); cnd.and("wp.isDisabled", "=", 0); cnd.groupBy("wp.id"); - cnd.desc("YEAR(wp.choiceTimeStart)"); + cnd.desc("wp.choiceTimeStart"); sql.setCondition(cnd); Pagination pagination = welfareProjectService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); return Result.success(pagination); diff --git a/src/main/java/com/budwk/app/zhgh/welfare/model/WelfareUserSelection.java b/src/main/java/com/budwk/app/zhgh/welfare/model/WelfareUserSelection.java index e258a361..0ae808cc 100644 --- a/src/main/java/com/budwk/app/zhgh/welfare/model/WelfareUserSelection.java +++ b/src/main/java/com/budwk/app/zhgh/welfare/model/WelfareUserSelection.java @@ -50,6 +50,11 @@ public class WelfareUserSelection extends BaseModel implements Serializable { @ColDefine(type = ColType.VARCHAR, width = 32) private String selectUserId; + @Column + @Comment("选择用户") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String userName; + @Column @Comment("选择时间") @ColDefine(type = ColType.DATETIME) diff --git a/src/main/java/com/budwk/app/zhgh/welfare/service/WelfareSelectionSituationService.java b/src/main/java/com/budwk/app/zhgh/welfare/service/WelfareSelectionSituationService.java index 2d356f8d..21aefdec 100644 --- a/src/main/java/com/budwk/app/zhgh/welfare/service/WelfareSelectionSituationService.java +++ b/src/main/java/com/budwk/app/zhgh/welfare/service/WelfareSelectionSituationService.java @@ -12,5 +12,6 @@ public interface WelfareSelectionSituationService extends BaseService impleme WHERE wl.projectId = @welfareId AND wpus.selectOptionId = @selectOptionId and wpus.selectNum!=0 - + """).setParam("welfareId", projectId).setParam("selectOptionId", optionId); List mapList = listMap(sql); @@ -345,7 +345,7 @@ public class WelfareListServiceImpl extends BaseServiceImpl impleme FROM `vw_user` $condition - """); + """); Cnd cnd = Cnd.NEW(); cnd.andEX("id", "not in", userIds); cnd.and("unionCode", "is not", null); @@ -392,7 +392,7 @@ public class WelfareListServiceImpl extends BaseServiceImpl impleme t2.birthday FROM `welfare_list` t1 - LEFT JOIN sys_user t2 ON t2.id = t1.userId + LEFT JOIN `vw_user` t2 ON t2.id = t1.userId $condition """); Cnd cnd = Cnd.NEW(); @@ -408,6 +408,9 @@ public class WelfareListServiceImpl extends BaseServiceImpl impleme if (pageForm.getBirthMonths() != null && pageForm.getBirthMonths().length > 0) { cnd.andEX("MONTH(t2.birthday)", "in", pageForm.getBirthMonths()); } + if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name()) || AuthUtil.hasRole(RoleConstant.BRANCH_UNION_ADMIN.name())) { + cnd.and("t2.unionId", "=", SecurityUtil.getUnionId()); + } cnd.andEX("t1.welfareUnitId", "in", pageForm.getUnitIds()); cnd.andEX("t1.welfareUnionId", "=", pageForm.getUnionId()); cnd.andEX("t1.personType", "in", pageForm.getPersonTypes()); @@ -467,7 +470,7 @@ public class WelfareListServiceImpl extends BaseServiceImpl impleme cnd.andEX("u.personType", "in", pageForm.getPersonTypes()); cnd.andEX("u.preparedBy", "in", pageForm.getPreparedBys()); cnd.andEX("u.userState", "in", pageForm.getUserStates()); - cnd.andEX("u.member","=",pageForm.getIsMember()); + cnd.andEX("u.member", "=", pageForm.getIsMember()); if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { cnd.asc("u.unionCode"); @@ -519,7 +522,7 @@ public class WelfareListServiceImpl extends BaseServiceImpl impleme cnd.andEX("personType", "in", pageForm.getPersonTypes()); cnd.andEX("preparedBy", "in", pageForm.getPreparedBys()); cnd.andEX("userState", "in", pageForm.getUserStates()); - cnd.andEX("member","=",pageForm.getIsMember()); + cnd.andEX("member", "=", pageForm.getIsMember()); if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { cnd.asc("unionCode"); diff --git a/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareProjectServiceImpl.java b/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareProjectServiceImpl.java index 04a161d4..d39a6e53 100644 --- a/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareProjectServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareProjectServiceImpl.java @@ -20,9 +20,7 @@ import org.nutz.lang.util.NutMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -42,7 +40,7 @@ public class WelfareProjectServiceImpl extends BaseServiceImpl i @Override public WelfareProject projectInfo(String projectId) { WelfareProject project = fetch(projectId); - fetchLinks(project, "options",Cnd.NEW().asc("optionSort")); + fetchLinks(project, "options", Cnd.NEW().asc("optionSort")); return project; } @@ -63,9 +61,27 @@ public class WelfareProjectServiceImpl extends BaseServiceImpl i public void updateProject(WelfareProject project) { // 更新项目 update(project); - dao().clear(WelfareProjectSubjectOption.class, Cnd.where(WelfareProjectSubjectOption::getWelfareId, "=", project.getId())); + List optionList = dao().query(WelfareProjectSubjectOption.class, Cnd.where(WelfareProjectSubjectOption::getWelfareId, "=", project.getId())); + List dbOptionIds = optionList.stream() + .map(WelfareProjectSubjectOption::getId) + .toList(); + // 2. 获取 project 中的所有选项 ID(注意 null 安全) + List projectOptionIds = project.getOptions() == null ? + Collections.emptyList() : + project.getOptions().stream() + .map(WelfareProjectSubjectOption::getId) + .filter(Objects::nonNull) // 避免 null id + .toList(); + // 3. 找出需要删除的 ID:在 db 中但不在 project 中 + List toDeleteIds = dbOptionIds.stream() + .filter(id -> !projectOptionIds.contains(id)) + .collect(Collectors.toList()); + // 4. 批量删除 + if (!toDeleteIds.isEmpty()) { + dao().clear(WelfareProjectSubjectOption.class, + Cnd.where(WelfareProjectSubjectOption::getId, "in", toDeleteIds)); + } - // 新增或更新选项 for (WelfareProjectSubjectOption option : project.getOptions()) { option.setWelfareId(project.getId()); dao().insertOrUpdate(option); diff --git a/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareSelectionSituationServiceImpl.java b/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareSelectionSituationServiceImpl.java index 40bf1a2f..24cc8076 100644 --- a/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareSelectionSituationServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareSelectionSituationServiceImpl.java @@ -4,30 +4,37 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil; 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.util.StrUtil; import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.service.impl.BaseServiceImpl; import com.budwk.app.base.utils.CommonDownloadUtil; import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.sys.models.Sys_file; +import com.budwk.app.sys.services.SysFileService; +import com.budwk.app.sys.utils.SysFileMinIoUtil; import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.zhgh.welfare.model.WelfareList; import com.budwk.app.zhgh.welfare.model.WelfareProject; +import com.budwk.app.zhgh.welfare.model.WelfareProjectSubjectOption; import com.budwk.app.zhgh.welfare.param.WelfareSelectionSituationPageForm; import com.budwk.app.zhgh.welfare.service.WelfareSelectionSituationService; import lombok.extern.slf4j.Slf4j; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Workbook; import org.nutz.dao.Cnd; import org.nutz.dao.Dao; import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.lang.util.NutMap; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; @IocBean(args = {"refer:dao"}) @Slf4j @@ -36,6 +43,10 @@ public class WelfareSelectionSituationServiceImpl extends BaseServiceImpl list = listMap(sql); + List optionList = dao().query(WelfareProjectSubjectOption.class, Cnd.where(WelfareProjectSubjectOption::getWelfareId, "=", pageForm.getProjectId()).asc("optionSort")); + + for (NutMap map : list) { + if (map.get("selectOptionIds") != null) { + String[] selectOptionIds = map.getString("selectOptionIds").split(","); + for (WelfareProjectSubjectOption option : optionList) { + if (Arrays.asList(selectOptionIds).contains(option.getId())) { + map.put(option.getOptionName(), "√"); + } + } + } + if (map.get("userSign") != null) { + try { + Sys_file file = dao().fetch(Sys_file.class, Cnd.where(Sys_file::getDownloadPath, "=", map.getString("userSign"))); + byte[] userSignBytes = SysFileMinIoUtil.getFileBytes(file.getBucket(), file.getStoragePath()); + map.put("userSign", userSignBytes); + } catch (Exception e) { + e.printStackTrace(); + log.error("下载图片失败", e); + } + } + } + + List> safeList = list.stream().map(nutMap -> { + Map map = new HashMap<>(nutMap); + return map; + }).toList(); + + // 分组 + Map>> listMap = safeList.stream() + .collect(Collectors.groupingBy(n -> (String) n.get("welfareUnionName"))); + + // 构建 Excel 列 + List entities = new ArrayList<>(); + entities.add(new ExcelExportEntity("工号", "loginName", 20)); + entities.add(new ExcelExportEntity("姓名", "userName", 20)); + optionList.forEach(option -> { + entities.add(new ExcelExportEntity(option.getOptionName(), option.getOptionName(), 20)); + }); + ExcelExportEntity userSignEntity = new ExcelExportEntity("签字", "userSign", 20); + userSignEntity.setType(2); + userSignEntity.setExportImageType(2); + entities.add(userSignEntity); + + // 导出 + Workbook workbook = new HSSFWorkbook(); + listMap.forEach((k, v) -> { + ExcelExportService service = new ExcelExportService(); + ExportParams exportParams = new ExportParams(); + exportParams.setSheetName(k); + exportParams.setType(ExcelType.HSSF); + service.createSheetForMap(workbook, exportParams, entities, v); + }); + + CommonDownloadUtil.download("领取表.xls", workbook, response); + } } diff --git a/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareStatisticsServiceImpl.java b/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareStatisticsServiceImpl.java index c04d6012..2b7fc9c2 100644 --- a/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareStatisticsServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/welfare/service/impl/WelfareStatisticsServiceImpl.java @@ -7,11 +7,14 @@ 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.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.param.PageForm; import com.budwk.app.base.service.impl.BaseServiceImpl; import com.budwk.app.base.utils.CommonDownloadUtil; import com.budwk.app.sys.models.Sys_union; +import com.budwk.app.web.commons.auth.utils.AuthUtil; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.zhgh.welfare.model.WelfareProject; import com.budwk.app.zhgh.welfare.model.WelfareProjectSubjectOption; import com.budwk.app.zhgh.welfare.service.WelfareStatisticsService; @@ -44,9 +47,15 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl unions = dao().query(Sys_union.class, Cnd.NEW().andEX(Sys_union::getId, "=", unionId).asc(Sys_union::getUnionCode)); + List unions; + if (AuthUtil.hasRole(RoleConstant.BRANCH_UNION_CHAIRMAN.name()) || AuthUtil.hasRole(RoleConstant.BRANCH_UNION_ADMIN.name())) { + unions = dao().query(Sys_union.class, Cnd.NEW().andEX(Sys_union::getId, "=", SecurityUtil.getUnionId()).asc(Sys_union::getUnionCode)); + } else { + unions = dao().query(Sys_union.class, Cnd.NEW().andEX(Sys_union::getId, "=", unionId).asc(Sys_union::getUnionCode)); + } List mapUnions = BeanUtil.copyToList(unions, NutMap.class); + // 表格动态列数据 List dynamicTableColumns = new ArrayList<>() {{ add(NutMap.NEW().addv("label", "分工会").addv("prop", "name")); @@ -97,11 +106,12 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl StrUtil.isNotBlank(v.getString("welfareUnionId")) && v.getString("welfareUnionId", "").equals(union.getString("id"))).count(); + long teacherSum = welfareSelectionList.stream().filter(v -> StrUtil.isNotBlank(v.getString("welfareUnionId")) && v.getString("welfareUnionId", "").equals(union.getString("id"))).count(); union.put("teacherSum", teacherSum); + // 已选人数 - long selectedNum = welfareSelectionList.stream().filter(v -> StrUtil.isNotBlank(v.getString("welfareUnionId")) && v.getString("welfareUnionId", "").equals(union.getString("id")) && v.getBoolean("has_selected")).count(); + long selectedNum = welfareSelectionList.stream().filter(v -> StrUtil.isNotBlank(v.getString("welfareUnionId")) && v.getString("welfareUnionId", "").equals(union.getString("id")) && v.getBoolean("has_selected")).count(); union.put("selectedNum", selectedNum); // 未选人数 @@ -109,8 +119,25 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl StrUtil.isNotBlank(v.getString("welfareUnionId")) && v.getString("welfareUnionId").equals(union.getString("id")) && StrUtil.isNotBlank(v.getString("selectOptionId")) && v.getString("selectOptionId").equals(option.getId())).map(v -> v.getString("selectUserId")).distinct().count(); - union.put(option.getId(), count); + int total = userSelections.stream() + .filter(v -> + StrUtil.isNotBlank(v.getString("welfareUnionId")) + && v.getString("welfareUnionId").equals(union.getString("id")) + && StrUtil.isNotBlank(v.getString("selectOptionId")) + && v.getString("selectOptionId").equals(option.getId()) + && StrUtil.isNotBlank(v.getString("selectUserId")) // 确保 userId 有效 + ) + .collect(Collectors.toMap( + v -> v.getString("selectUserId"), + v -> v, + (existing, replacement) -> existing // 保留第一个 + // 不传第四个参数,默认用 HashMap + )) + .values() + .stream() + .mapToInt(v -> v.getInt("selectNum")) + .sum(); + union.put(option.getId(), total); } } @@ -305,7 +332,6 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl entities = new ArrayList<>(); entities.add(new ExcelExportEntity("工号", "loginName", 20)); entities.add(new ExcelExportEntity("姓名", "userName", 20)); - entities.add(new ExcelExportEntity("姓名", "userName", 20)); entities.add(new ExcelExportEntity("单位", "welfareUnitName", 20)); entities.add(new ExcelExportEntity("工会", "welfareUnionName", 20)); @@ -360,7 +386,7 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl entities = new ArrayList<>(); entities.add(new ExcelExportEntity("分工会", "name", 20)); - entities.add(new ExcelExportEntity("本次福利会员人数", "teacherSum", 20)); - entities.add(new ExcelExportEntity("已选人数", "selectedNum", 20)); - entities.add(new ExcelExportEntity("未选人数", "unSelectedNum", 20)); + ExcelExportEntity teacherSumEntity = new ExcelExportEntity("本次福利会员人数", "teacherSum", 20); + teacherSumEntity.setType(10); + entities.add(teacherSumEntity); + ExcelExportEntity selectedNumEntity = new ExcelExportEntity("已选人数", "selectedNum", 20); + selectedNumEntity.setType(10); + entities.add(selectedNumEntity); + ExcelExportEntity unSelectedNumEntity = new ExcelExportEntity("未选人数", "unSelectedNum", 20); + unSelectedNumEntity.setType(10); + entities.add(unSelectedNumEntity); // 选项数据 List welfareOptions = dao().query(WelfareProjectSubjectOption.class, Cnd.where(WelfareProjectSubjectOption::getWelfareId, "=", projectId)); for (WelfareProjectSubjectOption welfareOption : welfareOptions) { - entities.add(new ExcelExportEntity(welfareOption.getOptionName(), welfareOption.getId(), 20)); + ExcelExportEntity entity = new ExcelExportEntity(welfareOption.getOptionName(), welfareOption.getId(), 20); + entity.setType(10); + entities.add(entity); } // 查询福利名单以及查询出选项数据 @@ -442,6 +476,7 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl welfareSelectionList = listMap(sql); @@ -457,6 +492,7 @@ public class WelfareStatisticsServiceImpl extends BaseServiceImpl v.getString("selectUserId")).distinct().count(); - union.put(option.getId(), count); + int total = userSelections.stream() + .filter(v -> + StrUtil.isNotBlank(v.getString("welfareUnionId")) + && v.getString("welfareUnionId").equals(union.getString("id")) + && StrUtil.isNotBlank(v.getString("selectOptionId")) + && v.getString("selectOptionId").equals(option.getId()) + && StrUtil.isNotBlank(v.getString("selectUserId")) // 确保 userId 有效 + ) + .collect(Collectors.toMap( + v -> v.getString("selectUserId"), + v -> v, + (existing, replacement) -> existing // 保留第一个 + // 不传第四个参数,默认用 HashMap + )) + .values() + .stream() + .mapToInt(v -> v.getInt("selectNum")) + .sum(); + union.put(option.getId(), total); } } diff --git a/src/main/resources/views/platform/zhgh/activity/trainSignUp/apply/index.html b/src/main/resources/views/platform/zhgh/activity/trainSignUp/apply/index.html index 78313d2d..a7c74d82 100644 --- a/src/main/resources/views/platform/zhgh/activity/trainSignUp/apply/index.html +++ b/src/main/resources/views/platform/zhgh/activity/trainSignUp/apply/index.html @@ -101,7 +101,7 @@ layout("/layouts/platform.html"){ - - -