diff --git a/src/main/java/io/v/nutz/zhgh/activity/controller/school/ActivityApplyController.java b/src/main/java/io/v/nutz/zhgh/activity/controller/school/ActivityApplyController.java index 348ca67..cf7691c 100644 --- a/src/main/java/io/v/nutz/zhgh/activity/controller/school/ActivityApplyController.java +++ b/src/main/java/io/v/nutz/zhgh/activity/controller/school/ActivityApplyController.java @@ -19,6 +19,7 @@ import io.v.nutz.zhgh.activity.services.ActivitySchoolTeamService; import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.nutz.aop.interceptor.async.Async; +import org.nutz.dao.Chain; import org.nutz.dao.Cnd; import org.nutz.dao.Sqls; import org.nutz.dao.entity.Record; @@ -27,6 +28,7 @@ import org.nutz.dao.util.cri.SqlExpressionGroup; import org.nutz.dao.util.cri.Static; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.Lang; import org.nutz.lang.Strings; import org.nutz.lang.util.NutMap; import org.nutz.mvc.annotation.At; @@ -81,25 +83,23 @@ public class ActivityApplyController { Cnd cnd = CndPlus.create(); Sql sql = Sqls.create(""" SELECT - apply.*,team.`name`,acts.name actsname,ev.allName + apply.*, + team.`name`, + acts.NAME actsname, + ev.allName, + us.username applyUserName FROM - Activity_School_Apply apply LEFT JOIN activity_school_team team ON apply.teamId=team.id - LEFT JOIN activity_school acts ON acts.id=apply.activityId - LEFT JOIN activity_event ev ON ev.id = apply.eventId $condition + Activity_School_Apply apply + LEFT JOIN sys_user us ON us.id = apply.applyUser + LEFT JOIN activity_school_team team ON apply.teamId = team.id + LEFT JOIN activity_school acts ON acts.id = apply.activityId + LEFT JOIN activity_event ev ON ev.id = apply.eventId + $condition """); cnd.and("apply.activityUnionId", "=", getUnionId()); - /* if (!ShiroUtil.hasAnyRoles("A06,sysadmin")) { - SqlExpressionGroup group = new SqlExpressionGroup(); - if (ShiroUtil.hasAnyRoles("H01")) { - group.or("applyUser", "=", ShiroUtil.getPrincipalProperty("id")); - } - if (ShiroUtil.hasAnyRoles("H04")) { - group.or("unionId", "=", getUnionId()); - } - cnd.and(group); - }*/ Vi.cndPlus(cnd, "apply.activityId", "=", activityId); Vi.cndPlus(cnd, "apply.eventId", "=", eventId); + cnd.asc("apply.applyUser"); cnd.asc("team.`name`"); cnd.desc("apply.identity"); sql.setCondition(cnd); @@ -130,6 +130,11 @@ public class ActivityApplyController { school.personType, school.activityLevel, school.applyType, + school.athleteQualification, + school.registrationMethod, + school.competitionMethod, + school.rewardMethod, + school.precautions, (SELECT count( 1 ) FROM activity_school_apply app WHERE app.activityId = school.id AND app.`status` = 2 ) apply_num, (SELECT count( 1 ) FROM activity_school_apply app WHERE app.activityId = school.id AND ( app.applyUser = @userid OR app.userId = @userid )) > 0 applyed, (SELECT COUNT(1) FROM activity_school_apply app WHERE app.activityId=school.id AND app.unionId=@unionId AND app.unionLeader=TRUE) LeaderCount, @@ -146,9 +151,10 @@ public class ActivityApplyController { cnd.and("school.isSave", "!=", true); - switch (isActivity){ + switch (isActivity) { //报名中 - case 2 -> cnd.and(new Static("now() > school.applyStartTime and now() < school.applyEndTime")); + case 2 -> + cnd.and(new Static("now() > school.applyStartTime and now() < school.applyEndTime")); //已结束 case 3 -> cnd.and(new Static("now() > school.applyEndTime")); //进行中 @@ -156,7 +162,7 @@ public class ActivityApplyController { //未开始 case 5 -> cnd.and(new Static("now() < school.applyStartTime")); } - cnd.and("isDisabled","=",1); + cnd.and("isDisabled", "=", 1); // //查询报名中 // if (isActivity == 2) { @@ -370,43 +376,27 @@ public class ActivityApplyController { @At @ViReturn @RequiresPermissions("activity.apply") - public Object doApply(@Param(value = "data",required = false) ActivitySchoolApply[] applies, - @Param(value = "appliedData3",required = false) ActivitySchoolApply[] applies2, - @Param(value = "eventId",required = false) String eventId, - @Param(value = "pass",required = false)boolean pass) { + public Object doApply(@Param(value = "data", required = false) ActivitySchoolApply[] applies, + @Param(value = "appliedData3", required = false) ActivitySchoolApply[] applies2, + @Param(value = "projectType", required = false) Integer projectType, + @Param(value = "eventId", required = false) String eventId, + @Param(value = "activityId") String activityId, + @Param(value = "pass", required = false) boolean pass) { Sys_user user = (Sys_user) ShiroUtil.getPrincipal(); Sys_unit unit = user.getUnit(); - String activityId = ""; ActivityBasicUnit basicUnit = activitySchoolService.dao().fetch(ActivityBasicUnit.class, Cnd.where("id", "=", unit.getId())); ActivityBasicUnion basicUnion = activitySchoolService.dao().fetch(ActivityBasicUnion.class, Cnd.where("id", "=", basicUnit.getUnionid())); for (ActivitySchoolApply apply : applies) { - activityId = applies[0].getActivityId(); apply.setApplyUser(ShiroUtil.getPrincipalProperty("id").toString()); apply.setStatus(pass ? 2 : 0); - apply.setAwardsMode("2"); + apply.setAwardsMode(projectType == 1 ? "1" : "2"); apply.setApplyDate(DateUtil.getDate()); apply.setUnionId(unit.getUnionid()); apply.setActivityUnionId(basicUnit.getUnionid()); apply.setActivityUnionName(basicUnion.getUnionname()); + apply.setApplyUnitId(basicUnit.getId()); } - - for (ActivitySchoolApply apply2 : applies2) { - activityId = applies2[0].getActivityId(); - apply2.setApplyUser(ShiroUtil.getPrincipalProperty("id").toString()); - apply2.setStatus(pass ? 2 : 0); - apply2.setAwardsMode("1"); - apply2.setApplyDate(DateUtil.getDate()); - apply2.setUnionId(unit.getUnionid()); - apply2.setActivityUnionId(basicUnit.getUnionid()); - apply2.setActivityUnionName(basicUnion.getUnionname()); - } - if (applies.length > 0) { - activitySchoolApplyService.doApplies(activityId, basicUnit.getUnionid(), eventId, Arrays.asList(applies)); - } - if (applies2.length > 0) { - activitySchoolApplyService.doApplies(activityId, basicUnit.getUnionid(), eventId, Arrays.asList(applies2)); - } - + activitySchoolApplyService.doApplies(activityId, basicUnit.getUnionid(), eventId, Arrays.asList(applies)); return null; } @@ -627,7 +617,7 @@ public class ActivityApplyController { @Param(value = "isMenWomen", required = false) String[] isMenWomen) { Cnd cnd = CndPlus.create(); Sql sql = Sqls.create(""" - SELECT + SELECT ase.*, school.`name`, school.applyWay, @@ -639,15 +629,22 @@ public class ActivityApplyController { eve.isInterest, eve.projectType, eve.isMenWomen, - (SELECT ast.`name` FROM activity_school_apply app LEFT JOIN activity_school_team ast ON ast.id = app.teamId WHERE app.eventId = ase.eventId AND app.activityId = ase.activityId AND app.userId = @userId) activityTeamName, - (SELECT COUNT(1) FROM activity_school_apply WHERE eventId=ase.eventId AND activityId=ase.activityId and status=2 and activityUnionId=@unionId) applyNum, - (SELECT COUNT(1) FROM activity_school_apply WHERE eventId = ase.eventId AND activityId = ase.activityId AND userId=@userId) userApply, - (SELECT COUNT(1) FROM activity_school_apply WHERE eventId=ase.eventId AND activityId=ase.activityId and status=2) totalApplyNum + apply.`status`, + IF (sum(apply.`status`=2) IS NULL, 0, sum(apply.`status`=2)) AS successUserApply, + count(apply.id) userApply, + apply.applyUser, + (SELECT ast.`name` FROM activity_school_apply app LEFT JOIN activity_school_team ast ON ast.id = app.teamId WHERE app.eventId = ase.eventId AND app.activityId = ase.activityId AND app.userId = @userId) activityTeamName, + (select GROUP_CONCAT(username) FROM activity_school_apply WHERE status=2 and eventId = ase.eventId + AND activityId = ase.activityId AND applyUser AND (applyUser=@userId or userId=@userId)) userApplyNames, + (SELECT COUNT(1) FROM activity_school_apply WHERE eventId=ase.eventId AND activityId=ase.activityId and status=2 and activityUnionId=@unionId) totalApplyNum, + (SELECT COUNT(1) FROM activity_school_apply WHERE eventId=ase.eventId AND activityId=ase.activityId and status=0 and activityUnionId=@unionId) apply_num_bc, + (SELECT COUNT(1) FROM activity_school_apply WHERE eventId=ase.eventId AND activityId=ase.activityId and status=1 and activityUnionId=@unionId) apply_num_dsh FROM activity_school_event ase LEFT JOIN activity_school school ON ase.activityId = school.id LEFT JOIN activity_event eve ON ase.eventId=eve.id LEFT JOIN activity_basic_settings abs ON abs.id=eve.competitionCategory + LEFT JOIN activity_school_apply apply ON apply.activityId=ase.activityId AND apply.eventId=ase.eventId AND (applyUser=@userId or userId=@userId) $condition """).setParam("unionId", getUnionId()).setParam("userId", ShiroUtil.getUserId()); @@ -655,31 +652,17 @@ public class ActivityApplyController { if (!ShiroUtil.hasAnyRoles("H04,sysadmin")) { cnd.where().andLike("school.applyWay ", "1"); cnd.and(new Static("(SELECT COUNT(1) FROM activity_user_scope WHERE groupId=school.activityGroupId AND userId='%s') >0".formatted(ShiroUtil.getUserId()))); - } Vi.cndPlus(cnd, "abs.`name`", "=", groupName); - //如果不是超级管理员就按男女查询,isMenWomen 1是男2是女projectType 2是团体 - /* if (!ShiroUtil.hasAnyRoles("sysadmin,H04,A06")) { - if (StrUtil.isNotBlank(applyType)) { - if (!applyType.equals("1")) { - if (ShiroUtil.getPrincipalProperty("sex").equals("男")) { - cnd.and(new Static("(eve.isMenWomen =1 OR eve.isMenWomen IS NULL )")); - } else { - cnd.and(new Static("(eve.isMenWomen =2 OR eve.isMenWomen IS NULL)")); - } - } - } - }*/ if (Strings.isNotBlank(isAudit)) { cnd.and(new Static("(SELECT COUNT(1) FROM activity_school_apply WHERE eventId = ase.eventId AND activityId = ase.activityId AND userId='%s')%s0".formatted(ShiroUtil.getUserId(), (isAudit.equals("true") ? ">" : "=")))); } - Vi.cndPlus(cnd, "ase.activityId", "=", activityId); - Vi.cndPlus(cnd, "ase.eventId", "=", eventId); - - - Vi.cndPlus(cnd, "YEAR(school.applyStartTime)", "=", year); - cnd.asc("eve.projectType").desc("eve.allName"); + cnd.andEX("ase.activityId", "=", activityId); + cnd.andEX("ase.eventId", "=", eventId); + cnd.andEX("YEAR(school.applyStartTime)", "=", year); + cnd.groupBy("ase.id"); + cnd.asc("abs.`code`"); sql.setCondition(cnd); return activitySchoolEventViService.listPageMap(page.getPageNumber(), page.getPageSize(), sql); } @@ -694,6 +677,7 @@ public class ActivityApplyController { */ @At @ViReturn + @RequiresPermissions("activity.apply") public Object doLeaderCoachHead(@Param(value = "staffData", required = false) ActivitySchoolApply staffData, @Param(value = "LeaderData", required = false) ActivitySchoolApply LeaderData, @Param(value = "CoachData", required = false) ActivitySchoolApply CoachData, @@ -752,6 +736,7 @@ public class ActivityApplyController { @At @ViReturn + @RequiresPermissions("activity.apply") public Object getUnionCoachLeaderHead(@Param(value = "activityId", required = false) String activityId) { Map result = new HashMap(); Sql sql = Sqls.create(""" @@ -809,6 +794,7 @@ public class ActivityApplyController { @At @ViReturn + @RequiresPermissions("activity.apply") public Object doDeleteApply(@Param(value = "activityId", required = false) String activityId, @Param(value = "userId", required = false) String userId, @Param(value = "eventId", required = false) String eventId) { @@ -816,19 +802,52 @@ public class ActivityApplyController { } /** - * 删除报名人员 + * 查询待审核人员 * - * @param activityId 活动 - * @param userId 用户 * @return ? */ @At - @Async - public Object doDeleteActivityRegister( + @ViReturn + @RequiresPermissions("activity.apply") + public Object dshApplyUserList( @Param(value = "activityId", required = false) String activityId, - @Param(value = "userId", required = false) String userId) { - Cnd cnd = Cnd.where("tissueId", "=", activityId).and("userId", "=", userId); - simpleService.dao().clear(ActivityTissuePerson.class, cnd); + @Param(value = "eventId", required = false) String eventId) { + Sql sql = Sqls.create(""" + SELECT + asa.id, + asa.username, + asa.loginname, + asa.sex, + asa.identity, + asa.`status`, + us.username applyUserName + FROM + `activity_school_apply` asa + LEFT JOIN sys_user us ON asa.applyUser = us.id + WHERE asa.activityId=@activityId and asa.eventId=@eventId and asa.activityUnionId=@activityUnionId + ORDER BY asa.applyUser + """).setParam("activityId",activityId).setParam("eventId", eventId).setParam("activityUnionId", getUnionId()); + return activitySchoolApplyService.listMap(sql); + } + + + @At + @ViReturn + @RequiresPermissions("activity.apply") + public Result doAuditApplyUser( + @Param(value = "dshSelectionIds", required = false) String[] dshSelectionIds, + Integer status, String activityId, String eventId) { + if (Lang.isEmpty(dshSelectionIds) || Lang.isEmpty(status)) { + return Result.error(); + } + if (status == 2) { + int appCount = activitySchoolApplyService.dao().count(ActivitySchoolApply.class, Cnd.where("activityId", "=", activityId).and("eventId", "=", eventId).and("status", "=", 2)); + ActivitySchoolEvent schoolEvent = activitySchoolApplyService.dao().fetch(ActivitySchoolEvent.class, Cnd.where("activityId", "=", activityId).and("eventId", "=", eventId)); + if (appCount + dshSelectionIds.length > schoolEvent.getAthletesMaxNum()) { + return Result.error("当前项目限报【" + schoolEvent.getAthletesMaxNum() + "】人,目前已报【" + appCount + "】人,请检查报名人数!"); + } + } + activitySchoolApplyService.dao().update(ActivitySchoolApply.class, Chain.make("status", status), Cnd.where("id", "in", dshSelectionIds)); return Result.success(); } 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 7d70512..880f105 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 @@ -2,6 +2,7 @@ package io.v.nutz.zhgh.activity.controller.school; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; import com.deepoove.poi.policy.HackLoopTableRenderPolicy; @@ -282,6 +283,7 @@ public class ActivityCommonController { app.activityUnionName unionname, app.sex, app.mobile, + app.unitname, u.idCard, u.userState, ev.allName, @@ -296,13 +298,16 @@ public class ActivityCommonController { activityId = @id $cnd ORDER BY + app.applyUser DESC, ev.allName DESC, u.unionname DESC, app.`team` asc """).setParam("id", id); + if (Strings.isNotBlank(unionId)) { sql.setVar("cnd", "and u.unionid='" + unionId + "'"); } + List list = activitySchoolApplyService.list(sql); String activityName = list.get(0).getString("activityName"); @@ -314,9 +319,19 @@ public class ActivityCommonController { schoolApply.setSf(s); excels.add(schoolApply); }); + List exportEntities = new ArrayList<>(); + exportEntities.add(new ExcelExportEntity("小队名称", "team", 20)); + exportEntities.add(new ExcelExportEntity("项目名称", "allName", 20)); + exportEntities.add(new ExcelExportEntity("工号", "loginname", 20)); + exportEntities.add(new ExcelExportEntity("姓名", "username", 20)); + exportEntities.add(new ExcelExportEntity("性别", "sex", 20)); + exportEntities.add(new ExcelExportEntity("手机号码", "mobile", 20)); + exportEntities.add(new ExcelExportEntity("所在单位", "unitname", 20)); + exportEntities.add(new ExcelExportEntity("身份", "sf", 20)); + response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=" + new String((activityName + "报名表.xls").getBytes("utf-8"), "ISO8859-1")); - Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), ActivitySchoolApply.class, excels); + Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), exportEntities, excels); workbook.write(response.getOutputStream()); } diff --git a/src/main/java/io/v/nutz/zhgh/activity/controller/school/ActivityReadingController.java b/src/main/java/io/v/nutz/zhgh/activity/controller/school/ActivityReadingController.java index 63023bb..dcc70b0 100644 --- a/src/main/java/io/v/nutz/zhgh/activity/controller/school/ActivityReadingController.java +++ b/src/main/java/io/v/nutz/zhgh/activity/controller/school/ActivityReadingController.java @@ -119,9 +119,11 @@ public class ActivityReadingController { unit.`name` unitname, ev.allName, ev.id evid, - ev.projectType + ev.projectType, + us.username applyUserName FROM activity_school_apply app + LEFT JOIN sys_user us ON us.id = app.applyUser LEFT JOIN activity_school school ON school.id = app.activityId LEFT JOIN activity_school_team team ON app.teamId = team.id LEFT JOIN activity_event ev ON ev.id = app.eventId @@ -141,7 +143,7 @@ public class ActivityReadingController { cnd.and("school.belongClubId", "in", vi.getMangeClubStr()); } } - cnd.desc("ev.allName").asc("ev.projectType").asc("team.`name`"); + cnd.desc("ev.allName").asc("ev.projectType").asc("app.applyUser").asc("team.`name`"); List applies = activitySchoolApplyService.listMap(sql); List apply = new ArrayList(); diff --git a/src/main/java/io/v/nutz/zhgh/activity/models/ActivityMobileSignUpParam.java b/src/main/java/io/v/nutz/zhgh/activity/models/ActivityMobileSignUpParam.java new file mode 100644 index 0000000..657a43e --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/activity/models/ActivityMobileSignUpParam.java @@ -0,0 +1,20 @@ +package io.v.nutz.zhgh.activity.models; + +import lombok.Data; + +import java.util.List; + +@Data +public class ActivityMobileSignUpParam { + + private String activityId; + + private String eventId; + + private String teamId; + + private String teamName; + + private List userIds; + +} diff --git a/src/main/java/io/v/nutz/zhgh/activity/models/ActivitySchoolApply.java b/src/main/java/io/v/nutz/zhgh/activity/models/ActivitySchoolApply.java index 158b308..1a071be 100644 --- a/src/main/java/io/v/nutz/zhgh/activity/models/ActivitySchoolApply.java +++ b/src/main/java/io/v/nutz/zhgh/activity/models/ActivitySchoolApply.java @@ -56,11 +56,22 @@ public class ActivitySchoolApply implements Serializable { @ColDefine(type = ColType.VARCHAR, width = 32) private String unitId; + + @Column + @Comment("报名所属单位") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String applyUnitId; + @Column @Comment("所属工会") @ColDefine(type = ColType.VARCHAR, width = 32) private String unionId; + @Column + @Comment("所属工会名称") + @ColDefine(type = ColType.VARCHAR, width = 32) + private String unionName; + @Column @Comment("所属活动工会") @ColDefine(type = ColType.VARCHAR, width = 32) diff --git a/src/main/java/io/v/nutz/zhgh/activity/models/ActivitySchoolEvent.java b/src/main/java/io/v/nutz/zhgh/activity/models/ActivitySchoolEvent.java index 67cf9ce..3f3ac11 100644 --- a/src/main/java/io/v/nutz/zhgh/activity/models/ActivitySchoolEvent.java +++ b/src/main/java/io/v/nutz/zhgh/activity/models/ActivitySchoolEvent.java @@ -146,4 +146,11 @@ public class ActivitySchoolEvent { @Comment("报名人数限制模式") @ColDefine(type = ColType.INT) private Integer applyUserModel; + + + @Column + @Comment("是否组队报名") + @ColDefine(type = ColType.BOOLEAN) + @Default("0") + private Boolean isTeamSignUp; } diff --git a/src/main/java/io/v/nutz/zhgh/mobile/activity/Sports/mobileActivityListController.java b/src/main/java/io/v/nutz/zhgh/mobile/activity/Sports/mobileActivityListController.java index dcc7b56..bdc1ffa 100644 --- a/src/main/java/io/v/nutz/zhgh/mobile/activity/Sports/mobileActivityListController.java +++ b/src/main/java/io/v/nutz/zhgh/mobile/activity/Sports/mobileActivityListController.java @@ -1,23 +1,34 @@ package io.v.nutz.zhgh.mobile.activity.Sports; +import cn.hutool.core.util.StrUtil; import io.v.nutz.base.annontation.ViReturn; +import io.v.nutz.base.dao.CndPlus; +import io.v.nutz.base.query.PageForm; import io.v.nutz.base.service.BaseService; import io.v.nutz.base.utils.DateUtil; +import io.v.nutz.base.utils.Vi; +import io.v.nutz.sys.models.Sys_unit; import io.v.nutz.sys.models.Sys_user; import io.v.nutz.sys.models.User; import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.zhgh.activity.models.*; +import io.v.nutz.zhgh.mobile.activity.Sports.service.MobileActivityApplyService; import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.nutz.dao.Cnd; import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; +import org.nutz.dao.util.cri.Static; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.lang.Lang; +import org.nutz.lang.Strings; +import org.nutz.lang.util.NutMap; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Param; +import java.util.List; + /** * @author zhf * @date 2022/1/6 9:22 @@ -31,6 +42,8 @@ public class mobileActivityListController { @Inject private BaseService baseService; + @Inject + private MobileActivityApplyService mobileActivityApplyService; @At("/activityList") @Ok("beetl:/mobile/activity/Sports/activityList.html") @@ -54,8 +67,6 @@ public class mobileActivityListController { @Param(value = "teamName", required = false) String teamName) { User user = baseService.dao().fetch(User.class, Cnd.where("id", "=", ShiroUtil.getUserId())); - int i = cn.hutool.core.date.DateUtil.ageOfNow(user.getBirthday()); - ActivitySchool activitySchool = baseService.dao().fetch(ActivitySchool.class, activityId); ActivityBasicUnit basicUnit = baseService.dao().fetch(ActivityBasicUnit.class, Cnd.where("id", "=", user.getUnitid())); ActivityBasicUnion basicUnion = baseService.dao().fetch(ActivityBasicUnion.class, basicUnit.getUnionid()); ActivityEvent event = baseService.dao().fetch(ActivityEvent.class, Cnd.where("id", "=", eventId)); @@ -66,7 +77,7 @@ public class mobileActivityListController { schoolApply.setApplyDate(DateUtil.getDate()); schoolApply.setIdentity(Lang.list("1")); schoolApply.setDivisionLevelLeadership(false); - schoolApply.setStatus(2); + schoolApply.setStatus(1); schoolApply.setTeamId(teamId); schoolApply.setTeam(teamName); schoolApply.setApplyUser(user.getId()); @@ -123,5 +134,171 @@ public class mobileActivityListController { return baseService.dao().count(ActivityUserScope.class, Cnd.where("groupId", "=", activityGroupId).and("userId", "=", ShiroUtil.getUserId())); } + private String getUnionId() { + Sys_user user = (Sys_user) ShiroUtil.getPrincipal(); + Sys_unit unit = user.getUnit(); + ActivityBasicUnit basicUnit = baseService.dao().fetch(ActivityBasicUnit.class, Cnd.where("id", "=", unit.getId())); + ActivityBasicUnion basicUnion = baseService.dao().fetch(ActivityBasicUnion.class, Cnd.where("id", "=", basicUnit.getUnionid())); + + return unit == null ? "" : basicUnion.getId(); + } + + @At + @ViReturn + @RequiresAuthentication + public Object pageData(@Param(value = "applyType", required = false) String applyType, + @Param(value = "isAudit", required = false) String isAudit, + @Param(value = "groupName", required = false) String groupName, + @Param(value = "activityId", required = false) String activityId, + @Param(value = "eventId", required = false) String eventId, + @Param(value = "year", required = false) Integer year, PageForm page, + @Param(value = "isMenWomen", required = false) String[] isMenWomen) { + Cnd cnd = CndPlus.create(); + Sql sql = Sqls.create(""" + SELECT + ase.*, + school.`name`, + school.applyWay, + school.applyStartTime, + school.applyEndTime, + school.applyType, + school.activityGroupId, + eve.allName, + eve.isInterest, + eve.projectType, + eve.isMenWomen, + apply.`status`, + IF (sum(apply.`status`=2) IS NULL, 0, sum(apply.`status`=2)) AS successUserApply, + count(apply.id) userApply, + apply.applyUser, + (SELECT ast.`name` FROM activity_school_apply app LEFT JOIN activity_school_team ast ON ast.id = app.teamId WHERE app.eventId = ase.eventId AND app.activityId = ase.activityId AND app.userId = @userId) activityTeamName, + (select GROUP_CONCAT(username) FROM activity_school_apply WHERE status=2 and eventId = ase.eventId + AND activityId = ase.activityId AND applyUser AND (applyUser=@userId or userId=@userId)) userApplyNames, + (SELECT COUNT(1) FROM activity_school_apply WHERE eventId=ase.eventId AND activityId=ase.activityId and status=2 and activityUnionId=@unionId) totalApplyNum, + (SELECT COUNT(1) FROM activity_school_apply WHERE eventId=ase.eventId AND activityId=ase.activityId and status=0 and activityUnionId=@unionId) apply_num_bc, + (SELECT COUNT(1) FROM activity_school_apply WHERE eventId=ase.eventId AND activityId=ase.activityId and status=1 and activityUnionId=@unionId) apply_num_dsh + FROM + activity_school_event ase + LEFT JOIN activity_school school ON ase.activityId = school.id + LEFT JOIN activity_event eve ON ase.eventId=eve.id + LEFT JOIN activity_basic_settings abs ON abs.id=eve.competitionCategory + LEFT JOIN activity_school_apply apply ON apply.activityId=ase.activityId AND apply.eventId=ase.eventId AND (applyUser=@userId or userId=@userId) + $condition + """).setParam("unionId", getUnionId()).setParam("userId", ShiroUtil.getUserId()); + cnd.where().andLike("school.applyWay ", "1"); + cnd.and(new Static("(SELECT COUNT(1) FROM activity_user_scope WHERE groupId=school.activityGroupId AND userId='%s') >0".formatted(ShiroUtil.getUserId()))); + Vi.cndPlus(cnd, "abs.`name`", "=", groupName); + //如果不是超级管理员就按男女查询,isMenWomen 1是男2是女projectType 2是团体 + if (StrUtil.isNotBlank(applyType)) { + if (!applyType.equals("1")) { + if (ShiroUtil.getPrincipalProperty("sex").equals("男")) { + cnd.and(new Static("(eve.isMenWomen =1 OR eve.isMenWomen IS NULL )")); + } else { + cnd.and(new Static("(eve.isMenWomen =2 OR eve.isMenWomen IS NULL)")); + } + } + } + if (Strings.isNotBlank(isAudit)) { + cnd.and(new Static("(SELECT COUNT(1) FROM activity_school_apply WHERE eventId = ase.eventId AND activityId = ase.activityId AND userId='%s')%s0".formatted(ShiroUtil.getUserId(), (isAudit.equals("true") ? ">" : "=")))); + } + + cnd.andEX("ase.activityId", "=", activityId); + cnd.andEX("ase.eventId", "=", eventId); + cnd.andEX("YEAR(school.applyStartTime)", "=", year); + cnd.groupBy("ase.id"); + cnd.asc("abs.`code`"); + sql.setCondition(cnd); + return baseService.listPageMap(page.getPageNumber(), page.getPageSize(), sql); + } + + + @At + @ViReturn + @RequiresAuthentication + public Object searchNoRegisterUser(String searchKey, + String activityId, + Boolean isTeamSignUp, + String isMenWomen, + String eventId) { + + ActivitySchool activitySchool = baseService.dao().fetch(ActivitySchool.class, Cnd.where("id", "=", activityId)); + + Sql sql = Sqls.create(""" + SELECT + id, + loginname loginName, + username userName, + sex, + unitname AS unitName, + unionname AS unionName + FROM + `user` + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.andEX("unionId", "=", getUnionId()); + if (StrUtil.isNotBlank(isMenWomen)) { + cnd.andEX("sex", "=", isMenWomen.equals("1") ? "男" : "女"); + } + if (Lang.isNotEmpty(searchKey)) { + cnd.and(Cnd.exps(Cnd.likeEX("username", searchKey.trim())).or(Cnd.likeEX("loginname", searchKey.trim()))); + } + + cnd.and(new Static(""" + id not in (SELECT userId FROM activity_school_apply WHERE activityId = '%s' and eventId='%s') + """.formatted(activityId, eventId))); + if (activitySchool.getActivityGroupId() != null) { + cnd.and(new Static(""" + id IN ( SELECT userId FROM activity_user_scope WHERE groupId IN ( SELECT activityGroupId FROM activity_school WHERE id = '%s' AND activityGroupId IS NOT NULL ) ) + """.formatted(activityId))); + } + + sql.setCondition(cnd); + + return baseService.listPageMap(1, 10, sql); + } + + @At + @ViReturn + @RequiresAuthentication + public Object doTeamSignUp(ActivityMobileSignUpParam param) { + mobileActivityApplyService.doTeamSignUp(param.getActivityId(), param.getUserIds(), param.getEventId(), param.getTeamId(), param.getTeamName()); + return null; + } + + @At + @ViReturn + @RequiresAuthentication + public Object selectRegisterList(String activityId) { + Cnd cnd = Cnd.NEW(); + Sql sql = Sqls.create(""" + SELECT + userId AS id, + username userName, + loginname loginName, + unitname unitName, + sex, + activityUnionName unionName, + activityUnionId unionId, + eventId, + applyUser + FROM + activity_school_apply + $condition + """); + cnd.and("activityId", "=", activityId); + sql.setCondition(cnd); + List list = mobileActivityApplyService.listMap(sql); + return list; + } + + @At + @ViReturn + @RequiresAuthentication + public Object doDeleteApply(String activityId, String eventId) { + mobileActivityApplyService.doDeleteApply(activityId, eventId); + return null; + } + } diff --git a/src/main/java/io/v/nutz/zhgh/mobile/activity/Sports/service/MobileActivityApplyService.java b/src/main/java/io/v/nutz/zhgh/mobile/activity/Sports/service/MobileActivityApplyService.java new file mode 100644 index 0000000..33e8dc9 --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/mobile/activity/Sports/service/MobileActivityApplyService.java @@ -0,0 +1,11 @@ +package io.v.nutz.zhgh.mobile.activity.Sports.service; + +import io.v.nutz.base.service.BaseService; +import io.v.nutz.zhgh.activity.models.ActivitySchoolApply; + +import java.util.List; + +public interface MobileActivityApplyService extends BaseService { + void doDeleteApply(String activityId, String eventId); + void doTeamSignUp(String activityId, List userIds, String eventId, String teamId, String teamName); +} diff --git a/src/main/java/io/v/nutz/zhgh/mobile/activity/Sports/service/impl/MobileActivityApplyServiceImpl.java b/src/main/java/io/v/nutz/zhgh/mobile/activity/Sports/service/impl/MobileActivityApplyServiceImpl.java new file mode 100644 index 0000000..de86ccc --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/mobile/activity/Sports/service/impl/MobileActivityApplyServiceImpl.java @@ -0,0 +1,87 @@ +package io.v.nutz.zhgh.mobile.activity.Sports.service.impl; + +import cn.hutool.core.date.DateUtil; +import io.v.nutz.base.service.impl.BaseServiceImpl; +import io.v.nutz.sys.models.User; +import io.v.nutz.web.commons.utils.ShiroUtil; +import io.v.nutz.zhgh.activity.models.*; +import io.v.nutz.zhgh.mobile.activity.Sports.service.MobileActivityApplyService; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.web.filter.mgt.DefaultFilter; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.Lang; +import org.nutz.lang.util.NutMap; + +import java.util.ArrayList; +import java.util.List; + +import static org.apache.shiro.web.filter.mgt.DefaultFilter.user; + +/** + * @ClassName ActivitySchoolApplyServiceImpl + * @Description TODO + * @Author zhf + * @Date 2025/4/2 下午4:46 + */ +@IocBean(args = {"refer:dao"}) +@Slf4j +public class MobileActivityApplyServiceImpl extends BaseServiceImpl implements MobileActivityApplyService { + public MobileActivityApplyServiceImpl(Dao dao) { + super(dao); + } + + @Override + public void doDeleteApply(String activityId, String eventId) { + clear(Cnd.where("activityId", "=", activityId).and("eventId", "=", eventId).and("applyUser", "=", ShiroUtil.getUserId())); + } + + @Override + public void doTeamSignUp(String activityId, List userIds, String eventId, String teamId, String teamName) { + List schoolApplyArrayList = new ArrayList<>(); + userIds.forEach(i -> { + ActivitySchoolApply schoolApply = getApply(activityId, eventId, i, teamId, teamName); + schoolApplyArrayList.add(schoolApply); + }); + insert(schoolApplyArrayList); + } + + public ActivitySchoolApply getApply(String activityId, String eventId, String userId, String teamId, String teamName) { + ActivitySchool activitySchool = dao().fetch(ActivitySchool.class, activityId); + User user = dao().fetch(User.class, Cnd.where("id", "=", userId)); + ActivityBasicUnit basicUnit = dao().fetch(ActivityBasicUnit.class, Cnd.where("id", "=", user.getUnitid())); + ActivityBasicUnion basicUnion = dao().fetch(ActivityBasicUnion.class, basicUnit.getUnionid()); + ActivityEvent event = dao().fetch(ActivityEvent.class, Cnd.where("id", "=", eventId)); + ActivitySchoolApply schoolApply = new ActivitySchoolApply(); + schoolApply.setActivityId(activityId); + schoolApply.setEventId(eventId); + schoolApply.setAwardsMode(event.getProjectType()); + schoolApply.setApplyDate(DateUtil.now()); + schoolApply.setIdentity(Lang.list("1")); + schoolApply.setDivisionLevelLeadership(false); + if (activitySchool.getApplyWay().size() == 2) { + schoolApply.setStatus(1); + } else { + schoolApply.setStatus(2); + } + schoolApply.setTeamId(teamId); + schoolApply.setTeam(teamName); + schoolApply.setApplyUser(ShiroUtil.getUserId()); + schoolApply.setUserId(userId); + schoolApply.setMobile(user.getMobile()); + schoolApply.setSex(user.getSex()); + schoolApply.setUnitId(user.getUnitid()); + schoolApply.setUnionId(user.getUnionid()); + schoolApply.setUnionName(user.getUnionname()); + schoolApply.setActivityUnionId(basicUnion.getId()); + schoolApply.setActivityUnionName(basicUnion.getUnionname()); + schoolApply.setUnitname(user.getUnitname()); + schoolApply.setLoginname(user.getLoginname()); + schoolApply.setUsername(user.getUsername()); + schoolApply.setBirthday(user.getBirthday()); + schoolApply.setApplyUnitId(basicUnit.getId()); + return schoolApply; + } +} diff --git a/src/main/resources/static/components/activity/school/AddActivity.vue b/src/main/resources/static/components/activity/school/AddActivity.vue index 010adec..669eae0 100644 --- a/src/main/resources/static/components/activity/school/AddActivity.vue +++ b/src/main/resources/static/components/activity/school/AddActivity.vue @@ -6,13 +6,15 @@
- + - + @@ -40,41 +44,51 @@ --> - + - + - - + + - - + + - - + + - + @@ -117,11 +131,15 @@ clearable filterable > - +
- 设置 + 设置 +
@@ -148,10 +166,14 @@ --> - + - - + + @@ -162,7 +184,9 @@ 单一团体赛 - 综合赛 + 综合赛 + 个人赛 @@ -170,7 +194,9 @@ - 基层工会报名 + 基层工会报名 + 个人报名 @@ -197,27 +223,32 @@ - +
- +
- +
- +
- +
@@ -225,14 +256,16 @@ - +
- + @@ -295,26 +328,45 @@ clearable style="width: 100%" > - +
- + - 根据比赛项目基础表统赋 + + 根据比赛项目基础表统赋 + + + + + + + 组队 + 不组队 + - + - 是否只需报领队 + + 是否只需报领队 + - + + - + 固定 分配模式 @@ -324,7 +376,9 @@ - + - + - + - + - + - - + + - - + + - + - + -
+
({{ index + 1 }}). {{ item }}
@@ -546,11 +620,14 @@ placeholder="请输入一键比例" size="small" > - 应用比例设置 + 应用比例设置 + - + @@ -666,8 +747,16 @@ module.exports = { activityGroupId: [{ required: true, message: "必填", trigger: ["blur", "change"] }], gameStyle: [{ required: true, message: "必填", trigger: ["blur", "change"] }], applyWay: [{ required: true, message: "必填", trigger: ["blur", "change"] }], - restrictTotalPeople: [{ required: true, message: "必填", trigger: ["blur", "change"] }], - restrictTotalTeam: [{ required: true, message: "必填", trigger: ["blur", "change"] }], + restrictTotalPeople: [{ + required: true, + message: "必填", + trigger: ["blur", "change"] + }], + restrictTotalTeam: [{ + required: true, + message: "必填", + trigger: ["blur", "change"] + }], // registrationMethod: [{required: true, message: '必填', trigger: ['blur', 'change']}], // competitionMethod: [{required: true, message: '必填', trigger: ['blur', 'change']}], // rewardMethod: [{required: true, message: '必填', trigger: ['blur', 'change']}], @@ -679,7 +768,11 @@ module.exports = { // belongClubId: [{required: true, message: '必填', trigger: ['blur', 'change']}], applyType: [{ required: true, message: "必填", trigger: ["blur", "change"] }], athletesMaxNum: [{ required: true, message: "必填", trigger: ["blur", "change"] }], - restrictRegNumber: [{ required: true, message: "必填", trigger: ["blur", "change"] }] + restrictRegNumber: [{ + required: true, + message: "必填", + trigger: ["blur", "change"] + }] } } }, @@ -761,8 +854,6 @@ module.exports = { }, async doAssignmentDate() { await this.saveEvent() - const form = clone(this.form) - const loading = this.$loading({ lock: true, text: "正在提交...", @@ -783,7 +874,8 @@ module.exports = { filterMethod(query, item) { return item.allName.indexOf(query) > -1 }, - rightChange(v) {}, + rightChange(v) { + }, rightCheckChange(v, v2) { this.rightChecked = v }, @@ -815,6 +907,8 @@ module.exports = { initCheckedEventInfo() { this.checkedEventInfo = this.checkedEvents.map((v) => { v.eventId = v.id + v.isTeamSignUp = false + if (v.projectType === "1") { v.athletesMaxNum = 3 v.restrictRegNumber = 2 @@ -847,12 +941,13 @@ module.exports = { projectType: resp.data.projectType, leanderNum: 0, coachNum: 0, - athletesMaxNum: resp.data.projectType == 1 ? 3 : null, + athletesMaxNum: resp.data.projectType === 1 ? 3 : null, restrictTotalTeam: 1, substituteNum: 0, - restrictRegNumber: resp.data.projectType == 1 ? 2 : null, + restrictRegNumber: resp.data.projectType === 1 ? 2 : null, isLeader: false, - applyUserModel: 1 + applyUserModel: 1, + isTeamSignUp: false } this.projectType = resp.data.projectType @@ -868,6 +963,10 @@ module.exports = { v.athletesMaxNum = data.athletesMaxNum v.restrictRegNumber = data.restrictRegNumber v.unionLimit = data.unionLimit + v.isTeamSignUp = data.isTeamSignUp + } + if (this.formData.applyWay.includes(1)) { + v.isTeamSignUp = data.isTeamSignUp } }) } else { @@ -879,6 +978,9 @@ module.exports = { this.$set(this.eventForm, "athletesMaxNum", data.athletesMaxNum) this.$set(this.eventForm, "restrictRegNumber", data.restrictRegNumber) } + if (this.form.applyWay.includes(1)) { + this.$set(this.eventForm, 'isTeamSignUp', data.isTeamSignUp) + } this.$set(this.eventForm, "checkedEventId", info.eventId) } data.eventId = data.checkedEventId @@ -893,7 +995,7 @@ module.exports = { }) }, getArrDifference(arr1, arr2) { - return arr1.concat(arr2).filter(function (v, i, arr) { + return arr1.concat(arr2).filter(function(v, i, arr) { return arr.indexOf(v) === arr.lastIndexOf(v) }) }, @@ -934,6 +1036,7 @@ module.exports = { allName: "所有单项", projectType: "1", applyUserModel: 1, + isTeamSignUp: false, athletesMaxNum: data ? data.athletesMaxNum : 3, restrictRegNumber: data ? data.restrictRegNumber : 2 } @@ -950,7 +1053,8 @@ module.exports = { leanderNum: 0, coachNum: 0, athletesMaxNum: 3, - substituteNum: 0 + substituteNum: 0, + isTeamSignUp: false } this.initCheckedEventInfo() } @@ -1109,7 +1213,8 @@ module.exports = { .then(async () => { await this.doOperate() }) - .catch(() => {}) + .catch(() => { + }) } else { await this.doOperate() } @@ -1122,6 +1227,9 @@ module.exports = { v.athletesMaxNum = this.checkedEventInfo[0].athletesMaxNum v.restrictRegNumber = this.checkedEventInfo[0].restrictRegNumber } + if (this.form.applyWay.includes(1)) { + v.isTeamSignUp = this.checkedEventInfo[0].isTeamSignUp + } if (v.ageDate && v.ageDate.length > 0) { v.startAgeDate = v.ageDate[0] v.endAgeDate = v.ageDate[1] @@ -1268,8 +1376,18 @@ module.exports = { { label: "女", value: "女" } ] }, - { label: "在职状态", value: "userState", type: "select", options: userStateOptions }, - { label: "人员类型", value: "personType", type: "select", options: personTypeOptions } + { + label: "在职状态", + value: "userState", + type: "select", + options: userStateOptions + }, + { + label: "人员类型", + value: "personType", + type: "select", + options: personTypeOptions + } ] } }, diff --git a/src/main/resources/static/components/activity/school/DeleteInfo.vue b/src/main/resources/static/components/activity/school/DeleteInfo.vue index 143d74c..dcf2ce0 100644 --- a/src/main/resources/static/components/activity/school/DeleteInfo.vue +++ b/src/main/resources/static/components/activity/school/DeleteInfo.vue @@ -118,6 +118,7 @@ module.exports = { {prop: 'status', label: '状态', sortable: true}, // {prop: 'awardsMode', label: '项目类型'}, {prop: 'allName', label: '报名项目'}, + {prop: 'applyUserName', label: '报名人'}, ], } }, diff --git a/src/main/resources/views/mobile/activity/Sports/activityEventList.html b/src/main/resources/views/mobile/activity/Sports/activityEventList.html index 9e5ff53..2169197 100644 --- a/src/main/resources/views/mobile/activity/Sports/activityEventList.html +++ b/src/main/resources/views/mobile/activity/Sports/activityEventList.html @@ -27,61 +27,240 @@ layout("/mobile/platform.html"){
- +
- - - + + +
-
- -
- - - - - {{o.allName}} - - {{o.projectType==1?'单项':'团体'}} - {{o.activityTeamName?o.activityTeamName:'暂无'}} - - {{o.startAgeDate}}至{{o.endAgeDate}} +
+ + +
+ + + + {{ o.allName }} +
+ 待审核 + 已成功报名 + 审核不通过 +
+ +
+
+ + + + + + + + + 最少报男运动员: + + {{o.restrictBoyNum}}人 + + + + + 最少报女运动员: + + {{o.restrictGirlNum}}人 + + + + + + + {{ o.restrictTotalTeam }}队 + + + + + + + 每队可报人数: + {{ o.athletesMaxNum }}人 + {{ + o.athletesMaxNum * o.restrictTotalTeam + }}人 + {{ + o.athletesMaxNum + }}人 + {{ + (o.restrictGirlNum ? o.restrictGirlNum : 0) + (o.restrictBoyNum ? o.restrictBoyNum : 0) + }}人 暂无 - - {{o.restrictTotalTeam}}队 - - {{o.athletesMaxNum}}人 - {{o.athletesMaxNum*o.restrictTotalTeam}}人 - {{o.athletesMaxNum}}人 - {{o.restrictGirlNum+o.restrictBoyNum}}人 - 暂无 - - - {{o.applyNum}}人 - {{o.totalApplyNum}}人 + + + + + + 已报名总人数: + {{ o.successUserApply }}人 + {{ + o.totalApplyNum + }}人 + {{ o.totalApplyNum }}人 0人 - - + + + + + + 已报名人员: + {{ + o.userApplyNames + }} + 未报名 + + + + + +
+ + +
+
+
+ +
+ 本人信息 +
+
+ + + + + +
+ + + +
+
+ 暂无队友信息,请点击添加队友按钮 +
+
+ +
+ + 添加队友 + +
+ +
+ + 提 交 + +
+
+ + + + + + +
+ + + +
+ +
+ - +
+ + diff --git a/src/main/resources/views/mobile/activity/Sports/activityList.html b/src/main/resources/views/mobile/activity/Sports/activityList.html index 7b2e67b..ffa4504 100644 --- a/src/main/resources/views/mobile/activity/Sports/activityList.html +++ b/src/main/resources/views/mobile/activity/Sports/activityList.html @@ -18,35 +18,43 @@ layout("/mobile/platform.html"){
- +
- - + +
-
+
- {{o.NAME}} + {{o.NAME}} {{o.address}} - - - {{moment(o.applyStartTime).format('YYYY/MM/DD HH:mm')}} 至 {{moment(o.applyEndTime).format('YYYY/MM/DD HH:mm')}} - + + {{moment(o.applyStartTime).format('YYYY/MM/DD HH:mm')}} - - - {{moment(o.startTime).format('YYYY/MM/DD HH:mm')}} 至 {{moment(o.endTime).format('YYYY/MM/DD HH:mm')}} - + + {{moment(o.applyEndTime).format('YYYY/MM/DD HH:mm')}} + - 未开始 + 未开始 + 进行中 - 活动结束 + 活动结束 +
- + + + +
+
运动员资格
+
+
+ +
+
报名方法
+
+
+ +
+
竞赛方法
+
+
+ +
+
奖励方法
+
+
+ +
+
注意事项
+
+
+ + 进入报名 + +