diff --git a/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyActivityApplyController.java b/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyActivityApplyController.java index 8bb65375..9dfdc706 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyActivityApplyController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyActivityApplyController.java @@ -1,14 +1,19 @@ package com.budwk.app.zhgh.activity.family.controller.manage; import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaMode; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.annotation.SLog; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.param.PageForm; import com.budwk.app.base.result.Result; import com.budwk.app.sys.models.Sys_dict; +import com.budwk.app.sys.models.Sys_user; import com.budwk.app.sys.services.SysDictService; import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.activity.basic.models.ActivityUserScope; import com.budwk.app.zhgh.activity.family.models.*; import com.budwk.app.zhgh.activity.family.service.FamilyActivityService; import com.budwk.app.zhgh.activity.family.service.FamilyActivityStatisticsService; @@ -16,6 +21,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; import org.nutz.dao.util.cri.Static; @@ -28,39 +34,56 @@ import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Param; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.concurrent.atomic.AtomicInteger; +import java.util.*; +import java.util.concurrent.locks.ReentrantLock; import java.util.stream.Collectors; @Slf4j @IocBean @Ok("json:full") @Api(tags = "活动报名") -@At("/platform/family/manage/apply") +@At("/platform/family/apply") public class FamilyActivityApplyController { + private final ReentrantLock lock = new ReentrantLock(true); + @Inject private FamilyActivityService familyActivityService; @Inject private SysDictService dictService; @Inject private FamilyActivityStatisticsService statisticsService; + @Inject + private Dao dao; - @At("") - @SaCheckPermission("family.manage.apply") + @At("/") + @SaCheckPermission("family.apply") @Ok("beetl:/platform/zhgh/activity/family/apply/index.html") public void index() { } + @At("/h5") + @SaCheckPermission("h5.family.apply") + @Ok("beetl:/platform/zhghh5/activity/family/apply/index.html") + public void h5Index() { + } + + @At("/list/h5") + @SaCheckPermission("h5.family.apply") + @Ok("beetl:/platform/zhghh5/activity/family/list/index.html") + public void listIndex() { + } + @At @ApiOperation("活动查询") - @SaCheckPermission("family.manage.apply") - public Result activityData(PageForm pageForm, - @Param(value = "year") Integer year, - @Param(value = "activityType") Integer activityType) { + @SaCheckPermission(value = {"family.apply", "h5.family.apply"}, mode = SaMode.OR) + public Result activityPageData(PageForm pageForm, + @Param(value = "year") Integer year, + @Param(value = "activityType") Integer activityType, + @Param(value = "id") String id, + @Param(value = "dataType") String dataType) { Cnd cnd = Cnd.NEW(); + cnd.andEX("id", "=", id); cnd.andEX("`year`", "=", year); //查询报名中 if (activityType == 2) { @@ -68,12 +91,18 @@ public class FamilyActivityApplyController { }//查询已结束的 else if (activityType == 3) { cnd.and(new Static("now() > activityEndTime")); + } else if (activityType == 4) { + cnd.and(new Static("now() < activitySignUpStartTime")); } if (AuthUtil.hasRole("H04") && !AuthUtil.hasRoleOr("sysadmin, A06")) { cnd.and("activityMode", "=", 2).and("createdBy", "=", SecurityUtil.getUserId()); } + if("mine".equals(dataType)) { + cnd.and(new Static("id in (select activityId from family_user where userId = '%s')".formatted(SecurityUtil.getUserId()))); + } + Pagination pagination = familyActivityService.listPage(pageForm.getPageNumber(), pageForm.getPageSize(), cnd); List familyActivities = pagination.getList(); Map familyTypeMap = dictService.getSubListByCode("FAMILY_SIGNUP_TYPE").stream().collect(Collectors.toMap(Sys_dict::getCode, Sys_dict::getName)); @@ -83,33 +112,17 @@ public class FamilyActivityApplyController { @At @ApiOperation("分活动查询") - @SaCheckPermission("family.manage.apply") + @SaCheckPermission(value = {"family.apply", "h5.family.apply"}, mode = SaMode.OR) public Result pageData(PageForm pageForm, @Param(value = "courseTypeId") String courseTypeId, @Param(value = "activityId") String activityId, - @Param(value = "assortTypes") String[] assortTypes) { + @Param(value = "assortTypes") String[] assortTypes, + @Param(value = "dataType") String dataType) { + FamilyActivity activity = dao.fetch(FamilyActivity.class, activityId); Sql sql = Sqls.create(""" SELECT - tsuc.id, - tsuc.activityId, - tsuc.courseName, - tsuc.coursePeopleNumber, - tsuc.courseLocation, - tsuc.courseType, - tsuc.courseLocationCoordinates, - tsuc.courseReservedNumber, - tsuc.courseInstructor, - tsuc.campus, - tsuc.unionLimit, - tsuc.isMobileSign, - tsuc.signType, - tsuc.isReceiveGift, - tsuc.giftType, - tsuc.reserveMode, - tsuc.waitingNum, - tsuc.assort, - type.typeName, - tsuc.courseIsLimitApply + tsuc.*, + type.typeName FROM `family_course` tsuc LEFT JOIN family_type type ON type.id = tsuc.courseType @@ -122,6 +135,10 @@ public class FamilyActivityApplyController { cnd.and("tsuc.assort", "in", assortTypes); } + if("mine".equals(dataType)) { + cnd.and(new Static("tsuc.id in (select courseId from family_user where userId = '%s')".formatted(SecurityUtil.getUserId()))); + } + List courseArray = familyActivityService.dao().query(FamilyCourse.class, Cnd.where("activityId", "=", activityId)); courseArray = familyActivityService.filterCourseByHostUnion(courseArray); cnd.and("tsuc.id", "in", courseArray.stream().map(FamilyCourse::getId).toList()); @@ -134,6 +151,9 @@ public class FamilyActivityApplyController { List courseList = pagination.getList(); courseList.forEach(c -> { + List courseTimes = dao.query(FamilyActivityCourse.class, Cnd.where("courseId", "=", c.getString("id")).asc("courseDate")); + c.put("courseTimes", courseTimes); + c.put("hasRegisterNum", statisticsService.queryCourseCount(c.getString("id"), c.getString("courseType"))); c.put("hasWaitingNum", statisticsService.queryCourseWaitCount(c.getString("id"), c.getString("courseType"))); //当前用户是否报过 @@ -148,13 +168,28 @@ public class FamilyActivityApplyController { } } } + + List userList = dao.query(FamilyUser.class, Cnd.where("courseId", "=", c.getString("id")).and("userId", "=", SecurityUtil.getUserId())); + List values = new ArrayList<>(); + if(Lang.isNotEmpty(userList)) { + for (FamilyUser familyUser : userList) { + List> mobileColumnsValue = familyUser.getMobileColumnsValue(); + for (List listMap : mobileColumnsValue) { + NutMap nutMap = listMap.stream().filter(o -> Objects.equals(o.getString("columnCode"), activity.getOnlyKey())).findFirst().orElse(null); + if(nutMap != null) { + values.add(nutMap.getString("columnValue")); + } + } + } + c.put("signValue", String.join(",", values)); + } }); return Result.success(pagination); } @At @ApiOperation("获取分活动时间") - @SaCheckPermission("family.manage.apply") + @SaCheckPermission(value = {"family.apply", "h5.family.apply"}, mode = SaMode.OR) public Result getCourseTime(String id) { List list = familyActivityService.dao().query(FamilyActivityCourse.class, Cnd.where("courseId", "=", id)); return Result.success(list); @@ -162,7 +197,7 @@ public class FamilyActivityApplyController { @At @ApiOperation("查询分类标识集合") - @SaCheckPermission("family.manage.apply") + @SaCheckPermission(value = {"family.apply", "h5.family.apply"}, mode = SaMode.OR) public Result queryCourseAssort(String activityId) { List courseList = familyActivityService.dao().query( FamilyCourse.class, @@ -175,4 +210,219 @@ public class FamilyActivityApplyController { return Result.success(assortList); } + @At + @ApiOperation("验证是否能报名") + @SaCheckPermission(value = {"family.apply", "h5.family.apply"}, mode = SaMode.OR) + public Result validateSignUp(String courseId, + @Param(value = "currentFamilyNumber") Integer currentFamilyNumber) { + try { + lock.lock(); + if(StrUtil.isBlank(courseId)) { + return Result.error(99, "报名信息为空"); + } + + currentFamilyNumber = currentFamilyNumber != null ? currentFamilyNumber : 0; + FamilyCourse course = dao.fetch(FamilyCourse.class, courseId); + FamilyActivity activity = dao.fetch(FamilyActivity.class, course.getActivityId()); + + //判断时间 + if(DateUtil.compare(new Date(), activity.getActivitySignUpStartTime(), "yyyy-MM-dd HH:mm:ss") < 0) { + return Result.error(99,"报名未开始"); + } + if(DateUtil.compare(new Date(), activity.getActivitySignUpEndTime(), "yyyy-MM-dd HH:mm:ss") > 0) { + return Result.error(99,"报名已结束"); + } + + //判断活动组别 + int count = dao.count(ActivityUserScope.class, Cnd.where("groupId", "=", activity.getActivityGroupId()).and("userId", "=", SecurityUtil.getUserId())); + if(count == 0) { + return Result.error(99,"抱歉,您没有此次活动的权限"); + } + + //判断是否报名 + boolean courseByUser = familyActivityService.isSignCourseByUser(courseId, SecurityUtil.getUserId()); + if(courseByUser) { + return Result.error(99,"抱歉,您已经报名"); + } + + //判断活动人数 + boolean signFull = familyActivityService.isSignFull(course, currentFamilyNumber); + if(signFull) { + return Result.error(99,"啊哦,目前报名人数已达上限。您可保持关注,如有老师取消之前的报名从而释放出名额,您可再来试试。谢谢!"); + } + + //判断活动限制 + boolean signCourse = familyActivityService.isSignCourse(course, activity); + if(!signCourse) { + if(activity.getRestrictLimit() != 3) { + return Result.error(99,"您选择的类型已达上限,不能再报该类型的了"); + } else { + return Result.error(99,activity.getActivityName() + "限制报" + activity.getLimitNum() + "个活动,已达上限"); + } + } + + //判断分工会人数限制 + boolean signFullByUnionId = familyActivityService.isSignFullByUnionId(course, currentFamilyNumber); + if(signFullByUnionId) { + return Result.error(99,"您所在的分工会名额不足"); + } + + return Result.success(); + }catch (Exception e) { + e.printStackTrace(); + return Result.error(99,"报名失败"); + } finally { + lock.unlock(); + } + } + + @At + @ApiOperation("查询子活动时间段") + @SaCheckPermission(value = {"family.apply", "h5.family.apply"}, mode = SaMode.OR) + public Object getCourseTimeSelectList(String courseId) { + // 查课程的时间段 + List courseList = dao.query(FamilyActivityCourse.class, Cnd.where("courseId", "=", courseId).asc("courseStartTime")); + + // 查课程的报名人数 + List applyUserList = dao.query(FamilyUserCourse.class, Cnd.where("courseId", "=", courseId)); + + List userList = dao.query(FamilyUser.class, Cnd.where("courseId", "=", courseId).and("state", "=", 1)); + List idList = userList.stream().map(FamilyUser::getUserId).toList(); + + applyUserList = applyUserList.stream().filter(o -> idList.contains(o.getUserId())).toList(); + + // 按照课程下面时间段去分组 + Map> collectMap = applyUserList.stream().collect(Collectors.groupingBy(FamilyUserCourse::getActivityCourseId)); + List list = courseList.stream().map(v -> { + String id = v.getId(); + NutMap nutMap = NutMap.NEW(); + List familyUserCourses = collectMap.get(id); + int remainingNum = v.getCourseLimitNum() != null ? v.getCourseLimitNum() : 0; + if (Lang.isNotEmpty(familyUserCourses)) { + remainingNum = v.getCourseLimitNum() - familyUserCourses.size(); + } + nutMap.put("remainingNum", remainingNum); + nutMap.put("text", DateUtil.format(v.getCourseStartTime(), "HH:mm") + "至" + DateUtil.format(v.getCourseEndTime(), "HH:mm") + "段(剩" + remainingNum + ")"); + nutMap.put("value", id); + nutMap.put("disabled", remainingNum == 0); + return nutMap; + }).filter(v -> v.getInt("remainingNum") != 0).toList(); + return Result.success(list); + } + + @At + @ApiOperation("验证子活动是否能报名") + @SaCheckPermission(value = {"family.apply", "h5.family.apply"}, mode = SaMode.OR) + public Object validateSourceSignUp(String activityCourseId, String courseId) { + try { + lock.lock(); + + List userList = dao.query(FamilyUser.class, Cnd.where("courseId", "=", courseId).and("state", "=", 1)); + List isList = userList.stream().map(FamilyUser::getUserId).toList(); + + // 该时间段下已报名的人数 + int count = dao.count(FamilyUserCourse.class, Cnd.where("activityCourseId", "=", activityCourseId) + .and("courseId", "=", courseId).and("userId", "in", isList)); + // 获取改时间段下的活动课程限制报名人数 + FamilyActivityCourse course = dao.fetch(FamilyActivityCourse.class, activityCourseId); + Integer courseLimitNum = course.getCourseLimitNum(); + // 报名加上自己,如果大于了限制人数,那就无法报名 + if (count + 1 > courseLimitNum) { + return Result.error(99,"该时间段名额已报满,请选择其他时段报名"); + } else { + return Result.success(); + } + } catch (Exception e) { + e.printStackTrace(); + return Result.error(99,"报名失败"); + } finally { + lock.unlock(); + } + } + + @At + @ApiOperation("活动报名") + @SaCheckPermission(value = {"family.apply", "h5.family.apply"}, mode = SaMode.OR) + @SLog(tag = "亲子活动-活动报名", msg = "活动报名") + public Result doSignUp(FamilyUser familyUser) { + try { + lock.lock(); + boolean courseByUser = familyActivityService.isSignCourseByUser(familyUser.getCourseId(), SecurityUtil.getUserId()); + if(courseByUser) { + return Result.error(99,"您已报过该活动"); + } + FamilyActivity activity = familyActivityService.fetch(familyUser.getActivityId()); + boolean validFamilyCount = familyActivityService.validFamilyCount(familyUser); + if(validFamilyCount) { + return Result.error(99,activity.getKeyWord() + "人数最多为" + activity.getFamilyMaxCount()); + } + //判断人数 + int number = 0; + FamilyCourse course = familyActivityService.dao().fetch(FamilyCourse.class, familyUser.getCourseId()); + FamilyType type = familyActivityService.dao().fetch(FamilyType.class, course.getCourseType()); + if(type != null) { + if(type.getIsBringFamily() && type.getIsAddFamily()) { + List> mobileColumnsValue = familyUser.getMobileColumnsValue(); + number = Lang.isNotEmpty(mobileColumnsValue) ? mobileColumnsValue.size() : 0; + } + } + boolean signFull = familyActivityService.isSignFull(course, number); + if(signFull) { + return Result.error(99,"当前报名人数已满"); + } + boolean signFullByUnionId = familyActivityService.isSignFullByUnionId(course, number); + if(signFullByUnionId) { + return Result.error(99,"该活动您所在的分工会名额不足"); + } + familyActivityService.doSignUp(familyUser); + return Result.success("祝贺您!您已报名成功!请留意各分场活动的准确时间、地点,提前10-15分钟到达活动现场做好准备。如您因故不能参加活动,还请及时登录系统取消报名,以便将机会留给其他有需要的教职工。谢谢!"); + } catch (Exception e) { + e.printStackTrace(); + return Result.error("报名失败"); + } finally { + lock.unlock(); + } + } + + @At + @ApiOperation("取消报名") + @SaCheckPermission(value = {"family.apply", "h5.family.apply"}, mode = SaMode.OR) + @SLog(tag = "亲子活动-活动报名", msg = "取消报名") + public Result cancelSignUp(@Param("activityId") String activityId, @Param("courseId") String courseId) { + String userId = SecurityUtil.getUserId(); + //取消分两种情况 + //第一种没有设置分工会人数限制,那么将候补的人按时间倒叙往上补 + //第二种如果设置了分工会人数限制,那么只将本分工会的候补人员按照时间倒叙往上补,如果本分工会没有候补人员,则名额空出来,由校工会手动调整 + FamilyCourse course = dao.fetch(FamilyCourse.class, courseId); + FamilyType type = dao.fetch(FamilyType.class, course.getCourseType()); + //如果是正常报名取消了,将候补报名的按时间倒叙第一个改为正常报名 + Cnd cnd = Cnd.where("activityId", "=", activityId).and("courseId", "=", courseId) + .and("state", "=", 2); + //如果设置了分工会报名人数限制,则只查本分工会 + if (Lang.isNotEmpty(course.getUnionLimit())) { + cnd.and(new Static(" userId in (select id from user where unionid = '%s')".formatted(SecurityUtil.getUnionId()))); + } + cnd.asc("signUpTime"); + if (!type.getIsBringFamily() && course.getReserveMode() == 2) { + List signUpUsers = dao.query(FamilyUser.class, cnd); + int thisSignUpUserCount = dao.count(FamilyUser.class, + Cnd.where("activityId", "=", activityId) + .and("courseId", "=", courseId).and("userId", "=", userId) + .and("state", "in", List.of(1, 3))); + if (!signUpUsers.isEmpty() && thisSignUpUserCount > 0) { + FamilyUser familyUser = signUpUsers.get(0); + familyUser.setState(1); + dao.update(familyUser); + Sys_user user = dao.fetch(Sys_user.class, familyUser.getUserId()); + //msgApi.sendTextMsg("【" + activity.getActivityName() + "】已候补成功,请按时参加活动!", user.getLoginname()); + } + } + //删除报名记录 + dao.clear("family_user_course", Cnd.where("activityId", "=", activityId) + .and("courseId", "=", courseId).and("userId", "=", userId)); + + dao.clear("family_user", Cnd.where("activityId", "=", activityId) + .and("courseId", "=", courseId).and("userId", "=", userId)); + return Result.success(); + } } diff --git a/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyActivityController.java b/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyActivityController.java index 338b53a6..915cec6a 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyActivityController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyActivityController.java @@ -99,7 +99,7 @@ public class FamilyActivityController { @At @ApiOperation("查询单个活动") - @SaCheckPermission("family.manage") + @SaCheckPermission("family") public Result findOne(@Param("id") @NotNull String id) { NutMap dataMap = familyActivityManageService.findOne(id, null, ""); String activityStartTime = dataMap.getString("activityStartTime"); diff --git a/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyAdjustController.java b/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyAdjustController.java index 0d8cacb8..bc085d16 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyAdjustController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyAdjustController.java @@ -36,7 +36,7 @@ import java.util.List; @IocBean @Ok("json:full") @Api(tags = "亲子活动人员调整") -@At("/platform/family/manage/userAdjust") +@At("/platform/family/userAdjust") public class FamilyAdjustController { @Inject @@ -49,7 +49,7 @@ public class FamilyAdjustController { private FamilyActivityStatisticsService familyActivityStatisticsService; @At("") - @SaCheckPermission("family.manage.activity.adjust") + @SaCheckPermission("family.adjust") @Ok("beetl:/platform/zhgh/activity/family/userAdjust/index.html") public void index() { } @@ -61,7 +61,7 @@ public class FamilyAdjustController { */ @At @ApiOperation("活动列表") - @SaCheckPermission("family.manage.activity.adjust") + @SaCheckPermission("family.adjust") public Result activityList(@Param(value = "year") Integer year) { List activityList = dao.query(FamilyActivity.class, Cnd.NEW().andEX("year", "=", year).andEX("isDisabled", "=", false).desc("activityStartTime")); return Result.success(activityList); @@ -69,7 +69,7 @@ public class FamilyAdjustController { @At @ApiOperation("分页查询") - @SaCheckPermission("family.manage.activity.adjust") + @SaCheckPermission("family.adjust") public Result pageData(PageForm pageForm, @Param(value = "activityId") String activityId) { Pagination pagination = familyActivityStatisticsService.pageData(pageForm, activityId); @@ -78,7 +78,7 @@ public class FamilyAdjustController { @At @ApiOperation("子活动查询") - @SaCheckPermission("family.manage.activity.adjust") + @SaCheckPermission("family.adjust") public Result getCourse(String activityId) { Sql sql = Sqls.create(""" SELECT @@ -108,7 +108,7 @@ public class FamilyAdjustController { @At @ApiOperation("报名用户列表") - @SaCheckPermission("family.manage.activity.adjust") + @SaCheckPermission("family.adjust") public Result registerUserList(@Param("courseId") String courseId, @Param(value = "unionId") String unionId, @Param(value = "unitId") String unitId, @@ -120,7 +120,7 @@ public class FamilyAdjustController { @At @ApiOperation("人员调整") - @SaCheckPermission("family.manage.activity.adjust") + @SaCheckPermission("family.adjust") @SLog(tag = "亲子活动-人员调整", msg = "人员调整") public Result adjust(String activityId, String oldCourseId, String newCourseId, String userId) { @@ -159,7 +159,7 @@ public class FamilyAdjustController { @At @ApiOperation("删除报名人员") - @SaCheckPermission("family.manage.activity.adjust") + @SaCheckPermission("family.adjust") @SLog(tag = "亲子活动-人员调整", msg = "删除报名人员") public Result deleteSignUser(String activityId, String courseId, String userId) { diff --git a/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyMineController.java b/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyMineController.java new file mode 100644 index 00000000..6c57db91 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyMineController.java @@ -0,0 +1,165 @@ +package com.budwk.app.zhgh.activity.family.controller.manage; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaMode; +import cn.hutool.core.date.DateUnit; +import cn.hutool.core.date.DateUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.result.Result; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.activity.family.models.FamilyUserCourse; +import com.budwk.app.zhgh.activity.family.service.FamilyActivityService; +import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpUserCourse; +import com.budwk.app.zhgh.activity.trainSignUp.service.TrainSignUpActivityService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.aop.interceptor.ioc.TransAop; +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.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +import java.util.Date; +import java.util.List; + +/** + * @ClassName FamilyMineController + * @Author JyuHsin + * @Date 2025/9/13 16:56 + * @Version 1.0 + * @Description TODO + */ +@Slf4j +@IocBean +@Ok("json:full") +@Api(tags = "活动报名") +@At("/platform/family/mine") +public class FamilyMineController { + + @Inject + private Dao dao; + @Inject + private FamilyActivityService activityService; + + @At("/") + @SaCheckPermission("family.mine") + @Ok("beetl:/platform/zhgh/activity/family/mine/index.html") + public void index() { + } + + @At("/h5") + @SaCheckPermission("h5.family.mine") + @Ok("beetl:/platform/zhghh5/activity/family/mine/index.html") + public void h5Index() { + } + + @At + @ApiOperation("主动扫码签到") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission(value = {"family.mine", "h5.family.mine"}, mode = SaMode.OR) + @SLog(tag = "品牌活动-活动签到", msg = "主动扫码签到") + public Result drivingScan(String courseId) { + + // 主动扫码签到是用户自己打开扫一扫,扫二维码签到 + int count = dao.count(FamilyUserCourse.class, Cnd.where("courseId", "=", courseId).and("userId", "=", SecurityUtil.getUserId())); + if (count == 0) { + return Result.error(99, "未查询到您的报名记录"); + } + + // 获取现在的日期,并往后推1个小时 + String oneHourLater = DateUtil.offsetHour(new Date(), 1).toString("yyyy-MM-dd HH:mm:ss"); + FamilyUserCourse userCourse = dao.fetch( + FamilyUserCourse.class, + Cnd.where("courseId", "=", courseId) + .and("userId", "=", SecurityUtil.getUserId()) + .and("courseStartTime", "<=", oneHourLater) + .and("courseEndTime", ">=", oneHourLater) + ); + if (userCourse == null) { + return Result.error(99, "未到签到时间"); + } + + userCourse.setAttend(true); + userCourse.setAttendTime(DateUtil.date()); + dao.update(userCourse); + + return Result.success(); + } + + @At + @ApiOperation("被动扫码签到") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission(value = {"family.mine", "h5.family.mine"}, mode = SaMode.OR) + @SLog(tag = "品牌活动-活动签到", msg = "被动扫码签到") + public Result passiveScan(String id) { + + // id表示课程的某个时间段,userId表示是谁出示的二维码 + FamilyUserCourse userCourse = dao.fetch(FamilyUserCourse.class, id); + if (userCourse == null) { + return Result.error("未查询到报名记录"); + } + int isAfter = DateUtil.compare(new Date(), userCourse.getCourseStartTime()); + if (isAfter > 0) { + return Result.error("抱歉,已经开始,无法签到"); + } + long diffMillis = Math.abs(DateUtil.between(new Date(), userCourse.getCourseStartTime(), DateUnit.MS)); + long oneHourInMs = 3600 * 1000; + if (diffMillis > oneHourInMs) { + return Result.error("签到时间为开始前1个小时"); + } + + userCourse.setAttend(true); + userCourse.setAttendTime(DateUtil.date()); + dao.update(userCourse); + + return Result.success(); + } + + @At + @ApiOperation("分活动查询") + @SaCheckPermission(value = {"family.mine", "h5.family.mine"}, mode = SaMode.OR) + public Result queryCourseSign(String courseId) { + Sql sql = Sqls.create(""" + SELECT + uc.*, + date(uc.courseStartTime) as courseDate + FROM + `family_user_course` uc + WHERE + courseId = @courseId and userId = @userId + """); + sql.setParam("userId", SecurityUtil.getUserId()); + sql.setParam("courseId", courseId); + List listMap = activityService.listMap(sql); + return Result.success(listMap); + } + + @At + @ApiOperation("获取我报名的课程") + @SaCheckPermission(value = {"family.apply", "h5.family.apply"}, mode = SaMode.OR) + public Result queryMineCourse(String activityId) { + + Sql sql = Sqls.create(""" + SELECT + c.*, + u.mobileColumnsValue + FROM + family_user u + LEFT JOIN family_course c ON c.id = u.courseId + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("u.activityId", "=", activityId); + cnd.and("u.userId", "=", SecurityUtil.getUserId()); + sql.setCondition(cnd); + List listMap = activityService.listMap(sql); + return Result.success(listMap); + } +} diff --git a/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyTypeController.java b/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyTypeController.java index 1924976c..63c7b210 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyTypeController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyTypeController.java @@ -42,7 +42,7 @@ import java.util.List; @IocBean @Ok("json:full") @Api(tags = "活动类型管理") -@At("/platform/family/manage/type") +@At("/platform/family/type") public class FamilyTypeController { @Inject @@ -51,14 +51,14 @@ public class FamilyTypeController { private BaseService baseService; @At("") - @SaCheckPermission("family.manage.type") + @SaCheckPermission("family.type") @Ok("beetl:/platform/zhgh/activity/family/type/index.html") public void index() { } @At @ApiOperation("分页查询") - @SaCheckPermission("family.manage.type") + @SaCheckPermission("family.type") public Result pageData(PageForm pageForm, @Param(value = "typeName") String typeName) { Cnd cnd = Cnd.NEW(); @@ -89,7 +89,7 @@ public class FamilyTypeController { @At @ApiOperation("活动类型新增") - @SaCheckPermission("family.manage.type") + @SaCheckPermission("family.type") @SLog(tag = "亲子活动-活动类型管理", msg = "活动类型新增") public Result doAdd(@Param("data") String data) throws Exception { FamilyType type = Json.fromJson(FamilyType.class, data); @@ -105,7 +105,7 @@ public class FamilyTypeController { @At @ApiOperation("活动类型修改") - @SaCheckPermission("family.manage.type") + @SaCheckPermission("family.type") @SLog(tag = "亲子活动-活动类型管理", msg = "活动类型修改") public Result doEdit(FamilyType type) { int count = dao.count(FamilyType.class, Cnd.where("code", "=", type.getCode()).and("id", "!=", type.getId())); @@ -120,7 +120,7 @@ public class FamilyTypeController { @At @ApiOperation("活动类型删除") - @SaCheckPermission("family.manage.type") + @SaCheckPermission("family.type") @SLog(tag = "亲子活动-活动类型管理", msg = "活动类型删除") public Object doDelete(@Param(value = "id") String id) { dao.clear(FamilyType.class, Cnd.where("id", "=", id)); @@ -131,7 +131,7 @@ public class FamilyTypeController { @At @Aop(TransAop.READ_COMMITTED) @ApiOperation("排序号变更") - @SaCheckPermission("family.manage.type") + @SaCheckPermission("family.type") public Object xhChange(String id, Integer xh, boolean toDown) { if (toDown) { FamilyType next = dao.fetch(FamilyType.class, Cnd.where("xh", "=", xh + 1)); @@ -158,7 +158,7 @@ public class FamilyTypeController { @At @ApiOperation("自定义表单字段类型") - @SaCheckPermission("family.manage.type") + @SaCheckPermission("family.type") public Result getColumnType() { List names = EnumUtil.getNames(ColType.class); names.add("JSON"); diff --git a/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyUserManageController.java b/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyUserManageController.java index 625d007c..74bbeef3 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyUserManageController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyUserManageController.java @@ -56,14 +56,14 @@ public class FamilyUserManageController { private FamilyBlackListService familyBlackListService; @At("") - @SaCheckPermission("family.user.activity") + @SaCheckPermission("family.userManage") @Ok("beetl:/platform/zhgh/activity/family/userManage/index.html") public void index() { } @At @ApiOperation("分页查询") - @SaCheckPermission("family.user.activity") + @SaCheckPermission("family.userManage") public Result pageData(PageForm pageForm, @Param(value = "activityId") String activityId, @Param(value = "courseId") String courseId, @@ -87,7 +87,7 @@ public class FamilyUserManageController { @At @ApiOperation("报名人员处理") - @SaCheckPermission("family.user.activity") + @SaCheckPermission("family.userManage") @SLog(tag = "亲子活动-人员调整", msg = "报名人员处理") public Result doHandleUser(@Param("userId") String userId) { familyBlackListService.doHandleUser(userId); @@ -96,7 +96,7 @@ public class FamilyUserManageController { @At @ApiOperation("根据活动Id获取子活动") - @SaCheckPermission("family.user.activity") + @SaCheckPermission("family.userManage") public Result getCourseByActivityId(@Param("activityId") String activityId) { List list = dao.query(FamilyCourse.class, Cnd.where("activityId", "=", activityId)); return Result.success(list); @@ -104,7 +104,7 @@ public class FamilyUserManageController { @At @ApiOperation("获取子活动具体时间") - @SaCheckPermission("family.user.activity") + @SaCheckPermission("family.userManage") public Result attendClassRecord(String userId) { familyBlackListService.attendClassRecord(userId); return Result.success(); @@ -112,7 +112,7 @@ public class FamilyUserManageController { @At @ApiOperation("获取候补人员") - @SaCheckPermission("family.user.activity") + @SaCheckPermission("family.userManage") public Result getReserveUser(String courseId) { Sql sql = Sqls.create(""" SELECT @@ -133,7 +133,7 @@ public class FamilyUserManageController { @At @ApiOperation("补充人员") - @SaCheckPermission("family.user.activity") + @SaCheckPermission("family.userManage") @SLog(tag = "亲子活动-人员管理", msg = "补充人员") public Result reserveSingUp(String[] ids, String courseId) { //先查询这个课程有多少个未签到的人员 diff --git a/src/main/java/com/budwk/app/zhgh/activity/family/controller/mobile/MFamilyActivityController.java b/src/main/java/com/budwk/app/zhgh/activity/family/controller/mobile/MFamilyActivityController.java deleted file mode 100644 index 99c7567a..00000000 --- a/src/main/java/com/budwk/app/zhgh/activity/family/controller/mobile/MFamilyActivityController.java +++ /dev/null @@ -1,369 +0,0 @@ -package com.budwk.app.zhgh.activity.family.controller.mobile; - -import cn.dev33.satoken.annotation.SaCheckPermission; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.StrUtil; -import com.budwk.app.base.annotation.SLog; -import com.budwk.app.base.page.Pagination; -import com.budwk.app.base.param.PageForm; -import com.budwk.app.base.result.Result; -import com.budwk.app.sys.models.Sys_user; -import com.budwk.app.web.commons.auth.utils.SecurityUtil; -import com.budwk.app.zhgh.activity.basic.models.ActivityUserScope; -import com.budwk.app.zhgh.activity.family.models.*; -import com.budwk.app.zhgh.activity.family.service.FamilyActivityService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.nutz.dao.Chain; -import org.nutz.dao.Cnd; -import org.nutz.dao.Dao; -import org.nutz.dao.util.cri.Static; -import org.nutz.integration.jedis.RedisService; -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; -import org.nutz.mvc.annotation.Param; - -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.concurrent.locks.ReentrantLock; -import java.util.stream.Collectors; - -/** - * @author zxy - * @Description TODO - * @createTime 2022年02月25日 13:44:00 - */ -@IocBean -@Ok("json:full") -@Api(tags = "亲子活动移动端") -@At("/platform/mobile/familyActivity") -public class MFamilyActivityController { - - private static final String REDIS_KEY_PREFIX = "m_family_activity"; - private final ReentrantLock lock = new ReentrantLock(true); - @Inject - private Dao dao; - @Inject - private FamilyActivityService familyActivityService; - @Inject - private RedisService redisService; - - @At("/familyList") - @Ok("beetl:/platform/zhghh5/activity/family/familyList/index.html") - @SaCheckPermission("h5.family.sign") - public void familyList() { - } - - @At("/familyInfo") - @Ok("beetl:/platform/zhghh5/activity/family/familyInfo/index.html") - @SaCheckPermission("h5.family.sign") - public void familyInfo() { - } - - @At("/activityInfo") - @Ok("beetl:/platform/zhghh5/activity/family/activityInfo/index.html") - @SaCheckPermission("h5.family.sign") - public void activityInfo() { - } - - @At - @ApiOperation("分页查询") - @SaCheckPermission("h5.family.sign") - public Result pageData(PageForm pageForm, - @Param(value = "activityStatus") int activityStatus, - @Param(value = "year") Integer year, - @Param(value = "activityType") Integer activityType) { - Pagination pagination = familyActivityService.mPageData(pageForm, year, activityStatus, activityType); - return Result.success(pagination); - } - - /** - * @param id 活动id - * @param tabIndex 0全部 1我的 - * @return - */ - @At - @ApiOperation("查询单个活动") - @SaCheckPermission("h5.family.sign") - public Result findOne(@Param("id") String id, - @Param(value = "tabIndex") Integer tabIndex, - @Param(value = "fromMode") String fromMode) { - Cnd cnd = Cnd.NEW(); - if (tabIndex > 0) { - List mySignCourseList = dao.query(FamilyUser.class, Cnd.where("userId", "=", SecurityUtil.getUserId()).and("activityId", "=", id)); - List mySignCourseIdList = mySignCourseList.stream().map(FamilyUser::getCourseId).collect(Collectors.toList()); - cnd.and("id", "in", mySignCourseIdList); - } - NutMap nutMap = familyActivityService.findOne(id, cnd, fromMode); - List courseList = nutMap.getAsList("courseList", FamilyCourse.class); - courseList.forEach(v -> { - if (v.getCourseIsLimitApply() != null && v.getCourseIsLimitApply() && v.getIsSign()) { - FamilyActivityCourse course = dao.fetch(FamilyActivityCourse.class, Cnd.where("courseId", "=", v.getId())); - v.setCourseTimeName(DateUtil.format(course.getCourseStartTime(), "HH:mm") + "至" + DateUtil.format(course.getCourseEndTime(), "HH:mm") + "段"); - } - }); - return Result.success(nutMap); - } - - @At - @ApiOperation("查询子活动时间段") - @SaCheckPermission("h5.family.sign") - public Object getCourseTimeSelectList(String courseId) { - // 查课程的时间段 - List courseList = dao.query(FamilyActivityCourse.class, Cnd.where("courseId", "=", courseId)); - - // 查课程的报名人数 - List applyUserList = dao.query(FamilyUserCourse.class, Cnd.where("courseId", "=", courseId)); - // 按照课程下面时间段去分组 - Map> collectMap = applyUserList.stream().collect(Collectors.groupingBy(FamilyUserCourse::getActivityCourseId)); - List list = courseList.stream().map(v -> { - String id = v.getId(); - NutMap nutMap = NutMap.NEW(); - List familyUserCourses = collectMap.get(id); - int remainingNum = v.getCourseLimitNum() != null ? v.getCourseLimitNum() : 0; - if (Lang.isNotEmpty(familyUserCourses)) { - remainingNum = v.getCourseLimitNum() - familyUserCourses.size(); - } - nutMap.put("remainingNum", remainingNum); - nutMap.put("text", DateUtil.format(v.getCourseStartTime(), "HH:mm") + "至" + DateUtil.format(v.getCourseEndTime(), "HH:mm") + "段(剩" + remainingNum + ")"); - nutMap.put("value", id); - return nutMap; - }).filter(v -> v.getInt("remainingNum") != 0).toList(); - return Result.success(list); - } - - @At - @ApiOperation("活动报名") - @SaCheckPermission("h5.family.sign") - @SLog(tag = "亲子活动-活动报名", msg = "活动报名") - public Result doSignUp(FamilyUser familyUser) { - try { - lock.lock(); - boolean courseByUser = familyActivityService.isSignCourseByUser(familyUser.getCourseId(), SecurityUtil.getUserId()); - if(courseByUser) { - return Result.error("您已报过该活动"); - } - //判断人数 - int number = 0; - FamilyCourse course = familyActivityService.dao().fetch(FamilyCourse.class, familyUser.getCourseId()); - FamilyType type = familyActivityService.dao().fetch(FamilyType.class, course.getCourseType()); - if(type != null) { - if(type.getIsBringFamily() && type.getIsAddFamily()) { - List> mobileColumnsValue = familyUser.getMobileColumnsValue(); - number = Lang.isNotEmpty(mobileColumnsValue) ? mobileColumnsValue.size() : 0; - } - } - boolean signFull = familyActivityService.isSignFull(course, number); - if(signFull) { - return Result.error("当前报名人数已满"); - } - boolean signFullByUnionId = familyActivityService.isSignFullByUnionId(course, number); - if(signFullByUnionId) { - return Result.error("该活动您所在的分工会名额不足"); - } - familyActivityService.doSignUp(familyUser); - return Result.success(); - } catch (Exception e) { - e.printStackTrace(); - return Result.success("报名失败"); - } finally { - lock.unlock(); - } - } - - @At - @ApiOperation("取消报名") - @SaCheckPermission("h5.family.sign") - @SLog(tag = "亲子活动-活动报名", msg = "取消报名") - public Result cancelSignUp(@Param("activityId") String activityId, @Param("courseId") String courseId) { - String userId = SecurityUtil.getUserId(); - //取消分两种情况 - //第一种没有设置分工会人数限制,那么将候补的人按时间倒叙往上补 - //第二种如果设置了分工会人数限制,那么只将本分工会的候补人员按照时间倒叙往上补,如果本分工会没有候补人员,则名额空出来,由校工会手动调整 - FamilyActivity activity = dao.fetch(FamilyActivity.class, activityId); - FamilyCourse course = dao.fetch(FamilyCourse.class, courseId); - FamilyType type = dao.fetch(FamilyType.class, course.getCourseType()); - //如果是正常报名取消了,将候补报名的按时间倒叙第一个改为正常报名 - Cnd cnd = Cnd.where("activityId", "=", activityId).and("courseId", "=", courseId) - .and("state", "=", 2); - //如果设置了分工会报名人数限制,则只查本分工会 - if (Lang.isNotEmpty(course.getUnionLimit())) { - cnd.and(new Static(" userId in (select id from user where unionid = '%s')".formatted(SecurityUtil.getUnionId()))); - } - cnd.asc("signUpTime"); - if (!type.getIsBringFamily() && course.getReserveMode() == 2) { - List signUpUsers = dao.query(FamilyUser.class, cnd); - int thisSignUpUserCount = dao.count(FamilyUser.class, - Cnd.where("activityId", "=", activityId) - .and("courseId", "=", courseId).and("userId", "=", userId) - .and("state", "in", List.of(1, 3))); - if (!signUpUsers.isEmpty() && thisSignUpUserCount > 0) { - FamilyUser familyUser = signUpUsers.get(0); - familyUser.setState(1); - dao.update(familyUser); - Sys_user user = dao.fetch(Sys_user.class, familyUser.getUserId()); - //msgApi.sendTextMsg("【" + activity.getActivityName() + "】已候补成功,请按时参加活动!", user.getLoginname()); - } - } - //删除报名记录 - dao.clear("family_user_course", Cnd.where("activityId", "=", activityId) - .and("courseId", "=", courseId).and("userId", "=", userId)); - - dao.clear("family_user", Cnd.where("activityId", "=", activityId) - .and("courseId", "=", courseId).and("userId", "=", userId)); - return Result.success(); - } - - @At - @ApiOperation("签到") - @SaCheckPermission("h5.family.sign") - @SLog(tag = "亲子活动-活动报名", msg = "活动签到") - public Result doQd(@Param("id") String id, @Param("courseId") String courseId, @Param("point") Double[] points) { - FamilyCourse course = dao.fetch(FamilyCourse.class, courseId); - List coursePoints = course.getCourseLocationCoordinates(); -// if (Lang.isNotEmpty(coursePoints)) { -// //需要签到 -// if (ArrayUtil.isEmpty(points) || ArrayUtil.hasNull(points)) { -// return Result.error().addMsg("请获取当前的坐标信息"); -// } -// Double[] coursePointArray = coursePoints.toArray(new Double[]{}); -// float distance = AMapUtils.calculateLineDistance(new LatLng(points[0], points[1]), new LatLng(coursePointArray[0], coursePointArray[1])); -// -// if (distance > 500) { -// return Result.error().addMsg("请到签到点位附近签到"); -// } -// } - familyActivityService.doQd(id); - return Result.success(); - } - - /** - * 签到信息 - * - * @param activityId - * @return - */ - @At - @ApiOperation("获取签到信息") - @SaCheckPermission("h5.family.sign") - public Result getQdInfoList(@Param("activityId") String activityId) { - List list = familyActivityService.qdInfoByUserId(SecurityUtil.getUserId(), activityId); - return Result.success(list); - } - - @At - @ApiOperation("验证是否能报名") - @SaCheckPermission("h5.family.sign") - public Result validateSignUp(String courseId, - @Param(value = "currentFamilyNumber") Integer currentFamilyNumber) { - try { - lock.lock(); - if(StrUtil.isBlank(courseId)) { - return Result.error("报名信息为空"); - } - - currentFamilyNumber = currentFamilyNumber != null ? currentFamilyNumber : 0; - FamilyCourse course = dao.fetch(FamilyCourse.class, courseId); - FamilyActivity activity = dao.fetch(FamilyActivity.class, course.getActivityId()); - - //判断时间 - if(DateUtil.compare(new Date(), activity.getActivitySignUpStartTime(), "yyyy-MM-dd HH:mm:ss") < 0) { - return Result.error("报名未开始"); - } - if(DateUtil.compare(new Date(), activity.getActivitySignUpEndTime(), "yyyy-MM-dd HH:mm:ss") > 0) { - return Result.error("报名已结束"); - } - - //判断活动组别 - int count = dao.count(ActivityUserScope.class, Cnd.where("groupId", "=", activity.getActivityGroupId()).and("userId", "=", SecurityUtil.getUserId())); - if(count == 0) { - return Result.error("抱歉,您没有此次活动的权限"); - } - - //判断是否报名 - boolean courseByUser = familyActivityService.isSignCourseByUser(courseId, SecurityUtil.getUserId()); - if(courseByUser) { - return Result.error("抱歉,您已经报名"); - } - - //判断活动人数 - boolean signFull = familyActivityService.isSignFull(course, currentFamilyNumber); - if(signFull) { - return Result.error("名额剩余数量不足"); - } - - //判断活动限制 - boolean signCourse = familyActivityService.isSignCourse(course, activity); - if(!signCourse) { - if(activity.getRestrictLimit() != 3) { - return Result.error("您选择的类型已达上限,不能再报该类型的了"); - } else { - return Result.error(activity.getActivityName() + "限制报" + activity.getLimitNum() + "个活动,已达上限"); - } - } - - //判断分工会人数限制 - boolean signFullByUnionId = familyActivityService.isSignFullByUnionId(course, currentFamilyNumber); - if(signFullByUnionId) { - return Result.error("您所在的分工会名额不足"); - } - - return Result.success(); - }catch (Exception e) { - e.printStackTrace(); - return Result.error("报名失败"); - } finally { - lock.unlock(); - } - } - - @At - @ApiOperation("验证子活动是否能报名") - @SaCheckPermission("h5.family.sign") - public Object validateSourceSignUp(String activityCourseId, String courseId) { - try { - lock.lock(); - // 该时间段下已报名的人数 - int count = dao.count(FamilyUserCourse.class, Cnd.where("activityCourseId", "=", activityCourseId) - .and("courseId", "=", courseId)); - // 获取改时间段下的活动课程限制报名人数 - FamilyActivityCourse course = dao.fetch(FamilyActivityCourse.class, activityCourseId); - Integer courseLimitNum = course.getCourseLimitNum(); - // 报名加上自己,如果大于了限制人数,那就无法报名 - if (count + 1 > courseLimitNum) { - return Result.error("该时间段名额已报满,请选择其他时段报名"); - } else { - return Result.success(); - } - } catch (Exception e) { - e.printStackTrace(); - return Result.error("报名失败"); - } finally { - lock.unlock(); - } - } - - @At - @ApiOperation("二维码签到") - @SaCheckPermission("h5.family.sign") - @SLog(tag = "亲子活动-活动报名", msg = "二维码签到") - public Result codeSign(String id, String codeCourseId, String clickCourseId) { - if(StrUtil.isBlank(codeCourseId) || StrUtil.isBlank(clickCourseId)) { - return Result.error("签到失败,没有获取到扫描信息"); - } - if(!codeCourseId.equals(clickCourseId)) { - return Result.error("签到失败,二维码与您当前签到信息不符"); - } - dao.update(FamilyUserCourse.class, Chain.make("isAttend", true) - .add("attendTime", new Date()), Cnd.where("id", "=", id)); - return Result.success(); - } - -} - - diff --git a/src/main/java/com/budwk/app/zhgh/activity/family/controller/mobile/MFamilyActivityScannerQrCodeController.java b/src/main/java/com/budwk/app/zhgh/activity/family/controller/mobile/MFamilyActivityScannerQrCodeController.java deleted file mode 100644 index 0c4aa62d..00000000 --- a/src/main/java/com/budwk/app/zhgh/activity/family/controller/mobile/MFamilyActivityScannerQrCodeController.java +++ /dev/null @@ -1,201 +0,0 @@ -package com.budwk.app.zhgh.activity.family.controller.mobile; - -import lombok.extern.slf4j.Slf4j; -import org.nutz.ioc.loader.annotation.IocBean; -import org.nutz.mvc.annotation.At; -import org.nutz.mvc.annotation.Ok; - -/** - * 品牌活动扫码 - */ -@IocBean -@At("/platform/mobile/familyActivityScannerQrCode") -@Ok("json:full") -@Slf4j -public class MFamilyActivityScannerQrCodeController { - - /*@Inject - private WxTokenUtil; - - @Inject - private familyActivityService familyActivityService; - - @Inject - private Dao dao; - - @At("") - @Ok("beetl:/mobile/scannerQrCode.html") - public void scannerQrCode() { - - } - - *//** - * 微信js验证 - * - * @param url - * @return - *//* - @At("/auth/sign") - @ViReturn - @RequiresAuthentication - public Object wxAuthSign(String url) { - String jsapi_ticket = wxTokenUtil.jsTicket(); - return sign(jsapi_ticket, url); - } - - *//** - * 二维码信息 - * - * @param userId 用户id - * @param signId 签到记录id - * @param activityId 活动id - * @return - *//* - @At("/qrCodeInfo") - @RequiresAuthentication - public Object qrCodeInfo(@Param("userId") String userId, @Param("signId") String signId, @Param("activityId") String activityId) { - if (StrUtil.isBlank(userId) || StrUtil.isBlank(signId) || StrUtil.isBlank(activityId)) { - return Result.error("参数错误"); - } - try { -// Sql activitySql = Sqls.create("select activityName,cover from family_activity where id = @activityId"); -// activitySql.setParam("activityId",activityId); -// NutMap activityMap = (NutMap) Daos.query(dao, activitySql.toString(), Sqls.callback.map()); - - Sql signSql = Sqls.create("select isAttend,attendTime,isReceive,receiveTime from family_user_course where id = @signId"); - signSql.setParam("signId", signId); - NutMap attendInfo = (NutMap) Daos.query(dao, signSql.toString(), Sqls.callback.map()); - Sql userSql = Sqls.create("select id,username,loginname,unitname,unionname,sex from `user` where id = @userId"); - userSql.setParam("userId", userId); - NutMap userMap = (NutMap) Daos.query(dao, userSql.toString(), Sqls.callback.map()); - return Result.success(Map.of("signInfo", attendInfo, "userInfo", userMap)); - } catch (Exception e) { - log.error(e.getMessage()); - return Result.error("获取信息失败"); - } - } - - @At("/signInfo") - @RequiresAuthentication - public Object signInfo(@Param("signId") String signId) { - if (StrUtil.isBlank(signId)) { - return Result.error("参数错误"); - } - try { - Sql signSql = Sqls.create("select isAttend,attendTime from family_user_course where id = @signId"); - signSql.setParam("signId", signId); - NutMap signInfo = familyActivityService.fetch(signSql); - return Result.success(signInfo); - } catch (Exception e) { - log.error(e.getMessage()); - return Result.error("获取信息失败"); - } - } - - *//** - * 发放礼品 - * - * @param signId - * @return - *//* - @At("/grantGiftByQrCode") - @RequiresAuthentication - public Object grantGiftByQrCode(@Param("signId") String signId) { - if (StrUtil.isBlank(signId)) { - return Result.error("参数错误"); - } - try { - Chain chain = Chain.make("isReceive", 1); - chain.add("receiveTime", new Date()); - chain.add("giftScannerCodeUserId", ShiroUtil.getPrincipalProperty("id")); - dao.update(familyUserCourse.class, chain, Cnd.where("id", "=", signId)); - Sql signSql = Sqls.create("select isAttend,attendTime,isReceive,receiveTime from family_user_course where id = @signId"); - signSql.setParam("signId", signId); - NutMap signInfo = familyActivityService.fetch(signSql); - return Result.success(signInfo); - } catch (Exception e) { - log.error(e.getMessage()); - return Result.error("获取信息失败"); - } - } - - *//** - * 二维码扫描确认签到 - * - * @param signId - * @return - *//* - @At("/confirmSignByQrCode") - @RequiresAuthentication - public Object confirmSignByQrCode(@Param("signId") String signId) { - if (StrUtil.isBlank(signId)) { - return Result.error("参数错误"); - } - try { - Chain chain = Chain.make("isAttend", 1); - chain.add("attendTime", new Date()); - chain.add("signScannerCodeUserId", ShiroUtil.getPrincipalProperty("id")); - dao.update(familyUserCourse.class, chain, Cnd.where("id", "=", signId)); - - Sql signSql = Sqls.create("select isAttend,attendTime,isReceive,receiveTime from family_user_course where id = @signId"); - signSql.setParam("signId", signId); - NutMap signInfo = familyActivityService.fetch(signSql); - return Result.success(signInfo); - } catch (Exception e) { - log.error(e.getMessage()); - return Result.error("获取信息失败"); - } - } - - - public static Map sign(String jsapi_ticket, String url) { - Map ret = new HashMap(); - String nonce_str = create_nonce_str(); - String timestamp = create_timestamp(); - String string1; - String signature = ""; - - //注意这里参数名必须全部小写,且必须有序 - string1 = "jsapi_ticket=" + jsapi_ticket + - "&noncestr=" + nonce_str + - "×tamp=" + timestamp + - "&url=" + url; - System.out.println(string1); - - try { - MessageDigest crypt = MessageDigest.getInstance("SHA-1"); - crypt.reset(); - crypt.update(string1.getBytes("UTF-8")); - signature = byteToHex(crypt.digest()); - } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) { - e.printStackTrace(); - } - - ret.put("url", url); - ret.put("jsapi_ticket", jsapi_ticket); - ret.put("nonceStr", nonce_str); - ret.put("timestamp", timestamp); - ret.put("signature", signature); - - return ret; - } - - private static String byteToHex(final byte[] hash) { - Formatter formatter = new Formatter(); - for (byte b : hash) { - formatter.format("%02x", b); - } - String result = formatter.toString(); - formatter.close(); - return result; - } - - private static String create_nonce_str() { - return UUID.randomUUID().toString(); - } - - private static String create_timestamp() { - return Long.toString(System.currentTimeMillis() / 1000); - }*/ - -} diff --git a/src/main/java/com/budwk/app/zhgh/activity/family/controller/statistics/FamilyActivityStatisticsController.java b/src/main/java/com/budwk/app/zhgh/activity/family/controller/statistics/FamilyActivityStatisticsController.java index daaca32a..4f9fecd4 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/family/controller/statistics/FamilyActivityStatisticsController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/family/controller/statistics/FamilyActivityStatisticsController.java @@ -62,7 +62,7 @@ import java.util.stream.Collectors; @IocBean @Ok("json:full") @Api(tags = "亲子活动统计") -@At("/platform/family/statistics/activity") +@At("/platform/family/statistics") public class FamilyActivityStatisticsController { @Inject @@ -73,14 +73,14 @@ public class FamilyActivityStatisticsController { private Dao dao; @At("") - @SaCheckPermission("family.statistics.activity") + @SaCheckPermission("family.statistics") @Ok("beetl:/platform/zhgh/activity/family/statistics/index.html") public void index() { } @At @ApiOperation("分页查询") - @SaCheckPermission("family.statistics.activity") + @SaCheckPermission("family.statistics") public Result pageData(PageForm pageForm, @Param(value = "activityId") String activityId) { Pagination pagination = familyActivityStatisticsService.pageData(pageForm, activityId); @@ -95,7 +95,7 @@ public class FamilyActivityStatisticsController { */ @At @ApiOperation("活动列表") - @SaCheckPermission("family.statistics.activity") + @SaCheckPermission("family.statistics") public Result activityList(@Param(value = "year") Integer year) { List list = dao.query(FamilyActivity.class, Cnd.NEW().andEX("year", "=", year).desc("activityStartTime")); return Result.success(list); @@ -109,14 +109,14 @@ public class FamilyActivityStatisticsController { */ @At @ApiOperation("报名人员列表") - @SaCheckPermission("family.statistics.activity") + @SaCheckPermission("family.statistics") public Result registerUserList(@Param(value = "courseId") String courseId) { return Result.success(familyActivityStatisticsService.registerUserList(courseId)); } @At @ApiOperation("报名动态列") - @SaCheckPermission("family.statistics.activity") + @SaCheckPermission("family.statistics") public Object getTaleColumnInfo(@Param(value = "courseId") String courseId) { return Result.success(familyActivityStatisticsService.getTaleColumnInfo(courseId)); } @@ -129,14 +129,14 @@ public class FamilyActivityStatisticsController { */ @At @ApiOperation("获取签到信息") - @SaCheckPermission("family.statistics.activity") + @SaCheckPermission("family.statistics") public Result getSignInfo(@Param("courseId") String courseId) { return Result.success(familyActivityStatisticsService.getSignInfo(courseId)); } @At @ApiOperation("开放报名") - @SaCheckPermission("family.statistics.activity") + @SaCheckPermission("family.statistics") public Result signChange(@Param("courseId") String courseId, @Param("openOtherUnion") Boolean openOtherUnion) { dao.update(FamilyCourse.class, Chain.make("openOtherUnion", openOtherUnion) , Cnd.where("id", "=", courseId)); @@ -146,7 +146,7 @@ public class FamilyActivityStatisticsController { @At @Ok("void") @ApiOperation("导出签到名单") - @SaCheckPermission("family.statistics.activity") + @SaCheckPermission("family.statistics") public void exportSignUser(@Param(value = "activityId") String activityId, HttpServletResponse response) throws IOException { try { diff --git a/src/main/java/com/budwk/app/zhgh/activity/family/models/FamilyActivity.java b/src/main/java/com/budwk/app/zhgh/activity/family/models/FamilyActivity.java index 7f0207a6..273c9e2c 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/family/models/FamilyActivity.java +++ b/src/main/java/com/budwk/app/zhgh/activity/family/models/FamilyActivity.java @@ -24,113 +24,129 @@ import java.util.List; @EqualsAndHashCode(callSuper = false) public class FamilyActivity extends BaseModel implements Serializable, SysHomeConvert { - @Name - @PrevInsert(uu32 = true) - private String id; + @Name + @PrevInsert(uu32 = true) + private String id; - @Column - @ColDefine(type = ColType.VARCHAR, width = 50) - @Comment("活动名称") - private String activityName; + @Column + @ColDefine(type = ColType.VARCHAR, width = 50) + @Comment("活动名称") + private String activityName; - @Column - @ColDefine(type = ColType.INT) - @Comment("年度") - private Integer year; + @Column + @ColDefine(type = ColType.INT) + @Comment("年度") + private Integer year; - @Column - @ColDefine(type = ColType.DATETIME) - @Comment("活动报名开始时间") - private Date activitySignUpStartTime; + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("活动报名开始时间") + private Date activitySignUpStartTime; - @Column - @ColDefine(type = ColType.DATETIME) - @Comment("活动报名开始时间") - private Date activitySignUpEndTime; + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("活动报名开始时间") + private Date activitySignUpEndTime; - @Column - @ColDefine(type = ColType.DATETIME) - @Comment("活动开始时间") - private Date activityStartTime; + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("活动开始时间") + private Date activityStartTime; - @Column - @ColDefine(type = ColType.DATETIME) - @Comment("活动结束时间") - private Date activityEndTime; + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("活动结束时间") + private Date activityEndTime; - @Column - @ColDefine(type = ColType.BOOLEAN) - @Comment("是否禁用") - @Default("0") - private boolean isDisabled; + @Column + @ColDefine(type = ColType.BOOLEAN) + @Comment("是否禁用") + @Default("0") + private boolean isDisabled; - @Column - @ColDefine(customType = "longtext") - @Comment("活动介绍") - private String introduce; + @Column + @ColDefine(customType = "longtext") + @Comment("活动介绍") + private String introduce; - @Column - @ColDefine(type = ColType.INT, width = 10) - @Comment("活动限制标识") - private Integer restrictLimit; + @Column + @ColDefine(type = ColType.INT, width = 10) + @Comment("活动限制标识") + private Integer restrictLimit; - @Column - @ColDefine(type = ColType.INT, width = 10) - @Comment("活动限制报名个数") - private Integer limitNum; + @Column + @ColDefine(type = ColType.INT, width = 10) + @Comment("活动限制报名个数") + private Integer limitNum; - @Column - @ColDefine(type = ColType.VARCHAR, width = 100) - @Comment("活动封面") - private String cover; + @Column + @ColDefine(type = ColType.VARCHAR, width = 100) + @Comment("活动封面") + private String cover; - @Column - @ColDefine(type = ColType.VARCHAR, width = 100) - @Comment("微信群二维码") - private String wechat; + @Column + @ColDefine(type = ColType.VARCHAR, width = 100) + @Comment("微信群二维码") + private String wechat; - @Column - @ColDefine(type = ColType.BOOLEAN) - @Comment("上课前是否通知") - @Default("0") - private boolean notice; + @Column + @ColDefine(type = ColType.BOOLEAN) + @Comment("上课前是否通知") + @Default("0") + private boolean notice; - @Column - @Comment("活动范围Id") - @ColDefine(type = ColType.INT, width = 32) - private Integer activityGroupId; + @Column + @Comment("活动范围Id") + @ColDefine(type = ColType.INT, width = 32) + private Integer activityGroupId; - @Column - @Comment("活动范围名称") - @ColDefine(type = ColType.VARCHAR, width = 40) - private String activityGroupName; + @Column + @Comment("活动范围名称") + @ColDefine(type = ColType.VARCHAR, width = 40) + private String activityGroupName; - @Many(field = "activityId") - private List courseList; + @Many(field = "activityId") + private List courseList; - @Many(field = "activityId") - private List typeLimits; + @Many(field = "activityId") + private List typeLimits; - @Column - @Comment("活动类型") - @ColDefine(type = ColType.VARCHAR, width = 20) - private String trainType; + @Column + @Comment("活动类型") + @ColDefine(type = ColType.VARCHAR, width = 20) + private String trainType; - @Override - public Sys_home_activity covertToSysHomeActivity() { - Sys_home_activity sysHomeActivity = new Sys_home_activity(); - sysHomeActivity.setId(this.getId()); - sysHomeActivity.setName(this.getActivityName()); - sysHomeActivity.setCover(this.getCover()); - sysHomeActivity.setUrl("/platform/family/manage/apply"); - sysHomeActivity.setH5Url("/platform/mobile/familyActivity/familyList"); - if (Lang.isNotEmpty(this.getActivitySignUpStartTime())) { - sysHomeActivity.setStartDate(this.getActivitySignUpStartTime()); - sysHomeActivity.setEndDate(this.getActivitySignUpEndTime()); - } - sysHomeActivity.setAllowUserGroupId(this.getActivityGroupId()); - sysHomeActivity.setEnable(!this.isDisabled()); - sysHomeActivity.setClassPath(this.getClass().getPackageName() + this.getClass().getName()); - return sysHomeActivity; - } + @Column + @Comment("关键词") + @Default("家属") + @ColDefine(type = ColType.VARCHAR, width = 20) + private String keyWord; + + @Column + @Comment("家属最多数") + @ColDefine(type = ColType.INT) + private Integer familyMaxCount; + + @Column + @Comment("判断家属数量的唯一标识") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String onlyKey; + + @Override + public Sys_home_activity covertToSysHomeActivity() { + Sys_home_activity sysHomeActivity = new Sys_home_activity(); + sysHomeActivity.setId(this.getId()); + sysHomeActivity.setName(this.getActivityName()); + sysHomeActivity.setCover(this.getCover()); + sysHomeActivity.setUrl("/platform/family/apply"); + sysHomeActivity.setH5Url("/platform/family/apply/h5?id=" + this.getId()); + if (Lang.isNotEmpty(this.getActivitySignUpStartTime())) { + sysHomeActivity.setStartDate(this.getActivitySignUpStartTime()); + sysHomeActivity.setEndDate(this.getActivitySignUpEndTime()); + } + sysHomeActivity.setAllowUserGroupId(this.getActivityGroupId()); + sysHomeActivity.setEnable(!this.isDisabled()); + sysHomeActivity.setClassPath(this.getClass().getPackageName() + this.getClass().getName()); + return sysHomeActivity; + } } diff --git a/src/main/java/com/budwk/app/zhgh/activity/family/models/FamilyCourse.java b/src/main/java/com/budwk/app/zhgh/activity/family/models/FamilyCourse.java index bcab9709..7bd8ac37 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/family/models/FamilyCourse.java +++ b/src/main/java/com/budwk/app/zhgh/activity/family/models/FamilyCourse.java @@ -78,6 +78,11 @@ public class FamilyCourse extends BaseModel implements Serializable { @Comment("序号") private int orderNum; + @Column + @ColDefine(customType = "longtext") + @Comment("详细信息") + private String introduce; + @Many(field = "courseId") private List courseTimeList; @@ -89,6 +94,7 @@ public class FamilyCourse extends BaseModel implements Serializable { @Column @ColDefine(type = ColType.BOOLEAN) @Comment("移动端是否签到") + @Default("0") private boolean isMobileSign; @Column @@ -99,6 +105,7 @@ public class FamilyCourse extends BaseModel implements Serializable { @Column @ColDefine(type = ColType.BOOLEAN) @Comment("移动端是否签收礼品") + @Default("0") private boolean isReceiveGift; @Column @@ -137,6 +144,33 @@ public class FamilyCourse extends BaseModel implements Serializable { @Comment("候补名额数") private Integer waitingNum; + @Column + @ColDefine(type = ColType.BOOLEAN) + @Comment("是否限制年龄") + @Default("0") + private boolean familyAgeLimit; + + @Column + @ColDefine(type = ColType.INT) + @Comment("最小年龄") + private Integer minAge; + + @Column + @ColDefine(type = ColType.INT) + @Comment("最大年龄") + private Integer maxAge; + + @Column + @ColDefine(type = ColType.BOOLEAN) + @Comment("是否限制性别") + @Default("0") + private boolean familySexLimit; + + @Column + @ColDefine(type = ColType.VARCHAR) + @Comment("限制性别") + private String familySex; + private Integer hasWaitingNum; private String courseTimeName; private Integer hasRegisterNum; diff --git a/src/main/java/com/budwk/app/zhgh/activity/family/models/FamilyMobileSignColumn.java b/src/main/java/com/budwk/app/zhgh/activity/family/models/FamilyMobileSignColumn.java index 877b5156..c7602293 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/family/models/FamilyMobileSignColumn.java +++ b/src/main/java/com/budwk/app/zhgh/activity/family/models/FamilyMobileSignColumn.java @@ -84,4 +84,9 @@ public class FamilyMobileSignColumn implements Serializable { @ColDefine(type = ColType.INT, width = 1) private Integer columnIndex; + @Column + @Comment("验证规则") + @ColDefine(type = ColType.VARCHAR, width = 50) + private String validRule; + } diff --git a/src/main/java/com/budwk/app/zhgh/activity/family/service/FamilyActivityService.java b/src/main/java/com/budwk/app/zhgh/activity/family/service/FamilyActivityService.java index 537b297b..08ffb68d 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/family/service/FamilyActivityService.java +++ b/src/main/java/com/budwk/app/zhgh/activity/family/service/FamilyActivityService.java @@ -16,101 +16,103 @@ import java.util.List; */ public interface FamilyActivityService extends BaseService { - /** - * 添加活动 - * @param activity 活动信息 - * @param course 培训班信息 - */ - void add(FamilyActivity activity, FamilyCourse course); + /** + * 添加活动 + * @param activity 活动信息 + * @param course 培训班信息 + */ + void add(FamilyActivity activity, FamilyCourse course); - /** - * 编辑活动 - * @param activity 活动信息 - */ - void edit(FamilyActivity activity); + /** + * 编辑活动 + * @param activity 活动信息 + */ + void edit(FamilyActivity activity); - /** - * 更新活动状态 - * @param activity 活动信息 - */ - void updateActivityStatus(FamilyActivity activity); + /** + * 更新活动状态 + * @param activity 活动信息 + */ + void updateActivityStatus(FamilyActivity activity); - /** - * 查询单条活动信息 - * @param id 活动ID - * @return 返回的数据与前端符合 - */ - NutMap findOne(String id, Cnd cnd, String fromMode); + /** + * 查询单条活动信息 + * @param id 活动ID + * @return 返回的数据与前端符合 + */ + NutMap findOne(String id, Cnd cnd, String fromMode); - /** - * pc分页查询 - * @param pageForm - * @param cnd - * @return - */ - Pagination pageData(PageForm pageForm, Cnd cnd); + /** + * pc分页查询 + * @param pageForm + * @param cnd + * @return + */ + Pagination pageData(PageForm pageForm, Cnd cnd); - /** - * 手机端分页查询 - * @param pageForm 分页 - * @param year 年度 - * @param activityStatus 报名状态 0全部 1进行中 2结束 - * @return - */ - Pagination mPageData(PageForm pageForm, Integer year, int activityStatus, Integer activityType); + /** + * 手机端分页查询 + * @param pageForm 分页 + * @param year 年度 + * @param activityStatus 报名状态 0全部 1进行中 2结束 + * @return + */ + Pagination mPageData(PageForm pageForm, Integer year, int activityStatus, Integer activityType); - /** - * 手机端报名 - * @param familyUser 活动ID - */ - void doSignUp(FamilyUser familyUser) throws Exception; + /** + * 手机端报名 + * @param familyUser 活动ID + */ + void doSignUp(FamilyUser familyUser) throws Exception; - /** - * 异步插入每个报名成功人员的课程数据 - * @param activityId - * @param courseId - * @param userId - */ - void asyncInsertUserCourse(String activityId, String courseId, String userId); + /** + * 异步插入每个报名成功人员的课程数据 + * @param activityId + * @param courseId + * @param userId + */ + void asyncInsertUserCourse(String activityId, String courseId, String userId); - /** - * 该培训班每个分工会名额是否报满 - * @return - */ - boolean isSignFullByUnionId(FamilyCourse course, Integer currentFamilyNumber); + /** + * 该培训班每个分工会名额是否报满 + * @return + */ + boolean isSignFullByUnionId(FamilyCourse course, Integer currentFamilyNumber); - /** - * 该培训班是否报满 - */ - boolean isSignFull(FamilyCourse course, Integer currentFamilyNumber); + /** + * 该培训班是否报满 + */ + boolean isSignFull(FamilyCourse course, Integer currentFamilyNumber); - /** - * 还能报该类型的培训班吗 比如书画班最多报一项 健身班两项 - * @return - */ - boolean isSignCourse(FamilyCourse course, FamilyActivity activity); + boolean validFamilyCount(FamilyUser user); - /** - * 当前用户是否已报过该培训班 - * @param courseId - * @param userId - * @return - */ - boolean isSignCourseByUser(String courseId, String userId); + /** + * 还能报该类型的培训班吗 比如书画班最多报一项 健身班两项 + * @return + */ + boolean isSignCourse(FamilyCourse course, FamilyActivity activity); - /** - * 手机端签到 - * @param id 每个培训班每节课每个用户的记录ID - */ - void doQd(String id); + /** + * 当前用户是否已报过该培训班 + * @param courseId + * @param userId + * @return + */ + boolean isSignCourseByUser(String courseId, String userId); - /** - * 某个用户的签到信息 - * @param userId 用户id - * @param activityId 活动id - */ - List qdInfoByUserId(String userId, String activityId); + /** + * 手机端签到 + * @param id 每个培训班每节课每个用户的记录ID + */ + void doQd(String id); - List filterCourseByHostUnion(List courseList); + /** + * 某个用户的签到信息 + * @param userId 用户id + * @param activityId 活动id + */ + List qdInfoByUserId(String userId, String activityId); + + List filterCourseByHostUnion(List courseList); } diff --git a/src/main/java/com/budwk/app/zhgh/activity/family/service/impl/FamilyActivityServiceImpl.java b/src/main/java/com/budwk/app/zhgh/activity/family/service/impl/FamilyActivityServiceImpl.java index 8e1264ba..50fbbae1 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/family/service/impl/FamilyActivityServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/activity/family/service/impl/FamilyActivityServiceImpl.java @@ -1,11 +1,9 @@ package com.budwk.app.zhgh.activity.family.service.impl; import cn.hutool.core.util.StrUtil; -import cn.hutool.json.JSONArray; -import cn.hutool.json.JSONObject; -import cn.hutool.json.JSONUtil; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; 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; @@ -27,12 +25,10 @@ import org.nutz.dao.util.cri.Static; import org.nutz.ioc.aop.Aop; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; -import org.nutz.json.Json; 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; /** @@ -373,6 +369,26 @@ public class FamilyActivityServiceImpl extends BaseServiceImpl i } } + @Override + public boolean validFamilyCount(FamilyUser user) { + String activityId = user.getActivityId(); + // 查询报名记录 + List list = dao().query(FamilyUser.class, Cnd.where(FamilyUser::getActivityId, "=", activityId).and(FamilyUser::getUserId, "=", SecurityUtil.getUserId())); + if(Lang.isEmpty(list)) { + return false; + } + FamilyActivity activity = dao().fetch(FamilyActivity.class, activityId); + + List> allMobileColumnsValue = new ArrayList<>(list.stream() + .map(FamilyUser::getMobileColumnsValue) + .filter(Objects::nonNull) + .flatMap(List::stream) + .toList()); + + allMobileColumnsValue.addAll(user.getMobileColumnsValue()); + return allMobileColumnsValue.size() > activity.getFamilyMaxCount(); + } + @Override public boolean isSignCourse(FamilyCourse course, FamilyActivity activity) { //培训班类型 diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpManageController.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpManageController.java index fdc88a39..a78f3406 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpManageController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpManageController.java @@ -98,7 +98,7 @@ public class TrainSignUpManageController { @At @ApiOperation("查询单个活动") - @SaCheckPermission("trainSingUp.manage") + @SaCheckPermission("trainSingUp") public Result findOne(@Param("id") @NotNull String id) { NutMap dataMap = trainSignUpActivityManageService.findOne(id, null, ""); String activityStartTime = dataMap.getString("activityStartTime"); diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainsignUpMineController.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainsignUpMineController.java index 9709c2cd..60ae634d 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainsignUpMineController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainsignUpMineController.java @@ -140,4 +140,26 @@ public class TrainsignUpMineController { List listMap = activityService.listMap(sql); return Result.success(listMap); } + + @At + @ApiOperation("获取我报名的课程") + @SaCheckPermission(value = {"trainSingUp.mine", "h5.trainSingUp.mine"}, mode = SaMode.OR) + public Result queryMineCourse(String activityId) { + + Sql sql = Sqls.create(""" + SELECT + c.*, + u.mobileColumnsValue + FROM + train_sign_up_user u + LEFT JOIN train_sign_up_course c ON c.id = u.courseId + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("u.activityId", "=", activityId); + cnd.and("u.userId", "=", SecurityUtil.getUserId()); + sql.setCondition(cnd); + List listMap = activityService.listMap(sql); + return Result.success(listMap); + } } diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/controller/MaternityLeaveApplyController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/controller/MaternityLeaveApplyController.java new file mode 100644 index 00000000..61364447 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/controller/MaternityLeaveApplyController.java @@ -0,0 +1,120 @@ +package com.budwk.app.zhgh.staffbenefit.maternityLeave.controller; + +import cn.dev33.satoken.annotation.SaCheckLogin; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaMode; +import cn.hutool.core.lang.Dict; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.service.BaseService; +import com.budwk.app.flow.constant.FlowConst; +import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.flow.entity.ProcessInstance; +import com.budwk.app.flow.entity.ProcessTask; +import com.budwk.app.flow.enums.ProcessSubmitTypeEnum; +import com.budwk.app.flow.service.FlowCommonService; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.staffbenefit.maternityLeave.models.MaternityLeave; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Dao; +import org.nutz.ioc.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import java.util.Date; +import java.util.List; + +/** + * @author : hongqiwei + * @description : + * @createDate : 2025/9/15 17:52 + */ + +@IocBean +@At("/platform/maternityLeave/apply") +@Api("生育休假申请") +@Ok("json:full") +@Slf4j +public class MaternityLeaveApplyController { + + @Inject + private Dao dao; + @Inject + private BaseService baseService; + @Inject + private FlowEngine flowEngine; + @Inject + private FlowCommonService flowCommonService; + + @At("/index") + @Ok("beetl:/platform/zhgh/staffbenefit/maternityLeave/apply/index.html") + @SaCheckPermission("maternityLeave.apply") + public void index() { + } + @At("/h5") + @Ok("beetl:/platform/zhghh5/staffbenefit/maternityLeave/apply/index.html") + @SaCheckPermission("h5.maternityLeave.apply") + public void h5Index() { + } + + @At + @ApiOperation("保存申请") + @SaCheckPermission(value = {"maternityLeave.apply", "h5.maternityLeave.apply"}, mode = SaMode.OR) + @SLog(tag = "生育休假-休假申请", msg = "保存休假申请") + public Result save(@Param("data") MaternityLeave maternityLeave) { + if (StrUtil.isBlank(maternityLeave.getId())) maternityLeave.setApplyTime(new Date()); + dao.insertOrUpdate(maternityLeave); + return Result.success(); + } + + @At + @ApiOperation("提交申请") + @SaCheckPermission(value = {"maternityLeave.apply", "h5.maternityLeave.apply"}, mode = SaMode.OR) + public Result submit(@Param("data") MaternityLeave maternityLeave) { + if (StrUtil.isBlank(maternityLeave.getId())) maternityLeave.setApplyTime(new Date()); + + dao.insertOrUpdate(maternityLeave); + // 开启流程实例 + Dict args = Dict.create(); + args.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.APPLY.getCode()); + args.set(FlowConst.FORM_DATA, maternityLeave); + ProcessInstance instance = flowEngine.startProcessInstanceByKey("SYXJ", maternityLeave.getId(), SecurityUtil.getUserId(), args); + + // 自动完成第一个申请任务 + List doingTaskList = flowEngine.processTaskService().getDoingTaskList(instance.getId(), null); + for (ProcessTask task : doingTaskList) { + flowEngine.executeProcessTask(task.getId(), SecurityUtil.getUserId(), args); + } + return Result.success(); + } + + @At + @ApiOperation("重新提交申请") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission(value = {"maternityLeave.apply", "h5.maternityLeave.apply"}, mode = SaMode.OR) + public Result submitAgain(@Param("data") MaternityLeave maternityLeave, @Param("taskId") Long taskId) { + if (StrUtil.isBlank(maternityLeave.getId())) maternityLeave.setApplyTime(new Date()); + + dao.insertOrUpdate(maternityLeave); + + Dict dict = Dict.create(); + dict.set(FlowConst.PROCESS_TASK_ID_KEY, taskId); + dict.set(FlowConst.SUBMIT_TYPE, ProcessSubmitTypeEnum.RE_APPLY.getCode()); + flowCommonService.executeTask(dict); + return Result.success(); + } + + @At + @SaCheckLogin + public Result findOne(String id) { + return Result.success(baseService.dao().fetch(MaternityLeave.class, id)); + } +} + diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/controller/MaternityLeaveCollectController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/controller/MaternityLeaveCollectController.java new file mode 100644 index 00000000..032f4438 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/controller/MaternityLeaveCollectController.java @@ -0,0 +1,179 @@ +package com.budwk.app.zhgh.staffbenefit.maternityLeave.controller; + +import cn.afterturn.easypoi.excel.ExcelExportUtil; +import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaMode; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.base.utils.CommonDownloadUtil; +import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.sys.models.Sys_dict; +import com.budwk.app.zhgh.dayofficework.unionReimburse.vo.UnionReimburseCollectExcelVO; +import com.budwk.app.zhgh.staffbenefit.maternityLeave.service.MaternityLeaveService; +import com.budwk.app.zhgh.staffbenefit.maternityLeave.vo.MaternityLeaveCollectExcelVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.usermodel.Workbook; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Cnd; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +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 javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * @author : hongqiwei + * @description : + * @createDate : 2025/9/16 16:38 + */ + +@IocBean +@At("/platform/maternityLeave/collect") +@Api("查询统计") +@Ok("json:full") +@Slf4j +public class MaternityLeaveCollectController { + + @Inject + private FlowEngine flowEngine; + @Inject + private MaternityLeaveService maternityLeaveService; + + @At("/index") + @Ok("beetl:/platform/zhgh/staffbenefit/maternityLeave/collect/index.html") + @SaCheckPermission("maternityLeave.collect") + public void index() { + } + @At("/h5") + @Ok("beetl:/platform/zhghh5/staffbenefit/maternityLeave/collect/index.html") + @SaCheckPermission("h5.maternityLeave.collect") + public void h5Index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission(value = {"unionReimburse.collect", "h5.unionReimburse.collect"}, mode = SaMode.OR) + public Result pageData(PageForm pageForm, + Integer year, + String unionId, + String unitId, + String userName, + String sex) { + Sql sql = Sqls.create(""" + SELECT + info.*, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke, + (select MAX(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask' AND taskState in (10,20)) AS startTaskId + FROM + maternity_leave info + LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id + LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10 + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + $condition + """); + Cnd cnd = Cnd.NEW(); + // 年度查询条件 + cnd.andEX("year(info.applyTime)", "=", year); + + // 工会、单位名称查询条件 + cnd.andEX("info.unionId", "=", unionId); + cnd.andEX("info.unitId", "=", unitId); + + // 性别查询条件 + cnd.andEX("info.sex", "=", sex); + + // 姓名查询条件 + if (StrUtil.isNotBlank(userName)) { + cnd.and("info.userName", "like", "%" + userName + "%"); + } + + // 只查询流程实例状态为20的数据(已完成状态) + cnd.and("ins.state", "=", 20); + + cnd.desc("info.applyTime"); + sql.setCondition(cnd); + Pagination pagination = maternityLeaveService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + @At + @ApiOperation("删除") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission(value = {"maternityLeave.mine", "h5.maternityLeave.mine"}, mode = SaMode.OR) + @SLog( tag = "删除工会报销", msg = "删除工会报销") + public Result delete(@Param("id") String id) { + maternityLeaveService.delete(id); + flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id); + return Result.success(); + } + + @At + @Ok("void") + @SaCheckPermission(value = {"maternityLeave.collect", "h5.maternityLeave.collect"}, mode = SaMode.OR) + @ApiOperation("导出生育休假表") + public void onExport(@Param(value = "year") Integer year, + @Param(value = "unionId") String unionId, + @Param(value = "unitId") String unitId, + @Param(value = "userName") String userName, + @Param(value = "sex") String sex, + HttpServletResponse response) { + //查询审核通过的数据 + Sql sql = Sqls.create(""" + SELECT + info.*, + ins.state instanceState + FROM + maternity_leave info + LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id + $condition + """); + Cnd cnd = Cnd.NEW(); + if (StrUtil.isNotBlank(userName)) { + cnd.and("info.userName", "like", "%" + userName + "%"); + } + cnd.andEX("year(info.applyTime)", "=", year); + cnd.andEX("info.unionId", "=", unionId); + cnd.andEX("info.unitId", "=", unitId); + cnd.andEX("info.sex", "=", sex); + cnd.and("ins.state", "=", 20); + + cnd.desc("info.applyTime"); + sql.setCondition(cnd); + List list = maternityLeaveService.listVO(sql, MaternityLeaveCollectExcelVO.class); + + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, MaternityLeaveCollectExcelVO.class, list); + CommonDownloadUtil.download("生育休假表.xlsx", workbook, response); + } + +} + diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/controller/MaternityLeaveMineController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/controller/MaternityLeaveMineController.java new file mode 100644 index 00000000..fe70ad86 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/controller/MaternityLeaveMineController.java @@ -0,0 +1,109 @@ +package com.budwk.app.zhgh.staffbenefit.maternityLeave.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaMode; +import cn.hutool.core.util.StrUtil; +import com.budwk.app.base.annotation.SLog; +import com.budwk.app.base.page.Pagination; +import com.budwk.app.base.param.PageForm; +import com.budwk.app.base.result.Result; +import com.budwk.app.flow.engine.FlowEngine; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.staffbenefit.maternityLeave.service.MaternityLeaveService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Cnd; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +/** + * @author : hongqiwei + * @description : + * @createDate : 2025/9/15 17:52 + */ + +@IocBean +@At("/platform/maternityLeave/mine") +@Api("我的休假申请") +@Ok("json:full") +@Slf4j +public class MaternityLeaveMineController { + + @Inject + private FlowEngine flowEngine; + @Inject + private MaternityLeaveService maternityLeaveService; + + + @At("/index") + @Ok("beetl:/platform/zhgh/staffbenefit/maternityLeave/mine/index.html") + @SaCheckPermission("maternityLeave.mine") + public void index() { + } + @At("/h5") + @Ok("beetl:/platform/zhghh5/staffbenefit/maternityLeave/mine/index.html") + @SaCheckPermission("h5.maternityLeave.mine") + public void h5Index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission(value = {"maternityLeave.mine", "h5.maternityLeave.mine"}, mode = SaMode.OR) + public Result pageData(PageForm pageForm, @Param(value = "year") Integer year) { + Sql sql = Sqls.create(""" + SELECT + info.*, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IF((SELECT taskName FROM wf_process_task tt WHERE tt.id = t.taskParentId) = 'startTask', 1, 0) canRevoke, + (select MAX(id) from wf_process_task where processInstanceId = ins.id and taskName = 'startTask') AS startTaskId + FROM + maternity_leave info + LEFT JOIN `wf_process_instance` ins ON ins.businessNo = info.id + LEFT JOIN wf_process_task t ON t.processInstanceId = ins.id AND t.taskState = 10 + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + $condition + """); + Cnd cnd = Cnd.NEW(); + // 年度查询条件 + cnd.andEX("year(info.applyTime)", "=", year); + cnd.desc("info.applyTime"); + cnd.and("info.userId", "=", SecurityUtil.getUserId()); + sql.setCondition(cnd); + Pagination pagination = maternityLeaveService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + @At + @ApiOperation("删除") + @Aop(TransAop.READ_COMMITTED) + @SaCheckPermission(value = {"maternityLeave.mine", "h5.maternityLeave.mine"}, mode = SaMode.OR) + @SLog( tag = "删除工会报销", msg = "删除工会报销") + public Result delete(@Param("id") String id) { + maternityLeaveService.delete(id); + flowEngine.processInstanceService().deleteProcessInstanceByBusinessKey(id); + return Result.success(); + } +} + diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/controller/MaternityLeaveSchoolAuditController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/controller/MaternityLeaveSchoolAuditController.java new file mode 100644 index 00000000..c6ab7cd3 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/controller/MaternityLeaveSchoolAuditController.java @@ -0,0 +1,129 @@ +package com.budwk.app.zhgh.staffbenefit.maternityLeave.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaMode; +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.result.Result; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.staffbenefit.maternityLeave.service.MaternityLeaveService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Cnd; +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 org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +import java.util.List; + +/** + * @author : hongqiwei + * @description : + * @createDate : 2025/9/15 17:54 + */ + +@IocBean +@At("/platform/maternityLeave/schoolAudit") +@Api("校工会审核") +@Ok("json:full") +@Slf4j +public class MaternityLeaveSchoolAuditController { + + @Inject + private MaternityLeaveService maternityLeaveService; + + @At("/index") + @Ok("beetl:/platform/zhgh/staffbenefit/maternityLeave/schoolAudit/index.html") + @SaCheckPermission("maternityLeave.schoolAudit") + public void index() { + } + @At("/h5") + @Ok("beetl:/platform/zhghh5/staffbenefit/maternityLeave/schoolAudit/index.html") + @SaCheckPermission("h5.maternityLeave.schoolAudit") + public void h5Index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission(value = {"maternityLeave.unionAudit", "h5.maternityLeave.unionAudit"}, mode = SaMode.OR) + public Result pageData(PageForm pageForm, + boolean approval, + Integer year, + String unionId, + String unitId, + String userName, + String sex) { + Sql sql = Sqls.create(""" + SELECT + info.*, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, + IF(rt.id IS NOT NULL, 1, 0) AS canRevoke + FROM + wf_process_task t + LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId + LEFT JOIN maternity_leave info ON info.id = ins.businessNo + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 + LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("t.taskName", "=", "abf59f7b-dc50-4d5d-8e61-a442ce3f1e8a"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + + if (approval) { + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); + } else { + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); + } + // 年度查询条件 + cnd.andEX("year(info.applyTime)", "=", year); + + // 工会、单位名称查询条件 + cnd.andEX("info.unionId", "=", unionId); + cnd.andEX("info.unitId", "=", unitId); + + // 性别查询条件 + cnd.andEX("info.sex", "=", sex); + + // 姓名查询条件 + if (StrUtil.isNotBlank(userName)) { + cnd.and("info.userName", "like", "%" + userName + "%"); + } + if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { + cnd.desc("info.applyTime"); + } else { + cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); + } + cnd.groupBy("t.id"); + cnd.desc("t.createdAt"); + sql.setCondition(cnd); + Pagination pagination = maternityLeaveService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } + + +} + diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/controller/MaternityLeaveUnionAuditController.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/controller/MaternityLeaveUnionAuditController.java new file mode 100644 index 00000000..7e99c34e --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/controller/MaternityLeaveUnionAuditController.java @@ -0,0 +1,127 @@ +package com.budwk.app.zhgh.staffbenefit.maternityLeave.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.annotation.SaMode; +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.result.Result; +import com.budwk.app.base.utils.PageUtil; +import com.budwk.app.flow.enums.ProcessTaskStateEnum; +import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.staffbenefit.maternityLeave.service.MaternityLeaveService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Cnd; +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 org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +import java.util.List; + +/** + * @author : hongqiwei + * @description : + * @createDate : 2025/9/15 17:53 + */ + +@IocBean +@At("/platform/maternityLeave/unionAudit") +@Api("分工会审核") +@Ok("json:full") +@Slf4j +public class MaternityLeaveUnionAuditController { + + @Inject + private MaternityLeaveService maternityLeaveService; + + @At("/index") + @Ok("beetl:/platform/zhgh/staffbenefit/maternityLeave/unionAudit/index.html") + @SaCheckPermission("maternityLeave.unionAudit") + public void index() { + } + @At("/h5") + @Ok("beetl:/platform/zhghh5/staffbenefit/maternityLeave/unionAudit/index.html") + @SaCheckPermission("h5.maternityLeave.unionAudit") + public void h5Index() { + } + + @At + @ApiOperation("分页查询") + @SaCheckPermission(value = {"maternityLeave.unionAudit", "h5.maternityLeave.unionAudit"}, mode = SaMode.OR) + public Result pageData(PageForm pageForm, + boolean approval, + Integer year, + String unionId, + String unitId, + String userName, + String sex) { + Sql sql = Sqls.create(""" + SELECT + info.*, + ins.id AS instanceId, + ins.businessNo, + ins.state instanceState, + ins.variable instanceVariable, + ins.processDefineId instanceProcessDefineId, + t.id taskId, + t.taskName AS taskKey, + t.displayName taskName, + t.taskType, + t.performType taskPerformType, + t.taskState, + t.finishTime, + t.taskParentId, + t.variable taskVariable, + IFNULL(GROUP_CONCAT(DISTINCT nt.displayName),'结束') curTaskName, + IF(rt.id IS NOT NULL, 1, 0) AS canRevoke + FROM + wf_process_task t + LEFT JOIN wf_process_instance ins ON ins.id = t.processInstanceId + LEFT JOIN maternity_leave info ON info.id = ins.businessNo + LEFT JOIN wf_process_task_actor ta ON ta.processTaskId = t.id + LEFT JOIN wf_process_task nt ON nt.processInstanceId = ins.id AND nt.taskState = 10 + LEFT JOIN wf_process_task rt ON rt.processInstanceId = ins.id AND rt.taskParentId = t.id AND rt.taskState = 10 + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("t.taskName", "=", "c28f910f-b888-4404-a6a8-9350cc501241"); + cnd.and("ta.actorId", "in", List.of(SecurityUtil.getUserId())); + + if (approval) { + cnd.and("t.taskState", "in", List.of(ProcessTaskStateEnum.FINISHED.getCode(), ProcessTaskStateEnum.WITHDRAW.getCode(), ProcessTaskStateEnum.INTERRUPT.getCode())); + } else { + cnd.and("t.taskState", "=", ProcessTaskStateEnum.DOING.getCode()); + } + // 年度查询条件 + cnd.andEX("year(info.applyTime)", "=", year); + + // 工会、单位名称查询条件 + cnd.andEX("info.unionId", "=", unionId); + cnd.andEX("info.unitId", "=", unitId); + + // 性别查询条件 + cnd.andEX("info.sex", "=", sex); + + // 姓名查询条件 + if (StrUtil.isNotBlank(userName)) { + cnd.and("info.userName", "like", "%" + userName + "%"); + } + if (StrUtil.isAllBlank(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) { + cnd.desc("info.applyTime"); + } else { + cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); + } + cnd.groupBy("t.id"); + cnd.desc("t.createdAt"); + sql.setCondition(cnd); + Pagination pagination = maternityLeaveService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + return Result.success(pagination); + } +} + diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/models/MaternityLeave.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/models/MaternityLeave.java new file mode 100644 index 00000000..78868b40 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/models/MaternityLeave.java @@ -0,0 +1,179 @@ +package com.budwk.app.zhgh.staffbenefit.maternityLeave.models; + +import com.budwk.app.base.model.BaseModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.nutz.dao.entity.annotation.*; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author : hongqiwei + * @description : + * @createDate : 2025/9/15 16:09 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +@Table("maternity_leave") +@TableMeta("{'mysql-charset':'utf8mb4'}") +@Comment("生育休假") +public class MaternityLeave extends BaseModel implements Serializable { + + @Column + @Name + @Comment("id") + @ColDefine(type = ColType.VARCHAR, width = 32) + @Prev(els = {@EL("uuid()")}) + private String id; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 32) + @Comment("userId") + private String userId; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("姓名") + private String userName; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("性别") + private String sex; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("民族") + private String nation; + + @Column + @ColDefine(type = ColType.DATETIME, width = 30) + @Comment("出生年月") + private Date birthday; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("工号") + private String loginName; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 32) + @Comment("所在工会Id") + private String unionId; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("所在工会") + private String unionName; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 32) + @Comment("所在单位Id") + private String unitId; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("所在单位") + private String unitName; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("电话") + private String mobile; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("爱人姓名") + private String loverName; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("性别") + private String loverSex; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 30) + @Comment("民族") + private String loverNation; + + @Column + @ColDefine(type = ColType.DATETIME, width = 30) + @Comment("出生年月") + private Date loverBirthday; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("所在单位") + private String loverUnitName; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("陪护假") + private String withLeave; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("育儿假") + private String parentalLeave; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("产假") + private String maternityLeave; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("延长假") + private String extendLeave; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("多胞胎") + private String birthsLeave; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("难产假") + private String difficultLeave; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("寒假") + private String winterLeave; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("暑假") + private String summerLeave; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("假期天数") + private String leaveDays; + + @Column + @ColDefine(type = ColType.DATETIME, width = 30) + @Comment("子女出生日期") + private Date childrenBirthday; + + @Column + @ColDefine(type = ColType.DATETIME, width = 30) + @Comment("休假开始时间") + private Date startTime; + + @Column + @ColDefine(type = ColType.DATETIME, width = 30) + @Comment("休假结束时间") + private Date endTime; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 50) + @Comment("填写时间") + private Date applyTime; + + +} + + diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/service/MaternityLeaveService.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/service/MaternityLeaveService.java new file mode 100644 index 00000000..eb29dca4 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/service/MaternityLeaveService.java @@ -0,0 +1,7 @@ +package com.budwk.app.zhgh.staffbenefit.maternityLeave.service; + +import com.budwk.app.base.service.BaseService; +import com.budwk.app.zhgh.staffbenefit.maternityLeave.models.MaternityLeave; + +public interface MaternityLeaveService extends BaseService { +} diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/service/impl/MaternityLeaveServiceImpl.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/service/impl/MaternityLeaveServiceImpl.java new file mode 100644 index 00000000..f186d859 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/service/impl/MaternityLeaveServiceImpl.java @@ -0,0 +1,22 @@ +package com.budwk.app.zhgh.staffbenefit.maternityLeave.service.impl; + +import com.budwk.app.base.service.impl.BaseServiceImpl; +import com.budwk.app.zhgh.staffbenefit.maternityLeave.models.MaternityLeave; +import com.budwk.app.zhgh.staffbenefit.maternityLeave.service.MaternityLeaveService; +import lombok.extern.slf4j.Slf4j; +import org.nutz.dao.Dao; +import org.nutz.ioc.loader.annotation.IocBean; + +/** + * @author : hongqiwei + * @description : + * @createDate : 2025/9/15 17:55 + */ +@Slf4j +@IocBean(args = {"refer:dao"}) +public class MaternityLeaveServiceImpl extends BaseServiceImpl implements MaternityLeaveService { + public MaternityLeaveServiceImpl(Dao dao) { + super(dao); + } +} + diff --git a/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/vo/MaternityLeaveCollectExcelVO.java b/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/vo/MaternityLeaveCollectExcelVO.java new file mode 100644 index 00000000..8002cba5 --- /dev/null +++ b/src/main/java/com/budwk/app/zhgh/staffbenefit/maternityLeave/vo/MaternityLeaveCollectExcelVO.java @@ -0,0 +1,77 @@ +// MaternityLeaveCollectExcelVO.java +package com.budwk.app.zhgh.staffbenefit.maternityLeave.vo; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import lombok.Data; + +import java.util.Date; + +/** + * @author : hongqiwei + * @description : + * @createDate : 2025/9/16 17:08 + */ + +//生育休假导出 +@Data +public class MaternityLeaveCollectExcelVO { + + @Excel(name = "办理时间", width = 20, format = "yyyy-MM-dd") + private Date applyTime; + + + @Excel(name = "姓名", width = 20) + private String userName; + + @Excel(name = "出生年月", width = 20, format = "yyyy-MM-dd") + private Date birthday; + + @Excel(name = "爱人姓名", width = 20) + private String loverName; + + @Excel(name = "出生年月", width = 20, format = "yyyy-MM-dd") + private Date loverBirthday; + + @Excel(name = "单位", width = 20) + private String unitName; + + @Excel(name = "陪护假", width = 20) + private String withLeave; + + @Excel(name = "育儿假", width = 20) + private String parentalLeave; + + @Excel(name = "产假", width = 20) + private String maternityLeave; + + @Excel(name = "延长假", width = 20) + private String extendLeave; + + @Excel(name = "多胞胎", width = 20) + private String birthsLeave; + + @Excel(name = "难产假", width = 20) + private String difficultLeave; + + @Excel(name = "寒假", width = 20) + private String winterLeave; + + @Excel(name = "暑假", width = 20) + private String summerLeave; + + @Excel(name = "合计天数", width = 20) + private String leaveDays; + + @Excel(name = "子女出生日期", width = 20, format = "yyyy-MM-dd") + private Date childrenBirthday; + + @Excel(name = "休假开始时间", width = 20, format = "yyyy-MM-dd") + private Date startTime; + + @Excel(name = "休假结束时间", width = 20, format = "yyyy-MM-dd") + private Date endTime; + + @Excel(name = "电话", width = 20) + private String mobile; + +} diff --git a/src/main/resources/static/components/plugins/sysFilePreview/PdfIndex.vue b/src/main/resources/static/components/plugins/sysFilePreview/PdfIndex.vue index 44578973..3708c588 100644 --- a/src/main/resources/static/components/plugins/sysFilePreview/PdfIndex.vue +++ b/src/main/resources/static/components/plugins/sysFilePreview/PdfIndex.vue @@ -36,6 +36,10 @@ module.exports = { const doc = parser.parseFromString(this.content, 'text/html'); const link = doc.querySelector('a'); const href = link.getAttribute('href'); + if(!href) { + this.pdf = false + return + } this.$nextTick(() => { this.pdfObj = new Pdfh5('#pdf-container', { pdfurl: href, diff --git a/src/main/resources/views/platform/zhgh/activity/family/apply/info.js b/src/main/resources/views/platform/zhgh/activity/family/apply/courseList.js similarity index 76% rename from src/main/resources/views/platform/zhgh/activity/family/apply/info.js rename to src/main/resources/views/platform/zhgh/activity/family/apply/courseList.js index d60f9179..fe2ea79d 100644 --- a/src/main/resources/views/platform/zhgh/activity/family/apply/info.js +++ b/src/main/resources/views/platform/zhgh/activity/family/apply/courseList.js @@ -1,5 +1,5 @@ -const info = { +const courseList = { template: /*language=HTML*/ `
@@ -15,12 +15,12 @@ const info = { 类  型: @@ -30,12 +30,12 @@ const info = { 分类标识: {{ item }} @@ -44,15 +44,15 @@ const info = { - - +
- -
{{infoRow.activityName}}
- +
+ +
{{infoRow.activityName}}
+ +
+
+ + + 去报名 + + + +
- - - - 去报名 - - - -
+
@@ -100,7 +105,7 @@ layout("/layouts/platform_h5.html"){ totalCount: 0, searchKeyword: '', year: new Date().getFullYear(), - activityType: 2, + activityType: 4, }, typeOptions: [ {text: '全部', value: 1}, diff --git a/src/main/resources/views/platform/zhghh5/activity/trainSignUp/list/applyForm.js b/src/main/resources/views/platform/zhghh5/activity/trainSignUp/list/applyForm.js index ac9a524e..a9cd3684 100644 --- a/src/main/resources/views/platform/zhghh5/activity/trainSignUp/list/applyForm.js +++ b/src/main/resources/views/platform/zhghh5/activity/trainSignUp/list/applyForm.js @@ -3,8 +3,7 @@ const applyForm = { /*language=HTML*/ `
- - + @@ -18,12 +17,12 @@ const applyForm = { - - - - + + + @@ -114,6 +118,8 @@ layout("/layouts/platform_h5.html"){ introduceRow: {}, activity: {}, + + weekdayCNMap: {0: '周日', 1: '周一', 2: '周二', 3: '周三', 4: '周四', 5: '周五', 6: '周六'}, } }, methods: { @@ -131,7 +137,7 @@ layout("/layouts/platform_h5.html"){ this.$refs.timesRef.onOpen(row) }, onApply(row) { - const course = this.sourceTypeOptions.find((v) => v.id === row.courseType) + const courseType = this.sourceTypeOptions.find((v) => v.id === row.courseType) this.$axios.post('/platform/trainSingUp/apply/validateSignUp', { courseId: row.id }) @@ -151,7 +157,7 @@ layout("/layouts/platform_h5.html"){ confirmButtonColor: '#1867b0' }) } - this.$refs.formRef.onOpen(row, course) + this.$refs.formRef.onOpen(row, courseType) } }) }, @@ -172,6 +178,9 @@ layout("/layouts/platform_h5.html"){ }).catch(() => {}) }, calcSignUpCount(row) { + if(!row.coursePeopleNumber || row.coursePeopleNumber === 0) { + return "名额数不限制" + } let lave = row.coursePeopleNumber - (row.hasRegisterNum + row.courseReservedNumber) if(row.reserveMode === 2) { let lave2 = row.waitingNum - row.hasWaitingNum diff --git a/src/main/resources/views/platform/zhghh5/activity/trainSignUp/mine/index.html b/src/main/resources/views/platform/zhghh5/activity/trainSignUp/mine/index.html index 7bc2f8ab..9952233b 100644 --- a/src/main/resources/views/platform/zhghh5/activity/trainSignUp/mine/index.html +++ b/src/main/resources/views/platform/zhghh5/activity/trainSignUp/mine/index.html @@ -11,9 +11,12 @@ layout("/layouts/platform_h5.html"){ text-align: center !important; } .info-container { - height: calc(100vh - 46px - 44px); - min-height: calc(100vh - 46px - 44px); - overflow-y: auto; + + } + .button { + position: fixed; + bottom: 0; + width: 100%; } .info-img { display: block; @@ -62,17 +65,16 @@ layout("/layouts/platform_h5.html"){ - - +
- -
{{infoRow.activityName}}
- +
+ +
{{infoRow.activityName}}
+ +
- - 下一步 -
+
diff --git a/src/main/resources/views/platform/zhghh5/activity/trainSignUp/trainInfo/index.html b/src/main/resources/views/platform/zhghh5/activity/trainSignUp/trainInfo/index.html deleted file mode 100644 index 9a0fcfaa..00000000 --- a/src/main/resources/views/platform/zhghh5/activity/trainSignUp/trainInfo/index.html +++ /dev/null @@ -1,817 +0,0 @@ - - -
- - - - - - - - - - - - - - - - -
- - - - -
- - - -
- -
-
-
基础信息
-
- - - - - - - -
-
- -
-
-
-
- - - - diff --git a/src/main/resources/views/platform/zhghh5/activity/trainSignUp/trainList/index.html b/src/main/resources/views/platform/zhghh5/activity/trainSignUp/trainList/index.html deleted file mode 100644 index 1260e398..00000000 --- a/src/main/resources/views/platform/zhghh5/activity/trainSignUp/trainList/index.html +++ /dev/null @@ -1,258 +0,0 @@ - - -
- - - - - - - - -
- -
-
-
活动未开启
-
未开始报名
-
- 报名中 -
-
- 报名结束 -
-
- 活动进行中 -
-
- 活动结束 -
-
-
-
- - -
-
-
{{o.activityName}}
-
-
-
- 年   度: - {{o.year}} -
-
- 活动对象: - {{o.activityGroupName}} -
- -
-
- 报名时间: - {{$moment(o.activitySignUpStartTime).format('YYYY-MM-DD HH:mm')}} - ~ - {{$moment(o.activitySignUpEndTime).format('YYYY-MM-DD HH:mm') }} -
-
- 活动时间: - {{$moment(o.activityStartTime).format('YYYY-MM-DD HH:mm')}} - ~ - {{$moment(o.activityEndTime).format('YYYY-MM-DD HH:mm') }} -
-
-
-
- -
- - - 活动列表 - 我报名的 - -
- - -